You are hereFeed aggregator

Feed aggregator


Car Wars: a dystopian science fiction story about the nightmare of self-driving cars

Cory Doctorow - 2016, November 23 - 09:24

Melbourne’s Deakin University commissioned me to write a science fiction story about the design and regulation of self-driving cars, inspired by my essay about the misapplication of the “Trolley Problem” to autonomous vehicles.


The story, Car Wars, takes the form of a series of vignettes that illustrate the problem with designing cars to control their drivers, interspersed with survey questions to spur discussion of the wider issues of governments and manufacturers being able to control the operation of devices we own and depend on.

It’s pretty much the most beautiful treatment any of my stories has ever had online, and I love how it’s been embedded in a wider context.


– PLAUSIBLE DENIABILITY –

‘We’re dead.’

‘Shut up, Jose, we’re not dead. Be cool and hand me that USB stick. Keep your hands low. The cop can’t see us until I open the doors.’

‘What about the cameras?’

‘There’s a known bug that causes them to shut down when the LAN gets congested, to clear things for external cams and steering. There’s also a known bug that causes LAN traffic to spike when there’s a law-enforcement override because everything tries to snapshot itself for forensics. So the cameras are down inside. Give. Me. The. USB.’

Jose’s hand shook. I always kept the wireless jailbreaker and the stick separate – plausible deniability. The jailbreaker had legit uses, and wasn’t, in and of itself, illegal.

I plugged the USB in and mashed the panic-sequence. The first time I’d run the jailbreaker, I’d had to kill an hour while it cycled through different known vulnerabilities, looking for a way into my car’s network. It had been a nail-biter, because I’d started by disabling the car’s wireless – yanking the antenna out of its mount, then putting some Faraday tape over the slot – and every minute that went by was another minute I’d have to explain if the jailbreak failed. Five minutes offline might just be transient radio noise or unclipping the antenna during a car-wash; the longer it went, the fewer stories there were that could plausibly cover the facts.

But every car has a bug or two, and the new firmware left a permanent channel open for reconnection. I could restore the car to factory defaults in 30 seconds, but that would leave me operating a vehicle that was fully uninitialised, no ride history – an obvious cover-up. The plausibility mode would restore a default firmware load, but keep a carefully edited version of the logs intact. That would take three to five minutes, depending.

‘Step out of the vehicle please.’

‘Yes, sir.’

I made sure he could see my body cam, made it prominent in the field of view for his body cam, so there’d be an obvious question later, if no footage was available from my point of view. It was all about the game theory: he knew that I knew that he knew, and other people would later know, so even though I was driving while brown, there were limits on how bad it could get.

‘You too, sir.’

Car Wars [Cory Doctorow/Deakin University]

Categories: Blogs

I’m helping launch Echoes of Sherlock Homes at LA’s Chevalier Books tomorrow night

Cory Doctorow - 2016, November 15 - 15:29

In 2014, lawyer and eminent Sherlockian Les Klinger comprehensively won the legal battle to establish that Sherlock Holmes is in the public domain and available for anyone to use, abuse, alter, celebrate or mock; now with a new anthology of completely unauthorized Sherlock tales, Echoes of Sherlock Holmes, Klinger and co-editor Laurie R. King have shown just how much life there is in the old tales.

I’m one of the contributors to the anthology. My story, “Sherlock Holmes and the Adventure of the Extraordinary Rendition,” uses the Snowden documents I was the first to publish as the basis for a cautionary tale about surveillance, secrecy and corruption.


It’s just one of 17 stories in Echoes, which has been getting rave reviews since its launch earlier this month.

Tomorrow (Wednesday) night at 7PM, three of us authors (Gary Phillips, Anne Perry and me), as well as Les Klinger, are gathering at Los Angeles’s Chevalier Books for a launch, signing, talk, Q&A and reading.

I hope you’ll join us!

If you’re based in the Valley, have no fear: we’ll be doing a second event on December 10 at Burbank’s Dark Delicacies.

Foremost Sherlockian Les Klinger Sounds The Depths with Echoes of Sherlock Holmes’ Contributors Cory Doctorow, Gary Phillips and Anne Perry [Chevalier Books]

Categories: Blogs

Sole and Despotic Dominion: how a 20th century copyright law is abolishing property for humans (but not corporations)

Cory Doctorow - 2016, November 3 - 15:40

In the 18th century, William Blackstone wrote the seminal “Commentaries on the Laws of England,” which contained one of the foundational definitions of property: “that sole and despotic dominion which one man claims and exercises over the external things of the world, in total exclusion of the right of any other individual in the universe.”

Today, software enabled devices can and are controlled by their manufacturers long after they’ve been sold on to customers, and laws like Section 1201 of the DMCA make it a crime to prevent this kind of meddling. This allows companies to force their customers to arrange their affairs to the maximum benefit of the manufacturers’ shareholders, not their own, and to punish customers for taking steps that thwart the manufacturers’ business models.


