Dropbox-style Double-Sided Incentives for Sharing - <AUTHOR> http://www.kalzumeus.com/2010/04/28/dropbox-style-two-sided-sharing-incentives/

<comment><AUTHOR> Regarding the bug described at the bottom: new rule. If I try to push code to production between the hours of 10 PM and 10 AM, the server will ask "Two of the last five times you did this, you ended up writing apologies about it. What are you doing that is so important you're risking that being three instead of sleeping and then pushing this tomorrow when you're in a state to understand what you're doing?"

<comment><USER2> That's one application of the Five Whys I'd like to see get more use. At work everyone's more interested in the next bug or feature instead of in how the last one got there. The irony being, of course, that what they're going to get is exactly that--the next bug.

How many "we did this because you were too dang tired" have _you_ seen?

</comment></comment><comment><USER3> I think dropbox style Double-Sided incentive would be great for web-host solution. The market is already very saturated with hosting services providing very competitive prices, if a new player wanted to enter this market (esp. VPS which I am interested in), they could use this kind of incentives:

\- $20 for 300mb(memory) instances

\- For each people you recommend both of you will get 50mb more memory for their VPS instance.

\- Caps on 1gb

\- valid for one year.

Since hosting solutions are long term investment, most people don't jump around hosting services that often; if you can retrain even 50% of those customers as a long term customer is a win! You probably have to incur a short term loss, but your hosting will probably explode like wild-fire.

</comment><comment><USER4> Timely post - because I actually just did the same thing on UniversityTutor.com after seeing the Dropbox slides from the conference :)

[http://www.startbreakingfree.com/1504/how-to-get-your- custom...](http://www.startbreakingfree.com/1504/how-to-get-your-customers-to- refer-their-friends/)

Great minds think alike!

</comment><comment><USER5> In my opinion, the way dropbox did it was not good. My bank gives both you and referrer some gadget when you are referred. Makes sense because I know what a gadget is.

Dropbox gives you 250 extra mb. Yeah, but I (the person being referred) never heard of dropbox and would not have known if there was less or more MB.

I believe dropbox worked because the person who was referring made more mb. I _believe_ that though intended as a double-sided incentive, it was actually a single sided incentive that worked.

<comment><USER6> Most people can't tell the difference between a GB and a GHz, but if there is one thing the computer industry taught them, it's that a bigger number is always better. Specially when their techie relative/friend/coworker says so.

</comment></comment><comment><USER7> It's still not permission marketing. I'm trying to think of a way to turn this around so that it mirrors real world experience more accurately. For example, what if I could "ask" my social network for a recommendation, instead of having it pushed onto me?

More here: [http://www.scottporad.com/2010/04/28/improving-dual- incentiv...](http://www.scottporad.com/2010/04/28/improving-dual-incentive- tell-a-friend-marketing/)

<comment><AUTHOR> _For example, what if I could "ask" my social network for a recommendation, instead of having it pushed onto me?_

Which scenario sounds better to you:

1) Cindy Smith at George Washington Middle School wants a freebie. She sends an email to her colleagues asking them to sign up. Some do, she gets her freebie. Several colleagues who were not interested in Bingo Card Creator get emailed.

2) Cindy Smith at George Washington Middle School wants a freebie. She sends an email to her colleagues asking if any of them are current users of Bingo Card Creator. No one is. Cindy Smith gets disappointed. No one else signs up. Several colleagues who were not interested in Bingo Card Creator get emailed.</comment></comment>


How Chinese Amazon Sellers Use Zombie Accounts, Stolen Data and Fake Reviews - <AUTHOR> https://www.ecomcrew.com/chinese-sellers-manipulating-amazon/ <comment><USER2> Human capital is an underrated advantage Chinese sellers have to game the system. Having the ability to pay people pennies to a couple dollars to do the grunt work of spending hours creating fake reviews and fake accounts is something that isn't as feasible in the US/Europe as it is in China due to differences in standards of living.

</comment><comment><AUTHOR> Summary - Chinese sellers are using a variety of tactics to game Amazon. Most people know of the fake review problem but not necessarily how sophisticated their tactics are. More surprising though is how Amazon employees in China are stealing data (specifically other seller data and customer data) and reselling it to Chinese sellers.</comment>


Which Clang Warning Is Generating This Message? - <AUTHOR> http://fuckingclangwarnings.com/

<comment><USER2> With all the work that went into creating this website, wouldn't it have been more interesting to submit a pull-request to embed the origin of the warnings, thus fixing the problem for everyone, not just those aware of this website?

</comment><comment><USER3> One of the best features of IBM mainframes used to be the documentation: _every possible message_ that could appear on the console was indexed in the run manuals.</comment>


Billboard Ad Takeovers – Cats Overtake London Tube Station - <AUTHOR> https://www.theguardian.com/cities/2016/sep/13/cats-invade-london-tube-adverts-billboard-takeovers-commuters <comment><AUTHOR> The recent news about Adblock Plus' move to sell ads it finds acceptable and enhancements in augmented reality had me thinking more about something like this for Google Glass...and Adblock even joked about it at one point ([https://twitter.com/AdblockPlus/status/322357210535579649](https://twitter.com/AdblockPlus/status/322357210535579649)).</comment>


The End of Net Neutrality? British Telecom ordered to block access to NewzBin2 - <AUTHOR> http://www.bbc.co.uk/news/technology-14322957 <comment><USER2> _The landmark case is the first time that an ISP has been ordered to block access to such a site._

