Sonos: users must accept new privacy policy or devices may "cease to function" - <AUTHOR> http://www.zdnet.com/article/sonos-accept-new-privacy-policy-speakers-cease-to-function/ <comment><USER2> It seems like nobody actually owns anything any more - that we're all just digital serfs living on someone else's land. I really don't know why anyone would willingly make such a deal.

<comment><USER3> Individuals haven't owned much in a very long time; we've been physical serfs living on someone else's land for even longer.

You only "own" something so long as you pay taxes (aka rents) for the right to do so, otherwise someone, usually the government, will take it from you. Even if you don't want to play along, you can only be somewhere public for so long until you're loitering and subject to fines (more rents), confiscation (again, more rents), or removal.

The whole system is pretty blatantly anti-competitive [1], detrimental to individuals [2][3], and rotting the system from the inside out [4][5].

1\. [https://fivethirtyeight.com/features/the-rent-seeking-is- too...](https://fivethirtyeight.com/features/the-rent-seeking-is-too-damn- high/)

2\. [http://www.zerohedge.com/news/2017-06-22/us-economy- perverte...](http://www.zerohedge.com/news/2017-06-22/us-economy-perverted- neo-feudal-rent-seeking-abomination)

3\. [https://hackernoon.com/rise-of-the-rent-seeker-how-the- subsc...](https://hackernoon.com/rise-of-the-rent-seeker-how-the-subscription- economy-hurts-startups-entrepreneurs-its-af48fe98e555)

4\. [https://devinhelton.com/2013/04/14/rent-seeking- economy/](https://devinhelton.com/2013/04/14/rent-seeking-economy/)

5\. [https://www.bloomberg.com/view/articles/2016-09-13/banks- and...](https://www.bloomberg.com/view/articles/2016-09-13/banks-and-colleges- are-wasting-our-money)

<comment><USER4> Taxes ≠ rents.

<comment><USER3> Generally, I would agree, and in the broadest sense of the terms, they are not equal. You can call anything whatever you want; you can put lipstick on a pig but it's still a pig. England used taxation as a way to maintain control over its colonies regardless of how it turned out. Eventually, and most famously, the U.S. realized the taxation was a form of oppression and not for the common good.

People who didn't pay the "taxes" were evicted and their possessions given to loyalists; sounds a lot like renting.

<comment><USER5> The American Revolution isn't nearly as clear cut as that. It wasn't anti- taxation, it was anti-taxation without representation. The colonists were objecting to being taxed without having a say in the levying of the taxes. There were many colonial Americans who would have been happy returning Members to Parliament without independence.

The core of the issue really was that Britain defended the American colonies from French invasion during the Seven Year's War and the British taxpayer bore the brunt of the taxation (I can't remember exact figures, but Britons were taxed much, much heavier than Americans, even after the stamp duties and tea taxes). After the war, Parliament came looking for payback, understandably. So Britain wasn't using taxation to control the colonies, it was looking to recoup the costs of defending them.

On a sidenote, this is actually quite interesting in today's context over NATO military spending, where now it is Britain freeloading on American military spending.

<comment><USER6> > The American Revolution isn't nearly as clear cut as that.

This is an entirely legitimate statement.

> ...now it is Britain freeloading on American military spending.

...but this you're really going to have to back up. Can you point to a specific example and explain why it's 'freeloading'?

<comment><USER7> The US has a significant presence in the UK: [http://www.independent.co.uk/news/uk/home-news/unknown- terri...](http://www.independent.co.uk/news/uk/home-news/unknown-territory- america-s-secret-archipelago-of-uk-bases-9084129.html)

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> To be honest I had a pretty average experience with Sonos so far. It is connected with cat6 ethernet, professional switches, with no other connectivity problems on that network (and I tested all cables). I have 3 systems (pay1, play 5 and the sonos amp), and they keep losing track of each others, I have to regroup them regularly. They also struggle with long music tracks (i.e. 1h podcasts off a synology shared drive) and often stall in the middle.

If they brick my devices, I will only be half upset.

<comment><USER9> If the units are also wifi connected (sonos mesh networking), then either only plug in one of them to ethernet, or fiddle with your switch spanning tree cost values. As I recall, sonos uses the older standard spanning tree values, and until I fiddled with my managed switch settings, the sonos were regularly bringing down my local network, and/or winning the elections so that large amounts of my lan traffic went over their wireless mesh network.

Pretty crappy default configuration on Sonos' part (using old default cost values), if you ask me.

<comment><USER10> ^ I worked in Sonos support for 7 years and going wired for everything is the best configuration - if you're still having issues with that then spanning tree configuration is the likely cause.

<comment><USER11> I found Sonos support to be super helpful. First time I've talked with a support representative where I came away impressed with how knowledgeable they were.

</comment></comment></comment></comment><comment><USER12> Wow talk about blowing something out of proportion. The new software comes with new terms. If you don't accept the new terms you keep the existing software. Over time, it is possible that current software sill stop working with e.g. some future Pandora API, and you'll have a choice of either updating your software or foregoing that feature.

I have a Sonos in every room of my house and I've owned them since the very first generation. Sonos has been extremely good about updating the software. The current software still works on the very first hardware, with all the functionality save for a single feature, room-correcting equalization, that requires the newer DSP. This company is the gold standard of ongoing software support for consumer goods and this article is trying to spin the situation in just the perfect way to make the Internet commentariat explode.

<comment><USER13> Whatever the rationale, the posts's core statement - that either people accept new contract terms or their device will brick the next time they change the API - is correct.

[edit] apparently the models have a line-in socket? In that case, I agree, them turning into regular speakers is better than bricking. However, I still think the article is relevant as it highlights the problem of ownership and terms of sale with IoT devices. (The conditions under which you bought the device can change arbitrarily _after_ the sale)

<comment><USER14> This is silly, no one is saying they are going to brick the hardware, ever. But if you don't update and years later Spotify decides to change their end points, Spotify will likely stop working on your very outdated speaker.

If you have any google account or android device, they already have literally orders of magnitude more info on your life than Sonos would ever be able to collect. Not to mention Sonos has said it doesn't ever sell the data, AND you can opt out of usage info. Not seeing the problem here.

</comment></comment></comment><comment><USER15> I suspect that legislators are so far behind the curve on this, that they'll never protect decent humans from such guys.

Answer: Forget the protection afforded by the state. Protect yourself. Blacklist the scum manufacturers, warn your acquaintances.

What other suggestions.

<comment><USER14> Have you even read what data is being collected? Sonos is not a scum company, though the article is providing badly inaccurate info.

</comment></comment><comment><USER16> I hate all smart devices. The TV should just be a TV, the dishwasher should wash dishes, the refrigerator should keep stuff cold, the washing machine and dryer should clean my clothes, and speakers should just produce sounds. I have yet to hear any compelling reason to make these devices dependent on software.

<comment><USER17> My degree is in mechanical engineering, but I work in software development. Software is eating the world for good reasons.

How many gates would it take to have a pure hardware decoder for ATSC?

A microcontroller-based dishwasher timer is much cheaper to design and manufacture, and wears out more slowly under many conditions, than a mechanical timer.

I wouldn't be surprised if a micontroller could wring another 1% efficiency out of your refrigerator vs. an analog or mechanical controller.

A microcontroller inside the speaker could perform some digital signal processing to account for the speaker's frequency response, so that the receiver doesn't have to know any details about the speakers.

Now, I do see little reason to make any of the non-TV appliances you mention reliant upon network connectivity or anything outside themselves apart from power and physical consumables (soap, water, etc.). Ideally, the television itself would be split into a screen with only HDMI in, and a small box or dongle that performs ATSC reception, decoding, and any smart TV functionality. The television itself should be something like a Chromecast.

<comment><USER18> The "Smart" in the post you replied to stands for something else than your examples (which are absolutely valid uses cases!).

We could summarize it as "needlessly Internet connected, reporting to some endpoint in the cloud outside of your control, which is now a point of failure".

Indeed my dishwasher is likely more reliable, and my fridge can get more efficient with a microcontroller. But the 2017 version is likely to suddenly stop working is someone in Korea forgets to renew a certificate (or worse, become part of a botnet, or act as an breach in the security of your network like the aquarium in Vegas I read about lately). Most of the times, the "added value" of this new dependency is harvesting your data for profit (which won't get passed down to you as a better price, don't worry).

<comment><USER17> I should have quoted the portion I was responding to. I was responding to "I have yet to hear any compelling reason to make these devices dependent on software."

<comment><USER16> Yes, you have possibly valid use cases. I should have clarified that my objection is to Internet connectivity specifically, although I am not yet persuaded that a 1% efficiency gain for my refrigerator or other appliance (regardless of connectivity) justifies the additional expense and complexity of using a microprocessor.

</comment></comment></comment></comment></comment><comment><USER19> I remember a time when the phrase "if you don't know what the product is, you're the product" made sense.

Now it's, "if you don't kn... oh f*ck it, you're the product!"

<comment><USER8> The sentence is if you don't _pay_ for the product, you are the product. But Sonos isn't exactly free. It isn't exactly cheap either.

<comment><USER20> Note that the original sentence is a one-way equivalence.

Just because you pay for the product, doesn't mean you can be the product too.

</comment></comment></comment><comment><USER21> This problem should be solved in a legislative way, similar to Europe's GDPR. There should some minimum privacy rights which can't be opted out of and which are protected by government. That's the only viable solution. Markets don't help here.

<comment><USER22> Why wouldn't the market help? This is a great opportunity for a competitor to offer privacy features and capture market share with a better offering. Promise privacy in perpetuity or your money back, and if consumers care then they will switch.

<comment><USER23> Because people _already bought the things_ and it would be profoundly shitty to buy them again? Lock-in is real.

And let's be real: what you've written should be written as "privacy in perpetuity _or maybe part of your money back years later after a class-action lawsuit, maybe, if it isn 't just store credit_." That, as much as anything, is why consumers caring is attenuated.

<comment><USER22> It's a luxury speaker, so not the end of the world. The consumer could sell on eBay, or if it makes sense a competitor could offer incentives like taking trade ins for a discount, etc.

</comment></comment></comment></comment><comment><USER24> If you can't read the source and build the firmware yourself you don't own the device.

It's that simple. Stop putting up with closed non trivial firmware and these sorts of problems go away.

<comment><USER25> Which makes your options 'roll it yourself' or 'do without'. Just because somebody chose door #3 doesn't mean they should be expected to get shafted at every opportunity.

<comment><USER26> I agree that they shouldn't expect to, but they shouldn't be surprised either.

</comment></comment></comment><comment><USER26> I looked at these speakers a few months ago. They look really cool. As soon as I saw that they _require_ phoning home, I said "lolno" and built my own speaker system with RPIs.

I _love_ the idea of smart devices, but only as long as the software is Free and Open. I really don't understand people who think situations like this are acceptable.

</comment><comment><USER27> I'll be honest, I'm just glad to see they are still actually working on their software.

<comment><USER28> It's so good but still so buggy. Very much a love-hate relationship.

<comment><USER29> Really? Are there certain services you find to be buggy? I feel like Sonos is one of the _least_ buggy pieces of tech in my house. That's what I love about it. It just works, I don't have to explain to non-technical family members how to work around issues, etc. But we almost exclusively use it for Apple Music and Spotify, so maybe there are some rough edges we haven't encountered.

<comment><USER30> try playing music that is stored on your phone the sonos... it keeps cutting the effing song off short and starting the next song too early.

a bug that's been around _forever_ and they plain refuse to fix it.

<comment><USER29> Ok, yeah, that's definitely not a use case I have tried. (In fact, one of the biggest reasons I switched to Sonos from using Airplay is that I wanted to get away from relying on my phone's network connection to have the music play.)

</comment></comment></comment></comment></comment><comment><USER31> Sale of goods act (and similar consumer protection laws in so many countries around the world)?

<comment><USER32> That was my first thought as well. It's clearly not reasonable to assume a customer bought a product without any knowledge of arbitrary future changes in the legal terms but understood that the product could cease to provide the same functionality they bought it for later if they didn't accept those unrelated changes. This ought to be grounds for returning these devices to vendors as unfit for purpose and demanding that either they are fixed to continue working properly or some fair level of compensation is paid.

Also, since we're getting some new data protection laws across the EU next year that are heavily weighted against organisations that process data, someone who is upset by this could probably annoy Sonos by doing things like accepting the policy, getting whatever updates they need to keep their device running, and then immediately giving notice that they withdraw their consent for processing any personal data.

In the long term, I think consumer education may be the best solution to the problem of normal devices depending on fragile remote facilities. It is illegal to sell cigarettes in my country without showing very obvious warnings about how smoking is harmful to your health. Perhaps it's time that any software or electronic devices that rely on someone else's servers or remote hardware to function have to have 1/3 of their packaging (including 1/3 of the total screen area for any web pages or app purchase screens) used for a big statement that this may cause the software or device to stop functioning at any time, or to give an actionable guarantee about how long such support will be provided for as a minimum, and that any advertising for such things has to describe the "purchase" in terms of being a rental rather than buying something.

<comment><USER10> Isn't Sonos just saying, if you don't accept the new privacy policy you won't get updates? I highly doubt they're going to deliberately (somehow) break devices for users that refuse to update.

<comment><USER32> The reporting here implies that devices for customers who don't accept the new terms may "cease to function". Does the mechanism for how that happens matter? The bottom line is that either the product continues to provide whatever functionality it was purchased for, or it's now broken.

Typically under consumer protection laws in places like Europe, a product that ceases to work properly unreasonably quickly after it is purchased will trigger certain rights for the purchaser, such as getting the device repaired or replaced so it works again, or getting a full or partial refund as compensation.

Importantly, there is typically no exception to this principle just because the product in question involves software or depends on remote services. In fact, the EU strengthened consumer protections on digital purchases not so long ago, so the direction of the legal currents is very clear.

I suppose you could say there has been some sort of informal understanding that because it's so hard to write software with no bugs or security flaws, it's reasonable for the suppliers of products with software components to supply software updates post-sale to keep things working properly without falling foul of the basic "it no longer works" trap if users don't then apply those updates. But the sorts of shenanigans we've seen recently with software developers bundling unrelated and possibly unwanted changes in with their bug fixes and security patches are stretching good faith here, and at some point I suspect something has got to give.

The same principle applies to products with dependencies on remote services that don't necessarily last as long as the product itself, whether that's a server for a multiplayer game, or a DRM scheme with remote authorisation, or a provider of audio data that makes a speaker system useful.

<comment><USER33> I think Sonos just lost me to Apple on yet another device. HomePod here I come. Seriously this is just another insane digital slavery drive.

<comment><USER9> This does seem like a weird move, given:

a) the high price of Sonos equipment

b) the HomePod coming out sometime in the near future

c) other competitors that are starting to be more competitive (eg. "smart speakers", bluetooth speakers, etc)

</comment></comment></comment></comment></comment></comment><comment><USER34> While I don't like this new development, I will drop in one data point: I bought my first Sonos devices more than 11 years ago, and over this time they all received software updates with increasing functionality. Think about it: my first Sonos players were bought in the pre-iPhone times. A lot has changed in the tech world since then.

This is something other manufacturers could learn from. It seems these days most products are launched by marketing teams: fire and forget, the moment the product is out the door, all software development ceases and it never gets updated.

I do hope they reconsider the new privacy policy, though. It's worrying.

<comment><USER35> My parents have a couple of Sonos devices in their home. The support is amazing. But this "Accept the new policy or we brick your shit remotely" thing needs a HARD and FAST response, this cannot be a "Well eventually the market will-" NO, FUCK THAT. If we allow manufacturers to do this sort of shit, that's the final nail in the coffin for IoT. It's already a dumpster fire in terms of software.

</comment></comment><comment><USER36> There should be way to fight it back. If this kind of thinking spreads even more it will suffocate our society.

<comment><USER8> Plus this is no way to treat a customer if you want them to be repeat customers.

</comment></comment><comment><USER37> I might understand this if it was for new customers going forward. But I don't understand how they can tell their existing customers this and not expect a lawsuit.

<comment><USER38> I am considering a complaint to the ACCC here in Australia. It's possible this sort of thing violates our consumer protection laws.

<comment><USER39> I'd be really interested in the outcome of this. You may be better going to your state's Office of Fair Trading first though.

</comment></comment></comment><comment><USER40> This is why I will never want my home to be "smart".

You'll have to pry my physical wall switches and copper wires from the cold, dead hands.

</comment><comment><USER41> Anyone have another suggestion for a pair of wifi speakers that can be assigned to Left/Right to get stereo and can be network streamed to and have another device on the network with a line-in?

I was about to buy 2 Play1's and a Connect to do a stereo install in a room where I don't want to run speaker cable. I had researched wackier home-built solutions and was going to give up and go for the Sonos. Now I'm once again considering wackier home-built stuff like 3 raspberry pi's attached to line-in and two dumb powered speakers.

<comment><USER42> look into the squeezebox ecosystem.

<comment><USER43> Seconding. It's a great system if you can set up your own server, and the ecosystem at this point is almost completely open to the point where you can completely build players from other devices like raspberry pis.

</comment></comment></comment><comment><USER44> The actual solution is simple: stop using these devices.

<comment><USER45> Could you recommend some alternatives?

<comment><USER46> Run Squeezelite on multiple Raspberry Pis paired with decent USB audio adapters (Berhinger UCA222 - decent analog and also optical out). Music served from a PC using the standard Logitech Media Server software, playback controlled with either the standard web interface or the Squeezer android app.

Plug the RPis into decent stereos (not a powered speaker unless you are some kind of rabid animal) and you've got a good setup that can be controlled from anywhere in the house. Multiple stereos can playback in sync and be controlled from the same UI.

<comment><USER47> Does Logitech Media Server integrate with all these doodads: [http://www.sonos.com/en-us/streaming-music](http://www.sonos.com/en- us/streaming-music) ?

<comment><USER46> A few of them look familiar, but I don't use that stuff. My advice was given with someone with a digital music collection in mind. Spotify, for example, was available on the Squeezebox Touch (and not the earlier Squeezebox Classic) but I don't know how tricky it would be to make it work with Squeezelite.

<comment><USER42> There is a new plugin called "spotty" (see here: [http://forums.slimdevices.com/showthread.php?107615-Announce...](http://forums.slimdevices.com/showthread.php?107615-Announce- Spotty-v1-1-0)) that lets you stream spotify to any client.

<comment><USER46> Thanks, I know someone who can use this. I also saw a year or two ago some guy was selling some product or service or something aimed at supporting the older hardware with newer streaming services. I just don't generally use the streaming stuff.

</comment></comment></comment></comment></comment></comment></comment><comment><USER48> And reason #458 why I am skipping the whole "IoT revolution" in my home.

I consider this motivation for DIY.

<comment><USER49> There are a good amount of IoT devices that work offline and don't use public internet at all.

I specifically buy devices that aren't bound to the Internet and I've found a good amount.

<comment><USER26> Where do you typically find them? I've had very little luck with that

<comment><USER50> For one... Philips Hue. The lights connect to a Zigbee base station, which has a local API for controlling the system.

(The base station does connect to a WAN server for remote control, but you could always block that at your firewall. The system works entirely fine in local mode.)

<comment><USER26> The last time that I looked, the Hue/Zigbee/whatever protocols were still fighting over each other to become the standard. Has that settled down?

</comment></comment></comment></comment></comment><comment><USER51> I am sincerely curious and maybe a Sonos owner can offer some feedback. what does Sonos offer me now that a streaming music provider, a smart phone and a portable bluetooth speaker doesn't?

I understand that Sonos can stream to multiple "zones" simultaneously but besides the occasion of a house party how often is this necessary?

This news to me is just another reason for me to never buy one.

<comment><USER52> So, even in a 1100sqft house, I consider the multiple-zone streaming to be of great utility. In fact, I almost NEVER use my Sonos setup without all 5 speakers going. Yes, you can always blast the audio in one room in order to hear it well in others, but it's quite nice to be able to listen at a comfortable volume in all rooms. It allows one person in the house to call out to another and still be heard, for example.

I have it set to wake me to the local streaming radio, so that's a nice feature, but of course it could be replicated.

I can throw my phone into a passing cement mixer and the music keeps playing in the house, and then I can open the controller on my laptop and hit "next track". In this way it's fairly analogous to the Spotify controller where I can change the music from any device in the house, but the "playing" happens on the device itself; it's not actually streamed from my phone or computer.

Also, until sometime in the past couple of years Bluetooth was godawful unusably unreliable. It's gotten REALLY good lately though, and suddenly I love it.

</comment></comment><comment><USER53> Sonos: I am altering the deal. Pray I don't alter it any further.

</comment><comment><USER54> What is provided to the consumer/user in exchange for agreeing to this contract? I assume, because I am becoming increasingly nihilistic about technology, that challenges to this would fail in court. However, this seems to fail both the consideration and the competency and capacity elements of a functional contract.

</comment><comment><USER55> mhm, please excuse me all if this is wrong, but isn't this the exact same way it works with pretty much all of the updates from e.g. Apple and co?

Let's say a new Itunes update comes along, this requires the user to opt into a privacy policy, if there happens to have been a change in said policy since the last update, then accepting the new conditions is required in order to install the update? Same for an update in browsers, iOS, Android, ...

I am not in favour, just confused as to why this specific case is singled out? Especially since not updating critical software (Operating systems, browsers, et cetera) seems to have far more serious consequences than w/ a speaker?

<comment><USER56> Hardware vs. software.

Declining update and choosing to live without new features vs. ceasing to function.

<comment><USER55> "[...] the customer will not be able to update the software on their Sonos system, and over time the functionality of the product will decrease."

Sounds to me like maybe the bluetooth syncing with a recent smartphone or something of that nature might not work if the speaker didn't receive a certain update, which I consider a possibility. The "cease to function" seems like a nightmarish-description of such. It's not like "not updating" will magically brick the device.

Edit: my point being that not updating software is not about not enjoying certain features, it's in many cases being incredibly vulnerable to certain types of exploits, in the case of an OS or browser a far more serious consequence, is it not?

<comment><USER56> That point is a bit of a red herring. The question isn't the value of the update; it's whether existing customers should have to accept inferior terms of service to get it.

The right path for Sonos would be to open-source the kernel and hardware drivers, then either keep it up to date with a base feature set or budget $100K or so a year to run a bounty-based community contribution program. That will end the complaints that Sonos risked bricking hundreds of millions of dollars' worth of consumer hardware so its marketing department could harvest email addresses. Not everyone would like that choice, but it would be a better choice than the gradual decay of perfectly fine (and expensive) hardware that should otherwise last for decades.

Unfortunately the economics of service-oriented consumer hardware is all screwed up these days. Should buying a proprietary connected geegaw for a single up-front fee entitle me to eternal updates? In what non-pyramid-scheme economic model does that work? Yet in our world where we're still weaning ourselves from the dot-com years, that's typically the expectation.

</comment></comment></comment></comment><comment><USER57> Is there a use case for Sonos that good Bluetooth speakers don't address more simply?

<comment><USER58> * Shared playlist/queue between all users of a household.

* No need to have a second device present to stream music. That is, I can start up music with the controller on my phone, and go to the store, but the music still plays since all the streaming is handled by the sonos speaker.

* No need to pair your phone/computer to the device every time you come home. Just get on the wifi, and you're set.

Those are the big ones for me, and honestly they're huge.

On the flip side, the biggest pain point is that you're beholden to whatever music services they include in their controller, and you have to use their controller to play music. So while they support Apple Music, I can't use the Music app on my phone to play it. I have to drill through the Sonos app and find what I want. It works pretty well, but it's annoying. Also, I can't stream Audible books, or Overcast podcasts since they aren't supported by the Sonos controller.

<comment><USER59> Why would you need to play music at home while you're going to a store?

Also, activating Bluetooth is as frictionless as activating WiFi.

<comment><USER60> Because you aren't the only one enjoying the music at your home. The most annoying thing about being at a party where bluetooth audio is being used is when the person paired gets too far away from the speaker.

<comment><USER61> Configure a tablet in guided / single app mode for music playback. Trivial stuff.

<comment><USER58> That's a fine solution if you have an extra one laying around. But I don't and I'm hesitant to buy a tablet just to drive a speaker.

<comment><USER62> Is it even more expensive to drive a regular speaker with a dedicated tablet than a Sonos speaker?

<comment><USER63> Yeah cost is definitely not going to be a reasonable factor wrt Sonos equipment comparison. I think the tablet being misplaced, broken or otherwise abused is more troublesome.

</comment></comment></comment></comment></comment></comment></comment></comment><comment><USER64> Maybe it's just a naive idea but wouldn't it make sense to have "smart devices" be smart in sofar that they have some local computation power and the ability to communicate near range? Maybe have local orchestrator (e.g., apple tv, google home, what not) dedicated for communicating with companies while the rest stays rather dumb and completely interchangeable. Why is literally every smart device sending back information to another company?? Why aren't Distributed IoT and Smart Objects paradigms more of a thing already?

</comment><comment><USER65> I bought one of those for my gf because I wanted to see if it was any good.

Quick review.

iOS users have to use their spotify app which is lousy.

Google Play users can cast to it, thankfully.

Major positive point is that it uses wifi and supports casting from Google Play. But for my gf who uses iphone she hates it.

Overall we prefer the Marshall bluetooth speakers over Sonos because in an apartment there's rarely a need for wifi casting music.

Edit: Chromecast audio is also a viable alternative. Based on how well my regular Chromecast (video) works for me I assume the audio one is as good.

<comment><USER28> There is a Sonos app for iOS, though? But agree using the Spotify app to manage it is pretty lousy but then I just switch to the Sonos app.

</comment></comment><comment><USER66> I'd be interested how those complaining about this "problem" would handle the business decision of how to update your terms when adding software that relies on third party offerings. If they add support for Some Music service, do they make it an awful experience where you have to agree to the terms for each vendor?

In earnest, what is a better approach here?

</comment><comment><USER67> I've long considered going to Sonos, but I think i'll stay with my Plex VM and my NAS

<comment><USER68> Plex just updated their privacy policy to infuriate users before walking it back after many people complained loudly.

<comment><USER67> Well, that's nice. Until they change it without people noticing.

I wish MediaTomb or Ampache was a better DLNA server than Plex.

</comment></comment></comment><comment><USER69> For some reason I read this as Sophos. That would not be good.

</comment><comment><USER70> Lawsuit time

</comment><comment><USER71> RMS was right again.

<comment><USER54> I'm torn between two responses...

1) RMS is always right.

2) RMS is that you?

</comment></comment><comment><USER72> Maybe there is a Google acquisition looming and this is being dictated by Google. Speculation obviously, but look what happened with Nest.

</comment><comment><USER73> As a Sonos (I have close to $2000 worth of products) user this actually doesn't bother me.

To all the people talking about ownership. I find it hard to believe the aux in will cease to work. So worst case is they turn into regular speakers.

What it sounds like is you won't be able to update your firmware. So more likely than not, everything would keep working but random Internet related services (like Spotify Integration) may break over time because, for instance, if Spotify changes their API you won't get the software update to fix it.

And that is why I think it is OK. Software updates over the Internet are always subject to licensing. That is not new and not unique to Sonos.

<comment><USER47> > _So worst case is they turn into regular speakers._

If I wanted regular speakers, I would have bought regular speakers.

<comment><USER73> My point being the speakers are the only part of it that are a product. Everything else is clearly a service.

The part of the speaker that is actually a product is unlikely to stop working.

<comment><USER74> Everything else is 'clearly' a service? On what basis? You buy a product, it has these features, you can do these things, that's the product.

Being able to play music on a 'smart speaker' from my phone isn't a service, it's just a feature of the product. If you sell a product with features that require you to host some servers somewhere publicly accessible on the internet, that doesn't make that product feature a service.

Don't like that? Don't include those features in your product. Design them better so you don't have to forever maintain these servers.

<comment><USER47> To be fair, one of the "features" is streaming Spotify, which may require a constant dance to keep up with API changes.

<comment><USER74> 'Compatible with service X' is a feature. If it stops being compatible with service X because service X changed their API, then you either need to fix it so it's compatible again, or refund to your customers.

If you want to announce you are compatible with service X as a feature, you should have an agreement of compatibility with service X.</comment></comment></comment></comment></comment></comment>


You know it's time to switch email provider when…. - <AUTHOR> http://www.emailserviceguide.com/2009/11/you-know-its-time-to-switch-email-provider-when/

<comment><USER2> I know lots of people that still use crappy email services. Shocking that they're unwilling to leap off!</comment>


How to deal with boss fondling his phone while "sorry, I am listening" to you? - <AUTHOR> Typical scenario:
You have 1-on-1 with your boss, proudly presenting results of your work or having close conversation with decision makers - and see your audience clearly ignorant and passionately engaged in jerking their mobile devices.
And i'm not talking about you giving boring one-to-many talk at a conference or trying to get attention at a crowded meeting with many irrelevant personalities.
I am talking about behavior of your superiors where they asked (and invested) in a first place for you to deliver/explain/present/convince something in a closed, interactive way where their attention is a key to achive the intended goal of an interaction.
Any interesting ways to deal with quiet disrespect and ignorant behavior from someone who is not used to be scolded for ignorant behavior? <comment><USER2> Stop talking and wait for them to look at you as to say "why did you stop". Then respectfully say "I see that you must be busy, if you like we can do this another time".

The trick is not to come across as condescending and that what you have to say is more important to them than what they are doing on their phone.

</comment><comment><USER3> Shit in - Shit out

Can you put ego off your thinking and focus on salary or material benefits of not being praised/pampered ?

With respect.

<comment><AUTHOR> Totally agree on enjoying material benefits.

Do you enjoy communicating with person who is fondling his phone while you're speaking to him/her?</comment></comment>


My Hardest Bug to Debug (2018) - <AUTHOR> https://www.programminginsteeltoecaps.com/my-hardest-bug-to-debug/ <comment><USER3> Here's my worst:

We had a function that looked like this:

      void f() {
        bool flag = true;
        while (flag)
          g();
      }

This function exited sometimes, which should not be possible.

You say, "Duh, Mr. AnimalMuppet, clearly g is smashing the stack!" But the return address wasn't getting trashed - just the value of flag.

This bug also would disappear if you did something like, for example, print out the address of flag so you could watch it in a debugger.

I chased this bug for a month, off and on. Finally I got desperate enough to print out the assembly produced by the compiler, and things got clearer.

flag was a register variable. (This was gcc compiling for an ARM CPU, by the way.) It lived in R11 (or maybe R12, it's been a long time). When f called g, it just pushed the return address on the stack. But g was going to have its own value to put in the R11, so it pushed R11 onto the stack just before allocating space for its own variables. So _f 's_ local variable wound up in _g 's_ stack frame...

... and g was smashing the stack. Duh.

In particular, g was using queues (msgsnd and msgrcv) to exchange messages with another CPU. The API here is misleading. These functions expect to send a packet of the form

      struct msgbuf {
        long mtype;
        char mtext[1];
      };

and they take a size parameter, among others, because you actually pass in a different structure, with an mtext array big enough to carry your actual information. But the size you pass to the function is expected to be the size of the actual mtext array, _not_ the size of the actual structure (that is, the size doesn't include the size of the mtype field).

The contractors who wrote the code didn't know that. They assumed that they could just pass sizeof(type_similar_to_msgbuf) into msgsnd/msgrcv, and it would work. In fact, they were sending and receiving 4 bytes too many. Which kind of worked, in that the sender and receiver never got out of sync. But when the receiver got four bytes too many, it trashed what was just past it on the stack, which turned out to be the stored value of R11.

The net result was that the flag would get cleared if, _on a different CPU_ , four bytes of unrelated memory were zero.

<comment><USER4> Psst…I'd mark that flag volatile or atomic if I were you; a smart C11 compiler might mark your loop as terminating ;)

<comment><USER5> Wait, why would it do that?

<comment><USER4> From a recent ([http://www.open- std.org/jtc1/sc22/wg14/www/docs/n1570.pdf](http://www.open- std.org/jtc1/sc22/wg14/www/docs/n1570.pdf)) draft, section 6.8.5, Iteration statements:

> An iteration statement whose controlling expression is not a constant > expression, that performs no input/output operations, does not access > volatile objects, and performs no synchronization or atomic operations in > its body, controlling expression, or (in the case of a for statement) its > expression-3, may be assumed by the implementation to terminate.

<comment><USER6> For that condition to be met, the compiler would have to prove that g() doesn't do IO, etc - but the OP said it calls msgrcv(2), so it's not an issue.

</comment></comment></comment></comment></comment><comment><USER7> I think my hardest thing to debug wasn't really a bug at all. It was having to clean up some legacy code I'd inherited and one function which was a bottleneck had a few hundred lines of horribly complicated code with lots of calculations which didn't make sense to me. It took a lot of time to figure out that the calculations were wholly unnecessary. The results of the calculations either got discarded or unconditionally overwritten. In the end, the refactoring consisted of a single press of the "delete" key, but building up the confidence to press it was what cost a lot of time and effort.

<comment><USER8> Maybe your case was more complicated but most IDE's now will tell you about unused variables, methods/functions etc. So if variables storing the calculations that were being built up never ended up being used in the end context of the function you may have gotten a nice gray/red line. It becomes harder to trace if those values are being updated into some table which then never gets used.

It is amusing that sometimes huge swaths of complicated code exist simply because everyone inheriting them is to scared to touch them even though they are basically orphaned and have a net 0 effect on outcome.

<comment><USER7> This was code written in PHP 3 and part of pricing and tax calculations on an import with data coming in from a custom made inventory management system module for an ERP solution running on Windows outputting the most god awful XML in UCS-2 with node names that contained accented characters, and converted that data into temporary MySQL tables for the custom made web shop.

Fun fact: the import, to take into account the fact that product IDs could change (as the entire product database with over 50k products was rebuilt with every import), would also update the IDs of all items in customers' shopping carts at the time of the import. Great fun if the customers had a product in their cart that was discontinued or changed.

That single function was 56 kilobytes of code.

</comment></comment></comment><comment><USER9> It sounds like the camera was sending match results using a blocking send or write call, and no one was reading them, so once the total size of match results exceed the total size of socket buffers the camera software blocks and stops working.

<comment><USER10> That was what I thought too! I've been bitten by a similar issue where I thought I was dodging it by using a size unlimited Python Queue but the underlying buffer filled up anyhow.

<comment><USER11> You'll run out of memory eventually... an "unlimited size" queue usually just means that the original developer won't be around to deal with the fallout.

</comment></comment></comment><comment><USER12> I hate questions like "What's the hardest bug you've ever debugged?". It means as I work I need to keep a scrapbook of "will what I did today make a great interview answer in 5 years time". I'd rather just fix the bug and forget about it.

<comment><USER13> I kindof agree. My memory doesn't work like this, I could spend a week troubleshooting, following various twists and turns and eventually finding a solution with a big aha! moment, and not remember much of anything about it a week later, at least in terms of spontaneous voluntary recollection.

<comment><USER14> And you don't remember any bugs that took much longer to get to the bottom of than the others? Or bugs that required debugging at a much lower level than usual? Or bugs that involved a huge black box that required a lot of guessing to fix?

</comment></comment></comment><comment><USER15> I'm not going to lie, but this article left me absolutely hanging off a huge cliff with no one to rescue me.

The actual bug was not fixed!!

<comment><USER16> Yes, it was.

> We looked at how we communicate with the camera. We opened a TCP connection > the first time it was needed, and left it open for changes to camera > settings via the application. We modified this to close the connection once > we had sent the required information and open it again if we needed it. We > tested this thoroughly over the next few days and it looked solid.

Furthermore...

> I still don't understand how this caused the camera to lock up. We were > receiving the TCP results via Telnet but we weren't reading the stream. Did > it just build up in some buffer? How did this cause the camera to lock up?

My guess: the buffer filled up and the result was that the computer's OS stopped sending ACK packets to the camera. The camera then locked up waiting for ACKs that never came.

Kinda straightforward actually.

<comment><USER17> What if the author decided to make the minimal testcase to make the camere lock up, and reported it as a vulnerability to the camera manufacturer. I think the camera vendor is obligated to fix the defect. It's really annoying to work around such obvious issues when communicating to hardware and frankly the manufacturer should be held against a higher standart.

<comment><USER18> This behavior is not a bug much less a security vulnerability. If the camera would try to handle this in some "clever" way (and thus started to drop data), that would be a bug.

</comment></comment></comment></comment><comment><USER19> Weird. He did not understand what caused the bug. To me, it always is about understanding the issue so that we can make sure that it doesn't exist in a similar condition in the code; Just removing the bug is half the job of debugging, the other part is understanding it - this is also to me where I have my biggest a-ha moments.

<comment><USER20> It sounds like because they were not processing the data there was some queue of files that were building up until the buffer was full. Once full buffer the request would be denied by their transport protocols, maybe a security feature run ary?

It seems once you unplug either via Ethernet or hard reset the pointer to the MAC address / up would get refreshed thus the full load dumped. Which would be consistent as to why in 2.5 hours the bug would persist again.

I agree it's funny the author never found out what caused the bug.

</comment></comment><comment><USER21> There is a subreddit devoted to these kinds of topics: [https://www.reddit.com/r/TalesFromDebugging/](https://www.reddit.com/r/TalesFromDebugging/)

</comment><comment><USER22> Broken printing in an enterprise Java app - it was relatively serious as customer's business process was relying on collaborating using prints. There was no message, no error & it was only failing for one specific customer.

It took us 2 weeks to found the problem. From what I remember some entry in the middle of windows PATH variable had a problem. While loading DLLs this caused a silent failure, and caused printing DLLs not to be loaded. It was all in Citrix environment which definitely did not help.

</comment><comment><USER23> My hardest bug ever was the following:

A weapon's camera tracked the simulated target perfectly, but there were occasional hiccups, where the camera jumped randomly.

The camera rotation data were confirmed, through Wireshark, to be valid, except for very specific values.

It turned out to be the following problem: a function that converted the endianess of float32 values returned the endianess-switched value as a result, rather than change the destination buffer directly.

Somewhere in the process, the x86 hardware expanded the switched float value to 80 bits, stored it in the internal FPU stack, and then this value was retrieved from the stack as a float32 and send over the network.

In some cases, this conversion altered the value in such a way that the camera jumps were not frequent.

The code that did this conversion was deep into a library that has been given to us and that it was widely used in the contractor's company for all Simulation needs.

The problem got away when I replaced the PDU handling with custom code which switched endianess of floats in an appropriate manner (i.e. directly to the destination buffer).

The problem most probably was created because the 'standard' functions for integer endianess swap have the form

        long ntohl(long v);
        short ntohs(short v);

and the author of the library thought that following:

        float ntohf(float f);

was going to be the same as the above.

</comment><comment><USER24> My hardest ever bug to debug was a core dump deep in the guts of some nasty c++ code.

What's so hard about that? Just load the core dump into a debugger! Well loading the core dump into the debugger caused the debugger to dump core...

<comment><USER25> I can relate. An older version of the Eclipse debugger would run into a stack overflow when the debugged process had a stack overflow and you paused the affected thread. It took me a while to figure that one...

</comment></comment><comment><USER26> [https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82677](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82677) incorrect use of assembly integer division affecting all projects that have c+p code from GMP (including linux/openssl/etc)

[https://github.com/fredrik- johansson/arb/issues/194](https://github.com/fredrik-johansson/arb/issues/194) was the original exhibitor of buggy behaviour

</comment><comment><USER27> My hardest in terms of pure awfulness wasn't a single bug, but was a constellation of crashes in a commercial MMO game engine (which shall remain nameless). From the architecture of the engine it seems to have started life as a model viewer, then they'd stuck that code in a for() loop to display multiple models, bolted on SpeedTree, mashed the whole resultant mess through Umbra (we can occlusion cull, YAY!), and called it a AAA game engine.

And then it got really ugly, because MMO engines need to be able to stream content from disk.

So they took the model loading code and put it in its own thread, and added a few _bLoaded_ flags to various structs to let the renderer know which of the models, textures etc. had finished loading. And called it done.

It kind of worked.

Along with a couple of other coders I was handed this and a bug tracker full of "Was doing <random thing X> and the game crashed" bugs. To make it worse, there was some obscure build issue that meant switching between Debug to Release build required a full rebuild, which took about 25 minutes. I spent about six months trying to add sufficient synchronization to make it stable. By the time the company folded it was playable, but there were still race conditions and it was still a bit flaky, and to this day I still don't like threads unless they're really necessary.

\--

I think the trickiest bug I ever had, in the spirit of the article, was when I was commissioning a piece of mining equipment. It'd been shipped with the controls hardware in a half-finished state and I had to rebuild chunks of it onsite, which meant over a kilometer underground. Eventually I had it all running as intended, it worked perfectly all day, and I thought we were done. Then just as we were packing up for the day, the machine started shutting down. No alarms, no faults, no visible cause, it'd just... stop. I spent an hour pulling my hair out before we had to leave for the day due to scheduled blasting. On the drive back to the surface, I was going over code to figure out what could possibly cause the shutdowns.

Halfway up, it hit me. The only way that the system could stop without a fault was if the 'run' signal from the radio control system was turning off. And the only way that would happen is if the radio transmitter turned off or lost comms. And that's when I realised I'd never fitted the antenna to the radio receiver. So when the battery in the radio transmitter started wearing down after a day of use, the signal strength started getting just low enough for the connection to drop and the machine to shut down.

</comment><comment><USER28> Oh, I have a couple of fun ones.

"The most impossible one" was during my first "professional" job, while still in college. I was writing part of the GUI of an app - a screen that showed a grid with controls and data. This was ~20 years ago, so C++ and MFC; the control was, IIRC, a regular listbox with some custom drawing.

We got a bug report from an user that was something like _" if I do this and that, the empty cells become '3'"._ Some of my very senior colleagues had drilled into me that _CUSTOMERS ALWAYS LIE_ , so my first reaction was to be sceptical. This was, after all, an impossible bug - most of these cells were absolutely empty (as in, it was impossible for them to have content), and the action the user was describing was absolutely unrelated to this control anyway.

So I tried to reproduce the bug, and to my utter disbelief, the blank cells now showed a "3".

After much debugging, I found the root cause. I was using some API call to lock the char* buffer of an entirely unrelated CString, for some direct manipulation. IIRC the second argument was the length of the string, but there was the bug: I incorrectly thought this arg was the offset, not the length, so I was passing 0 there.

Somehow MFC must have been doing something like interning strings, because by locking this CString of size 0, MFC was giving me a pointer to the char buffer _of the application-wide empty string_ - and I was writing a "3" there for unrelated reasons. So every empty string in the program (or at least for some controls) now was "3".

The fix was trivial once I identified the bug, but I always remember this as the most impossible "can't happen" bug that did, in fact, happen.

\-----

"The funniest bug title" was "HANDBAG TURNS INTO A BANANA". By then I was making games ([http://www.mysterystudio.com](http://www.mysterystudio.com)). This was one of the Sherlock games, IIRC, of the "hidden object" genre - there's a list of objects you have to find in a very cluttered scene. When you click on the object, it flies to your inventory. In particular, if the object was partially obscured by the scenery or another object, it would appear unobscured (think "in the foreground") while it flew to the inventory.

To do this, we had a static background with a bunch of "filler" objects, but no "target" objects. Then, for each "target" object, we had a partial (P) and a full (F) image. We'd show the P image of every object, then when the player clicked it, we'd show the F image and animate it to the inventory.

What the tester was reporting was that there was a handbag that, when clicked, turned into a banana.

The root cause was again trivial. For some reason, the artist had made a naming mistake while exporting assets, so we had a P asset of the handbag, but its matching F asset was a banana.

\-----

"The most difficult to debug" was at Improbable. In the very early days, part of the world simulation code used Scala and Akka, with a pubsub system (this has been rewritten using more sensible technologies and architectures). During one of our nightly stress tests, we had a bunch of entities essentially walking the extents of the world, looping endlessly for hours. And after hours of running, some entities (but not all) would get stuck, as in "stopped moving", at the boundary of two contiguous simulation regions (still very likely in the same machine).

What followed was a three-week investigation that truly tested my sanity. This was a massively distributed system, and the bug was very hard to reproduce. I spent countless hours staring at logs, diffing logs from "good" runs and "bad" runs, trying to reduce the scenario to isolate the bug. Everything was suspect at some point or other, from our pubsub implementation, to the implementation of hash maps in the Scala standard library.

In the end it turned out to be an extremely subtle race condition in some cache somewhere in the pubsub subscription and desubscription logic. It took 3 weeks of suffering, doubting my own sanity, and being tempted to abandon it (at that point, we were considering just rewriting a big chunk of the code, just to nuke this bug from orbit). I'm glad I persevered and fixed it - <USER2> would have haunted me to this day if I hadn't. I still remember its name, and I probably always will. F __* you, ENG-168.

</comment><comment><USER29> Long story short: Unexpected OpenSSL hard crashes in our application. Turns out our HW was reporting support for unaligned access where as it was actually disabled in CPU due to buggy hw (arm platform).

</comment><comment><USER4> > Most people like to regale war stories of a particular missing semi-colon

I'm curious if anyone has any real stories of a missing semicolon causing a problem in their running software.

<comment><USER30> Not a semi-colon but -

Setting up a GPO to push Microsoft updates to clients in an AD domain, I spent ~8 hours debugging why the clients couldn't connect to the WSUS server. It turned out that there was trailing whitespace in the server URL text field that was getting parsed.

As a side note, this type of story IMO doesn't actually play that well in interview situations.

<comment><USER31> Everytime I receive input from a human source I remove leading and trailing whitespace. (I have never had a situation where it was needed)

Far too many instances of copy/pastes including those bloody things.

</comment></comment></comment><comment><USER32> Debugging often takes more time than necessary because of flawed assumptions. When you assume something can't be related and you don't test the theory, you may end up in a path that will lead you nowhere. I learned over the years to behave in a naive way and always check the assumptions first. That led me to more successes in solving hard bugs than coworkers who I consider smarter than me.

</comment><comment><USER33> Has anybody here solved their actual bugs with record & replay technology, aka reverse debugging, like Undo, rr, MS TTL etc? Would love to hear the stories.

</comment><comment><USER34> Old gcc/g++ doesn't assure the thread safety of static variables. And I have a core dump triggered by it.

</comment><comment><USER35> If an interviewer asked you what you're hardest bug is and you mention a missing semicolon, he should probably just stop the interview right there.

<comment><USER36> A missing semicolon has an entirely different connotation for C programmers and Lisp programmers.

<comment><USER35> Well if you're missing a semi-colon in a Lisp program and can't figure it out then you _really_ have some problems.

<comment><USER37> Missing semicolon:

      (foo bar))
               ^

Loads now:

      (foo bar);)</comment></comment></comment></comment>


Show HN: Control IKEA Lights Using Google Home and IFTTT - <AUTHOR> https://github.com/valenting/node_tradfri_ifttt <comment><USER2> I don't mean to diminish the work done here, but I can't bring myself to use any home automation that relies on internet and 3rd party services. The whole "I can't turn off my lights/adjust my thermostat/close my garage door because the internet is down" is a cliche these days, but also reality when you use services like these.

There's a difference between core and nice to have services (eg, ability to tell you the weather), but I consider light, door, and temperature control to be "core": having a dozen separate points of failure is just bad design. You could consider voice control nice-to-have, but if it works well, I have a feeling it would move to being core. If it doesn't work well enough to be used all the time (and thus irritatingly missed when it's broken), why bother?

I'm aware of Mycroft; anyone have experience with it or alternatives?

<comment><USER3> I guess if it doesn't work for you, you should skip the thread so as not to drown out the effort.

Someday someone might come along and build the thing you want. Perhaps they will build on this project.

<comment><USER4> His criticism is reasonable. There is a line between valuable criticism and pointless negativity. The latter deserves the "if you don't like it, go away" response. The former does not. The line is fuzzy, so err on the side of leniency.

Now, if there is a flaw in the criticism, address that, not the mere fact that it is criticism.

<comment><USER3> It's like people who jump in an a discussion about electric vehicles then filling the comments with "I won't buy one until the range increases". Their criticism is also legitimate.

People should simply realize the product isn't for them.

<comment><USER4> That's also a reasonable response and if I had a conversation about EVs with a large group of friends, I would expect one of them to make that comment. I would not expect the person with that sentiment to simply walk away rather than engage.

<comment><USER3> But everyone already knows they have limited range. You aren't adding to the online conversation. You aren't going to change anything.

Often in long conversations, people chime in without reading the conversation and several people make the same "observation".

In this conversation, we know there are downsides to cloud-based voice recognition. Telling someone who built it that it's not for you, doesn't add any value.

<comment><USER4> > _But everyone already knows they have limited range. You aren't adding to > the online conversation. You aren't going to change anything._

Realistically everything in this hypothetical conversation will be things that "everyone" knows. Unless you're discussing confidential info about EVs, everything is by definition public knowledge and probably even common knowledge. Most conversations are about opinions rather than facts.

Is the guy who comments about EVs having all their torque available from a standstill also adding nothing to the conversation? What about the guy who mentions the environmental friendliness? Or the one who mentions the environmental costs of lithium mining? Who is really adding to the conversation here?

> _In this conversation, we know there are downsides to cloud-based voice > recognition. Telling someone who built it that it's not for you, doesn't add > any value._

And yet it's the top comment and the top reply provides info about a platform that doesn't have the same drawback. I think this is pretty clearly value added.

<comment><USER3> When you read the comment about short range and the environmental impact of the batteries, they're often highly upvoted by people that dislike electric vehicles too.

So, my point about someone drowning out someone's project is proven by the top-rated comment about how it doesn't work for them.

<comment><USER4> So you're just going to pretend that the top comment doesn't have a useful and relevant reply?

<comment><USER3> Snips? It has been submitted 5 times this week. E.g.

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

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

<comment><USER4> Yes. I don't know if Snips is any good but it seems extremely relevant and the "I won't use remote automation" comment led clearly to the posting of Snips in this conversation.

Putting aside Snips for a moment, my point with my last comment was to note that you took the "upvotes aren't a meaningful indicator" tangent and ignored the rest of the reply. You ignored the fact that the criticism led to a meaningful reply and did in fact contribute to the conversation. You also ignored my questions about what constitutes actual contributions to a conversation. Is it just positivity? Because most of the positive stuff people post is still not new and it seems unreasonable to me to claim that criticism is at heart not contributing to the conversation while fanboyism is.

<comment><USER3> Hey, good for the Snips developer to get another chance to promote his project again.

Hopefully, both projects get a few more people involved.

<comment><USER4> Hope so

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER5> One of the most amazing things about TRÅDFRI is that it's actually well- designed. The software is minimalistic, and designed for security by default, it's fault-tolerant, and it's local by default.

A massive contrast to the silicon-valley node.js on each lightbulb products, reliant on cloud servers, with analytics everywhere; or the cheap chinese unsecured lightbulbs that are just days after purchase infected with Mirai.

A welcome change, indeed.

<comment><AUTHOR> I agree. I also really appreciate the build quality in the remote.

I am a bit disappointed by their slowness in supporting Google Home by default - hence my project. It would be a lot better if they actually open-sourced the code for the gateway.

</comment></comment><comment><USER6> Nice. I use Home Assistant for my Home Automation setup. [https://home- assistant.io/](https://home-assistant.io/)

[Over 1,000 components]([https://home-assistant.io/components/](https://home- assistant.io/components/)) are available with more added daily, including [IKEA Tradfri lights]([https://home- assistant.io/components/tradfri/](https://home- assistant.io/components/tradfri/)).

My Home Assistant config files can be found at [https://github.com/brianjking/homeassistant- config](https://github.com/brianjking/homeassistant-config) if you're interested.

Cheers!

<comment><USER7> If you are using Home Assistant and you want a free, open-source and 100% on- device solution to build a Voice AI you can take a look at what we build at Snips [https://snips.ai](https://snips.ai)

You can build your Voice AI in English, French, German, and soon Japanese and Korean, with more European languages coming

It runs on a Raspberry Pi 3 and will be 100% free for makers

<comment><USER8> Perhaps I didn't search well enough, but is there a way to buy a ready-made snips device? Like I would buy an Amazon Echo?

I'd be keen to use something like Snips instead of Alexa, but I'm not too sure I have the time and energy to solder things, or even just attach wires to some connector... Or even just figure out which part to order from where... And I already have a pi3 running Home Assistant.

To me this is the biggest barrier of entry.

The 2nd one (which is the same pretty much), is convincing my wife to replace this thing[0] with this thing[1], and also preventing my 4 year old from messing with the wires...

[0] [http://d2ydh70d4b5xgv.cloudfront.net/images/e/1/new-echo- dot...](http://d2ydh70d4b5xgv.cloudfront.net/images/e/1/new-echo-dot-2nd- generation-white-alexa-voice-amazon-ready-original-tv-w- media-5aef1950bef6e89144b47aa2337f7c4e.jpg)

[1] [https://i.vimeocdn.com/video/660238369_640.jpg](https://i.vimeocdn.com/video/660238369_640.jpg)

(please don't take it the wrong way, I really want Snips to win over proprietary cloud-based solutions)

<comment><USER7> We are working on this! You can buy any Raspberry Pi 3 and we have tutorials to show common hardware to use, but soon there will be a maker kit you can get from us too!

We recommend a Raspberry Pi 3 and a ReSpeaker2 microphone there is a list of materials you can find on this blog post, and please subscribe to our newsletter to learn about the kit

[https://medium.com/snips-ai/building-a-voice-controlled- home...](https://medium.com/snips-ai/building-a-voice-controlled-home-sound- system-using-snips-and-sonos-2aaf16523ce9)

</comment></comment></comment></comment><comment><USER9> This is super cool! To be honest, I think the easier way to do this is using the Hue Hub, which can connect to Tradfi AND integrates directly with Google Home

</comment><comment><USER10> Or just use a Hue hub</comment>


Show HN: Reorganize pixels of a painting into a smooth color palette using PCA - <AUTHOR> https://github.com/ardila/paintingReorganize <comment><AUTHOR> Shameless plug/relevant background: I did this in order to make a flyer for a show I am playing with my band Congratulatinos in Oakland, CA on Dec. 17th Band: [http://congratulatinos.bandcamp.com/](http://congratulatinos.bandcamp.com/) Event: [https://www.facebook.com/events/661571907356009/](https://www.facebook.com/events/661571907356009/)

<comment><USER2> I opened a small PR - scipy was missing as a requirement (I'm guessing you already had it installed, and didn't stick it in requirements.txt)

<comment><AUTHOR> thanks. right on all counts.

</comment></comment></comment><comment><USER2> I think there's a bug in there that flipped a few columns - but I actually really like the output better that way: [http://imgur.com/RErXOF6](http://imgur.com/RErXOF6)

<comment><AUTHOR> That is weird. It decides to flip a column by summing up the vector distances between the pixels in that column vs. the pixels in the previous column. I'm wondering if that since there is so much gray in the painting, this causes a large accumulation of error in gray vs. slightly different gray which outweighs the orange vs gray.

I do know that euclidean distance in RGB space is not that great a metric for perceptual similarity. Perhaps everything should be done in YUV instead? I will try tonight. Thanks.

<comment><USER3> I recommend you to try the LAB color space and to use delta E 94 [1] for computing distances between colors in the color space

[1] [https://en.wikipedia.org/wiki/Color_difference#CIE94](https://en.wikipedia.org/wiki/Color_difference#CIE94)

</comment></comment></comment><comment><USER4> The colors in that image seem super bright compared to the original.

[https://www.moma.org/collection/works/79971?locale=en](https://www.moma.org/collection/works/79971?locale=en)

<comment><AUTHOR> The output for that version of the painting looks similar. I just image searched for "kupka" and tried a few different results.

Result for your image: [http://imgur.com/fp9i8BP](http://imgur.com/fp9i8BP)

Do you think I should update the repo with this version?

<comment><USER4> I do, only because it's from the institution that actually owns the real painting. Museums try pretty hard to get colors right on the digital images that they put online. And since the project is about color, it seems like an important detail. Thanks for being open to my nitpicking. Very cool project.

</comment></comment></comment><comment><USER5> Made somewhat similar project by organizing pixels in three dimensional space of HSL (hue saturation lightness) color model: [http://www.pixelbox.com/colorclouds/](http://www.pixelbox.com/colorclouds/)

Note that this reduces identical pixels into one point in 3D space. The key idea behind the experiment was to learn more about the palettes used by painters.

</comment><comment><USER6> I love pixel sorting! I had seen it done by rows or cols before, but never the whole thing, and the result is beautiful.

</comment><comment><USER7> I'm curious where the noise is coming from, as some pixels appear to be out of place.

<comment><AUTHOR> Yes: it seems to be for colors where they are similar to two or more other clusters of pixels. I imagine that these are just really hard to place without seeming too out of place? Also probably has to do with the column by column "greedy" approach that isn't really global.

</comment></comment><comment><USER8> In one Iain M Banks story, it is mentioned that a character was ordered not to destroy a library, so he had all the paintings given the treatment provided by this software and all the books cut up and arranged so that individual letters were in alphabetical order.

</comment><comment><USER9> My first thought was "paintings don't have pixels"; but colour is quantised I guess. I wonder how many pixels you need to get the same graduation between color tones as the original image, presumably enough to provide atom level resolution.

<comment><USER10> I believe the term you want is "discretized", not "quantized". They're quantized too, but that's about there being a finite number of shades rather than a finite number of subdivisions of the image.

</comment></comment><comment><USER11> As a graphic designer turned data scientist, that is the coolest poster art backstory I have ever heard.

</comment><comment><USER12> Are there any more examples?

<comment><AUTHOR> I just put up 3 more. Starry night turned out very nicely. Anything you'd like to see in particular?</comment></comment>


Math Blaster Copy Protection - <AUTHOR> https://ia802301.us.archive.org/11/items/MathBlaster4amCrack/Math%20Blaster%20%284am%20crack%29.txt <comment><USER2> I remember this one. I successfully extracted the data from this disk back in the day, but using a much less complicated method. My memory is a bit hazy after 30 years, but basically it went like this:

Reboot, let it load for a few seconds, then open the disk drive door. It will print "I/O ERROR" and drop to the basic prompt. At this point, the autorun flag is set, but you can clear it by typing "FP". Close the disk drive, then you can load any of the basic programs and list them. If you look through the listings, you will find some CALLs, which switch the RWTS. So I just loaded the files, switched the RWTS, and saved them to a normal disk. Ta-da!

<comment><USER3> Did you read the whole article? What about the calls from the program itself which check that you are running the modified DOS? Might you be confusing this with another copy protected program?

<comment><USER2> I was running the modified DOS. Initially I booted the Math Blaster disk and ran from there. Later I realized I could boot normal DOS, and then swap the DOS in memory. I don't recall if I had to mess with zero page. I think those calls did it automatically, but I don't remember.

This also explains why the BASIC programs were obfuscated. Once you find the calls to switch the RWTS, the rest is easy. Getting around the obfuscation wasn't too hard though. I just ran the program and then interrupted it.

I do suspect that I had a different version. The directory listing looks a bit different, and I don't recall so many control characters in the filenames. It's possible that they published an updated version with more obfuscation (although it's also possible that I've just forgotten after so many years).

As as aside, I wasn't primarily interested in reverse-engineering the copy protection when I did this. I was more interested in their graphics drivers. The program had a thing where it would override the standard functions for drawing characters to the screen, so you could use the standard PRINT command and instead of using text mode, it would draw bitmapped characters into the graphics page. I thought it was rather clever.

</comment></comment></comment><comment><USER4> From the link mentioned in another comment as a more stable and permanent URL: ""Math Blaster" is a 1983 educational game programmed by Richard Eckert and Janice Davidson, Ph.D. and distributed by Davidson & Associates."

Wow. The timing of this post was opportune, because just yesterday I had a chance to see (again) Bob Davidson, the husband of Janice (Jan) Davidson and a leader of Davidson & Associates, at a meet-up of alumni of various Davidson Institute for Talent Development[1] programs for young people. The Math Blaster software was an early example of successful edutainment software, and it led to quite a bit of revenue that funded other software titles developed in-house or acquired over the years by Davidson & Associates.

Jan and Bob Davidson timed the Dot Com boom perfectly in choosing a time to leave active management of Davidson & Associates and begin funding philanthropy, which for them has been most devoted to developing programs for unusually bright young people in the United States. The best-known program of the Davidson Institute is the Davidson Fellows program,[2] which gets in the news at least once a year as new Davidson Fellowship awards are announced,[3] but the biggest program by number of young people involved is the Davidson Young Scholars program,[4] which includes several alumni and I think some current members who are active participants here on Hacker News.

We talk here on Hacker News about some other software entrepreneurs who get in the news a lot these days for their philanthropic efforts, but I thought I should give a shout-out to one of the early adopters of a career change to full-time philanthropy funded by a software fortune, the Davidsons, because their philanthropy has a direct influence on the Hacker News community.

[1] [http://www.davidsongifted.org/](http://www.davidsongifted.org/)

[2] [http://www.davidsongifted.org/fellows/](http://www.davidsongifted.org/fellows/)

[3] [http://www.davidsongifted.org//fellows/Article/Davidson_Fell...](http://www.davidsongifted.org//fellows/Article/Davidson_Fellows___Class_of_2014_505.aspx)

[4] [http://www.davidsongifted.org/youngscholars/](http://www.davidsongifted.org/youngscholars/)

</comment><comment><USER5> Maybe a better (more stable) URL: [http://archive.org/download/MathBlaster4amCrack/Math%20Blast...](http://archive.org/download/MathBlaster4amCrack/Math%20Blaster%20%284am%20crack%29.txt)

Alternatively: [http://archive.org/stream/MathBlaster4amCrack/Math%20Blaster...](http://archive.org/stream/MathBlaster4amCrack/Math%20Blaster%20%284am%20crack%29.txt)

</comment><comment><USER6> From back when text screens were 40 characters wide!

<comment><USER7> Interestingly, the text itself is modern (at the very least, it mentions a Google Groups URL), but it's still wrapped at 40 columns.

I find that very nostalgic for some reason, and it doesn't seem to hurt readability at all.

<comment><USER3> In fact it improves readability. This is why news columns are not wide.

</comment></comment></comment><comment><USER8> Interesting how the app store era (especially in Apple's ecosystem) has made it much more difficult to copy software.

I remember in '80s and '90s copy protection was a major focus (for software companies and legislators alike). As a kid of that era, I remember looking for cracks on Usenet and FidoNet.

More info on Copy Protection here: [http://en.wikipedia.org/wiki/Copy_protection#1980s_Locksmith](http://en.wikipedia.org/wiki/Copy_protection#1980s_Locksmith)

<comment><USER9> Honestly, it's not particularly difficult to copy programs from the app store. With a jailbroken phone, you can just grab an app off the phone's file system.

I think the real difference is the constant, relentless change in platforms presented to mobile phone consumers. Every year, it's a new phone, a major operating system upgrade, or something else disrupting the ecosystem, so that no out-of-band trade in raw files can take root.

When you have a zombie fanbase chasing the latest glitter, and disruptive changes introduced every six months, it's tough to gain traction when you have expend so much energy just to keep up with the herd.

<comment><USER10> Not to mention that in that era, titles were often US$39, $49 (or more) and in today's dollars that would be much higher. Compare to most apps on the app store that are typically $4.99 or less... certainly makes paying for titles a lot more palatable for the would-be pirate.

<comment><USER11> ... and that today's $4.99 is actually something like $1-$2 in 80's dollars.

</comment></comment></comment></comment><comment><USER12> > According to the framed Beagle Bros. "Peeks, Pokes and Pointers" chart that > hangs above my desk and reminds me that technical writing should be > wondrous, useful, and fun (but not always in that order)...

I think this is the chart he's referring to: [http://www.lazilong.com/apple_II/bbros/chart.jpg](http://www.lazilong.com/apple_II/bbros/chart.jpg)

</comment><comment><USER13> Where can I find the code to fire up in an emulator?

<comment><USER14> [https://archive.org/details/MathBlaster4amCrack](https://archive.org/details/MathBlaster4amCrack)

Sadly, it isn't currently runnable in the browser, but I'm sure that will be fixed soon.

</comment></comment><comment><USER15> This is a level of dedication I fear we lost somewhere in the 90s. That, or being a cracker teaches you more about how computers work than most jobs.

</comment><comment><USER16> I especially love where the author likens resuming a crack attempt after giving up for months to a detective picking up a cold case.

</comment><comment><USER17> Wow. Impressive work and dedication!</comment>


Box: The Path to IPO – EquityZen - <AUTHOR> https://equityzen.com/blog/box-path-to-ipo/?utm_source=hackernews&utm_medium=blog&utm_campaign=BlogPost <comment><USER2> Unreal returns for early investors although the same can't be said for the later stage players</comment>


Show HN: RNN that generates Game of Thrones text - <AUTHOR> https://www.github.com/zackthoutt/got-book-6 <comment><USER2> You need to take down the data folder now and rebuild the repository. You're going to get hit with a DMCA notice. It's not a matter of IF, it's a matter of WHEN. Publishers of popular book series don't take these matters lightly.

<comment><USER3> Why do the copyright mafia's work for them? Let them pay their lawyers first, THEN take the data down. Money is the only language these people understand, so let's force them to spend as much of it as we can.

<comment><USER4> This guy is distributing entire books. You think that's ok?

<comment><USER3> Sure. What harm is it causing?

<comment><USER4> Really? You don't think theft is an appreciable and measurable societal harm? You honestly have no problem whatsoever with outright ripping off these works? I'd love to hear your defense of that position.

It's not like we're talking about situations like cable where I have to pay $100 / month to watch one or maybe two shows I enjoy and have no other way to get access at a reasonable price (and even that is debatable). You can pick up a copy of GRRM's work for < $10 without hassle and contribute back to someone whose work gives you joy and the publishers who got that work into your hands.

<comment><USER3> It's not theft, it's copyright violation, and no, I don't think it's a societal harm. Nobody is being deprived of anything, because digital goods are non-rivalrous.

The author of this project is riffing on an older creative work to make a new creative work, exactly as artists did for all the millenia of human civilization, until lawyers got involved in the 20th century and fucked it all up.

<comment><USER4> You're right; theft is a legal term, and it's not technically theft, it's a copyright violation as you say. They rest is your opinion. If I intended on buying the book and instead downloaded it for free I am absolutely depriving the copyright holder of income. I'm far from a hard-liner on this but, in this instance, I believe it's wrong to download these books and read them. If you want the book go ahead and pay for it.

As far as the project goes, the author should not be bundling the books with everything else (common sense and debatable moral issues.) I have no issue with him using the texts, it's the distribution that's a problem.

</comment></comment></comment></comment></comment></comment></comment><comment><USER5> It should be noted that per the included Jupyter Notebook, the resulting network took _24 hours_ to train, and the resulting network (of a 3-layer 512 cell LSTM) would be hundreds of MB. (too much to share on GitHub anyways).

The approach in the repo also uses a word-based approach instead of a character-based approach. Although a word-approach avoids typoes/nonsense, it makes prediction much more difficult since the selection space is harder. (from notebook, error is high as well). There are lots of trade offs in this field.

Training these networks is not for the faint of heart and one of the reasons I developed a tool to train text generators using a pretrained RNN ([https://github.com/minimaxir/textgenrnn](https://github.com/minimaxir/textgenrnn)) on a much more simple network architecture that trains quickly, although it probably would not hit the depth of all of Game of Thrones.

<comment><USER6> It does seem like a lot of work to get output that looks like something from a simple Markov chain.

<comment><USER7> Phrase generation doesn't work well without any constraints. For example, in translation a similar system can generate decent text.

</comment></comment></comment><comment><USER8> This is hilarious! We did a similar project last year using the scripts from the show. [http://docs.pachyderm.io/en/latest/examples/tensor_flow/read...](http://docs.pachyderm.io/en/latest/examples/tensor_flow/readme.html)

Ours was not nearly as comprehensible, but still funny at points. Some example output:

{{ Stannis runs away and Melisandre walks through the lift door , no smiles) . }}

[ TYRION ]: I wanted him to be a spoiled Greyjoy again , that 's your niece . And you 're a terrible man . My little Give me A_VOICE . .

{{ The HIGH SPARROW sits down on the bucket , DORAN sentences to have waiting to the shoulder , wearing this building . She wargs off the woods and approaches The sound of the riders . BLACK WALDER reaches over his horse beside MARGAERY . }} .

[ EDMURE ]: We 're among The Khaleesi . .

[ JORAH ]: For far soon . .

[ SANSA_STARK ]: He 's travelling a true vow to command until his father 's death.

[ DAVOS ]: I don 't mind , Your Grace . I got to build your place and see rolled women in all of their fanatics And so I getting another conversation , watcher ships in the matters of the dead as gods of Westeros .

<comment><AUTHOR> Haha, that's awesome! I was thinking about trying to combine the scripts and book text so that I can train on more data.

</comment></comment><comment><USER9> If you're using TF 1.2.1 or above, you want to replace this line:

cell = tf.contrib.rnn.MultiRNNCell([drop_cell] * num_layers)

with:

cell = tf.contrib.rnn.MultiRNNCell([create_cell() for _ in range(num_layers)])

otherwise you'll be using the same weights for each LSTM layer and your model is less expressive.

<comment><AUTHOR> Yep, I was using TF 1.0.0. I will probably upgrade in the future and will keep this in mind.

</comment></comment><comment><USER10> The RNN seems to agree with the most popular fan theory about what will happen with Jaime and Cersei. So, it's not entirely crazy.

Nonetheless, I don't think GRR Martin has to worry about competition from RNN Martin anytime soon, but this is still quite fun, and surprisingly almost cogent at times.

</comment><comment><USER11> That data folder seems ripe for a DMCA takedown request.

</comment><comment><USER12> You really should not upload other people's complete works while under copyright.

Edit: Nice License

> Copyright (c) 2017 Zack Thoutt

</comment><comment><USER13> I would like to see a TV comedy - perhaps in the vain of Who's Line Is It Anyways - where actors act out these NN scripts.

<comment><USER14> I guess this is close: [https://www.youtube.com/watch?v=LY7x2Ihqjmc](https://www.youtube.com/watch?v=LY7x2Ihqjmc). It's a script written by an RNN acted out as a short sci-fi film, and Thomas Middleditch is in it.

Don't expect too much, though. I was reading an article on it and was excited to watch it, but it's too incoherent, in the usual fashion of today's RNNs.

<comment><USER15> I wonder what an RNN could generate for an episode of Twin Peaks.

</comment></comment></comment><comment><USER16> Game of Thrones is the TV series, A Song of Ice and Fire is the book series.

</comment><comment><AUTHOR> A message to all of the vigilantes on HN: I'm sorry that the GOT text ended up in the repo. I actually worked on this project about a month ago and after showing it to a few friends, they convinced me to share it. I didn't think about what I had committed to the repository when I made it public and shared it. This is the first project I have ever shared on HN, so I didn't expect so many people to see it.

I actually tried to remove the text within the first few hours of posting (I was not even home or with my computer), but I removed the text in a separate branch and when I merged it into master it created duplicates of every commit instead of removing the text from the git history. Someone put up an issue on Github later that night and I fixed my mistake early the next morning.

I own all of the ASOIAF books both in paperback and ebook and pay for an HBO subscription for the sole purpose of watching GOT for 6-10 weeks per year.

</comment><comment><USER17> With Markov Chains:

"Raved on fire, he clambered up her pallet in a swatch of blood and crept toward him shudder. She was too well Ghost back behind their crews could not lack for the warg could stand guard. The singers was a fire with our beds they could have won that make yo, tell Joffrey awarded to make repairs and threatening to my sons had entered the flesh. A life and a dim his promises of Eddark Stark, he announced the foundation and set sail cracking their wounded and bucket swayed back room to go go. Har Tormund Well the Bastard s home When the Others followed him a fine rule the better look stupid. She could see the same only empty sockets weeping child he ran with that morning. His nose Wife pleased to the man with winter s notion. My brother will never lifted a scare me wise where."

</comment><comment><USER18> So, what are the odds that we'll have an AI that writes at GoT quality before George finishes the last book?

<comment><USER19> Lower than the odds that George never finishes his last book.

</comment></comment><comment><USER20> I wonder if there are any forums/fan fiction websites where you could find big chunks of prose to add to the training data. Might help bring the loss down a bit if you mix some in.

<comment><USER19> fanfiction.net undoubtedly has a ton, but I wouldn't rely on the quality or style of writing being similar.

Maybe not yet a concern for this project.

</comment></comment><comment><USER21> This is amazing. I wonder if it'd be possible to actually get a coherent plot out of it while retaining the humorous aspects of it.

<comment><AUTHOR> Ya, I'm going to continue to tune it and try to get a more coherent plot. I think that I will have to (at a minimum) make the sequence length really long, which will make training time even slower.

</comment></comment><comment><USER22> Nice! I did a similar thing with a character-based rnn a few years ago, but its output was less coherent. I liked when it started spitting out character descriptions though: "NOTHAN, a boy of nine, cupped and dismal,"

[https://twitter.com/asoiaf_ebooks](https://twitter.com/asoiaf_ebooks)

</comment><comment><USER23> I'd like to see a trailer video generated for the next series

</comment><comment><USER24> Hah, I built something similar a while ago (with a pretty front-end): [https://asoiaf.now.sh/](https://asoiaf.now.sh/)

</comment><comment><USER25> You definitely need to add an attention mechanism if you want better-than- markov-chain results.

Found a project ;)</comment>


Why Mac users should say good things about Windows 7. - <AUTHOR>

A huge advantage in using a Mac is not worrying about viruses. But this situation will change if the Mac gets a much larger market share.<p>For this reason, it is in the best interest of Mac users to say good things about Windows 7. <comment><USER2> It's a fallacy that OSX has less viruses due to market share. The reason there's virtually no viruses is because there's separation of privilege on OSX. You don't run as administrator the way you do commonly under Windows.

<comment><AUTHOR> But this problem was fixed in Vista.

<comment><USER3> Yeah, I love Vista thinking I'M the virus. grr.</comment></comment></comment>


Anatomy of Linux dynamic libraries - <AUTHOR> http://www.ibm.com/developerworks/linux/library/l-dynamic-libraries/index.html <comment><USER2> This is interesting, but thin. Those truly interested in the implementation details of ELF shared libraries on linux should read Ulrich Drepper's whitepaper:

<http://people.redhat.com/drepper/dsohowto.pdf></comment>


Traffic analysis WhatsApp's end-to-end encryption (2015) - <AUTHOR> http://www.heise.de/ct/artikel/Keeping-Tabs-on-WhatsApp-s-Encryption-2630361.html <comment><USER2> The core problem is now fixed. You can see if the conversation is encrypted or not.</comment>


Attack GoDaddy - better than a boycott - <AUTHOR> https://plus.google.com/115702843161763309837/posts/2QqAe6xP7Xk

<comment><AUTHOR> Update:

GoDaddy's page rank is now 7 NameCheap's page rank is now 6

My two sites puny sites that now direct "Domain Registration" to NameCheap are ranked 5.

It doesn't take much folks, but we really need site owners adding the link to their footers to have an effect. I think if 20-30 sites with even a slight page ranking joined in, it would work.

Please add this html to your pages: Domain](http://www.namecheap.com>Domain) Registration and share this post with anyone you can.

<comment><USER2> Your cookies or location might be affecting the result order.

I'm in the SF bay area and, with a cookieless Chrome incognito window, I see GoDaddy as result #1 and NameCheap as result #4 — _after_ three sponsored results, one of which is also GoDaddy.

</comment></comment><comment><USER3> You got a mention on yahoo news: <http://news.yahoo.com/daddy-really- screwed-152315768.html> via The Atlantic Wire [http://www.theatlanticwire.com/politics/2011/12/go-daddy- rea...](http://www.theatlanticwire.com/politics/2011/12/go-daddy-really- screwed/46666/)

</comment><comment><USER4> You're on wikipedia. [http://en.wikipedia.org/wiki/Go_Daddy#Backing_of_SOPA.2C_and...](http://en.wikipedia.org/wiki/Go_Daddy#Backing_of_SOPA.2C_and_resultant_boycott)</comment>