In my latest Locus column, Sole and Despotic Dominion, I describe how this is a kind of new feudalism, in which the only “people” who have sole and despotic dominion are the artificial life forms known as corporations, and this new aristocracy makes us into tenant farmers of our toasters and thermostats, cars and pacemakers — and I describe how the Electronic Frontier Foundation has launched a lawsuit to make it legal to use your devices in the ways that are most advantageous to you, even if the manufacturers don’t like it.

If you make a gadget with software inside it, you can simply add a thin skin of DRM to it, and configure the device so that the DRM has to be bypassed in order to do anything that lowers your profits. GM uses it to prevent third-party mechanics from diagnosing problems in their cars (and VW used it to prevent independent researchers from discovering that they were cheating on emissions tests). Philips uses it to make sure that you only buy Philips lightbulbs to go in your Philips sockets. Google’s Nest smart thermostats use it to make sure that only they can extend the device’s features, so they can promise power authorities that when the authority turns down your furnace, you can’t turn it back up again.

This is almost too good to be true. Every company has commercial preferences that they wished were legal obligations. Now, thanks to a stupid law from 1998 and the proliferation of cheap computation, every company can make their wish come true.

This is an affront to Blackstone. If the mere presence of a copyrighted work in a device means that its manufacturer never stops owning it, then it means that you can never start owning it. There’s a word for this: feudalism. In feudalism, property is the exclusive realm of a privileged few, and the rest of us are tenants on that property. In the 21st century, DMCA-enabled version of feudalism, the gentry aren’t hereditary toffs, they’re transhuman, immortal artificial life-forms that use humans as their gut-flora: limited liability corporations.

Under DMCA 1201 rules, security researchers who learn of defects in covered products can be threatened, prosecuted, and jailed just for disclosing that the manufacturer made a dumb mistake (the manufacturers get to decide who can embarrass them by revealing those mistakes), meaning that the camera in your living room and the wireless insulin pump your six-year-old is wearing and the Internet connected car you’re driving down the highway every day are all reservoirs of long-lived digital pathogens that criminals are free to discover and exploit, but that security researchers are not able to tell you about.

Obviously, this is a disaster.

Sole and Despotic Dominion [Locus]

Categories: Blogs

MATLAB arithmetic expands in R2016b

Matlab Image processing blog - 2016, October 27 - 12:43

Earlier this summer, I was writing some color-space conversion code. At one point in the code, I had a Px3 matrix called RGB, which contained P colors, one per row. I also had a 1x3 vector, v. I needed to multiply each column of RGB by the corresponding element of v, like this:

RGB_c = [RGB(:,1)*v(1) RGB(:,2)*v(2) RGB(:,3)*v(3)];

But since I was using an internal developer build of MATLAB R2016 (released on September 14), I didn't type the code above. Instead, I typed this:

RGB_c = RGB .* v;

In R2016a and older MATLAB releases, that line of code produced an error:

>> RGB_c = RGB .* v Error using .* Matrix dimensions must agree.

In the new release, though, MATLAB implicitly expands the vector v to be the same size as the matrix RGB and then carries out the elementwise multiplication. I say "implicitly" because MATLAB does not actually make an in-memory copy of the expanded vector.

To read all about this change in MATLAB matrix arithmetic, head over to Loren's Art of MATLAB blog and read my guest post about it.

\n'); d.write(code_string); // Add copyright line at the bottom if specified. if (copyright.length > 0) { d.writeln(''); d.writeln('%%'); if (copyright.length > 0) { d.writeln('% _' + copyright + '_'); } } d.write('\n'); d.title = title + ' (MATLAB code)'; d.close(); } -->


Get the MATLAB code (requires JavaScript)

Published with MATLAB® R2016b

% % >> RGB_c = RGB .* v % Error using .* % Matrix dimensions must agree. % % % % In the new release, though, MATLAB *implicitly expands* the vector |v| to % be the same size as the matrix |RGB| and then carries out the elementwise % multiplication. I say "implicitly" because MATLAB does not actually make % an in-memory copy of the expanded vector. % % To read all about this change in MATLAB matrix arithmetic, head % over to % and read my about it. ##### SOURCE END ##### 0ce5e9e0a7784a8092c9fe8eb5cd4871 -->

Categories: Blogs

Interview with IEEE-USA Insight Podcast

Cory Doctorow - 2016, October 19 - 12:59

I was interviewed for the IEEE-USA Insight Podcast last summer in New Orleans, during their Future Leaders Summit, where I was privileged to give the keynote (MP3)

Categories: Blogs

Talking about Allan Sherman on the Comedy on Vinyl podcast

Cory Doctorow - 2016, October 13 - 07:12

Jason Klamm stopped my office to interview me for his Comedy on Vinyl podcast, where I talked about the first comedy album I ever loved: Allan Sherman’s My Son, the Nut.