The key is the word "such". British ISPs have had the IWF-oriented child porn provisions in place for some time now. It even led to Wikipedia getting blocked in some cases a while back: [http://en.wikinews.org/wiki/British_ISPs_restrict_access_to_...](http://en.wikinews.org/wiki/British_ISPs_restrict_access_to_Wikipedia_amid_child_pornography_allegations)

<comment><USER3> That is an opt-in list of sites to ban. My ISP, for instance, does not block those sites, and no-one has been ordered to follow the list. It's a bit different than being ordered by a judge using the new DEA legislation.

</comment></comment><comment><USER4> > Justice Arnold ruled that BT must use its blocking technology CleanFeed - > which is currently used to prevent access to websites featuring child sexual > abuse - to block Newzbin 2.

Good old slippery slope.

</comment><comment><USER5> _"... it helps to protect the innocent from highly offensive and illegal content," said a spokesman for BT."_

Here we have it again, the 'Think of the children' argument[1]. This time BT throws Usenet binaries on the filth heap and uses the good old cliché to criminalize it. It always works!

[1] <http://en.wikipedia.org/wiki/Think_of_the_children>

</comment><comment><USER6> Any serious file sharer in the UK wouldn't use BT if they could help it, they are known for appalling service, traffic shaping and bandwidth throttling. If you happen to be in UK, I'd recommend trying an ISP like bethere, there's no guarantee they cant be threatened with action, but they are definitely much more filesharer friendly, which is the way they've designed their service to be.

In regards to newzbin2, it's worth noting it's a TOR website. Can this actually be blocked? Here's a non-onionised link:

<https://sc3njt2i2j4fvqa3.tor2web.org/>

It's also worth noting that newsgroup filesharing, as backwards as the whole idea sounds, is in certain ways leaps and bounds better than bittorrent. I migrated from bittorrent, which I still occasionally use, to using a newsgroup provider called giganews. Yes it's a paid for service, but in this case the amount of value that you receive is huge.

For anyone with a spare five minutes who's interested in newsgroups, I suggest you look at what you can do with sickbeard, couch potato and a good newsgroup provider.

<comment><USER7> _If you happen to be in UK, I'd recommend trying an ISP like bethere_

While Be are a much better ISP, they do implement the IWF watchlist and so are technically capable of complying with a similar order, should one come along. If you really care about this then I'd recommend one of the smaller ISPs, such as AAISP, who have said that they don't (and won't!) do any filtering.

Of course if everyone starts moving to ISPs like that then it's likely that the government will try to force the issue.

</comment></comment><comment><USER8> I thought I lived in the UK and not China. So now I have to put up with a half baked economy, the media running the country, corrupt police force and now government tailored internet. At least in China they've got a strong economy, if the human rights record is a little sketchy. This is bad news for the internet in the UK, and anyone who thinks they will only use this powers for good is naive in the extreme.

<comment><USER9> It's funny how only people who've never lived in the Third World ever compare the UK or the US to Third World countries.

<comment><USER10> You think china is third world? Come visit shanghai you can get your teeth fixed.

<comment><USER8> Far from it, I have huge respect for China. However, coming from a supposedly developed western country I find the activity of my government weak. Thanks for the stereotype racial slur also.

<comment><USER10> You're welcome.

</comment></comment></comment></comment></comment><comment><USER11> > _He continued: "It knows that the users of Newzbin 2 include BT subscribers, > and it knows those users use its service to receive infringing copies of > copyright works made available to them by Newzbin 2."_

Under this precedent it seems we can sue BT for allowing criminals to make money using premium paid phone scams. They provide the infrastructure, they know it's happening, they're even profiting (directly) from the crimes.

If this weren't MPA run then BT would actually be going down based on such a judgement.

Also I'm looking forward to suing the government for allowing drunk drivers to use their roads ...

</comment><comment><USER12> Network neutrality ended when they started blocking child porn.

Or possibly when some of the phone companies started offering free access to Facebook, while charging for the rest of the web.

</comment><comment><USER13> The more surprising thing is that they seem to genuinely believe they _can_ "block" content. Sorry, the internet doesn't work like that.

<comment><USER7> Actually the judge says:

           Finally, I agree with counsel for the Studios that the order
           would be justified even if it only prevented access to Newzbin2
           by a minority of users.

Though he probably doesn't realise quite how ineffective this will be!

</comment></comment><comment><USER14> Brilliant. They have caught on to the filesharing tech of the mid 90s. By this rate of progress, they should work out how to clamp down on bittorrent by around 2017.

<comment><USER7> They now have a method and a precedent for blocking "bad" web sites. Pirate Bay will be next.

</comment></comment><comment><USER15> Does this mean that BT will no longer provide NNTP access? I've always laughed at ISP's chasing pirates while giving access to the material themselves!

<comment><USER16> Newzbin isn't an NNTP provider. They just provide the .torrent equivalent of Usenet.

So yeah, they will most likely still allow access to NNTP.

</comment></comment><comment><USER17> I don't mind this and think the selling of this as 'The End of Net Neutrality' is OTT hyperbole.

I don't believe anyone's arguing that what NewzBin2 are doing is legal. Nor do I believe there's any doubt that it's technically possible for BT to do what they're being asked to do here by the courts. It's not like they're being asked to do a real-time per-page filter of Flickr for inappropriate content, for example. There's one site, with overwhelmingly illegal content, and they're being asked to block it.

If BT were restricting access to iPlayer or YouTube in favour of BT Vision then I agree, that would be a Net Neutrality issue. If they were being asked to do realtime filtering of user-generated content then I agree, that would be a moronic request issue. Neither of them are true though, this is a static block of overwhelmingly illegal content and I don't for one minute see why this is a problem.

<comment><USER18> It's hard to imagine a different ruling in this case. Courts respect copyright laws and in this case there is a clear infringement.

What I don't get is the involvement of BT, they are just an internet provider. Why wouldn't MPA directly sue NewzBin2 and shut them down?

</comment></comment><comment><USER19> This has nothing to do with net neutrality. Net Neutrality is about ensuring consumers have equal access to providers of content and providers of content have equal access to consumers.

It's not about allowing piracy - quoting wikipedia:

"Chris Elsworth, the main operator of Newzbin, had said repeatedly at trial that he had no knowledge of infringement occurring on the service, and that Newzbin's categories for "CAM," "screener," "telesync," "DVD,"R5 retail","Blu- ray," and "HD DVD" didn't suggest any evidence of infringement."

These guys were ripping people off and got shut down.

Net Neutrality is about making sure YouTube doesn't pay your ISP more to favor them over Vimeo. It's not about some guy stealing movies, and by associating net neutrality with piracy you hurt both net neutrality and people who make stuff (people like us).

</comment><comment><USER20> Hadrian's firewall symbolises that profit is more important than freedom of speech. We didn't vote for this bullshit.

</comment><comment><USER21> This is one of the few things that scares the _hell_ out of me. On this path, we are all just one wrong piece of content/accusation away from persecution.

Call me a dreamer but what other solution is there than a completely de- centralized network ala P2P style. No backbones, no root DNS, no IP address authority. Just pure unadulterated internetworked chaos. There's got to be a way.

</comment><comment><USER22> Worth noting (as the article doesn't, nor the first thoughts of many I heard) is that this is files stored on the website, which doesn't apply to torrents.</comment>


Configuring Apache, Nginx, and OpenSSL for Forward Secrecy - <AUTHOR> http://blog.ivanristic.com/2013/08/configuring-apache-nginx-and-openssl-for-forward-secrecy.html <comment><USER2> I try to learn as much as I can about cryptography, but I know how much I am still missing. So a question to more knowledgeable part of the crowd - is the crypto suite this article suggests is best pick, or is there anything better?</comment>


The byte order fallacy - <AUTHOR> http://commandcenter.blogspot.com/2012/04/byte-order-fallacy.html <comment><USER2> His point is that instead of byte swapping input, we should always use single- byte load operations because "it works for him."

But Plan9 is not a system known for its graphics, and I think performance would seriously suffer if everyone had to program like that. Being able to load a pixel as an int is the reason 32-bit RGB is used more often as a pixel format than 24-bit.

Of course it might not matter as much these days, GCC and LLVM can optimize his code sequences into bswap instructions automatically. And SIMD/shader code don't have endian portability problems I know of, if only because SIMD is already not portable.

<comment><USER3> > I think performance would seriously suffer

Evidence please.

<comment><USER4> On modern CPUs, a byte load/store is really an integer (i.e. 32-bit/64-bit depending on arch) load/store that is rigged to only affect the target byte. On IA64 and PPC, it would just SIGBUS out (as it probably should on x86/amd64 too, but they kept it for compat reasons)

<comment><USER2> Desktop PPC CPUs (when there were such things) allowed misaligned memory operations with some performance penalty.[1]

x86 practically offers it for free in newer architectures (Sandy Bridge, Ivy Bridge and Bulldozer).[2]

[1] <https://developer.apple.com/hardwaredrivers/ve/g5.html>

[2] <http://agner.org/optimize/instruction_tables.pdf> (check MOVDQU timings)

<comment><USER5> AFIK ARM processors don't support misaligned word access. AFIK misaligned word access is twice slower than aligned word access (requires 2 reads). So I don't understand "offers it for free". But this is still twice faster than the example code. Note that endianess and word alignment are two distinct problems.

The point made by the author addresses this issue from a different angle.

As the author say, programmers should always write endianess neutral code unless it is impossible which is generally at the interfaces, where data is read and written (I/O) by the program. If the code is correctly and intelligently optimized so that marshaling is done once, then the byte swapping may generally be expected to be a low frequency operation. In this case the most simple and portable code should be favored.

Trying to optimize this operation by word read and byte swapping provides an insignificant optimization with a higher cost on code portability and maintainability. The author is right on this.

Though it is also true that in some cases, the operation frequency is very high (i.e. reading million pixel values of an image). For these use cases, the programming overhead of using highly optimized code is perfectly justified. But then don't use half backed optimizations. Try to align data on words (twice faster), read by word (four time faster) and use byte swapping machine instruction available on the target CPU instead of the proposed shifts and bit masks.

My opinion is that good languages should provide optimized data marshaling functions in their library so that the code can be optimal and portable at the same time.

<comment><USER6> ARM supports unaligned memory accesses since v6. In most modern implementations, unaligned accesses falling entirely within a 16-byte aligned block have no penalty at all, while crossing 16-byte boundaries does impose a cost. If the locations of unaligned accesses are randomly distributed, this cost is still cheaper on average than accessing a byte at a time.

</comment></comment></comment></comment></comment></comment><comment><USER7> I agree with his suggestion that most code manipulating byte order is incorrect or unneeded. Within your application's logic, everything should already be uniform.

I agree slightly less with "computer's byte order doesn't matter", differentiated from peripheral and data stream byte order... that's the same friggin thing. It matters that you treat your inputs and outputs correctly, and how you do that depends on your computer's byte order, so they computer's byte order _does_ matter. Just not so much during the data processing stage.

But mostly, I'm just saddened that every post about C now has a "only people who do [X thing that requires C] do that, and you're probably not one of them, so you should do that!" Maybe there's just a huge disconnect between people- who-blog and people-who-write-low-level-code, but most of the software guys I know have worked professionally on microcontrollers, DSPs, operating systems, or compilers within the last 5 years, and I'm working on a compiler for a DSP right now (and I expect byte-order to matter).

<comment><USER8> No offense brother, but Rob Pike shits all over you and any of your "software guys". The man is a living legend. This is not to say that he can't be wrong, but to call him just a "person who blogs" only shows how little you know.

<comment><USER9> Or it just shows that not everyone looks at the about me on every blog to see that Rob is Rob Pike.

<comment><USER8> How does that make it any better? If the name on the blog is what makes you think a post is shit or gold, then you are probably not a very good critical thinker.

</comment></comment></comment></comment><comment><USER10> I wish there were, in C, some equivalent of "struct" but where you could specify

\- The byte order / endianness

\- The alignment of variables

\- The exact width of variables (32-bits, 64-bits)

"struct" is great for what it was designed for, storing your internal data structures in a way efficient for the machine.

But everyone abuses structs and tries to read external data sources e.g. files using them. They might hack it to work on their own machine, then as soon as a machine of the other endianness comes along, hacks and #ifdefs appear, then machines with ints of different widths come along....

Of course these people are using structs "wrong", like the author of the article suggests. But nevertheless, the fact that people are using structs "wrong" suggests there is a need for something that provides what people are trying to use structs for.

<comment><USER11> Yeah, C is really missing a way to serialize/deserialize data from raw memory/sockets into structs usable by your code. The least insane way, libpack [1] requires replicating the data format definition three times:

* define the struct with all elements

* define a string for the binary representation

* call fpack/funpack with the string and all the struct elements as parameters...

Unfortunately, fixing this either requires some kind of black X-macro [2] magic or another template language used to write the specification and to generate the three above-mentioned representations from it...

[1] <http://www.leonerd.org.uk/code/libpack/intro.html>

[2] <http://drdobbs.com/184401387>

<comment><USER12> > or another template language

Surely this could be handled via simple syntactic extensions to the struct specification (with everything wrapped into an ungodly macro from hell) in order to define the mapping between the struct itself and libpack's format string, no?

<comment><USER11> The problem is that you need to replicate the struct entries in the pack/unpack calls as well, which is only possible in plain C by using X-Macros.

It might be possible to construct a macro that creates both the struct and the format string, though.

<comment><USER12> > The problem is that you need to replicate the struct entries in the > pack/unpack calls as well

Don't you only need the (generated) format string? Ideally, the macro could generate some wrapper function of some sort as well, which would unpack, fill and return an instance of the struct.

</comment></comment></comment></comment></comment><comment><USER13> The author claims that byte swapping code \- _"depends on integers being 32 bits long, or requires more #ifdefs to pick a 32-bit integer type."_

True. But you might consider using inttypes.h which defines some pretty useful things like uint32_t (an unsigned 32 bit wide integer for example).

\- _"may be a little faster on little-endian machines, but not much, and it's slower on big-endian machines."_

In fact swapping the byte order is _one_ CPU instruction. You can for example use some inline assembly to optimize your code. (If your compiler fails to recognize this pattern.)

         uint32_t byte_swap( uint32_t x )
         {
             asm( "bswap %0"
                : "=g"(x)
                : "0"(x)
             );

             return x;
         }

Just my two cents...

<comment><USER12> > In fact swapping the byte order is _one_ CPU instruction.

That's one _machine_ instruction, I'm pretty sure it's more than one microcode instruction ;)

<comment><USER14> Swapping bits around is operation that is essentially free in hardware. It's just wires.

<comment><USER15> Most hardware is just wires. Especially since transistors shrunk down to nearly nothing.

Still, the layout of something like a barrel shifter (e.g. [http://www.erc.msstate.edu/mpl/distributions/scmos/images/bs...](http://www.erc.msstate.edu/mpl/distributions/scmos/images/bshift.gif) , from a casual search) takes its space on die, much like an adder or multiplier. It's all wires _and switches_.

</comment></comment></comment></comment><comment><USER16> I noticed ifdefs like this when I inherited some C code back in 2001. I'd always worked on x86 systems, so never really encountered machines with different byte orders. The code was fugly, and I didn't like it, so I studied it some and it hit me that it didn't matter what the byte order was. If I constructed a 32 bit int and assigned it to a 32 bit int, the compiler would take care of the byte order. All I needed to know was the byte order of the network protocol we were using.

Tested new code on my x86 box and it worked. Then just committed to sourceforge CVS and told the rest of the world to test. It worked. My code looked a lot like Rob's.

</comment><comment><USER17> The smallest questions always cause the most heated debate.

It doesn't really matter much how the possible byte order swap is done: what matters that these ifdefs aren't littered around the code and byte-order swapping is limited to the lowest level where data is actually read from an external source.

I would personally go with his byte array reads as it's less confusing but I would still wrap the functionality inside inlined functions like these:

      uint32_t inline read_be32 (void*);
      uint32_t inline read_le32 (void*);

And then use these whenever reading 32-bit integers from big-endian or little- endian data source.

<comment><USER18> I've tried to tackle this issue at <https://github.com/alexchamberlain/byte- order>.

<comment><USER19> You did this to prove Pike's argument, didn't you?

 _Whenever I see code that asks what the native byte order is, the odds are about a hundred to one the code is either wrong or misguided._

[https://github.com/alexchamberlain/byte- order/commit/b804361...](https://github.com/alexchamberlain/byte- order/commit/b804361636f9233a6c9b0b38b04ceef98f3e8faa#L0L64)

<comment><USER18> Well caught!

</comment></comment></comment></comment><comment><USER20> Rob Pike was specifically talking about binary streams. There are many cases where you can make simplifying assumptions in the name of speed; this is quite common in the Linux Kernel, where (a) lots of code uses it, so optimizing for every last bit of CPU efficiency is important, and (b) we need to know a lot about the CPU architecture anyway, so it's anything _but_ portable code. (Of course, we do create abstractions to hide this away from the programmer --- i.e., macros such as le32_to_cpu(x) and cpu_to_le32(x), and we mark structure members with __le32 instead of __u32 where it matters, so we can use static code analysis techniques to catch where we might have missed a le32_to_cpu conversion or vice versa.)

What are some of the assumptions which Linux makes? For one, that there is a 32-bit type available to the compiler. For just about all modern CPU architectures where you might want to run Linux, this is true. This means that we can define a typedef for __u32, and it means that we can declare C structures where we can use a structure layout that represents the on-the-wire or on-the-disk format without needing to do a pull the bytes, one at a time, off the wire decoding stream. It also means that the on-the-wire or on-disk structures can be designed to be such that integers can be well aligned such that on all modern architectures such that we don't have to worry about unaligned 32-bit or 64-bit accesses.

And it's not just Linux which does this. The TCP/IP headers are designed the same way, and I guarantee you that networking code that might need to work at 10 Gbps isn't pulling off the IP headers one byte at a time and shifting them 8 bits at a time, to decode the IP header fields. No, they're dropping the incoming packet on an aligned buffer, and then using direct access to the structures using primitives such as htonl(). (It also means that at least for the forseeable future, CPU architectures will be influenced by the implementation and design choices of such minor technologies such as TCP/IP and the Linux kernel, so it's a fair bet that no matter what, there will always be a native 32-bit type, for which 4-byte aligned access will be fast.)

The original TCP/IP designers and implementors knew what they were doing, and having worked with some of them, I have at least as much respect, if not more so, than Rob Pike...

</comment><comment><USER15> It's by Rob Pike. Not a wise choice of target to nitpick. When he says "I guarantee that [...]", I'm inclined to take his word for it.

Nice piece, clearing up a cobweb in a poorly lighted corner. And teaches (with code example) what one really needs to know about handling byte order in data streams.

</comment><comment><USER21> I wish I had time to write a more thorough response right now, but I just did a short test with Debian sid and its GCC 4.6.3 on a modern Xeon machine under Xen (so, not the best performance testing device, so take this with some salt).

At -O9, the compiler optimizes a masks-and-shifts swap of a uint64_t into a bswapq instruction identical to the one emitted by the GCC-specific __builtin_bswap64; this can be coupled with an initial memcpy into a temporary uint64_t. Loading individual bytes and shifting them in emits a pile of instructions that take up 16 times as much code space and ~35% runtime penalty (2.7 s versus 2 s). This is measured in a loop decoding a big-endian integer into a native uint64_t and writing it to a volatile extern uint64_t global, 2^30 iterations, function called through a function pointer.

Aligned versus unaligned pointers seem to make no real difference on this CPU, using a static __attribute__((aligned(8))) uint8_t[16] and offsets of 0 (aligned) and 5 (unaligned) from the start of the array.

I also tried a function with the explicit cast-shift-or that uses an initial memcpy into a local uint8_t[8] in case the compiler was doing something strange with regard to memory read fault ordering as compared to the explicit memcpy in the two bswapq-generating versions. This resulted in some very "interesting" code that shoves the local array into a register and then very roughly masks and shifts all the bits around, at about a 100% penalty from the bswapq functions. :-(

If anyone's interested in the details, reply and I'll try to put them somewhere accessible, though it may take a little while.

<comment><USER22> This isn't surprising. If the set the AC bit on x86, then it will disallow unaligned accesses and you'll be operating in an environment more similar to RISC machines. In order to allow such a thing to succeed, GCC can't produce a 32-bit read from char* address since the alignment is only guaranteed to be 1 (i.e. no alignment) and this would trigger SIGBUS. Thus, in order to get a 32-bit read, you must deref a 32-bit variable, not 4x 8-bit ones. This makes even more sense on RISC systems where this "optimization" would be a tragic bug you'd want to work around in your compiler. See my post with the x86 assembly output confirming your general results.

</comment></comment><comment><USER23> Rant-y. I don't like that.

> _The byte order of the computer doesn't matter much at all except to > compiler writers and the like_

Binary protocol parsing is one area that relies heavily on byte ordering, _struct_ packaging and alignment. Tangentially, binary _file_ parsing that is optimized for speed will have the same dependency. In fact, anything that deals with fast processing of the off-the-wire data will want to know about the byte order.

</comment><comment><USER24> Actually it's kind of funny... I recently wrote a base64 encoder/decoder that makes use of native endian order to build 16-bit unsigned int based lookup tables that map to the correct byte sequence in memory regardless of native endianness.

Looking up a 16-bit int rather than 2 chars, and outputting as a 32-bit int rather than 4 chars yields a nice performance boost at the cost of possibly not being portable for some more esoteric architectures that don't have a 16 and 32-bit unsigned int type.

So while he's right that 99% of the time you shouldn't be fiddling with byte order, it still pays to know how to wield such a tool, and it's most definitely not just for compiler writers.

</comment><comment><USER25> CPU byte order definitely matters to device drivers read/writing across the I/O bus: they must perform wide aligned reads and writes using single CPU loads and stores. Rob's approach simply won't work there. Similarly, OS-bypass networking and video, which expose hardware device interfaces in user space, require CPU-endian aware libraries.

That said, use Rob's portable approach anytime you don't have a compelling reason not to, if only to not have to worry about alignment and portability. Doing otherwise is premature optimization and a maintenance headache.

</comment><comment><USER26> There's one and only one reason we write code the way he says not to: performance. Working with words instead of byte munging makes a huge performance difference. And in game development performance beats most other reasoning, especially when we are talking about loading tens of thousands of these on startup. And besides, all our code is wrapped in calls to inline functions named uint32_t FromBigEndian(...) anyway, so it's actually cleaner than what he proposes.

</comment><comment><USER27> One fallacy is that you need to ever manually convert byte order yourself in the way the article suggests. Most systems have something that'll do it for you - eg, htonl, ntohl.

<comment><USER28> I don't know why you got downvoted. Your idea is valid and people may not have realized that htonl has friends an relatives that totally make the issue of the article moot.

           #define _BSD_SOURCE             /* See feature_test_macros(7) */
           #include <endian.h>

           uint16_t htobe16(uint16_t host_16bits);
           uint16_t htole16(uint16_t host_16bits);
           uint16_t be16toh(uint16_t big_endian_16bits);
           uint16_t le16toh(uint16_t little_endian_16bits);

           uint32_t htobe32(uint32_t host_32bits);
           uint32_t htole32(uint32_t host_32bits);
           uint32_t be32toh(uint32_t big_endian_32bits);
           uint32_t le32toh(uint32_t little_endian_32bits);

           uint64_t htobe64(uint64_t host_64bits);
           uint64_t htole64(uint64_t host_64bits);
           uint64_t be64toh(uint64_t big_endian_64bits);
           uint64_t le64toh(uint64_t little_endian_64bits);

<comment><USER18> Where are these defined?

<comment><USER29> I found them, on ubuntu, in:

      /usr/include/endian.h

</comment></comment></comment></comment><comment><USER30> I think this is mostly correct. Certainly when dealing with streams, it makes code more straightforward to just deal with a byte at a time. But grepping over some old code to see where I've used WORDS_BIGENDIAN, I see cases where I defined a typedef struct for a memory mapped binary data format. That is one place where you would sacrifice performance and clarity by dealing with bytes.

</comment><comment><USER31> I prefer the code snippet:

      memcpy(&i, data, sizeof(i));
      i = le32toh(i);  // Or whichever function is correct.

This is easier to read and requires less smarts from the compiler to do the right thing efficiency-wise.

</comment><comment><USER32> LSB-MSB enables certain useful addressing modes in the 6502, e.g. fast access to the zero page. Therefore _IMHO_ little-endian is better. I'm not really interested in 16-bit and above :-)

</comment><comment><USER33> Of all the things to quibble about, he chooses the 0.01% of binary I/O that's write once, test once.

</comment><comment><USER34> But now he needs 2 variables, i and data, while otherwise I can just read in i and swap it afterward on a big-endian machine (assuming I read in little- endian certainly).

<comment><USER18> Multiple variables shouldn't be scary. Storing the same data multiple times is... You just need to use pointers. See <https://github.com/alexchamberlain/byte-order>.

<comment><USER34> You realize your code is littered with just those defines which the article wrote are not necessary at all? You are exactly proving my point, you don't need a second variable in the case where you don't need to switch bytes when you use a define. And the trick is to use the define only after you already have the value already in the integer. In his solution you would need the data pointer which you have put into the define _always_.

<comment><USER18> They are necessary to provide optimal code without relying on the optimiser.

</comment></comment></comment></comment><comment><USER35> > _byte order doesn't matter._

> _Let's say your data stream has a little-endian-encoded 32-bit integer. > Here's how to extract it (assuming unsigned bytes):_

        i = (data[0]<<0) | (data[1]<<8) | (data[2]<<16) | (data[3]<<24);

Wait, if byte order doesn't matter, why do I need to do byte-level array lookups when i'm processing a stream of integers? Oh yeah, because byte order _does_ matter. If byte order wouldn't matter (say, if all computers were 32-bit, had the same byte order and the same endianness), I could just cast the stream to int* and be done with it. I can't, because of _byte order_. It _matters_.

Whether you deal with it using byte-array lookups and math or #ifdefs and bitmasks, well, whatever rocks your boat man! Good that you're taking it into account, because byte order matters!

<comment><USER36> Did you bother to read the article? He writes that _native_ byte order doesn't matter, not, as you botched the quote "byte order doesn't matter".

The byte order of the input data _obviously_ matters, and nothing you've said here disagrees with anything he wrote.

<comment><USER37> I think that skrebel is trying to say that doing as the article suggests comes with an unnecessary performance penalty hit if your CPU has the same endianness as the data stream.

<comment><USER38> Why should there be a any performance penalty? A good compiler (and I've worked with at least one that could) would know the machine's endianness and could optimize away that sequence of selections, shifts and ors when it isn't needed.

<comment><USER18> Ok, but the performance penalty is then at compile time...

<comment><USER18> Lots of downvotes... Do you disagree? If so, why? Or do you think it is insignificant?

I've sat and watch C++ compile for 5 hours... Compile time performance is important too!

</comment></comment></comment></comment></comment></comment><comment><USER18> There are a lot of errors in this article and the code therein.

      i = *((int*)data);
      #ifdef BIG_ENDIAN
      /* swap the bytes */
      i = ((i&0xFF)<<24) | (((i>>8)&0xFF)<<16) | (((i>>16)&0xFF)<<8) | (((i>>24)&0xFF)<<0);
      #endif

This should use uint32_t, it is the best way of getting a platform independent unsigned 32-bit integer, which is what you want here.

 _It's more code._

Couple more lines of C, yes. No more at the machine level.

 _It assumes integers are addressible at any byte offset; on some machines that's not true._

Not sure about this one...

 _It depends on integers being 32 bits long, or requires more #ifdefs to pick a 32-bit integer type._

This is caused by bad code - see above.

 _It may be a little faster on little-endian machines, but not much, and it's slower on big-endian machines._

It is faster on a LE machine, but not slower on a BE machine - the same code can be used and it's a compile time #ifdef.

 _If you're using a little-endian machine when you write this, there's no way to test the big-endian code._

Test on a BE machine?

 _It swaps the bytes, a sure sign of trouble (see below)._

No actual facts here...

As pointed out by another commentor, this can be optimised out by the compiler on many platforms.

<comment><USER14> The point is, when you use explicit shifting of bytes you have same code that works independently of endianity, the fact that compiler is probably going to generate exactly same code seems to me like good argument to go with the more readable choice (ie. explicit shifts), also variant proposed by article is actually portable C, anything involving casting arrays of one type to arrays of another incompatible type is not.

No modern architecture can access arbitrarily aligned words in memory directly (presence of caches modifies things slightly, but shifts the problem from data bus width to cache line width as unaligned word can still span two cache lines). There are generally two solutions to this: disallow that at CPU level (and handle that by raising SIGBUS), emulate it in hardware by doing two memory accesses for one load or store (which involves significant additional complexity), Intel invented third solution in i386: OS can select between these two behaviors.

<comment><USER18> I would argue we, as a community, need to write a portable, yet optimised, byte order convertors. htobe, htole, htobel, htolel, htobell, htolell, and vice versa.

<comment><USER14> Converting byte order of integer is mostly pointless operation (which is what the article tries to say), what is needed is portable, yet optimized way to build/parse portable binary structures. In my opinion there are two reasons why too much optimization in this is complete waste of time:

1) Even if compilers are not able to optimize manual conversion of integer to/from discrete bytes into same code as word sized access with optional byte order swap, it's mostly irrelevant, as there aren't going to be any significant difference in performance between one four byte access and four one byte accesses (as in both cases you end up with same number of actual memory transactions, which is the slow part, due to caches)

2) when you are handling portable binary representation of something, it's always connected to some IO, which is slow already so any performance boost that you get from microoptimalization like this is completely negligible.

I tend to just hand write few lines of C to pack/unpack integers explicitly when needed as it seems to me as the most productive thing you can do.

By the way all the big endian <-> little endian functions you propose boil down to two implementations for each size of operand: no-op and mirroring of all bytes, both of which are mostly trivial.

What is really missing is portable and efficient way to encode floating point numbers, as there is no portable way to find out their endianity and in floating point case it's more complex than just big vs. little endian.

<comment><USER18> It's the boiling down that people get confused with... I've started an implementation at <https://github.com/alexchamberlain/byte-order>.</comment></comment></comment></comment></comment>


Final Statement on the LambdaConf Controversy - <AUTHOR> http://degoes.net/articles/lambdaconf-conclusion <comment><USER2> Of course, LambdaConf has every right to define its community in the way it sees fit.

While their explanation does have a lot of logical appeal (see: [https://www.facebook.com/notes/satnam-singh/dr-spock-vs- dive...](https://www.facebook.com/notes/satnam-singh/dr-spock-vs- diversity/10154092724913630)), it's important to remember that prospective attendees and speakers _also_ have the right of free association.

The fact is, I _do_ wish to exclude myself from any community that deliberately includes Yarvin and his ilk. I would encourage others to make the same decision. I will happily discuss or debate ideas with them on any topic, in any forum where it makes sense to do so. They are human beings and deserve all the rights and privileges thereof.

But I'm not obligated to drink beer and break bread with them, pretending nothing is wrong.

This isn't a free speech issue, this is a "who do you want in your community" issue. In the light of a community, you can't, and you shouldn't, pull one aspect of a person's character and isolate it from the rest of their identity.

I hope people give me the same treatment. I am more than the content of my technical talks, and so is Yarvin.

<comment><USER3> I've followed this saga with much confusion and I wonder if you could explain why you'd avoid a conference with a speaker like this.

For me, if I'm evaluating a conference speaker, all I care about is:

1\. Is the topic useful or interesting?

2\. Is the speaker well informed and the content correct?

3\. Does the speaker present the material well?

I couldn't care less about them otherwise, and especially not their political views. For most conference speakers, I couldn't tell you anything about their political views, because it's just not relevant.

What's your reasoning for including that aspect of a speaker when evaluating the conference?

I also wonder, if we take it as a given that political views are important, do you vet all conference speakers' views before you attend a conference? Or do you have faith that the community will root out views you find unacceptable?

<comment><USER4> Moldbug's political views aren't the issue, it's his political _action_. He has a record of going to conferences and advocating racism: working to exclude. And one of Lambdaconf's sponsors is a racist political blog, which sounds unprecedented. (Evidence in my comment history.)

(The context is a country which kills and incarcerates blacks, post-slavery. Racism is political action which directly impacts the lives of confgoers and users. Toxic for education and networking.)

Any conf organizer has heard people say, "It's not the talks, it's the hallway conversations!" Racist political groups are now desperate enough to nakedly show their influence out in the open. Harder for them to dominate quietly.

<comment><USER5> Can you provide an example of any action he has taken that is not merely expressing a view?

<comment><USER4> Do you want evidence of him... shivving someone?

(But then again, how is stabbing someone with a knife relevant to a talk's quality?)

(But then again, how is a talk's quality relevant to free expression of views?)

Professional conferences "censor" speakers who don't provide what their audiences want. And have codes of conduct censoring harassing speech. You too: does everyone get to deliver speeches in your home? Visit your workplace and undermine you?

<comment><USER6> > But then again, how is stabbing someone with a knife relevant to a talk's > quality?

It's not. I find no reason to exclude an ex-convict that has been charged and served his jail-time. Including them back into the society is the only way we can at least _hope_ to combat recidivism.

<comment><USER4> It'd be great if you have evidence that Moldbug is an ex-con who underwent rehab for his racism!

If not, would you _really_ invite someone with a record of stabbing people at conferences? Who writes literature advocating murder, etc?

(In the real world, Moldbug leverages society's obvious violence against African-Americans. He's therefore complicit in that systematic violence. That's why Lambdaconf's racist supporters are so desperate to support him, no matter how clumsily. That's why all these people were targeted on sjwlist.com for speaking out against violence: [http://statement-on- lambdaconf.github.io/](http://statement-on-lambdaconf.github.io/) )

<comment><USER6> > It'd be great if you have evidence that Moldbug is an ex-con who underwent > rehab for his racism!

Unlike violent crime, racist speech isn't immediately dangerous. But in any case, if you believe he's a criminal, rally to have him arrested; him being a free man means that he has nothing to go in rehab for.

> society's obvious violence against African-Americans

You mean, African-American's obvious violence against African-Americans?

[http://www.amren.com/news/2015/07/new-doj-statistics-on- race...](http://www.amren.com/news/2015/07/new-doj-statistics-on-race-and- violent-crime/)

<comment><USER7> When arguing in favor of a racist speaker on the grounds of free speech, it's probably not the best idea to go off on a tangent quoting a "race realist" publication whose founder said:

"Blacks and whites are different. When blacks are left entirely to their own devices, Western civilization — any kind of civilization — disappears"

[https://www.splcenter.org/fighting-hate/extremist- files/grou...](https://www.splcenter.org/fighting-hate/extremist- files/group/american-renaissance)

<comment><USER6> Didn't realise that... In any case, I was only quoting it gor the statistics presented in the table, which seems to have been copied from a DOJ report, and hopefully not tampered with (although now I'm not so sure any more...).

<comment><USER7> What should be suspect now, and something worth reflecting on, is the narrative being pushed by them since that's usually how "lying with statistics" works.

<comment><USER7> Amazing. I read some more, and Moldbug's posted approvingly about American Renaissance! It's too perfect.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> This is really a wonderful post. Too many open source projects, conferences, and the like have turned into witch hunts by, as John mentions, the morality police. Maintainers are bullied into adopting CoCs even if there have been no issues at all in their community, and distancing themselves from valued members of their community for something dumb they may have said or done in entirely different contexts or years ago.

The whole set of posts John has provided on the matter have been extremely fair and thoughtful.

</comment><comment><USER9> I read an FAQ on neo-reactionism and it's totally insane. But I would be fine with the guy lecturing about computers if he knew his stuff. Honestly I find intelligent, rational people who come to radically different conclusions about society to be fascinating.

On the other hand, if Hitler himself was alive and gave a speech on art, I wouldn't want to hear it because of his politics and actions. So clearly there is a spectrum for me, and at some point the politics become so bad I can't stand the person.

Also, by giving this person a speaking role, he becomes more authoritative in all subjects, so it probably is better not to help him. In summary, lots to think about!

<comment><USER6> I would _love_ to hear a speech by Hitler. Regardless of his actions, he was a _master_ persuader and accomplished (affected the world) in a decade more than most people couldn't in 1000 years! We could all learn _a lot_ from him - which of course doesn't mean that we would have to use the skills for the same means he did.

<comment><USER10> >he was a master persuader and accomplished (affected the world) in a decade more than most people couldn't in 1000 years

No. He accomplished what most people _wouldn 't_ and _oughtn 't_ in a thousand years.

<comment><USER3> That's not in conflict with what was said in your quote. Hitler changed the world enormously. It was terrible, but the influence is undeniable. I'm reminded of all the people I've seen making fun of Time for naming Hitler their Man of the Year, without realizing that Man/Person of the Year is purely about the size of impact, not how good it is.

</comment></comment></comment></comment><comment><USER11> How crazy -- I'm vaguely familiar with Curtis' work, and would have never known (or cared) about his political views until the people looking to "no platform" him gave him a platform.

Streisand effect, people.

<comment><USER12> When will people learn that you don't fight a view by attempting to suppress it?

<comment><USER13> That wasn't the point of protesting his presence at LambdaConf. The point was so that people who want to go to LambdaConf and feel threatened and humiliated by someone's enthusiastic support of racism and slavery don't have to associate with such a person.

It is so exasperating that so many people who _aren 't_ denigrated and targeted by his hateful politics think this is a matter of _abstract principle_. Somehow, letting my and others' humanity be a matter of political _opinion_ is the mature, apolitical position. Utterly frustrating attitude. It's perfectly fine to be tolerant of Yarvin's views, it is completely unreasonable to ask others to associate with a person who envisions a world where their humanity is forfeit.

<comment><USER12> In public life we have to - and should - encounter and tolerate people whose opinions we find abhorrent. I would much prefer a world where I feel emotional discomfort being in the presence of someone I loathe than a world where such a person is prohibited from ever being near me, because of social ostracism. It provides for a much richer marketplace of ideas.

If you don't like him, protest him. Disturb him with your words as much as he disturbs you with his.

<comment><USER13> Free speech is such a pretty principal when you can always foist its costs on other people. You can keep your marketplace.

I'm going to be emphatic, because i am emphatic about this position:

Free speech is a powerful principle because speech has power. Because speech can hurt people, because speech can change the world. If speech did not matter, free speech would not matter.

If speech matters, and speech has power, then its effects must be considered. To do anything less is _irrational_. The idea that rejecting Yarvin's ideas so emphatically that we would deny him platform would lead to unjust suppression of speech is a _fallacy_. It is a _slippery slope_. So many people who strive to be rational individuals and avoid cognitive biases, and yet balk at treating speech for what it is instead of a sacred object that should be worshipped.

By saying Yarvin should be allowed to speak, you are merely saying that protecting his speech is more important than the emotional and professional cost it exacts on the people he targets. And yes, he targets people. Through all his extremely verbose, meandering writings, a clear thread of contempt for certain others' runs.

"The relationship of master and slave is a natural human relationship: that of patron and client." \- Curtis Yarvin

 _You_ can react to speech the way you want. But you're not taking any moral high ground with your approach when you explicitly deny the impact of speech on others and how _they_ react to it. Association is a form of speech. Petitioning others to stand with you is a form of speech. Protecting Yarvin's speech on the grounds of principle, which is rejecting others' speech out of hand in contradiction of the same principles is inconsistent. All speech has consequences, and there is no neutral advocacy of "free speech" because truly free speech is a realm of conflict and inconsistency.

<comment><USER14> It should be noted 'free speech' is the reason you can have this conversation in the first place.

You can't have your cake and eat it too. That is, if you wish to not have _your_ opinions censored you cannot ask for the censorship of other opinions you feel offensive.

I wish bigots and other prejudiced people would spare us, but I value my freedom to speak my mind more than I dislike hearing hateful speech.

<comment><USER15> There's no free speech on hackernews. People get moderated all the time! If hackernews can moderate its comments, then can't a conference moderate its speakers?

<comment><USER14> Big distinction -- people are moderated for their content _on Hacker News_ , not off.

If this speaker makes a racial slur he'll likely be removed from the conference. Inside the conference (much like HN) they're free to limit his speech. However, as was mentioned in the article, the conference does not and will not judge speech _outside_ the conference, much like HN does not (to my knowledge) ban users for offensive speech _outside_ HN.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER16> Quoting from a Lobste.rs post [1] on the other side of this issue:

> Here's a different approach, which explains this quite reasonably: > LambdaConf made a lot of effort to contact organisations involving PoC, > introducing diversity scholarships etc. to gain some fame. Then, suddenly, > out of the blue, they decide to run a person which is clearly incompatible. > These organisations cut their ties and oppose the project they supported. > It's all very unsurprising. You can't shout "everyone is equal, please > spread!" and then invite someone on the speakers list who wrote hundreds of > thousands of words how he thinks people are fundamentally unequal by > disposition and some should be slaves.

> I'd be far less aggravated if LambdaConf had just been a run-of-the-mill > conference, but it tried to be _the diverse conference in FP_. Now it shows > that they actually meant "libertarian". Appropriating terms like "inclusive" > or "diverse" for that is just a recipe for disaster...

> LambdaConf chose to be a temporary, short space where anything goes unless > it's not physically violent. What they _communicated_ was something > different though. And that difference is biting them now, making sponsors > jump off and people protest.

In sum: people are upset because they feel used - that LambdaConf made one set of promises and advertised in a specific way to gain fame, then flipped on those values afterward.

[1] [https://lobste.rs/s/dibl7y/why_we_re_sponsoring_lambdaconf_2...](https://lobste.rs/s/dibl7y/why_we_re_sponsoring_lambdaconf_2016/comments/x7kpvy#c_x7kpvy)

<comment><USER6> Using the words "inclusive" and "diverse" to describe a position which encourages banning people who think differently than most is highly problematic and disingenuous.

</comment></comment><comment><USER6> What an amazing article; cool-headed, rational and very well-argued. Especially the "Appendix" containing definitions and short doscussions/arguments is worth reading.

<comment><USER17> Yeah, it's going to drive people nuts.

Edit: (people on both sides)

</comment></comment><comment><USER18> I think the policy to ignore social media is a valuable innovation. For a couple of years, I have hoped to see companies adopt this policy to protect their employees from being capriciously let go.

</comment><comment><USER19> Sorry, I guess I've been living under a rock. What's the context for this?

<comment><USER20> [http://geekfeminism.wikia.com/wiki/Lambdaconf_incident](http://geekfeminism.wikia.com/wiki/Lambdaconf_incident)

> _In March 2016, the organizers of [LambdaConf] announced that they would > include neo-reactionary Curtis Yarvin on the program despite widespread > protest._

\---

[http://www.breitbart.com/tech/2016/03/29/sjws-urge- programmi...](http://www.breitbart.com/tech/2016/03/29/sjws-urge-programming- conference-to-ban-speaker-over-political-views/)

> _LambdaConf, an annual gathering of programmers in Boulder, Colorado, has > faced calls from social justice warriors to cancel a talk by Curtis Yarvin, > the developer of the Urbit programming environment, due to his political > views._

<comment><USER21> I appreciate the fact that you posted links to both perspectives on the issue.

</comment></comment></comment><comment><USER22> Exceptionally lucid and captures every this I think of and aligns well with my position.

It is ironically said that fundamental Christians of today would give Jesus the hardest time if this was his Era.

Likewise, I have observed that the most "militantly liberal expousers" seem to be the most intolerant of other views.(I speak as an observer from outside the western world where this is prevalent)

I hope this is the end of this issue.

This response will serve as template for future moral police people

</comment><comment><USER23> I read Yarvin's response to this whole incident: [https://email@example.com/why-you-should-come-to- lam...](https://firstname.lastname@example.com/why-you-should-come-to-lambdaconf- anyway-35ff8cd4fb9d#.6xux1ooek)

Could someone provide a link to his pro-slavery arguments?

<comment><USER24> Exactly.

</comment></comment><comment><USER25> I'm not a part of LambdaConf, nor would I plan to (not because of the controversy, but just because I don't have the time/money to attend any US- based conference)...

But these discussions remind me a lot of the "censorship" discussions that have been had both on places like reddit or twitter.

For the longest time, code of conducts were a thing that were accepted. Don't be a jerk, don't spout racist stuff at people. Loads of forums had it, and the places that didn't basically became 4chan (which is interesting in its own right but filled with pretty rude people).

Sometime between 1995 and 2015, we started thinking that rules that basically say "don't be a jerk" stopped being the norm.... I really wonder why. Now it gets classified as "censorship".

That being said, my understanding is that this guy's talk wasn't "How FP advances the causes of Stormfont", which makes it pretty hard to say outright "gotta kick him out".

But I wouldn't want Marine Le Pen or Trump at my FP conference, no matter how subtle and developed their views on FP are. My opinion does not entire conference submission guidelines make, but I can understand fighting against that. Social interactions don't work in a vacuum...

Glad I don't have to participate at this

</comment><comment><USER26> I have so much respect for the lambdaconf organizers and will remember John A De Goes as a highly ethical individual. Love what they're doing.

</comment><comment><USER27> From the article:

> Someone with progressive political views might feel emotionally threatened > in the presence of rabid and well-known Trump supporters who are openly > contemptuous of progressives in their personal lives […]

Ugh. I'm not sure how I would have selected examples of potentional emotional distress but a laundry list of caricatures of political, sexual, and religious attitudes wouldn't have been my first choice.

<comment><USER28> > a laundry list of caricatures of political, sexual, and religious attitudes

I assume that the bit you quoted was a reference to the recent events at Emory University.

</comment></comment><comment><USER29> This is a divisive issue, and originally I found myself agreeing with this post, because, in general, I expect a conference to about mature professionals focusing on the craft.

That said, LambdaConf advertises itself as a "magical place" with a "passionate and friendly community of like-minded souls."

Given that, I understand why people are upset. They are trying to have it both ways.

</comment><comment><USER30> > Free speech advocates have gathered on one side, advocates for social > justice on the other

wtf

Those two are supposed to be the same side. There's some really perverse twisting of words here to put social justice in opposition to free speech. How has the debate come to this?

<comment><USER31> A speaker-blind selection process selected a talk by someone who is considered by some to be offensive for reasons not directly relevant to the content of the talk.

<comment><USER32> Yet definitely relevant to the people who would choose to attend the conference. It's definitely going to make some people feel uncomfortable attending, knowing that they invited someone who believes that you are not deserving of human rights and dignity to speak.

</comment></comment></comment><comment><USER33> Seems conferences are quite a controversial thing these days.

<comment><USER34> Agreed. In addition to "codes of conduct" that seem to assume all attendees are lecherous, racist rapists some conferences step outside their focus and end up turning away potential attendees. For example, this military member who really seems to be the target market for DjangoCon but who can't attend due to past pro-marijuana speakers. [https://www.reddit.com/r/django/comments/4dihy4/django_train...](https://www.reddit.com/r/django/comments/4dihy4/django_trainings/d1yngty)

<comment><USER35> While I suppose there may be some codes of conduct out there that truly make those assumptions, most of the ones I've seen are simply predicated on the assumption that it's better to proactively make rules outlining acceptable behavior -- and, ideally, outlining both the ways complaints will be handled, including enforcement.

We'd all like to believe that "trust everyone to not to be jerks to one another" is code enough for any convention, and I get that "X, Y and Z will not be tolerated" can come across like taking sides in a debate. But establishing a CoC first is the social engineering equivalent of test-driven development. Handling complaints on an entirely ad hoc, subjective basis works as long as complaints remain relatively minor, but the failure mode can be pretty spectacular, and not in a good way.

</comment></comment></comment><comment><USER36> About the chart on "moral reasoning", consequentialism, the idea that only the outcome is what matters, _is_ an ethical system that one can base their morals off of. I'm not sure where they got the idea that they're two separate things.

Also the whole "xyism" thing seems to be their own made-up terminology for the idea of an illusory correlation in social psychology. Why not just say stereotyping groups is a bad idea instead of the weird references to logic and set theory?

</comment><comment><USER37> I do not understand the prevailing opinions in this thread and I must confess that, even though I disagree respectfully with LambdaConf's choices (respectfully as in, hey, it's their conference and I can even understand their reasoning), seeing the uncertainty and the doubt and the bullying and the lack of empathy for the less fortunate, this is the first time I'm ashamed of being a software developer.

For those with doubts, here's one of his posts that is racist by definition: [http://unqualified-reservations.blogspot.ro/2009/07/why- carl...](http://unqualified-reservations.blogspot.ro/2009/07/why-carlyle- matters.html?m=1)

And given his now infamous Medium post, given that it can be hard to parse English, here's a review of the book that he's recommending in support of his racist views: [https://www.splcenter.org/fighting-hate/intelligence- report/...](https://www.splcenter.org/fighting-hate/intelligence- report/2014/troublesome-sources)

I personally don't understand how anybody can claim that his views aren't racist in the most profound hate-inducing ways, and for every such assertion it feels like a spit in the face at least of those that have had grandfathers surviving WWII, let alone the minorities amongst us that fear not for their job, but for their personal safety.

But keep thinking that hate speech is just political opinion that needs to be protected. And keep demeaning and silencing those that ring alarms, as if "SJWs" are amongst your biggest problems. Yeah, that worked out well in the past.

<comment><USER38> Left authoritarianism and right wing authoritarianism are two sides of the same coin [1]. I couldn't accept one without the other as they operate on the same principles. Which is why I am willing to go to a tech conference as long as the subject matter is entirely about technology. If it included political discourse by said people it would be a different story and I wouldn't attend. Attendance is voluntary. And as far as I'm concerned people are free to attend whatever political conference they please. The only time I would support forcing a speaker not to be able to attend is if he planned to give a speech specifically involving inciting violence, coercion, or other blatant _criminal_ acts at that specific venue - and specifically a venue residing within my local community/country. The internet is a different story.

[1] [http://www.zerohedge.com/news/2015-06-29/emergence- orwellian...](http://www.zerohedge.com/news/2015-06-29/emergence-orwellian- newspeak-and-death-free-speech)

</comment></comment><comment><USER39> Wonderful graphs at the bottom.

I hope that this passes. It was too bad that an article like this had to be written.

</comment><comment><USER40> I don't recall this kind of brouhaha affecting more "academic" conferences, e.g. ISCA or Supercomputing, but I can't come up with a decent reason why that might be the case. Did the LambdaConf organizers just get unlucky?

</comment><comment><USER41> An attempt to derive a concept of "inclusivity" from first principles, complete with made-up jargon words and _diagrams_.

DeGoes wants to be thought of as "inclusive" but doesn't understand that the purpose of inclusivity is to hear from marginalised voices you might be systemically excluding. He thinks "ah, we'll achieve 'inclusivity' by including everyone, even the odious!" Thus achieving literally the opposite. But that's okay, he can show his working.

His new reactionary fandom (~ 0 of whom give two hoots about functional programming) are fully onside. Everyone else has left them to it; it's unclear if DeGoes understands in any way that this is what has happened.

</comment><comment><USER42> There's no such thing as "not becoming political". Hosting an event is a political act; so is selling tickets to the event or paying people to help you run it. These acts might be _normal_ but they're still _political_.

When someone says, "I don't want this to get political", what they're really saying is "I'm comfortable with the politics of the status quo and I want things to stay the way they are". Sometimes that's totally fine. In this case it means giving a voice to a racist advocate of slavery.

De Goes can have his conference, but arguing that this isn't a political decision is simply incorrect.

<comment><USER43> I'm not really familiar with the details of this whole LambdaConf drama, but your argument keeps showing up on my Twitter feed regularly and I never found it very convincing to be honest. I don't see why hosting an event is necessarily a political act and I don't see why when people say "I don't want this to get political" it means that they're happy with the status quo. People keep repeating these arguments online as if they were self-evident truths and never really explain well (or at all) why these statements are true.

In particular, an argument could be made that someone could find being forced to be surrounded by politics boring and tedious even if they agree with these ideas. If you don't believe me, just read the comments in any political HN post (such as this one); I guarantee you that you will find many of the comments obnoxious, even some of the ones you agree with in principle.

<comment><USER42> That's a totally reasonable question. I typed my initial response on my phone and was going for brevity.

People live in society together. Broadly speaking, political decisions are decisions about what the rules for how we should go about living and working together are. We tend to think of things as _obviously_ political when the community has a debate about whether or not something is acceptable (like abortion). But because politics sets the boundaries of social life, it also defines its interior.

For example, you and I (probably) both agree that it's totally reasonable to go to Starbucks and buy a cup of coffee. We don't think of this as an action anywhere near the boundaries of acceptable conduct, and so we both think of it as not having a whole lot of political meaning. A Marxist, however, would argue that we're participating in an exploitative system because we're using private property, shopping at a capitalist-owned business, etc.

We both don't buy their argument, but simply because they've made it, we're forced to concede that buying coffee is political act. By buying coffee, we're saying we're comfortable with the structures that created Starbucks, or that we judge any harmful consequences of buying coffee to be less important than our day to day convenience. The fact that the action is normal doesn't change the fact that at some point _we decided it was acceptable_, and that decision was _definitely_ political.

To give another example, the Free Software Foundation, is explicitly founded on the idea that everyday acts have political meaning, no matter how normal they are. Take this passage from their site ([https://www.gnu.org/philosophy/free-software-even-more- impor...](https://www.gnu.org/philosophy/free-software-even-more- important.html)):

>>>With proprietary software, the program controls the users, and some other entity (the developer or "owner") controls the program. So the proprietary program gives its developer power over its users. That is unjust in itself, and tempts the developer to mistreat the users in other ways.

>>>Freedom means having control over your own life. If you use a program to carry out activities in your life, your freedom depends on your having control over the program. You deserve to have control over the programs you use, and all the more so when you use them for something important in your life.

The FSF is arguing that the way you distribute software is a political decision, not just a matter of technical convenience, and they're totally right to point this out.

Anyway. To bring it back to LambdaConf, De Goes is clearly wrong to claim that things have "become" politicized. It's more accurate to say that giving a speaking slot to racists was political acceptable and has become politically disputed. De Goes doesn't like that things have gone from acceptable to disputed, so he claims he doesn't want things to be "political". But things were always political, it's just that previously they weren't controversial.

This is why people who argue against "politicizing" issues are implicitly arguing for the politics of the status quo. They're arguing against change.

</comment></comment></comment><comment><USER44> Is it meaningful that there is no _link_ to LambdaConf in TFA? Don't make me Google...

</comment><comment><USER45> This is probably the most reasonable response to these sorts of pressures I've ever seen. One can hope that other groups will follow their lead and strive to act like fully-grown, professional, adults.

I'm sure they'll get eviscerated for it, though.

<comment><USER46> The attempt to be a neutral platform is laudable, and the wording used to express the idea seems to be well thought through.

The fact remains that even though that insist that they are not endorsing any of the speakers' views, the mere act of giving a divisive speaker an audience (even if the presentation is entirely topical and non-controversial) acts as an implicit endorsement. Denying this doesn't change the effective endorsement.

<comment><USER28> > the mere act of giving a divisive speaker an audience acts as an implicit > endorsement

Giving a speaker a talk acts an implicit endorsement of all of their views? That doesn't even sound remotely true, yet you state it as if it was tautological.

<comment><USER46> The endorsement is implicit, not explicit.

Conf: "We're giving person A a presentation slot because they have a compelling presentation on topic W."

Possible Attendee: "Are you aware that person A has said things X, Y, and Z, which taken together can make people reluctant to associate with them?"

Conf: "We are aware of that but do not wish to make our conference about anything X, Y, or Z. The presentation is topical."

PA: "If you feature this speaker, you will cause some people to be reluctant to associate with your conference as well."

Conf: "We understand that, but speaker A is discussing topic W, not topics X, Y, or Z. We choose to feature the speaker because of their presentation on W."

By taking this position, the conference associates itself with the speaker. Possible attendees will see this association and draw the conclusion that the conference endorses the speaker, even if that endorsement is only about non- controversial things that are within the topic of the conference.

Dryly stating that there is no endorsement of any off-topic position does not remove that association and the implicit endorsement.

Implicit endorsement by association is a real effect. Go talk to any major politician about how they can't be seen talking to anyone remotely controversial, because of how associating with that person might be seen as endorsement.

<comment><USER47> _The endorsement is implicit, not explicit._

This is totally wrong.

To take a trivial example, criminal defendants (even obviously guilty ones) are allowed to speak in court.

You're saying that this is an "implicit endorsement" of their crimes by the court? Are you _really_ claiming that?

<comment><USER46> False equivalence. A trial isn't a conference.

That said, you should know as well as I do that judges will often restrict media coverage of hearings and trials in various ways because they know that the people involved (lawyers & otherwise) can and will attempt to grandstand and make a show of it, using the media as a platform for their message.

</comment></comment></comment></comment></comment></comment><comment><USER48> This is the blog in question: [http://unqualified- reservations.blogspot.com/](http://unqualified-reservations.blogspot.com/)

Honestly, I can't make heads or tails of it. There's some racist lingo, but more than anything _this guy seems unhinged, like the kind of person I wouldn 't want to be in a room with, let alone have a conversation with._

</comment><comment><USER49> Apropos of anything else, the 'lawyer' example is a bad one, and contrived for the purpose of example.

If an attorney "knows" that their client is guilty, they are duty-bound as officers of the court to make that knowledge known.

Obviously that doesn't happen as much as it should...

<comment><USER50> The general rule in Common Law (English speaking) legal systems is that if the lawyer knows (as opposed to suspects) that their client is guilty, they cannot let their client plead not guilty. They can still defend the client by pleading for a lesser sentence etc, or they can cease acting for the client. They don't have any obligation to tell the court, just an obligation not to lie to the court. Of course each jurisdiction will have its own rules about this.

<comment><USER51> Except you don't enter a plea for an action, you enter a plea for a criminal charge. A murderer can confess a crime to his lawyer (under privilege), and still honestly plead not-guilty to first-degree murder (for example, it could be considered manslaughter).

</comment></comment></comment><comment><USER13> This is an open letter of people protesting LambdaConf's decision: [https://statement-on-lambdaconf.github.io/](https://statement-on- lambdaconf.github.io/)

I invite anyone to peruse that list and tell me these aren't some of the brightest professionals and integral community members in functional programming (subtracting me of course). I welcome anyone to make the claim that these individuals haven't come to their positions through reason and deep consideration for the ramifications of how this issue is resolved.

<comment><USER24> The fact that you cite only a single source should stand as simple enough reason to discredit it.

In response, I offer you a single citation [0].

0 - [https://en.wikipedia.org/wiki/McCarthyism](https://en.wikipedia.org/wiki/McCarthyism)

<comment><USER52> The fact that you created a new anonymous account to do nothing more than name call stands as a simple enough way you discredited...you.

McCarthyism was intolerance, not an intolerance of intolerance. It's ironic to have to explain simple type theory here.

Or maybe not.

<comment><USER24> And yet, the 'intolerance' that you're so intolerant of goes without citation, without explanation, without discussion. Strikes me as blatant McCarthyism.

Perhaps my account is anonymous because the comment should stand on its own? The discussion surrounding this issue shouldn't require personal reputation. The facts should be sufficient.

<comment><USER53> I thought the McCarthyists were the ones blacklisting people over their political beliefs?

</comment></comment></comment></comment></comment><comment><USER54> This may not be a very popular belief but I honestly don't care what other people believe/think/worship/do as long as it doesn't harm any one else or me. I have extreme liberals on my Twitter feed as do I have extreme conservatives. People post stuff every now and again that kind of turns me off, but I still follow them because they have good stuff to say tech wise. I'm always open minded to what they post though.

In our profession we can't always work with the most open minded people(politically) but as long as the work gets done and they are open minded technically that's all that matters to me. I work with and hang out with people I don't agree with on certain things, drink beer, go over for dinner. No issue for me. I'm Libertarian, so politically I have something I can agree with on both sides usually.

As long as this guy doesn't give any hate speech or harm someone then I honestly don't see the problem.</comment>


Ask HN: What home or office chair are you using? - <AUTHOR> I've been using the same basic chair I bought at Staples when I was in grad school almost a decade ago. I'd like to upgrade to something really comfortable and supportive that I can sit in for several hours at a time. Good posture is really important to me so I'd like something that will help me when I start to slouch. <comment><USER2> Leather "Executive" office chair from Costco. Had it for about two years now and it still feels great, if anything the leather has gotten even softer from use. I think it was around $150-$200.

I also have foot rest approximately parallel to the seat so that I can lean back and keep my feet elevated. Being able to lean back makes longer sessions much easier on the lower back. Either way it's best to take a break every hour or two though.

</comment><comment><USER3> 1960's aluminum tanker task/computer chair with adjustable height and backrest. Fits perfect, stylish, keeps me sitting straight all day. Will outlast me without a doubt. Only issue is ocassional butt sweat from vinyl seat on hot days. Will never suffer a disposable 'office chair' again.

</comment><comment><USER4> Steelcase Leap. Amazing chair, adjustable in just about every way imaginable. I like the mesh breathability of Herman Miller Aeron chairs, however, I'm about 135lbs and 5'9 and the Aeron often times felt too big for me.

</comment><comment><USER5> Ikea Poang. I work with a laptop in my lap.</comment>


Ask HN: Review my startup Readness.com - a last.fm for news [chrome/fb connect] - <AUTHOR>

We spend most of our time reading on the web. We're doing it right now. But what we read still feels like a black box, we believe we can create a remarkable experience by making these habits open.
We read to stay informed, and we wish to remain informed amongst our friends - this is the crux of readness.com, to inform you of what your friends are reading, and vice versa.
Readness.com remembers what news articles you read and shares them to your Readness.com friends. The great thing about this is irrespective of how you read news - Hacker News, websites, Twitter or RSS - as long as it's in the browser we can create you and your friends remarkability (recommendations and data).
We do this via a simple browser extension, initially for Google Chrome. We've designed this entire experience to respect your privacy online. Hopefully the click through to our site clearly defines our policy (essentialy: only friends see what you _read_, everyone else data & starred articles, 15 minute window before articles are shown to friends, whitelist of sites only)
You also get a great profile of what news you read, a news profile. It shows the topic sources and topics of news you read.
This product is super early (and our 3rd major product iteration, but thats another story) and we'd love all feedback on privacy, facebook integration and where you find value. Check it out!
Thanks!
Peter - CEO @ Broadersheet
http://beta.broadersheet.com <comment><AUTHOR> <http://beta.broadersheet.com>

</comment><comment><USER2> Might be nice to mention this is all through Facebook connect in the title. I have plenty of interest in something like this, but no interest in having a Facebook account.

<comment><AUTHOR> tweaked title - sorry. and we do plan on supporting other sign on services.

<comment><USER2> Thanks, I'll be sure to check it out then. I'm definitely interested in the idea of recommendations for articles to read. Google Reader _tries_ to do recommended items, but it's pretty bad in my experience.

</comment></comment></comment><comment><USER3> I personally didn't find the screenshot very compelling. I think a "What are your friends reading now" with a few URL's and title's (kind of like a 'what's hot') for the screenshot would be much more interesting and get me to click. Also, as I scrolled down the 'download' page, the green arrow didn't stay with me.

<comment><AUTHOR> thanks for the feedback. you're totally right about the screenshot now that someone mentions it :)

will put a more engaging one in with some javascript sprinkles.

</comment></comment><comment><USER4> I actually really like this idea in theory. I currently find most articles through either RSS (Google Reader) or Twitter because I know I can trust these people.

If you can find a way to crowdsource who I follow on twitter so that it instantly reveals the "top topics" I'd sign on immediately.

Perhaps an additional page on your site (I'm not on Facebook either so I can't check you out), where I can upload my twitter name and it sorts links shared by who I follow in order by the # of retweets, time, etc...

Good luck!

</comment><comment><USER5> Come to think of it your site brings another dimension to the way we interact on the web but what separates you guys from say Google's Reader service. I'll take a look.

</comment><comment><USER6> With all the talk about privacy issues recently, the user should be prompted after they connect via Facebook to set their profile as Open, Delayed, or Private.

I am still trying to figure out how to do stuff and maybe that is a sign to help the user through it. Like, what does unlock and level up mean in the settings?

<comment><AUTHOR> the unlock and level up stuff relate to quests/achievements for news, they're not quite ready for usage yet. We're interested in trying to tempt people to discover new articles or sources via incentization, essentially.

<comment><USER7> I think it would be ideal if the experience was more transparent. Discover some great articles that your friends and family may enjoy and incidentally get achievements. I don't think anyone on SO, the most successful achievement system out there, actually chases achievements. Instead the achievement system should rewards whatever behavior helps the community and app the most.

</comment></comment></comment><comment><USER8> Like joker, I don't have a facebook account to test this but the project certainly looks interesting.

I am curious as to how you select what topic an article has? Doing a few random searches it seems to be a combination of scanning tags in articles and the names of the articles. Could you elaborate?

<comment><AUTHOR> we use the zemanta article and we're building our own technology atop their tags (some are too loose for our content)

would you sign up with twitter if you could? planning next sign on service :)

<comment><USER8> Thanks for the reply. Twitter + firefox would do it for me.

<comment><AUTHOR> coming asap :)

</comment></comment></comment></comment><comment><USER9> Peter, can you add The London Times' new website to your database: <http://www.thetimes.co.uk>.

<comment><AUTHOR> totally, will do this asap.

<comment><USER10> Didn't the UK times just get paywalled by Murdoch? Good luck!

<comment><AUTHOR> makes no difference to us :)</comment></comment></comment></comment>


Goofys: A high-performance, Posix-ish Amazon S3 file system written in Go - <AUTHOR> https://github.com/kahing/goofys <comment><AUTHOR> It support Azure too. [https://github.com/kahing/goofys/blob/master/bench/azure/REA...](https://github.com/kahing/goofys/blob/master/bench/azure/README.md)</comment>


The Case Against Cars in 1 Utterly Entrancing GIF - <AUTHOR> http://www.theatlantic.com/business/archive/2013/11/the-case-against-cars-in-1-utterly-entrancing-gif/281615/

<comment><USER2> You can have my car when you pry it from my cold, dead fingers...

Seriously, cars aren't perfect for every situation, but nothing can match the flexibility of a car. They are popular for a _reason_. Need to go to the corner store for milk, but it's raining out? Car is nice. Need to head all the way across the country, hauling something (too big | too awkward | not allowed | etc) for an airplane? Drive. Need to go somewhere unusual after work that isn't remotely close to a (subway station | bus stop | airport | etc)? You're fucked, or on the hook for a long walk or an expensive cab ride. Or maybe you live somewhere that doesn't have subways, buses, trains, etc.

If I lived in, say, Chicago, I doubt I'd drive very _often_ but I darn sure always intend to have car (or two, or three) no matter where I live.

<comment><USER3> You can still walk in the rain, it can be quite nice regardless of level of downpour.

It'd probably be a lot cheaper and certainly a lot less time consuming to ship that item.

It'd be a lot less expensive over the course of a year for many people to take the occasional taxi than own a car.

Imagine how pleasant cities are without heavy loud cars full of desensitized drivers. Lucca is a nice example.

<comment><USER2> _You can still walk in the rain, it can be quite nice regardless of level of downpour._

No thanks. Especially if it's raining _and_ 20F outside. _bbrrrrrr_ _shiver_ _bbbrrrr_

No, I'm quite happy with my nice warm, snug, secure car. If the price of that is sitting in the occasional traffic jam, so be it. That's why there's a stereo in the car, and why I have my smartphone. I can read email or check HN while waiting for the line to nose forward another 15 feet. :-)</comment></comment></comment>


How To: Kick Your Torrent Addiction With Usenet - <AUTHOR> http://gizmodo.com/5343260/how-to-kick-your-torrent-addiction-with-usenet?skyline=true&s=i <comment><USER2> I am not sure what "kicking an addiction" means but in my case I managed to reducing my _there are so many files, all free, I must have them all_ by abandoning torrents mostly and getting a small block quota (never expiring Gigabytes). Now I think before downloading and weigh in if I really want it and if I could just multiple up the price a bit and normally buy it instead.</comment>


Swift Cheat Sheet DMCA Take Down from Apple - <AUTHOR> https://github.com/grant/swift-cheat-sheet I can't tell if this was Apple's Swift guide, or was in fact a completely separate work created as a short guide to Swift. This appears to be a fork of the work:
https://github.com/MHM5000/swift-cheat-sheet
Nothing more than a few Swift examples! <comment><AUTHOR> This appears to be a fork of the work that has been taken down:

[https://github.com/MHM5000/swift-cheat- sheet](https://github.com/MHM5000/swift-cheat-sheet)

But it's just a few Swift examples! This really concerns Apple so much?

<comment><USER2> A whole book's worth of examples is hardly fair use. But I looked at a few of the array examples in the forked repo and I don't see them in the book. E.g., the shoppingList has different elements and I didn't see fiblist in the book. But I don't have time to do an exhaustive analysis. I would guess (or at least hope) Apple ran a program to do a comparison.

</comment></comment><comment><USER3> It looks like all of these code examples were copied right out of the epub book. It's like they took the book and stripped out all of the exposition.

They copied out of a copyrighted work. What did they think was gonna happen?

</comment><comment><USER4> This kinda reminds me of the whole youtube / label debacle.

</comment><comment><USER5> apple gives out Swift for Dummies for free, and then gets angry when anyone else has snippets of its content hosted online

do they want people to code swift or not?</comment>