You are hereFeed aggregator

Feed aggregator

  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.
  • warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in /Users/thor/Sites/modules/aggregator/aggregator.pages.inc on line 259.

Customizing REGIONPROPS With Your Own Measurements

Matlab Image processing blog - 2017, June 20 - 04:00

I saw a presentation last month that mentioned a user request to have the ability to customize regionprops. That is, a user wanted to be able to add their own measurement to regionprops.

Today, I'll show you how to do this yourself.

First, here's a brief recap on what regionprops does. The function computes measurements of image regions. Some of these measurements are based purely on a region's shape, while others incorporate pixel values within the regions. Here's an example using the coins.png sample image.

I = imread('coins.png'); imshow(I)

Let's convert this image to binary, using adaptive thresholding, filling holes, and removing small "noise" pixels.

bw = imbinarize(I,'adaptive'); bw = imfill(bw,'holes'); bw = bwareafilt(bw,[100 Inf]); imshow(bw)

You can count the "blobs" (object) yourself; there are 10 of them.

The simplest regionprops call, regionprops(bw) computes the Area, Centroid, and BoundingBox for each object.

s = regionprops(bw) s = 10×1 struct array with fields: Area Centroid BoundingBox

But I don't think this is the best way to call regionprops anymore. You can now tell regionprops to return the results as a table.

t = regionprops('table',bw) t = 10×3 table Area Centroid BoundingBox ____ ________________ ____________ 2635 37.133 106.85 [1x4 double] 1846 56.131 49.693 [1x4 double] 2672 96.199 146.05 [1x4 double] 1839 109.97 84.848 [1x4 double] 2744 120.37 208.73 [1x4 double] 2520 148.57 34.404 [1x4 double] 2589 174.83 120.01 [1x4 double] 2518 216.81 70.649 [1x4 double] 1857 236.03 173.36 [1x4 double] 1829 265.96 102.64 [1x4 double]

The table form is a lot more convenient for many tasks. For today's topic, one especially nice thing thing about tables is how easy it is to add your own variables to the table.

To illustrate, let's add a measurement that I've seen called Roundness. One definition for roundness is:

$R = \frac{4A}{\pi L^2}$

where $A$ is the object area and $L$ is the major axis length of the best-fit ellipse for the object. Here's how to compute roundness and add it directly to the measurements returned by regionprops.

First, note that both Area and MajorAxisLength are supported by regionprops, so let's start with those.

t = regionprops('table',bw,'Area','MajorAxisLength') t = 10×2 table Area MajorAxisLength ____ _______________ 2635 60.08 1846 50.178 2672 59.792 1839 49.674 2744 60.374 2520 58.08 2589 58.676 2518 58.162 1857 49.77 1829 49.564

You access table variables using dot notation, like t.Area. Similarly, you can create a new table variable using dot notation and assignment, like t.MyVariable = .... So adding Roundness to the table returned by regionprops is this simple.

t.Roundness = 4 * t.Area ./ (pi * t.MajorAxisLength.^2) t = 10×3 table Area MajorAxisLength Roundness ____ _______________ _________ 2635 60.08 0.92945 1846 50.178 0.93352 2672 59.792 0.9516 1839 49.674 0.94893 2744 60.374 0.9585 2520 58.08 0.95118 2589 58.676 0.95745 2518 58.162 0.94772 1857 49.77 0.95453 1829 49.564 0.94798

Let's try this computation with an image containing objects that are not quite as round.

I2 = imread('rice.png'); imshow(I2) bw2 = imbinarize(I2,'adaptive'); bw2 = imfill(bw2,'holes'); bw2 = bwareafilt(bw2,[100 Inf]); imshow(bw2) t2 = regionprops('table',bw2,'Area','MajorAxisLength'); t2.Roundness = 4 * t2.Area ./ (pi * t2.MajorAxisLength.^2); head(t2) ans = 8×3 table Area MajorAxisLength Roundness ____ _______________ _________ 138 23.594 0.31562 120 18.152 0.4637 169 28.123 0.27207 157 23.793 0.3531 284 43.757 0.18885 200 26.259 0.36929 141 21.647 0.38311 177 29.087 0.26636

I'm a big fan of the (relatively) new histogram function in MATLAB, so let's use it to compare our roundness numbers. I will follow the advice given in the histogram reference page for normalizing multiple histograms so that they can be more easily compared. I'll set the y-axis limits to [0 1], which is appropriate for probability normalization, and I'll set the x-axis limits to [0 1], which is the range for Roundness.

h1 = histogram(t.Roundness); hold on h2 = histogram(t2.Roundness); hold off h1.Normalization = 'probability'; h2.Normalization = 'probability'; h1.BinWidth = 0.02; h2.BinWidth = 0.02; xlim([0 1]); ylim([0 1]); title('Histogram of roundness (probability normalization)') legend('coins','rice')