I inherited my mom’s copy of the album when I was six years old, and listened to it over and over until I discovered — the hard way — that you can’t leave vinyl records on the dashboard of a car on a hot day.

Our discussion ranged far and wide, over the golden age of novelty flexidiscs, Thomas Piketty, Hamilton, corporate anthems and many other subjects.

http://media.blubrry.com/comedyonvinyl/p/stolendress.com/comedyonvinyl/podcast_episodes/COV_Episode_199.mp3

Episode 199 – Cory Doctorow on Allan Sherman – My Son, The Nut
[Comedy on Vinyl]

Categories: Blogs

Filling holes in outline text

Matlab Image processing blog - 2016, October 10 - 08:01

Intrepid MathWorks application engineer Brett Shoelson recently got a user question that caught my attention. Consider an image containing text characters in outline form, such as this:

url = 'http://blogs.mathworks.com/steve/files/MathWorks-address-binary.png'; bw = imread(url); imshow(bw)

How can we fill in the text characters from their outlines without filling in the internal holes? If we just use imfill with the 'holes' option, you can see that it doesn't give us the desired result.

bw_filled = imfill(bw,'holes'); imshow(bw_filled) title('Original with holes filled')

When I saw this problem, I thought that some combination of imfill, imclearborder, and logical operators could possibly solve it.

You've already seen imfill. Here's how imclearborder works.

url_sample = 'http://blogs.mathworks.com/images/steve/168/aug31.png'; bw_sample = imread(url_sample); imshow(bw_sample) title('imclearborder demonstration - input image') bw_sample_clearborder = imclearborder(bw_sample); imshow(bw_sample_clearborder) title('imclearborder demonstration - output image')

You can see that any connected component touching any image border has been removed.

Going back to our task, I'm going to proceed first by identifying the background pixels that are inside the text characters. Roughly speaking, I'll tackle this phase by working "from the outside in."

First, let's identify and remove the pixels that are external to the characters.

bw2 = ~bw; imshow(bw2) title('Complement of original image') bw3 = imclearborder(bw2); imshow(bw3) title('External pixels removed from the foreground')

Now let's complement the image and clear the borders again.

bw4 = ~bw3; imshow(bw4) title('Complement of bw3') bw5 = imclearborder(bw4); imshow(bw5) title('After second border-clearing')

If we fill the holes in the image bw5 above, and then take the exclusive-or of the result with bw5 we'll be left only with the internal hole pixels inside the characters.

bw6 = imfill(bw5,'holes'); bw7 = xor(bw6,bw5); imshow(bw7) title('Internal hole pixels')

We're almost there. We can now use bw6 to "fix up" the initial filled result, bw_filled, using an exclusive-or operation.

bw_final = xor(bw_filled,bw7); imshow(bw_final) title('Presto!')

Readers, how would you solve this problem? Brett and I think there might be a couple of other reasonable approaches. Let us know in the comments.

\n'); d.write(code_string); // Add copyright line at the bottom if specified. if (copyright.length > 0) { d.writeln(''); d.writeln('%%'); if (copyright.length > 0) { d.writeln('% _' + copyright + '_'); } } d.write('\n'); d.title = title + ' (MATLAB code)'; d.close(); } -->


Get the MATLAB code (requires JavaScript)

Published with MATLAB® R2016b

recently got a user question that caught my attention. % Consider an image containing text characters in outline form, such as % this: url = 'http://blogs.mathworks.com/steve/files/MathWorks-address-binary.png'; bw = imread(url); imshow(bw) %% % How can we fill in the text characters from their outlines without % filling in the internal holes? If we just use |imfill| with the |'holes'| % option, you can see that it doesn't give us the desired result. bw_filled = imfill(bw,'holes'); imshow(bw_filled) title('Original with holes filled') %% % When I saw this problem, I thought that some combination of |imfill|, % |imclearborder|, and logical operators could possibly solve it. % % You've already seen |imfill|. Here's how |imclearborder| works. url_sample = 'http://blogs.mathworks.com/images/steve/168/aug31.png'; bw_sample = imread(url_sample); imshow(bw_sample) title('imclearborder demonstration - input image') %% bw_sample_clearborder = imclearborder(bw_sample); imshow(bw_sample_clearborder) title('imclearborder demonstration - output image') %% % You can see that any connected component touching any image border has % been removed. % % Going back to our task, I'm going to proceed first by identifying the % background pixels that are inside the text characters. roughly speaking, % I'll tackle this phase by working "from the outside in." % % First, let's identify and remove the pixels that are external to the % characters. bw2 = ~bw; imshow(bw2) title('Complement of original image') %% bw3 = imclearborder(bw2); imshow(bw3) title('External pixels removed from the foreground') %% % Now let's complement the image and clear the borders again. bw4 = ~bw3; imshow(bw4) title('Complement of bw3') %% bw5 = imclearborder(bw4); imshow(bw5) title('After second border-clearing') %% % If we fill the holes in the image |bw5| above, and then take the % exclusive-or of the result with |bw5| we'll be left only with % the internal hole pixels inside the characters. bw6 = imfill(bw5,'holes'); bw7 = xor(bw6,bw5); imshow(bw7) title('Internal hole pixels') %% % We're almost there. We can now use |bw6| to "fix up" the initial filled % result, |bw_filled|, using an exclusive-or operation. bw_final = xor(bw_filled,bw7); imshow(bw_final) title('Presto!') %% % Readers, how would you solve this problem? Brett and I think there % might be a couple of other reasonable approaches. Let us know in the % comments. ##### SOURCE END ##### b16b835b81954357abe39ad417e798f5 -->