There you have it. You can add your own object measurements to the output of regionprops. It's especially easy if you tell regionprops to return a table.

I'll leave you with this question, dear reader: Are there measurements you would like us to add to regionprops? I am aware of an enhancement request for the Feret diameter. What else would you like to see?

\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® R2017a

function in % MATLAB, so let's use it to compare our roundness numbers. I will % follow the advice given in the for % normalizing multiple histograms so that they can be more easily % compared. I'll set the y-axis limits to [0 1], which is % appropriate for probability normalization, and I'll set the x-axis % limits to [0 1], which is the range for |Roundness|. h1 = histogram(t.Roundness); hold on h2 = histogram(t2.Roundness); hold off h1.Normalization = 'probability'; h2.Normalization = 'probability'; h1.BinWidth = 0.02; h2.BinWidth = 0.02; xlim([0 1]); ylim([0 1]); title('Histogram of roundness (probability normalization)') legend('coins','rice') %% % There you have it. You can add your own object measurements to the % output of |regionprops|. It's especially easy if you tell % |regionprops| to return a table. % % I'll leave you with this question, dear reader: Are there % measurements you would like us to add to |regionprops|? I am aware % of an enhancement request for the Feret diameter. What else would % you like to see? ##### SOURCE END ##### a48d6dda1b9448eb98f5c08436b13322 -->

Categories: Blogs

Greetings from 1967!

Casey McKinnon - 2017, June 16 - 15:36

A few weeks ago, I was transported back in time to play a young mother named Marie Stahlmann in a staged reading at The Blank Theatre. Myra Slotnick's The Shadow Child takes places in New York City in 1967 and follows a Polish woman haunted by the death of her son in WWII. When her son's doppelgänger walks into her life, she must find a way to make peace with her tragic past. It's a beautiful story and I was very happy to be a part of it, even for a moment.

While I was lucky to work with my first child actor in The Baby Snooks Show last year, this was the first time I got a "child of my own!" Young actor Samuel Faraci played my son Jack, and it was kinda magical. Sam has worked on a number of television shows that shoot in Canada, like Nikita and The Rick Mercer Report, and is now living and working in Los Angeles.

Sound familiar? Like mother, like son!

Sam and I have a lot in common, from our Canadian upbringing to the fact that he looks quite a bit like a younger version of my real life husband. We had a great time keeping a balance between professionalism and silliness, and I was proud that I could work with this young actor on his stage debut.

Like stage mother, like stage son. Nice working with you, @SamuelFaraci! #TheShadowChild pic.twitter.com/vbgXpKYJy2

— Casey McKinnon (@caseymckinnon) May 23, 2017

I'm very grateful for director Christopher J. Raymond who brought me onboard, and was very pleased to work with this lovely cast. I look forward to seeing where the playwright takes her touching story in the future. 

And if you're sad to have missed this, be sure to make the next one! On July 2nd, I'll be playing Eve (from the Genesis creation myth) in a reading of a fascinating new play called The First and the Last.

Details:

The First and the Last
Sunday, July 2nd at 7pm
Screenland Studios, 10501 Burbank Blvd, North Hollywood, CA 91601
Tickets: Free at the door.

Content Link Block Select a page and create a visual link to it. Learn more. Blog

Categories: Blogs

Talking about contestable futures on the Imaginary Worlds podcast

Cory Doctorow - 2017, June 15 - 06:39

I’m in the latest episode of Imaginary Worlds, “Imagining the Internet” (MP3), talking about the future as a contestable place that we can’t predict, but that we can influence.


We were promised flying cars and we got Twitter instead. That’s the common complaint against sci-fi authors. But some writers did imagine the telecommunications that changed our world for better or worse. Cory Doctorow, Ada Palmer, Jo Walton and Arizona State University professor Ed Finn look at the cyberpunks and their predecessors. And artist Paul St George talks about why he’s fascinated by a Skype-like machine from the Victorian era.

Categories: Blogs

How to get a signed, personalized copy of Walkaway sent to your door!

Cory Doctorow - 2017, June 14 - 10:44


The main body of the tour for my novel Walkaway is done (though there are still upcoming stops at Denver Comic-Con, San Diego Comic-Con, the Burbank Public Library and Defcon in Las Vegas), but you can still get signed, personalized copies of Walkaway!

My local, fantastic indie bookstore, Dark Delicacies, has a good supply of Walkaways, and since I pass by it most days, they’ve generously offered to take special orders for me to stop in and personalize so they can ship them anywhere in the world.

You can reach them at +1 818-556-6660, or [email protected].

Categories: Blogs

Frequency Samples for the Output of FFT2

Matlab Image processing blog - 2017, June 13 - 04:00

A MATLAB user recently contacted tech support with a question about the output of fft2. The user had a function, q(x,y), evaluated on an (x,y) grid. The grid evaluation produced a matrix that the user passed to fft2. The user's question: what are the spatial frequencies associated with the elements of the output from fft2?

The question was forwarded to the MATLAB Math team. Chris Turnes, a fellow Georgia Tech grad, answered it. Here is Chris' answer, lightly edited.

To map discrete Fourier coefficients into samples of the corresponding Discrete Time Fourier Transform, we need to know about the sampling pattern of the spatial signal. Since the customer presumably has the vectors x and y that she used to query the continuous function q(x,y), this ought to be easy to determine.

To determine the sampling frequencies, we use the spacing of the sampling grid. The sampling frequencies in each dimension are fsx = 1/(x(2)-x(1)) and fsy = 1/(y(2)-y(1)) if the grid is uniform in each dimension.

Next, the normalized DFT frequencies of a (shifted) N-point DFT (where N here is even for convenience) are fa = ((-N/2):(N/2-1))/N. Therefore, the corresponding DTFT frequency grid would be composed of the frequencies fcx = fa*fsx and fcy = fa*fsy. That would be the correct way to do the mapping between FFT coefficients and the corresponding continuous spatial frequency.

Thanks, Chris.

\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® R2017a

Categories: Blogs

Chessboards, Implicit Expansion, REPELEM, and Unicode Chess Queens

Matlab Image processing blog - 2017, June 6 - 08:00

A few weeks ago, I wrote about a solver algorithm for the Eight Queens Problem. The post included diagrams like this one.

Today I want to show you how I made that diagram in MATLAB. First, let's talk about the board. Back in 2011, I wrote about a variety of ways to make a checkerboard (or chessboard) pattern. In that post, I played games with repmat, powers of -1, floor, and round. It got a little crazy.

I'm still fond of using integer powers of -1, like this.

$(-1)^{(n_1 + n_2)}$

In 2011, I used ndgrid to make a matrix of integer powers, $n_1 + n_2$.

[n1,n2] = ndgrid(0:4); (-1).^(n1 + n2) ans = 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1

Since the introduction of implicit expansion in R2016b, though, I no longer need to use ndgrid to explicitly form the matrix of powers.