Categories: Blogs

Apply for a Shuttleworth Fellowship!

Cory Doctorow - 2016, October 6 - 12:13

https://vimeo.com/54762523

I’m the “Honourary Steward” for this year’s Shuttleworth Fellowship, this being a valuable and prestigious prize given to people who are undertaking to make the world a better, more open place (“social innovators who are helping to change the world for the better and could benefit from a social investment model with a difference”).


Being Honourary Steward means that I help choose the grantees; I’m the second Honourary Steward, following in Joi Ito’s footsteps. I’m incredibly honoured to be a part of this; the list of fellows is nothing less than amazing.

The application process is simple and relatively painless; applications are due on Nov 1.

We are thrilled to announce that Cory Doctorow has agreed to be our next Honorary Steward, selecting Fellows for the March 2017 Fellowship round. As a journalist, science fiction writer, copyright activist and technologist, Cory brings a breadth of experience, combined into a unique perspective. We are excited to have him on board and look forward to him expanding the perspective of the fellowship. We support individuals to implement their vision for positive social change, with openness at the centre of their approach. We continue to look for applicants with a strong idea of the world they would like to live in and the contribution they can make towards it. Cory will help us identify which of the candidates best embrace openness and whose innovative idea has the most potential to make a difference in their chosen field.

Doctorow/Shuttleworth collaboration
[Shuttleworth Foundation]

Categories: Blogs

This season was our last at the Kelowna Farmers Market.

Green City Acres - 2016, September 30 - 07:53

Some of you may have noticed that we’ve skipped a few farmers markets this season. This has been the result of the farm taking a new direction in an effort to grow the business without actually growing the size of the farm. In order to do this we have specialized our selection of produce to include more greens, microgreens, cherry tomatoes, and drop a lot of other crops that you may know us for. Because of this, it’s meant that we have less variety to offer at the market. Even though we have been specialized to some degree for many years, we’re even more so now and that makes it difficult to bring a volume of product to the market that makes it economical for us. Because of this we will be finishing our season early this year and it will also be our last year at the market. 

 On top of the farm changing in regards to our products, we will also be moving towards more education on the farm. The success of my book, online course, and YouTube channel has brought a lot of international attention and many opportunities. Next season, I will be running one week long programs on farm to help train the next generation of small scale market gardeners and urban farmers. 

 I would like to thank all of you for your continued support over the years. The farmers market was the first place I started selling and it was also the first place I was exposed to other farmers and customers who became mentors and friends. The community at the market has been like a family to me and a huge positive influence in my life. 

I’m sure you’ll still see me around. As long as I live in Kelowna, I will always be a weekly shopper and advocate of the Kelowna Farmers Market. 

You can continue to find the products you know us for at Choices Markets and Nesters Market in Kelowna. 

Thank you.

Curtis Stone.

Categories: Blogs

Come see me in Portland, Riverside, LA, and San Francisco

Cory Doctorow - 2016, September 26 - 11:17

I’ve got a busy couple of weeks coming up! I’m speaking tomorrow at Powell’s in Portland, OR for Banned Books Week; on Wednesday, I’m at UC Riverside speaking to a Philosophy and Science Fiction class; on Friday I’ll be at the University of Southern California in Los Angeles, speaking on Canada’s dark decade of policy denial from climate science to digital locks; and then on Oct 6, I’m coming to SFMOMA to talk about museums, technology, and free culture. I hope to see you soon!

(Image: Alex Schoenfeldt Photography, www.schoenfeldt.com, CC-BY)

Categories: Blogs

How free software stayed free

Cory Doctorow - 2016, September 26 - 10:19

I did an interview with the Changelog podcast (MP3) about my upcoming talk at the O’Reilly Open Source conference in London, explaining how it is that the free and open web became so closed and unfree, but free and open software stayed so very free, and came to dominate the software landscape.

“Desperate” is often the opposite of “open”: it’s when we’re in trouble that we’re most likely to compromise on our principles. How, then, did open become the default for so many tools and applications? Because when you use irrevocable open/free licenses, you lock your code open, defending it from anyone who would lock it up again—including a future version of you, in a moment of weakness.

Open licenses have served us well for more than two decades, but they need help if we’re going to survive the era in which computers invade our bodies and the structures we keep those bodies in. Cory Doctorow explains that we can lock the whole future Web open, if we do it right.

#221: How We Got Here with Cory Doctorow
[The Changelog]

(Image: Tux Droid, Sunny Ripert, CC-BY-SA)

Categories: Blogs

Getting the math right

Matlab Image processing blog - 2016, September 16 - 10:54

Because I work regularly with developers on the MATLAB Math team, I see the questions that come to them from tech support. Today there was an interesting one.

A user observed that computing the sin function takes longer for very big numbers. The user asked, "Why is that?"

Well, first let's see if we can reproduce the observation. Start by making a vector with one million numbers in the interval [0,1].

rng(42) x = rand(1000000,1);

(I seeded the random number generator using rng so that the numbers below don't change each time I run this script.)

How long does it take to compute the sin of all those numbers?

f = @() sin(x); timeit(f) ans = 0.002102730998500

Now repeat the timing experiment with another vector containing one million numbers in the interval [100000000,100000000+1].

x2 = x + 100000000; g = @() sin(x2); timeit(g) ans = 0.027343141998500

The user is right, it does take longer!

Here's the straightforward explanation: For large numbers, it takes more computation to produce an accurate result.

To illustrate, let's look at the output of sin for one large number in MATLAB and compare it the result from another application. I'm going to use Excel for this comparison, but the results will be similar for code you write in C that calls the standard C math library function, sin().

z = x2(1) z = 1.000000003745401e+08 matlab_result = sin(z) matlab_result = 0.734111589042897 excel_result = 0.734111669990523 excel_result = 0.734111669990523

These two results agree to only 6 digits!

Let's use the Symbolic Math Toolbox to compute sin(z) with 20 decimal digits of accuracy.

sym_result = sin(sym(z)) sym_result = sin(3355443212567481/33554432) vpa(sym_result,20) ans = 0.73411158904289725019

From this calculation, you can see that the MATLAB result is accurate to 15 decimal digits, whereas the Excel result is accurate to only 6 digits.

That's called sweating the details.

\n'); d.write(code_string); // Add copyright line at the bottom if specified. if (copyright.length > 0) { d.writeln(''); d.writeln('%%'); if (copyright.length > 0) { d.writeln('% _' + copyright + '_'); } } d.write('\n'); d.title = title + ' (MATLAB code)'; d.close(); } -->


Get the MATLAB code (requires JavaScript)

Published with MATLAB® R2016b

. ##### SOURCE END ##### 0780227fb97d40c488b0f8999338a84e -->

Categories: Blogs

Ten years of MATLAB blogging

Matlab Image processing blog - 2016, September 12 - 10:23

As I mentioned last time, MATLAB Central is celebrating its 15th anniversary. You should head on over there to try one of the two contests, the Scavenger Hunt and the Triathlon. Or compete in both!

This year also marks my tenth year of blogging. I still remember in 2005 when my friend Ned Gulley asked me, “Hey Steve, what do you think about writing a blog for MATLAB Central?” Two thoughts passed immediately through my head.

  • That sounds like a really interesting opportunity, and it would be a nice way to push beyond my comfort zone.
  • If you do your usual thing of analyzing and pondering Ned’s question for a few days, you’re going to get cold feet.

So I just said, “Sure, I’ll do it!” A few months later, in January 2006, a little bit after Loren started her Art of MATLAB blog, I made my first post.

That first year, I posted about algorithms (such as polygon scan conversion), signal processing concepts (such as separable convolution), Image Processing Toolbox tips and tricks (such as labeling labeled objects), and MATLAB in general (such as my series on how MATLAB image display works).

And that’s pretty much the way it’s worked ever since.

I recall that it took me almost four years to get up the nerve to start posting about Fourier transform concepts. It is such a misunderstood area, and people with different technical backgrounds learn the concepts in different orders and with different terms. But I finally dipped my toes in those waters in November 2009, and now there are 21 posts in the Fourier transforms category.

I’ll leave you with pointers to two other memorable posts. First, just before a summer holiday weekend in 2007, I invited readers to post their favorite uses and abuses of image processing in the movies. I loved the comment thread that resulted.

The other was in October 2006, when I broke my nine-year silence to explain the story behind the default MATLAB image.

That’s it for this post - my 500th!

Categories: Blogs

If DRM is so great, why won’t anyone warn you when you’re buying it?

Cory Doctorow - 2016, September 8 - 09:12

Last month, I filed comments with the Federal Trade Commission on behalf of Electronic Frontier Foundation, 22 of EFF’s supporters, and a diverse coalition of rightsholders, public interest groups, and retailers, documenting the ways that ordinary Americans come to harm when they buy products without realizing that these goods have been encumbered with DRM, and asking the FTC to investigate fair labeling for products that come with sneaky technological shackles.


In my latest Guardian column, DRM products are defective by design. Time to tell users what they’re buying, I describe the process by which we came to file, and what we’re hoping will come of it.

In our open letter on DRM labelling – a letter signed by a diverse coalition of rights holders, public interest groups, and publishers – we ask the FTC to take action to ensure that people know what they’re getting when they buy products encumbered with DRM. DRM-free publishers love this idea, because where DRM-labelling prevails, customers overwhelmingly favour DRM-free products.

But DRM-encumbered publishers should also love this, because they keep telling us that people don’t mind DRM. One significant challenge to DRM labelling is that the restrictions imposed by DRM can be incredibly complex – a video may play back on most manufacturers’ displays, but not all, and not at every resolution, and not if the video player believes that it is running in a virtual machine or has been relocated to a different country.

What’s more, most modern DRM is designed for “renewability” – which is a DRM-vendor euphemism for a remote kill-switch. These DRM tools phone home periodically for updates, and install these updates without user intervention, and then disable some or all of the features that were there when you bought the product.


DRM products are defective by design. Time to tell users what they’re buying
[The Guardian]

Categories: Blogs

The privacy wars have been a disaster and they’re about to get a LOT worse

Cory Doctorow - 2016, September 6 - 10:57



In my latest Locus column, The Privacy Wars Are About to Get A Whole Lot Worse, I describe the history of the privacy wars to date, and the way that the fiction of “notice and consent” has provided cover for a reckless, deadly form of viral surveillance capitalism.

As bad as things have been, they’re about to get much, much worse: the burgeoning realm of the “Internet of Things” is filled with surveillance devices that you can’t even pretend to give your consent to.

It’s possible that we can prevent the proliferation of reckless overcollection and retention of data, maybe by the eventual success of a few ambitious class-action lawyers, but that will only happen if we stop the accompanying plague of “binding arbitration,” which takes away your right to seek justice for corporate malfeasance.

You will ‘‘interact’’ with hundreds, then thou­sands, then tens of thousands of computers every day. The vast majority of these interactions will be glancing, momentary, and with computers that have no way of displaying terms of service, much less presenting you with a button to click to give your ‘‘consent’’ to them. Every TV in the sportsbar where you go for a drink will have cameras and mics and will capture your image and process it through facial-recognition software and capture your speech and pass it back to a server for continu­ous speech recognition (to check whether you’re giving it a voice command). Every car that drives past you will have cameras that record your like­ness and gait, that harvest the unique identifiers of your Bluetooth and other short-range radio devices, and send them to the cloud, where they’ll be merged and aggregated with other data from other sources.

In theory, if notice-and-consent was anything more than a polite fiction, none of this would hap­pen. If notice-and-consent are necessary to make data-collection legal, then without notice-and-consent, the collection is illegal.

But that’s not the realpolitik of this stuff: the reality is that when every car has more sensors than a Google Streetview car, when every TV comes with a camera to let you control it with gestures, when every medical implant collects telemetry that is collected by a ‘‘services’’ business and sold to insurers and pharma companies, the argument will go, ‘‘All this stuff is both good and necessary – you can’t hold back progress!’’

It’s true that we can’t have self-driving cars that don’t look hard at their surroundings all the time, and pay especially close attention to humans to make sure that they’re not killing them. However, there’s nothing intrinsic to self-driving cars that says that the data they gather needs to be retained or further processed. Remember that for many years, the server logs that recorded all your inter­actions with the web were flushed as a matter of course, because no one could figure out what they were good for, apart from debugging problems when they occurred.

The Privacy Wars Are About to Get A Whole Lot Worse [Locus Magazine]

Categories: Blogs

The MATLAB community and me

Matlab Image processing blog - 2016, August 29 - 08:44

As Ned Gulley posted over on the MATLAB Community blog last week, MATLAB Central is 15 years old.

Ned commented that MATLAB Central was “giving a modern web-based home to a community that was already thriving.” That reminded me of how important MathWorks participation in that community has been to me personally.

Many, many moons ago, as the calendar changed and 1992 became 1993, I was a fairly unhappy electrical engineering professor. I was thinking about changing my career path, but I didn’t have any solid ideas about what to do outside academia.

I was a heavy MATLAB user, so I immediately subscribed when the new Usenet group, comp.soft-sys.matlab, launched in January. I soon noticed when Cleve Moler, creator of the original MATLAB, posted a note from MathWorks:

Hi. This is the first posting from The MathWorks to comp.soft-sys.matlab. I’m posting it from Stanford because we’re having trouble posting to newly establish groups, including comp.soft-sys.matlab, from the MathWorks machines in Massachusetts. We can post to old, established groups, but not to some new ones, including what is now the most important group for us. If anybody else is having similar difficulties, please let us know. Thanks to Michael Maurer at Stanford for initiating the group. The size of the vote in favor, and the level of participation this first week, are certainly good signs for an active, useful group.

At the MathWorks, we intend to follow the group’s activities, to respond individually to technical and informational queries, and to post general responses and announcements when we believe they are of broad interest. We certainly intend to respect the Net’s noncommercial culture.

We hope that many of the queries will be answered by other group participants. The discussion we’ve seen so far of MATLAB/Unix memory management is a good example of how this ought to work.

Thanks to all of you for your support of MATLAB. With your help, comp.soft-sys.matlab can be a valuable, and enjoyable, activity for all of us.

– Cleve Moler
Chairman and Chief Scientist
The MathWorks

And Cleve kept posting, always eager to teach people how to get their mathemetical computations done accurately and efficiently. For example, this 30-Jan-1993 post was in response to a question about computing factorials in MATLAB:

MATLAB does not have a factorial function, so n! must be computed by

prod(1:n)

or, possibly with roundoff error, by

gamma(n+1)

But, be careful, either of these quantities overflow for n > 170. If you actually want n! to compute something like

n!/(k!*(n-k)!)

for large n, you should use

exp(sum(log(1:n))-sum(log(1:k))-sum(log(1:(n-k))))

It’s not as slow as it looks, and it doesn’t overflow.

– Cleve Moler

Then there was this fellow named John Little, who started posting on the same day as Cleve and who kept up a steady stream of technical MATLAB nuggets like this one:

The MEX-file facility in MATLAB 4.0 includes a new routine called mexPutMatrix that allows you to plop a matrix directly back into the MATLAB workspace.

John Little

(At MathWorks, we generally call him “Jack.” He is our CEO.)

I noticed other MathWorks people jumping in, too. Clay Thompson answered one of my own questions in early February 1993. And then there was Loren Shure, who was answering a question about the quad function in March 1993. (Many of you know Loren from her Art of MATLAB blog.)

By following these MathWorks interactions in the early MATLAB community, I began to form a very favorable impression of the company and the people who worked there. When I saw Loren at a signal processing conference that spring, I introduced myself, and I volunteered to be a beta tester for the new image processing product that Loren could only hint about. By the fall of 1993, I had participated in the beta test and then interviewed (successfully) for a job. My family and I moved from Chicago to Massachusetts in December, and we’ve been here ever since!

Categories: Blogs

Friday MATLAB Mystery

Matlab Image processing blog - 2016, August 26 - 09:00

Who can tell me the significance of this number:

0.814723686393179

Update: 29-Aug-2016

Sven and Sam are correct. This the first number returned by the rand function in a given session, assuming no other calls to related random number functions (such as randn) have been made. For more information about this number and about random number generation in general, see Chapter 9 of Cleve Moler's book Numerical Computing with MATLAB.

Mikhail, the initial state used by MATLAB is the same initial state used in genrand_int32 in the reference implementation.

Categories: Blogs

See you at Burning Man!

Cory Doctorow - 2016, August 25 - 21:42

I’m about to switch off my email until September 5 and drive to Black Rock City for 10 days of incinerating the dude.


If you’re going this year, drop by Liminal Labs — with whom I am immensely privileged to camp — and have some cold brew and say hi! We’re at 5&F this year (look for the giant steel gate, the flaming chandelier, and the flying car).

I’m also giving my annual talk at Palenque Norte/Soft Landing which is at 8:00 & Botticelli this year. It’s called “When the better web we’re making crashes, how will we soften the landing?” and it’s at 5PM on Friday, Sept 2.

I’ll see you on the playa!

Categories: Blogs

Talking about the pro-security, anti-DRM business model on the O’Reilly Radar Podcast

Cory Doctorow - 2016, August 25 - 06:25


On this just-released episode of the O’Reilly Radar podcast (MP3), I talk about EFF’s lawsuit against the US government to invalidate Section 1201 of the DMCA, which will make it legal to break DRM in order to fix security vulnerabilities in the Internet of Things devices that, today, are almost invariable insecure, and are also designed to be as privacy-invading as possible (to create “monetizable” data-streams) — a brutal combo.



Auditing IoT products is a liability for security researchers

Think about the conditions under which IoT companies operate. Their business plan—the thing they show to VCs to get the money to go into the business—is to monetize data. They’re all designed with security as an afterthought. They’re all designed with the minimum viable security to make this product not immediately burst into flames after you put it inside your body or put your body inside of it. Even worse, security researchers face total, brutal liability for investigating these devices and telling people which ones are and aren’t safe. It is completely nightmarish.
New pro-security business models

Note: The Electronic Frontier Foundation is representing Bunnie Huang and Matthew Green in a case challenging the constitutionality of Section 1201 of the DMCA.

One of the things that our DMCA lawsuit would provide for is a pro-security business model. Imagine if you could start a commercial consultancy that would come in and deworm your IoT household. It could come in and jailbreak all the devices and check their firmware loads, and replace the firmware loads with open firmware or patched firmware, or something else that sits in between. All of those things, all that commercial stuff as well, is currently off-limits, and would be available in the same way that you can enable third-party parts and services if there are no legal impediments. The hardware service and support market in the U.S. for all classes of goods, from lawnmowers to cars to air conditioners to computers, is 2 to 4% of America’s GDP. It’s a gigantic multi-billion-dollar sector, and in many cases, these are small and medium-size enterprises.

Categories: Blogs

Binary image area filtering

Matlab Image processing blog - 2016, August 22 - 11:35

In my August 8 post about Pokemon Go (and I still can't quite believe that I did that), one of the processing steps was finding the centroid of the largest object in a binary image.

That reminded me of something that's been on my blog topic ideas list for a long time: filtering a binary image based on object size. Typically this operation is used as a kind of cleanup or preprocessing operation to remove small "noise-like" blobs.

Among the mathematical morphology folk, removing connected components that have an area smaller than some threshold is called area opening, and there's an Image Processing Toolbox function called bwareaopen that does it.

bw = imread('blobs.png'); imshow(bw) title('Original')

Keep objects containing at least 10 pixels.

bw2 = bwareaopen(bw,10); imshow(bw2) title('Area opening')

Long-time blog readers might remember a post from five years ago in which I invited feedback on the area opening terminology and the name of the function bwareaopen. I wondered in that post whether area opening was a little too jargony. Several people posted insightful comments.

Well, that discussion had an impact. A few release cycles later, in R2014b, the toolbox development team added a new function: bwareafilt. This function "keeps" a subset of objects in the binary image based on size. There are several ways to define the subset. Here are some examples:

Keep the 10 largest objects.

bw3 = bwareafilt(bw,10); imshow(bw3) title('10 largest objects')

Keep the 10 smallest objects.

bw4 = bwareafilt(bw,10,'smallest'); imshow(bw4) title('10 smallest objects')

Keep objects within a range of sizes.

bw5 = bwareafilt(bw,[20 50]); imshow(bw5) title('Size range: 20-50 pixels')

Keep objects with a minimum size by using Inf as the upper bound.

bw6 = bwareafilt(bw,[100 Inf]); imshow(bw6) title('Objects with at least 100 pixels')

Finally, let me show you a quick way to get a histogram of object sizes in an image.

bw_text = imread('text.png'); imshow(bw_text) t = regionprops('table',bw_text,'Area'); figure histogram(t.Area) title('Object sizes in text image') \n'); d.write(code_string); // Add copyright line at the bottom if specified. if (copyright.length > 0) { d.writeln(''); d.writeln('%%'); if (copyright.length > 0) { d.writeln('% _' + copyright + '_'); } } d.write('\n'); d.title = title + ' (MATLAB code)'; d.close(); } -->


Get the MATLAB code (requires JavaScript)

Published with MATLAB® R2016a

(and I still can't quite believe that I % did that), one of the processing steps was finding the centroid of the % largest object in a binary image. % % That reminded me of something that's been on my blog topic ideas list for % a long time: filtering a binary image based on object size. Typically % this operation is used as a kind of cleanup or preprocessing operation to % remove small "noise-like" blobs. % % Among the mathematical morphology folk, removing connected components % that have an area smaller than some threshold is called _area opening_, % and there's an Image Processing Toolbox function called |bwareaopen| that % does it. bw = imread('blobs.png'); imshow(bw) title('Original') %% % Keep objects containing at least 10 pixels. bw2 = bwareaopen(bw,10); imshow(bw2) title('Area opening') %% % Long-time blog readers might remember a in which % I invited feedback on the _area opening_ terminology and the name of the % function |bwareaopen|. I wondered in that post whether _area opening_ was % a little too jargony. Several people posted insightful comments. % % Well, that discussion had an impact. A new release cycles later, in % R2014b, the toolbox development team added a new function: |bwareafilt|. % This function "keeps" a subset of objects in the binary image based on % size. There are several ways to define the subset. Here are some % examples: % % Keep the 10 largest objects. bw3 = bwareafilt(bw,10); imshow(bw3) title('10 largest objects') %% % Keep the 10 smallest objects. bw4 = bwareafilt(bw,10,'smallest'); imshow(bw4) title('10 smallest objects') %% % Keep objects within a range of sizes. bw5 = bwareafilt(bw,[20 50]); imshow(bw5) title('Size range: 20-50 pixels') %% % Keep objects with a minimum size by using Inf as the upper bound. bw6 = bwareafilt(bw,[100 Inf]); imshow(bw6) title('Objects with at least 100 pixels') %% % Finally, let me show you a quick way to get a histogram of object sizes % in an image. bw_text = imread('text.png'); imshow(bw_text) %% t = regionprops('table',bw_text,'Area'); figure histogram(t.Area) title('Object sizes in text image') ##### SOURCE END ##### 606f806ddcc249ba80acc4a598d88162 -->

Categories: Blogs