n = 0:4; (-1).^(n + n') ans = 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1

In my eight queens code, here's how I got the shades of gray for a chessboard. (There are lots of ways to do this.)

N = 8; dark_square_color = .7; light_square_color = .9; color_range = light_square_color - dark_square_color; f = (-1).^((1:N)' + (1:N)); f = (f + 1) * color_range / 2; f = f + dark_square_color; f(1:4,1:4) ans = 0.9000 0.7000 0.9000 0.7000 0.7000 0.9000 0.7000 0.9000 0.9000 0.7000 0.9000 0.7000 0.7000 0.9000 0.7000 0.9000

Next, I needed to replicate each element of f to make an image with larger squares. Do you know how to replicate elements of a matrix? Some experienced MATLAB users would do it using the kron function. Now, however, you can just use the new repelem function. The reference page tells you when this function was introduced.

I'm going to make my squares 60 pixels wide, and then I'll turn it into a truecolor image so that the pixel colors are independent of the figure's colormap.

pixel_size = 60; f = repelem(f,pixel_size,pixel_size); f = repmat(f,1,1,3); h = imshow(f,'InitialMagnification',100);

Now I want to show you a coordinate system trick. If you turn on the axes display, you can see the image pixel coordinates. (In Image Processing Toolbox terminology, these are called intrinsic coordinates.)

axis on

When I get to the part about displaying the queens, however, I would like to be able to place them based on the coordinates of each chessboard square, independent of the number of pixels per square. I can do that by manipulating the XData and YData properties of the image. These properties assign spatial coordinates to the left/right and top/bottom edges of the image.

h.XData = [0.5 N+0.5]; h.YData = [0.5 N+0.5]; axis([0.5 N+0.5 0.5 N+0.5])

Now let's put some queens on the board. This turns out to be pretty easy because you can just do it with a text object. Since R2014b, you've been able to draw text in MATLAB graphics using Unicode characters. And the Unicode character set includes chess symbols! The black queen symbol is at code point 9819 (decimal).

queen = char(9819) queen = '♛'

Let's put a queen on the square in the second row, third column. (That's $x=3$, $y=2$.)

hq = text(3,2,queen);

Oops, our queen is pretty small, and she also appears to be off-center. Let's fix that.

hq.FontSize = 40; hq.HorizontalAlignment = 'center';

That's better.

I have one more little coding trick to show you. When I wrote my eight queens animation code, I wanted to have an easy to show and remove a queen at any square on the board. So, I made an matrix of text objects, one at each square. Then I could just index into the matrix of text objects and turn the Visible property on and off. Here's how. (First, let me delete the text object I just made.)

delete(hq) for r = 1:N for c = 1:N queens(r,c) = text(c,r,char(9819),... 'HorizontalAlignment','center',... 'Visible','off',... 'FontSize',40); end end

OK, let's turn on the queen displays on a couple of squares.

queens(5,3).Visible = 'on'; queens(2,4).Visible = 'on';

For a final bit of fun, the function set lets you modify properties of a whole array of graphics objects at once.

Turn them all on!

set(queens,'Visible','on')

(The board above, by the way, is NOT a solution to the Eight Queens Problem. In case you were wondering.)

\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® R2017a

, I wrote about a solver algorithm for the Eight % Queens Problem. The post included diagrams like this one. % % <> % % Today I want to show you how I made that diagram in MATLAB. First, % let's talk about the board. Back in 2011, I wrote about a variety % of ways to make a checkerboard (or chessboard) pattern. In that % post, I played games with |repmat|, powers of -1, |floor|, and % |round|. It got a little crazy. % % <> % % I'm still fond of using integer powers of -1, like this. % % $(-1)^{(n_1 + n_2)}$ % % In 2011, I used |ndgrid| to make a matrix of integer powers, $n_1 % + n_2$. [n1,n2] = ndgrid(0:4); (-1).^(n1 + n2) %% % Since the introduction of implicit expansion in R2016b, though, I % no longer need to use |ndgrid| to explicitly form the matrix of % powers. n = 0:4; (-1).^(n + n') %% % In my eight queens code, here's how I got the shades of gray for % a chessboard. (There are lots of ways to do this.) N = 8; dark_square_color = .7; light_square_color = .9; color_range = light_square_color - dark_square_color; f = (-1).^((1:N)' + (1:N)); f = (f + 1) * color_range / 2; f = f + dark_square_color; f(1:4,1:4) %% % Next, I needed to replicate each element of |f| to make an image % with larger squares. Do you know how to replicate elements of a % matrix? Some experienced MATLAB users would do it using the |kron| % function. Now, however, you can just use the new |repelem| % function. The % tells you when this function was introduced. % % <> % % I'm going to make my squares 60 pixels wide, and then I'll turn it % into a truecolor image so that the pixel colors are independent of % the figure's colormap. pixel_size = 60; f = repelem(f,pixel_size,pixel_size); f = repmat(f,1,1,3); h = imshow(f,'InitialMagnification',100); %% % Now I want to show you a coordinate system trick. If you turn on % the axes display, you can see the image pixel coordinates. (In % Image Processing Toolbox terminology, these are called _intrinsic % coordinates_.) axis on %% % When I get to the part about displaying the queens, however, I % would like to be able to place them based on the coordinates of % each chessboard square, independent of the number of pixels per % square. I can do that by manipulating the |XData| and |YData| % properties of the image. These properties assign spatial % coordinates to the left/right and top/bottom edges of the image. h.XData = [0.5 N+0.5]; h.YData = [0.5 N+0.5]; axis([0.5 N+0.5 0.5 N+0.5]) %% % Now let's put some queens on the board. This turns out to be % pretty easy because you can just do it with a |text| object. Since % R2014b, you've been able to draw text in MATLAB graphics using % Unicode characters. And the Unicode character set includes chess % symbols! The black queen symbol is at code point 9819 (decimal). queen = char(9819) %% % Let's put a queen on the square in the second row, third column. % (That's $x=3$, $y=2$.) hq = text(3,2,queen); %% % Oops, our queen is pretty small, and she also appears to be % off-center. Let's fix that. hq.FontSize = 40; hq.HorizontalAlignment = 'center'; %% % That's better. % % I have one more little coding trick to show you. When I wrote my % eight queens animation code, I wanted to have an easy to show and % remove a queen at any square on the board. So, I made an matrix of % text objects, one at each square. Then I could just index into the % matrix of text objects and turn the |Visible| property on and off. % Here's how. (First, let me delete the text object I just made.) delete(hq) for r = 1:N for c = 1:N queens(r,c) = text(c,r,char(9819),... 'HorizontalAlignment','center',... 'Visible','off',... 'FontSize',40); end end %% % OK, let's turn on the queen displays on a couple of squares. queens(5,3).Visible = 'on'; queens(2,4).Visible = 'on'; %% % For a final bit of fun, the function |set| lets you modify % properties of a whole array of graphics objects at once. % % Turn them all on! set(queens,'Visible','on') %% % (The board above, by the way, is NOT a solution to the Eight Queens % Problem.) ##### SOURCE END ##### c6dd1186e5b945f198e1906ee07031fd -->

Categories: Blogs

New Yorkers! I’ll see you tomorrow at Bookcon on the Walkaway tour (then SF, Chicago, Denver…) (!)

Cory Doctorow - 2017, June 2 - 04:09

I just got to NYC for Bookcon, where I’m appearing tomorrow, at a “guest bookseller” event with John Scalzi at 11 at the Tor Booth (3008) (we’ll be talking up books we love!); then a panel with Charlie Jane Anders, Annalee Newitz and John Scalzi at 3PM (room 1E10), and finally a signing with Scalzi at 415PM in the autographing area.


It’s part of the Walkaway tour, which has me flying to San Francisco tomorrow night after Bookcon to attend the Bay Area Book Festival on Sunday, where I’m on two panels: Science Fiction and the Resistance, with Charlie Jane Anders, John Scalzi and Annalee Newitz; and When Reality Meets Science Fiction, with Meg Elison, Zachary Mason, and Annalee Newitz.

Next weekend, I’m in Chicago for the Printers Row festival, where I’ll be “in conversation” with Mary Robinette Kowal on Sunday at 1130AM. I return to Chicago the next week for ALA, before heading to Denver for Denver Comic-Con (I’ll also be at San Diego Comic-Con and Defcon later in the summer).

Walkaway continues to go gangbusters: this morning’s profile and review in the LA Times by Scott Timberg was a fine thing to wake up to, especially William Gibson’s commentary: “Literary naturalism is the unrecognized secret ingredient in a lot of my favorite science fiction. The characters are sexual beings, socioeconomic beings, products of thoroughly imagined cultures, etc. Naturalism, which I suppose more people would call realism today, was very thin on the ground in much of 20th Century genre sf. If the characters have sufficiently convincing lives, that organically balances talkiness and theory, and Cory’s fiction amply demonstrates that he knows that.”

I’m also extremely pleased with the number of purchasers who’ve availed themselves of my “fair trade” ebook and audiobook store, where you can buy electronic versions of all my books in a way that doubles my share of the sale-price, while delivering you a product with no DRM and no “license agreement” — just like with a real book!


(Image: Gary Coronado/Los Angeles Times)

Categories: Blogs

Bad news: tech is making us more unequal. Good news: tech can make us more equal.

Cory Doctorow - 2017, May 31 - 06:27

My latest Guardian column is Technology is making the world more unequal. Only technology can fix this; in it, I argue that surveillance and control technology allow ruling elites to hold onto power despite the destabilizing effects of their bad decisions — but that technology also allows people to form dissident groups and protect them from intrusive states.

The question, then, isn’t whether technology makes the world more equal and prosperous, but how to use technology to attain those goals.


This is the question my novel Walkaway grapples with: which technologies make the future better, and how can we use them to defend ourselves against the technologies that make the future worse?

After all, there comes a point when the bill for guarding your wealth exceeds the cost of redistributing some of it, so you won’t need so many guards.

But that’s where technology comes in: surveillance technology makes guarding the elites much cheaper than it’s ever been. GCHQ and the NSA have managed to put the entire planet under continuous surveillance. Less technologically advanced countries can play along: Ethiopia was one of the world’s first “turnkey surveillance states”, a country with a manifestly terrible, looting elite class that has kept guillotines and firing squads at bay through buying in sophisticated spying technology from European suppliers, and using this to figure out which dissidents, opposition politicians and journalists represent a threat, so it can subject them to arbitrary detention, torture and, in some cases, execution.

As technology pervades, spying becomes cheaper and inequality becomes more stable – but not infinitely stable. With enough inequality over enough time, the cherished idiocies of the ruling elites will eventually cause a collapse. All technology does is delay it, which is terrible news, since the longer a foolish policy is in place, the more of a policy-debt we incur, and the worse the payback will be: lost generations, rising seas, etc.

That’s the bad news.


Technology is making the world more unequal. Only technology can fix this
[Cory Doctorow/The Guardian]

Categories: Blogs

My guest-appearance on Hello From the Magic Tavern

Cory Doctorow - 2017, May 29 - 07:46

I’m a huge fan of the fantastically rude improv/current affairs/high fantasy podcast Hello From the Magic Tavern, I’ve enjoyed it ever since I binge-listened to the first season halfway through.


Last month, I dropped into the Cards Against Humanity studios where the podcast is recorded while in Chicago on my book tour, where I sat in on a session (MP3) where I played Sigint, the Five-Eyed Spider, a whistleblowing ex-spy for the Dark Lord.

I had an amazing time: I’m no improver, but the Magic Tavern-dwellers were so much fun, it was really a dream come true!

Season 2, Ep 11 – Surveillance Spider (w/ Cory Doctorow)
[Hello From the Magic Tavern]

Categories: Blogs

Talking WALKAWAY with Reason

Cory Doctorow - 2017, May 25 - 14:50

My novel WALKAWAY is something of a fusion of the best elements of the anti-authoritarian left and the anti-authoritarian right. In a meaty interview with Reason Magazine, I discuss the politics and economics, and theories of human action with Reason magazine Editor in Chief Katherine Mangu-Ward.

Categories: Blogs

Liverpool, I’ll see you tonight on the Walkaway tour! (then Birmingham, Hay-on-Wye, San Francisco…) (!)

Cory Doctorow - 2017, May 25 - 01:12


Thanks to everyone who came out for last night’s final London event on the UK Walkaway tour, at Pages of Hackney with Olivia Sudjic; today I’m heading to Waterstones Liverpool One for an event with Dr Chris Pak, followed by a stop tomorrow at Waterstones in Birmingham and then wrapping up in the UK with an event with Adam Rutherford at the Hay Festival.


Then I hit the road again in the USA, with stops at the Bay Area Book Festival, BookCon NYC, ALA Chicago, Printers Row Chicago, Denver Comic-Con, San Diego Comic-Con, and Defcon Las Vegas.

Met Olivia Sudjic and @doctorow reading their books at @pagesofhackney. Great evening! pic.twitter.com/yndcAr8yQX

— Pranay Manocha (@PranMan) May 25, 2017

Categories: Blogs

London! I’ll be at Pages of Hackney tonight with Olivia Sudjic! (then Liverpool, Birmingham, Hay…) (!)

Cory Doctorow - 2017, May 24 - 00:38


Last night’s sold-out Walkaway tour event with Laurie Penny at Waterstones Tottenham Court Road was spectacular (and not just because they had some really good whisky behind the bar), and the action continues today with a conversation with Olivia Sudjic tonight at Pages of Hackney, where we’ll be discussing her novel Sympathy as well as Walkaway.


Tomorrow, I’ll be at Waterstones Liverpool One with Dr Chris Pak, and on Friday I’ll signing at Waterstones Birmingham before heading to Hay-on-Wye for the final event of my UK tour, a dialogue with Adam Rutherford at the Hay Festival.


I hit the road again when I get back to the USA, continuing the US Walkaway tour with stops at the Bay Area Book Festival, BookCon NYC, ALA Chicago, Printers Row Chicago, Denver Comic-Con, San Diego Comic-Con, and Defcon Las Vegas.

Ridiculously brilliant, sold out evening @WaterstonesTCR with @doctorow & @PennyRed. Come to #WalkawayNovel tour events and be blown away. pic.twitter.com/fcHnlr0ezd

— Chrissy Ryan (@chrissymryan) May 23, 2017

Categories: Blogs

London! I’ll see you tonight on the Walkaway tour! (then Liverpool, Birmingham, and Hay…) (!)

Cory Doctorow - 2017, May 22 - 22:56


Last night’s kick-off event for the UK Walkaway tour was brilliant, thanks to the magic combination of the excellent Tim Harford, the excellent people of Oxford, and the excellent booksellers at Blackwells!


Tonight I’ll be at Forbidden Planet at 6PM to sign books, then we’re walking over to Waterstone’s Tottenham Court Road for a 6:45 event with Laurie Penny. Tomorrow, I’m doing another London event, this one with Olivia Sudjic (author of Sympathy) at Pages of Hackney at 7PM.


After that, I head to Liverpool, Birmingham and Hay-on-Wye before heading back to the USA for events in San Francisco, New York, Chicago, Denver, San Diego and Las Vegas! Hope to see you there!

A thought provoking, challenging, tech-driven, economics-loaded, wonderful evening. Thanks @doctorow @TimHarford and @blackwelloxford pic.twitter.com/inyxfqW9lU

— Mark Thornton (@mostlybooksmark) May 22, 2017

Categories: Blogs

Mary Shelley’s Frankenstein shows us how science fiction predicts the present and shapes the future

Cory Doctorow - 2017, May 22 - 07:54

Frankenstein: Annotated for Scientists, Engineers, and Creators of All Kinds is a new MIT Press book commemorating the bicentennial of the publication of Mary Shelley’s seminal novel “Frankenstein; or, The Modern Prometheus.”

I was honored to be asked to contribute an essay to the edition, which they titled I’ve Created a Monster! And so can you. It’s a look at how Shelley’s book illustrates the relationship of science fiction to the present (it reflects back our hopes and fears) and the future (those hopes and fears shape what we do).


The anthology is part of a year of events at ASU’s Center for Science and the Imagination.


I’m a Facebook vegan. I won’t even use WhatsApp or Instagram because they’re owned by Facebook. That means I basically never get invited to parties; I can’t keep up with what’s going on in my daughter’s school; I can’t find my old school friends or participate in the online memorials when one of them dies. Unless everyone you know chooses along with you not to use Facebook, being a Facebook vegan is hard. But it also lets you see the casino for what it is and make a more informed choice about what technologies you depend on.

Mary Shelley understood social exile. She walked away from the social network of England—ran away, really, at the age of 16 with a married man, Percy Bysshe Shelley, and conceived two children with him before they finally married. Shelley’s life is a story about the adjacent possible of belonging, and Frankenstein is a story about the adjacent possible of deliciously credible catastrophes in an age of technological whiplash and massive dislocation.

In 1989, the Berlin Wall fell, and the end of the ironically named German Democratic Republic was at hand. The GDR, often called East Germany, was one of the most spied-upon countries in the history of the world. The Stasi, its secret police force, were synonymous with totalitarian control, and their name struck terror wherever it was whispered.

The Stasi employed one snitch for every 60 people in the GDR: an army to surveil a nation.

Today, the U.S. National Security Agency has the entire world under surveillance more totally than the Stasi ever dreamed of. It has one employee for every 20,000 people it spies on—not counting the contractors.

I’ve Created a Monster!
And so can you.
[Cory Doctorow/Slate]

Categories: Blogs

Oxford, I’ll see you tonight on the Walkaway tour (then London, Liverpool, Birmingham…) (!)

Cory Doctorow - 2017, May 22 - 00:21



I’m in the UK for the British Walkaway tour, which kicks off tonight at 7PM in Oxford where I’ll be in conversation with Tim Harford at Blackwells.


Then I’m doing three events in London: a signing at Forbidden Planet at 6PM on Tuesday, then a conversation with Laurie Penny at Waterstones Tottenham Court Road at 7:45 on Tuesday; and on Wednesday, it’s a conversation with Olivia Sudjic (author of Sympathy) at Pages of Hackney at 7PM.

From there, I’m heading back to the USA for appearances in San Francisco (Bay Area Book Fair); NYC (Book Con); Denver (Denver Comic-Con); Chicago (Printer’s Row); San Diego (San Diego Comic-Con) and Las Vegas (Defcon) — more stuff is also being added, so watch this space!

Categories: Blogs

Burbank: I’m coming to you today on the Walkaway tour! (then Oxford, London, Liverpool…) (!)

Cory Doctorow - 2017, May 20 - 08:26

I took great advantage of my 36 hour hiatus from the Walkaway tour, but I’m back at it today, with a 2PM appearance at Burbank’s Dark Delicacies, before I go straight to the airport to fly to the UK for my British tour.


On Monday, I’ll be at Blackwell’s Oxford at 7PM with Tim Harford; on Tuesday I’ll be in London at Forbidden Planet at 6PM and at Waterstone’s Tottenham Court Road at 7PM with Laurie Penny.

On Wednesday I’ll be in London again, at Clapton’s Pages, with Olivia Sudjic; and then in Liverpool (with Chris Pak), Birmingham, and Hay-on-Wye (with Adam Rutherford).

I’ll be back on the road in the USA when I get back: Bookcon NYC, Denver Comic-Con, San Diego Comic-Con, Defcon, and Printer’s Row Chicago (with more to come!).

I’ll see you there!

As a longtime reader of his influential blog @BoingBoing it was inspirational hearing @doctorow @vanwritersfest last night @SFUVan pic.twitter.com/FYeiJXnI0Q

— Alistair Henning (@alistairhenning) May 18, 2017

Categories: Blogs

Talking Walkaway with Suicide Girls Radio

Cory Doctorow - 2017, May 19 - 15:32

Nicole Powers interviewed me for Suicide Girls Radio and transcribed our wide-ranging, political conversation that ranged over Calexit, computer law, Occupy, and science fiction’s role in the world.


NP: I watched your New York Public Library Q&A with Edward Snowden two days ago. You both spoke about immorality being used as a MacGuffin in the book. However, I read an article recently about a surgeon that successfully transplanted a head on to a rat. That same surgeon says he’s going to do that on a human within the year. Then you have Mark Zuckerberg working on his mind-reading project. We’re already heading in the direction that you describe in the book. And, if that comes to pass, there’s going to be this horrific situation where — if it’s left in the hands of the elite — the one percenters are going to get to decide who donates their body and whose brains get to live on.

CD: Ha,ha!

NP: Is this really a MacGuffin or is the idea that it’s a MacGuffin wishful thinking on your part given what’s actually going on in the real world?

CD: No, I seriously think it’s a MacGuffin. Just because Zuck thinks that he knows about neuroscience doesn’t mean that he knows about neuroscience. Dunning-Kruger is alive and well. The reason that con artists targeted successful, intelligent people is they always overestimated their ability to spot a con in domains other than the one that they knew something about. You find a stock broker and you would hook them with a horse race con because stock brokers would assume that understanding a stock market very well also made them really good at understanding horse races — and they were horribly wrong and got taken for every penny. So I wouldn’t say that Zuck’s enthusiasm is any indication of anything except his hubris.


In terms of the transplantation of a rat head, we can’t interrogate the rat to know whether or not that was a successful operation, right? We have only external factors to evaluate the quality of the experimental outcome. It may be that, if you could talk to the rat, you’d find out that the head transplant was not nearly so successful as we thought… So in my view, anyway, it’s a very metaphorical thing.


Where it does touch with reality is in what James Hughes calls ‘transhumanism.’ He wrote a very good book about this called Citizen Cyborg that’s more generally about the ways that technologies give us longer lives of higher quality, and how the uneven distribution of technology in that domain — where that inequality is a function of economic inequality — that it magnifies economic inequality very, very terribly.


Jim, in particular, is worried and interested about the way that maybe we might alter our germplasm, which does seem to me to be well within reach. I mean, we have parts of our genome that at least there’s burgeoning consensus if they’re expressed in certain ways, they probably only do bad things and not good things. And we can, in theory, eliminate those parts of our genome from fertilized zygotes, at least in vitro. So it may be that there are people who are wealthy enough to have IVF and to have CRISPR surgery on the IVF before implantation whose germplasm is permanently altered to remove things that are potentially very harmful. That to me feels like something that it is a little bit like speciation. So if there’s a thing in Walkaway that resonates with you, the place where I would say you should be taking that resonance and trying to apply it to the real-world is not in the hypothetical life extension technologies, but in very non-hypothetical and very real stuff that we’re doing right now.

Categories: Blogs

Readings Galore!

Casey McKinnon - 2017, May 18 - 17:04

I've been cast in staged readings for two wonderful new plays: The Shadow Child and The First and the Last.

The Shadow Child by Myra Slotnick is an emotional piece set in 1967 where I play a young mother (Marie Stahlmann) who sends the main character (Dora) spiralling back into her traumatic memories of World War II. The story is written with technical elements that weave the present beautifully with the past, and it would make an incredible full production or feature film. I'm very excited to be working with director Christopher J. Raymond and his talented cast, especially Brea Bee who plays Dora and young actor Samuel Faraci who plays my son Jack.

The Shadow Child
Monday, May 22nd at 8pm
The Blank Theatre, 6500 Santa Monica Blvd, Hollywood, CA 90038
Tickets: Reserve for free online.

In The First and the Last, I will be playing the biblical character of Eve in a very fun exploration of sin and the afterlife. The script by Daniel Botello is a blend of classical and modern storytelling, with familiar characters from both history and literature. I'm very impressed with Botello's writing, especially his feminist approach to character development. Also attached to the project is my dear friend Brian Brennan who played Lee Harvey Oswald in The Tragedy of JFK.

The First and the Last
Sunday, July 2nd at 7pm
Screenland Studios, 10501 Burbank Blvd, North Hollywood, CA 91601
Tickets: Free at the door.

I'm really happy to see these brilliant young playwrights creating smart, emotional, and intellectual works. I hope to see more from them both in the future.

Categories: Blogs

Vancouver, I’ll see you at tonight’s Walkaway tour stop (then Burbank, Oxford, London…) (!)

Cory Doctorow - 2017, May 17 - 10:01

Many thanks to the good folks who came out to Bellingham’s Village Books for last night’s Walkaway event; tonight, I’ll be appearing in Vancouver before flying home to Burbank for an event at my local Dark Delicacies on Saturday and then going straight to the airport for the start of my UK tour.


I’ll be starting that tour in Oxford with Tim Harford; then in London on two consecutive nights, the first with Laurie Penny and the second with Olivia Sudjic; then I’ll be in Liverpool with Chris Pak; then Birmingham, and finally at Hay-on-Wye with Adam Rutherford.


After that, I go back on the road in the USA, stopping at Bookcon NYC, Denver Comic-Con, San Diego Comic-Con, Defcon, and Printer’s Row.

Saw @doctorow reading tonight at @VillageBksBham Awesome! pic.twitter.com/Xq0X8gPAhC

— Amanda June Hagarty (@Amandahagarty) May 17, 2017

Categories: Blogs

Talking Walkaway on the Techdirt podcast

Cory Doctorow - 2017, May 16 - 15:23


Last week I sat down with Mike Masnick, the crusading technology journalist who coined the “Streisand Effect” and runs the fantastic site Techdirt, and we had a good, chewy discussion (MP3) about my new novel Walkaway; he’s just posted it to the Techdirt podcast. Hope you enjoy it as much as I did!

Categories: Blogs