You are hereFeed aggregator

Feed aggregator


On Studying at RADA: "Parting is such sweet sorrow..."

Casey McKinnon - 2015, August 24 - 18:09

The cast of As You Like it at the Royal Academy of Dramatic Art in July 2015 (Photo courtesy of Nathanael Taylor)

So many people have been asking me what it was like to study Shakespeare at the Royal Academy of Dramatic Art (RADA). If I could describe it in a few words, I would say that it was: tiring; fun; hard; and satisfying. 

Though the time was short, we worked on so much. We worked every day on scenes and speeches from most of Shakespeare’s plays, especially the more difficult and lesser known ones, and my acting toolkit has expanded exponentially.

During the course of the Acting Shakespeare program, we had a number of presentations (or showings), including: 

  • Period dance - We presented at least six different styles from the Renaissance under Dancing Master Darren Royston, focusing more on dances done during the reign of Henry VIII and Elizabeth I.
  • Sonnets - My sonnet teacher (and now one of my favorite people in the whole world), Zoe Waites, chose Sonnet #40 for me to perform: “Take all my loves, my love, yea take them all.” It was scandalous.
  • Stage combat - We presented the fight scene in Act 1, Scene 1 of Romeo and Juliet. Our particular scene was set in a school rec room where a group of nerds (Capulets) were playing an RPG, when suddenly a bunch of Jocks (Montagues) came in and started causing trouble. We had some wonderfully choreographed hand-to-hand combat thanks to Master of Combat Bret Yount.
  • Scenes - My amazing scene teacher Tim Hardy thoughtfully selected a role for me to work on; I played Helena in in Act 1, Scene 3 of All’s Well That Ends Well. It ended very well… :)
  • Singing - Our choir of 28 students sung two madrigals together under the arrangement of Andrew Charity: “Since First I Saw Your Face” and “Adieu, Sweet Amaryllis.”
  • Monologues - I chose to work on a Queen Margaret speech from Henry VI, Part 3. With the gentlest of touches, my teacher (Alan David) pushed me to test new boundaries within the character. Someday I hope to play this character on stage; Queen Margaret is one of my favorite females in all of Shakespeare.

The three Rosalinds. (Photo courtesy of Nathanael Taylor)

Our last two weeks were devoted to producing an entire play, from a shortened rehearsal process to three performances. The director, Nona Shepphard, chose to work on As You Like It, which she set in Andy Warhol’s factory in the late 1960s, and I was absolutely thrilled to be cast as Rosalind. Due to the time constraints of preparing to put on a play in a week and a half, I shared the role with two other actresses, Amanda Gann and Shanna Sweeney. The role was broken up into thirds, and I got to play the final Rosalind who comes into her own and gets her happy ending.

It was incredibly tough to rehearse and perform a Shakespeare play on such a tight schedule, but spending 12+ hours a day on my craft was so satisfying. I’ve always wanted to work in TV as well, so I consider this training for my future series regular jobs.

Overall, I think the most beneficial things I got out of my training was an ease of stage physicality and a stronger confidence in my instincts and abilities. Though the program was difficult at times because I was learning from a number of teachers with conflicting views ranging from simple breathing to iambic pentameter, I also had teachers that trusted me with the text and let me do my thing. I was a bit like Dumbo learning that he didn’t need a feather to fly!

Rosalind prepares in her Ganymede costume. (Photo courtesy of Nathanael Taylor)

In addition to the teachers mentioned above, I’m grateful for the opportunity to do Alexander Technique and Laban under the tutelage of Katya Benjamin. Though I had taken Alexander before getting to RADA, her classes were pivotal to my development. I’d also like to say that I wish I had more time with Alison Hardy, who taught the Character in Text class, and Nick Hutchison, whose knowledge of history was so detailed that I took notes on every word that came out of his mouth. All of these great teachers will be in my heart and mind forevermore; it was a life-altering experience to learn from such brilliant people.

At this point, I’m back in Los Angeles and excited about the future. I have a new work ethic and schedule that’s perfect for television, as well as a toolkit for Shakespeare that’s overflowing. 

I will miss you, RADA, but more than anything I’m grateful for the knowledge that you’ve given me.

Stay in touch. We're glad you came MT @caseymckinnon: Parting is such sweet sorrow. I'll miss you terribly, RADA! pic.twitter.com/QLPnkHew8Y

— radalondon (@RADA_London) July 25, 2015

Categories: Blogs

Coming to Reno’s Grassroots Books this Friday!

Cory Doctorow - 2015, August 22 - 09:55


I’m doing a Q&A and signing at Reno’s Grassroots Books — a local, indie store with an emphasis on affordable reading for all — this Friday, Aug 28 at 6:30PM — just a quick stop on the way to That Thing in the Desert. I hope you’ll come by and say hello!

Categories: Blogs

Moving the origin of a structuring element

Matlab Image processing blog - 2015, August 21 - 04:00

A customer contacted Tech Support recently to ask the following question about structuring elements and dilation:

If I created a structuring element from the matrix [1 1; 1 1], then the origin of the structuring element is the (1,1) or upper-left element. How do I create a structuring element so that the origin is at (1,2) or (2,1)?

There are two equivalent ways to accomplish this.

In the first way, you add a row or column (or both) to the matrix that you pass to strel or imdilate so that the center of the new matrix is the desired structuring element origin. For example:

se = strel([0 1 1; 0 1 1; 0 0 0]) se = Flat STREL object containing 4 neighbors. Neighborhood: 0 1 1 0 1 1 0 0 0

In the second way, you pass the original 2-by-2 matrix to strel and then call the function translate to "move" the origin to the desired location.

se = strel([1 1; 1 1]) se = Flat STREL object containing 4 neighbors. Neighborhood: 1 1 1 1 se2 = translate(se,[-1 0]) se2 = Flat STREL object containing 4 neighbors. Neighborhood: 0 1 1 0 1 1 0 0 0 \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® R2015a

Categories: Blogs

Guardian column: Ulysses pacts and spying hacks: warrant canaries and binary transparency

Cory Doctorow - 2015, August 20 - 07:24


As the world’s governments exercise exciting new gag-order snooping warrants that companies can never, ever talk about, companies are trying out a variety of “Ulysses pacts” that automatically disclose secret spying orders, putting them out of business.

A “Ulysses pact” is a negotiating tactic in which one party voluntarily surrenders some freedom of action, named for the story of Ulysses ordering his men to tie him to the mast of his ship so that he couldn’t jump into the sea when he heard the sirens’ song. For example, a union leader heading into a negotiation might promise to resign rather than take a pay cut, making pay-cut demands useless (because if she acceded to such a demand, she’d have to resign before she could formalize the agreement).

In the world of secret spying orders, companies use “warrant canaries” as a kind of dead man’s switch: at regular intervals, they publish a transparency report with statistics for each kind of government request they’ve received, including “Secret spying orders: 0.” After receiving their first secret spying order, they stop publishing that line altogether. If the company sells its service as privacy-oriented, this is, effectively, suicide: the service’s users quit using it, and the spies have nothing.

But it’s a weak kind of Ulysses pact, because a CEO contemplating suicide-by-canary might just decide that one teensy lie isn’t such a big deal after all — and if spy agencies believe that this is the case, they’ll have every reason to use secret warrants, forcing the issue.

But technology gives us a new, stronger kind of Ulysses pact, one that takes the choice out of management’s hands — a self-enforcing self-destruct button, which has the potential to make some secret warrants totally useless: binary transparency.

There’s another kind of secret spying: malware implantation. This is when a government body orders a company to send some of its customers a software update that includes a backdoor. For example, the Saudi government once convinced Research in Motion to backdoor Blackberry devices within its borders. In May, 2014, the anonymously maintained Truecrypt project mysteriously shut down, leaving behind a cryptic note (possibly with a Dan-Brown-esque secret message in it). Many believe that they shut down in response to a government demand to weaken some or all of the Truecrypt programs in the wild.

In the case of programs that run on user’s computers there’s “binary transparency.” When a program with binary transparency receives an update, it computes that update’s “hash” (a mathematical fingerprint) and sends it to a server maintained by a disinterested third party. It also checks the hashes of all the other updates that have been received by all the other versions of the program that have checked in. If it sees that it has got a special update, it refuses to install it and alerts the user.

This is much stronger, more effective Ulysses pact. If a spy agency knows that any attempt to implant malware on a user’s computer through a software update will both fail and raise an alarm, there is absolutely no reason even to try.

‘Warrant canaries': a subtle hint that your email provider is compromised [The Guardian]

(Image: Herbert James Draper – Ulysses and the Sirens (1910), public domain)

Categories: Blogs

Ellipse visualization and regionprops

Matlab Image processing blog - 2015, August 17 - 13:22

A blog reader asked me recently how to visualize the ellipse-based measurements computed by regionprops. The reader wanted to superimpose the estimated ellipses on the image.

To refresh your memory: The function regionprops, which computes geometrical measurements of image regions, offers several measurements that are based on fitting an ellipse to the region. (If you must know, the ellipse fit is computing by matching second-order moments.) These measurements are:

  • MajorAxisLength
  • MinorAxisLength
  • Orientation

I would plot an ellipse using a parametric equation. Conveniently, the Wikipedia article on ellipses has a parametric equation in a form that's just right:

$$X(t) = X_c + a \cos t \cos \phi - b \sin t \sin \phi$$

$$Y(t) = Y_c + a \cos t \sin \phi + b \sin t \cos \phi$$

where $(X_c,Y_c)$ is the ellipse center, $a$ and $b$ are the major and minor axis lengths, and $\phi$ is the angle between the x-axis and the major axis.

Let's try it with this image, which contains a bunch of ellipse-like objects:

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

Ask regionprops to compute all the ellipse-related measurements:

s = regionprops(bw,{... 'Centroid',... 'MajorAxisLength',... 'MinorAxisLength',... 'Orientation'}) s = 69x1 struct array with fields: Centroid MajorAxisLength MinorAxisLength Orientation

Here's what the measurements look like for the seventh object:

s(7) ans = Centroid: [37.9286 226.9732] MajorAxisLength: 30.9655 MinorAxisLength: 9.7466 Orientation: -64.8058

Now write a loop that computes the ellipse curves one at a time, for each object, and superimposes the curve on the image.

figure imshow(bw,'InitialMagnification','fit') t = linspace(0,2*pi,50); hold on for k = 1:length(s) a = s(k).MajorAxisLength/2; b = s(k).MinorAxisLength/2; Xc = s(k).Centroid(1); Yc = s(k).Centroid(2); phi = deg2rad(-s(k).Orientation); x = Xc + a*cos(t)*cos(phi) - b*sin(t)*sin(phi); y = Yc + a*cos(t)*sin(phi) + b*sin(t)*cos(phi); plot(x,y,'r','Linewidth',5) end hold off

That's it!

Enjoy.

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

. The % reader wanted to superimpose the estimated ellipses on the image. % % To refresh your memory: The function |regionprops|, which computes geometrical % measurements of image regions, offers several measurements that are based on % fitting an ellipse to the region. (If you must know, the ellipse fit is % computing by matching second-order moments.) These measurements are: % % * MajorAxisLength % * MinorAxisLength % * Orientation % % I would plot an ellipse using a parametric equation. Conveniently, the % has a % parametric equation in a form that's just right: % % $$X(t) = X_c + a \cos t \cos \phi - b \sin t \sin \phi$$ % % $$Y(t) = Y_c + a \cos t \sin \phi + b \sin t \cos \phi$$ % % where $(X_c,Y_c)$ is the ellipse center, $a$ and $b$ are the major and minor % axis lengths, and $\phi$ is the angle between the x-axis and the major axis. % % Let's try it with this image, which contains a bunch of ellipse-like objects: url = 'http://blogs.mathworks.com/steve/files/rice-bw.png'; bw = imread(url); imshow(bw) %% % Ask |regionprops| to compute all the ellipse-related measurements: s = regionprops(bw,{... 'Centroid',... 'MajorAxisLength',... 'MinorAxisLength',... 'Orientation'}) %% % Here's what the measurements look like for the seventh object: s(7) %% % Now write a loop that computes the ellipse curves one at a time, for each % object, and superimposes the curve on the image. figure imshow(bw,'InitialMagnification','fit') t = linspace(0,2*pi,50); hold on for k = 1:length(s) a = s(k).MajorAxisLength/2; b = s(k).MinorAxisLength/2; Xc = s(k).Centroid(1); Yc = s(k).Centroid(2); phi = deg2rad(-s(k).Orientation); x = Xc + a*cos(t)*cos(phi) - b*sin(t)*sin(phi); y = Yc + a*cos(t)*sin(phi) + b*sin(t)*cos(phi); plot(x,y,'r','Linewidth',5) end hold off %% % That's it! % % Enjoy. ##### SOURCE END ##### 097d844e16914f228cb6f4c0d2dc7a43 -->

Categories: Blogs

Interview with O’Reilly Radar podcast

Cory Doctorow - 2015, August 17 - 09:15

I did an interview (MP3) with the O’Reilly Radar podcast at the Solid conference last month; we talked about the Apollo 1201 project I’m doing with EFF.

In the absence of any other confounding factors, obnoxious stuff that vendors do tends to self-correct, but there’s an important confounding factor, which is that in 1998, Congress passed the Digital Millennium Copyright Act. In order to try and contain unauthorized copying, they made it a felony to break a lock that protects access to a copyrighted work or to tell people information that they could use to break that lock.

I’m way more worried about the fact that the [DMCA] law also criminalizes disclosing information about vulnerabilities in these systems.

Lawrence Lessig, who was on our board for many years and is a great friend and fellow of Electronic Frontier Foundation, talks about how there are four factors that regulate our society. There’s code, what’s technologically possible. There is law, what’s allowed. There’s norms, what’s socially acceptable. And then there are markets, what’s profitable. In many cases, the right thing is profitable and also socially acceptable and legal and also technologically possible. Every now and again you run up against areas where one or more of those factors just aren’t in harmony.

This summer, the EFF is launching its own certificate authority called ‘Let’s Encrypt‘ to try and overcome the fact that in order to have secure Web sessions, you effectively need permission from a big corporation that issues you a certificate. We’re going to issue free certificates to all comers starting this summer.

If you had a mobile device that was yours and that you trusted and that didn’t give your information to other people, it could amass an enormous amount of both explicit and implicit information about you. … Then, as that device moved thorough space, the things around it could advertise what kinds of services, opportunities, availabilities they had to the device without the device ever acknowledging that it received them, without the device telling them a single thing about you. Because your device knows a lot about you, more than you would ever willingly give out to a third party, it could actually make better inferences about what you should be doing at this time in this place than you would get if it were the other way around, if you were the thing being sensed instead of you being the thing that’s doing the sensing. I quite like that model. I think that’s a very exciting way of thinking about human beings as entities with agency and dignity and not just ambulatory wallets.

I think we’re already in a world where markets don’t solve all of our problems, but markets actually do discipline firms.

Categories: Blogs

Out-of-gamut colors

Matlab Image processing blog - 2015, August 11 - 04:00

The set of colors that can be represented using a particular color space is called the gamut. Some L*a*b* color values may be out of gamut when converted to RGB. You know that a converted RGB color is out of gamut when any of its component values is less than 0 or greater than 1.

lab = [80 -130 85]; lab2rgb(lab) ans = -0.6210 0.9537 -0.1926

The negative values demonstrate that the L*a*b* color [80 -130 85] is not in the gamut of the sRGB color space, which is the default RGB color space used by lab2rgb. A different RGB color space, Adobe RGB (1998), has a larger gamut than sRGB. Use the 'ColorSpace' parameter to convert a L*a*b* color to the Adobe color space.

lab2rgb(lab,'ColorSpace','adobe-rgb-1998') ans = 0.1234 0.9522 0.1073

Because all the output values are between 0.0 and 1.0 (inclusive), you can conclude that the L*a*b* color [80 -130 85] is inside the Adobe RGB (1998) gamut.

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

Categories: Blogs

iPhone and Android sensor measurements

Matlab Image processing blog - 2015, August 10 - 04:00

Here's something cool to try ...

I just downloaded the MATLAB Support Package for Apple iOS Sensors and the latest MATLAB Mobile app for my iPhone.

So the first thing I did was throw and catch my phone while logging the phone's acceleration sensors.

Here's the result:

You can see the toss at 1 second, the catch at 2 seconds, and the free fall in between.

If you have an Android phone, try the MATLAB Support Package for Android Sensors.

Be sure to look at the system requirements for these support packages. You'll need the latest release of MATLAB, R2015a, to use the iOS package. You need R2014a or later to use the Android package, or you can try this earlier package to use with releases R2013a and R2013b.

Just don't blame me if you drop your phone!

Categories: Blogs

This is Book Release Week!

Flog - 2015, August 9 - 13:09

ITS HERE! I’m on a plane to NYC right now to start my book tour. 12 cities, ending in PAX. And then DragonCon, SLC Comicon, and then NYCC to wrap it all up. Whew, definitely a vacation after that. Involving Mai Tais hopefully

I’m really nervous because even today some people got early copies in the mail, and they’re currently reading through my life story, and it feels a bit ticklish, like someone poking through my underwear drawer, lol. A sensation I’ll get used to as the launch happens, I’m sure. I’m slightly afraid they might find something embarrassing or someone might get mad at me about a fact they dispute, etc etc. Already some of the press headlines are provoking some ass-y comments from the fringe negative gaming elements, so I’ve cut myself off reading reviews and such that aren’t directed at me. But ultimately, I’m so happy with the book, and I hope most people will be too! It’s so hard to put a creation out there though, especially one you’re invested in emotionally, so I can just take comfort in the fact that I did the very best book I could, and even if a few people are touched by it, it’s enough. Creativity isn’t about ourselves, it’s about the way the things we create affect other people. (Effect? Grr. I always forget).

If any of you can make it out to the cities I’m touring that would be wonderful! The links are on my Facebook Events Page and if you’re in the UK your orders will help a lot, here’s a Sweepstakes UK link if you want some possible prize incentive!

And leave a comment if you’ve started reading, let me know what you think, what picture you laughed at most, or if you were inspired to try something new because of it!

Categories: Blogs

Typecast got faster in R2014b

Matlab Image processing blog - 2015, August 7 - 13:26

Some years ago we added the function typecast to MATLAB. I've been wanting to write about this useful little function ever since we significantly speeded it up in the R2014b release.

The function typecast converts numeric values from one type to another based on the underlying bytes in the numeric representation.

Clear as mud, right? Let me try a simple example to illustrate. Here is a vector of two numbers, each of which is represented using one byte:

x = uint8([128 6]) x = 128 6

The call typecast(x,'uint16') takes those two one-byte numbers and converts them to one 16-bit number by jamming together the original bytes.

y = typecast(x,'uint16') y = 1664

Here's how the number 1664 is related to the original pair of numbers:

128 + 6*2^8 ans = 1664

If you give typecast four one-byte numbers, it will happily convert them into a pair of two-byte numbers.

p = uint8([128 6 200 3]) p = 128 6 200 3 typecast(p,'uint16') ans = 1664 968

Or, if you prefer, it will convert them into one four-byte number:

typecast(p,'uint32') ans = 63440512

The function typecast performs these conversions between all of the integer and floating-point numeric types. These days I tend to use typecast (together with its cousin swapbytes) when writing low-level binary file reading code. For files that fit easily into memory, I might just read all the file bytes at once using fileread, and then I'll use indexing, swapbytes, and typecast into meaningful MATLAB data.

Let's examine how long it takes to perform this conversion. First, make a vector containing 256 one-byte values.

bytes = uint8(0:255);

Now use timeit to estimate how long it takes to convert those values to 128 two-byte values.

f = @() typecast(bytes,'uint16'); t_microseconds = timeit(f) * 1e6 t_microseconds = 19.8762

How would you expect the computation time to change as the input vector gets longer?

Here's a plot of computation times that I measured using MATLAB R2014a.

r2014a = load('typecast speedup R2014a ah-eddins-maci'); plot(r2014a.n*256,r2014a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance (R2014a)')

The computation time appears to be proportional to the input vector length, which is not too surprising.

And here are the results measured using the latest MATLAB (R2015a).

r2015a = load('typecast speedup R2015a ah-eddins-maci'); plot(r2015a.n*256,r2015a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance (R2015a)')

To make the comparison easier, show the results on the same plot.

plot(r2014a.n*256,r2014a.times*1e6) hold on plot(r2015a.n*256,r2015a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance') legend({'R2014a','R2015a'})

Now that is a little surprising! Not only is the R2015a computation time lower, it appears to be independent of the input vector length. That's because the implementation has been optimized to avoid making a copy in memory of the input vector's data. (For more about this kind of optimization, see Loren's 2006 blog post about MATLAB memory use for functions and variables.)

Have you had reason to use typecast in your own work? If so, please leave a comment. I'd be very interested to hear about your application.

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

to MATLAB. % I've been wanting to write about this useful little function ever since we % significantly speeded it up in the R2014b release. % % The function |typecast| converts numeric values from one type to another based % on the underlying bytes in the numeric representation. % % Clear as mud, right? Let me try a simple example to illustrate. Here is a % vector of two numbers, each of which is represented using one byte: x = uint8([128 6]) %% % The call |typecast(x,'uint16')| takes those two one-byte numbers and converts them to one % 16-bit number by jamming together the original bytes. y = typecast(x,'uint16') %% % Here's how the number 1664 is related to the original pair of numbers: 128 + 6*2^8 %% % If you give |typecast| four one-byte numbers, it will happily convert them % into a pair of two-byte numbers. p = uint8([128 6 200 3]) %% typecast(p,'uint16') %% % Or, if you prefer, it will convert them into one four-byte number: typecast(p,'uint32') %% % The function |typecast| performs these conversions between all of the integer % and floating-point numeric types. These days I tend to use |typecast| % (together with its cousin |swapbytes|) when writing low-level binary file % reading code. For files that fit easily into memory, I might just read all the % file bytes at once using |fileread|, and then I'll use indexing, |swapbytes|, % and |typecast| into meaningful MATLAB data. % % Let's examine how long it takes to perform this conversion. First, make a % vector containing 256 one-byte values. bytes = uint8(0:255); %% % Now use |timeit| to estimate how long it takes to convert those values to 128 % two-byte values. f = @() typecast(bytes,'uint16'); t_microseconds = timeit(f) * 1e6 %% % How would you expect the computation time to change as the input vector gets % longer? % % Here's a plot of computation times that I measured using MATLAB R2014a. r2014a = load('typecast speedup R2014a ah-eddins-maci'); plot(r2014a.n*256,r2014a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance (R2014a)') %% % The computation time appears to be proportional to the input vector length, % which is not too surprising. %% % And here are the results measured using the latest MATLAB (R2015a). r2015a = load('typecast speedup R2015a ah-eddins-maci'); plot(r2015a.n*256,r2015a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance (R2015a)') %% % To make the comparison easier, show the results on the same plot. plot(r2014a.n*256,r2014a.times*1e6) hold on plot(r2015a.n*256,r2015a.times*1e6) xlabel('Number of input bytes') ylabel('Conversion time (microseconds)') ax = gca; ax.YLim(1) = 0; title('typecast performance') legend({'R2014a','R2015a'}) %% % Now that is a little surprising! Not only is the R2015a computation time % lower, it appears to be independent of the input vector length. That's because % the implementation has been optimized to avoid making a copy in memory of the % input vector's data. (For more about this kind of optimization, see Loren's % .) % % Have you had reason to use |typecast| in your own work? If so, please leave a % comment. I'd be very interested to hear about your application. ##### SOURCE END ##### 1d8a39c0a0404a6a8f773915d1c6e902 -->

Categories: Blogs

Parenting and the Internet: the smarter, missing third way

Cory Doctorow - 2015, August 5 - 05:45


My new Guardian column, What is missing from the kids’ internet? discusses three different approaches to teaching kids information literacy: firewall-based abstinence education; trust/relationship-based education, and a third way, which is the proven champion of the offline world.


That third way is making media for kids and grownups to use/enjoy/experience together. It’s what made the mission-driven Sesame Street so successful in its mission and the profit-driven Disneyland so profitable. We have some great media for grownups and kids to do beside one another (Scratch, Minecraft, Youtube), but nothing to do with each other.

There’s two ways a conversation about the internet and parenting can go: the first way, which is also the stupid way, is to focus on how to stop kids from accessing the Bad Internet and doing Dumb Things there.

This is the David Cameron approach. David Cameron has proposed that all the porn sites in the world should check and record incoming UK visitors’ ages – in practice, this means getting their credit-card numbers (and, inevitably, leaking them, tied to their porn preferences). Sites that don’t comply will be dealt with: in practice, this means being blocked by the Great Firewall of Cameron, a foolish errand begun in the last parliament whereby an unaccountable, non-adversarial process is used to arbitrarily block websites at the border.

This is the stupid way. Firewalls don’t work. Kids evade them. One of the UK’s tech success stories is Jack Cator, an entrepreneur who launched the Hide My Ass proxy service when he was 16 to allow children to evade the firewalls deployed by their schools. Great Firewalls are great failures. In China, the birthplace of the Great Firewall, the major online control strategy isn’t censorship, it’s disinformation: the Chinese politburo employs a vast cadre of trolls who rubbish anyone who talks about things the government dislikes, discrediting them and muddying the waters. In China, which has the world’s largest population of network engineers, where the majority of the world’s routing equipment is made, where the law provides for penalties up to and including having your organs given to party members — in that China, they can’t make firewalls work.

This is the stupid way – but not just because it doesn’t work. Even if it did work, is there anyone who believes that your kids will never get unfiltered internet access? When (not if) they do, how will you have prepared them to use it responsibly? What life-skills will you have equipped them with? Abstinence-based education is not evidence-based education.

What is missing from the kids’ internet? [The Guardian]

Categories: Blogs

Q&A from Clarion West benefit/reading in Seattle

Cory Doctorow - 2015, July 30 - 07:12

Here’s the Q&A portion of the Cory Doctorow in Conversation event I did to benefit the Clarion West Writers’ Workshop in Seattle on July 28, 2015. The audio was provided Frank Catalano, who also conducted the interview. MP3

Categories: Blogs

Signed Book Copies

Flog - 2015, July 27 - 15:07

A lot of people want to know how they can get a signed copy of a book if they’re too far away from one of my signings (feliciadaybook.com/events.html for links) and I finally got a list where you can pre-order a signed copy to be sent to you! HERE YOU GO!

WORD Bookstore, @wordbookstores
Order link: http://www.wordbookstores.com/signed-felicia-day

Bookends, @BookendsNJ
Preorder by phone: 201-445-0726 or

http://mkt.com/bookends/felicia-day-pre-order-for-pick-up-copy-of-your-re-never-weird-on-the-internet-event-tuesday-aug-pm

BookPeople, @BookPeople
Order link: http://www.bookpeople.com/book/9781476785653

Changing Hands, @changinghands
Order link: http://www.changinghands.com/feliciaday

Skylight Books, @skylight books
Order link: http://www.skylightbooks.com/event/felicia-day-presents-her-new-book-youre-never-weird-internet-almost-memoir

Book Passage, @bookpassage
Order link: http://www.bookpassage.com/event/felicia-day-youre-never-weird-internet-almost

Bookshop Santa Cruz, @BookshopSC
Order link: http://www.bookshopsantacruz.com/event/felicia-day-youre-never-weird-internet-almost

Powell’s Books, @Powells
Order link: http://www.powells.com/biblio/2-9781476785653-42

Categories: Blogs

New Horizons Pluto Program Used MATLAB and Image Processing for Navigation

Matlab Image processing blog - 2015, July 19 - 11:59

Beginning about one year before finally arriving at Pluto, the New Horizons spacecraft and program team used its onboard cameras to refine its trajectory towards Pluto. NASA calls this process Opnav (optical navigation).

Starting on July 20, 2014 and continuing through this month, the spacecraft acquired almost 800 pictures using three different scientific cameras. The pictures were transmitted to Earth for processing by two independent navigation teams. The PNAV (Project Navigation) team at KinetX had primary navigation responsibility. The PNAV team used MATLAB software. The INAV (Independent Navigation) team at the Jet Propulsion Laboratory used software written in Fortran and C. The PNAV and INAV navigation systems were tested and compared with each other during the mission’s Jupiter flyby and were found to be in agreement.

Image Analysis and Optimization Applied to Navigation

Image processing and optimization methods were used to determine the location of Pluto and its moons with high precision as soon as possible in the mission. Accurate course corrections early saves much fuel later.

Several factors posed challenges to determining the exact trajectory to Pluto:

  • The low resolution of pictures while the spacecraft was still far away limited the precision of the computations.
  • The size, shape, and surface brightness variation of Pluto and its moons were not well known. These unknowns had to be estimated and compensated for.
  • The effects of spacecraft motion, pointing drift while the camera was collecting light, and the travel time of light all had to be included in the computation.
The SPICE Toolkit

The PNAV team at KinetX used the MATLAB version of NASA’s SPICE Toolkit, which is used in multiple planetary missions to determine:

  • where the spacecraft is located
  • how the spacecraft and its instruments are oriented
  • the location, size, shape, and orientation of the target being observed
  • the events on the spacecraft or ground that might affect scientific observations
Main Navigational Analysis Steps

Determining the best path to Pluto required three steps:

  1. Find the center of the stars in the field of view and match them to star catalogs.
  2. Find the spacecraft attitude, or direction that the spacecraft is pointing.
  3. Find the center of the target bodies (Pluto and its moons).

Like the overall approach of using two independent navigation programs for the program, each of these analysis steps was solved using two different algorithms, and the results were cross-checked.

In each case, one of the algorithms was based on image processing methods, and the other was based on a nonlinear least squares estimator.

Finding the center of stars was accomplished using matched filtering using previously acquired images of stars in the star catalog.

Spacecraft attitude was determined using an image registration technique that compensated for x- and y-shifts in the image plane as well as rotation.

Target body center-finding used cross-correlation with a model of the target body. As the mission proceeded, the target body models were refined based on new data about the size, shape, and surface brightness variations of Pluto and its moons.

Images Callirrhoe moon images from Jupiter flyby test

Image credit: Owen, Dumont, and Jackman, “Optical Navigation Preparations for New Horizons Pluto Flyby”

Simulated observations of Pluto system during final approach

Image credit: APL / New Horizons GeoViz

Pluto and Charon images, April 12–18, 2015

Image credit: NASA/Johns Hopkins University Applied Physics Laboratory/Southwest Research Institute

References

“Optical Navigation Preparations for New Horizons Pluto Flyby”

“New Horizons to take new photos of Pluto and Charon, beginning optical navigation campaign”

“An Overview of SPICE: NASA’s Ancillary Data System for Planetary Missions”

Documentation for MATLAB implementation of SPICE Toolkit

New Horizons Image Gallery

Trajectory correction, a 93-second thruster burn, on March 10, 2015, guided in part by optical-navigation images of the Pluto system taken in January and February

Categories: Blogs

Get the MATLAB code

Matlab Image processing blog - 2015, July 15 - 13:34

Last week someone asked me how many people use the “Get the MATLAB code” link on my blog.

Do you know what that is? Try it now. Go to my recent post, “Displaying a color gamut surface,” and scroll down near the bottom. Just above the comment section you’ll see this:

Go ahead and click on that link. You should see something like this in your browser:

If you have used this little blog feature, I would appreciate you leaving me a comment about it.

Thanks!

Categories: Blogs

San Diego Comicon 2015

Flog - 2015, July 13 - 15:51

Here’s a roundup of my amazing SDCC 2015 trip! Did some press, signings, dancing….all of it, AWESOME!


Awesome photo and interview at the LA Times:
http://lat.ms/1CBImsN

Buzzfeed interview:

Blastr interview:
http://www.blastr.com/2015-7-13/exclusive-felicia-day-freedom-geek-culture-having-george-rr-martin-fan

Categories: Blogs

New Horizons arrives at Pluto tomorrow

Matlab Image processing blog - 2015, July 13 - 08:29

Image credit: NASA/JHUAPL/SWRI

The New Horizons spacecraft reaches its closest approach to Pluto tomorrow!

Check out NASA TV for the countdown starting at 7:30 AM (America/New York), Tuesday, July 14.

Follow @NASANewHorizons on Twitter.

Categories: Blogs

My upcoming events in Seattle

Cory Doctorow - 2015, July 9 - 10:58


I’m teaching the Clarion West writing workshop in Seattle in late July, and you can come see me at two events, one on July 25, the other on July 28.

Postcyberpunk and Paella: An intimate evening with Cory Doctorow and Peter Biddle to benefit Clarion West. July 25, 2015 at 7 p.m.

Cory Doctorow in Conversation: Please join us for an evening of conversation with Cory Doctorow on July 28 at 7 p.m. at the University Temple United Methodist Church, 1415 Northeast 43rd Street, Seattle (across the street from the University Book Store).

Teaching Clarion West is a tough grind. I’m afraid that I won’t have time for any social calls on this trip — advance notice!

See you there!

Categories: Blogs

ICIP 2015

Matlab Image processing blog - 2015, July 6 - 11:29

I'm starting to get ready for ICIP in September. I'll be giving a talk about MATLAB on Monday, September 28. Go to the Tutorials and Workshops page and click on "MATLAB Today" for details.

I hope to see many of you in Québec City!

Categories: Blogs

Book Tour Dates!

Flog - 2015, July 6 - 09:49

Hey guys! Tons of book tour updates below! 11 cities and perhaps a few events to come! In addition to DragonCon, SLC Con, and a few other cons coming up. WHEW! Further info at feliciadaybook.com

MONDAY, AUGUST 10 – NEW YORK CITY
HOUSING WORKS BOOKSTORE CAFÉ | 7:00pm
126 Crosby Street
New York, NY 10012
*Fans who pre-purchase book through WORD Bookstore or Housing Works are guaranteed entry. Time/space permitting, signing line may be open to public who purchased book elsewhere.
Details: http://smarturl.it/FDNYC

TUESDAY, AUGUST 11 – RIDGEWOOD, NJ
BOOKENDS | 7:00pm
211 East Ridgewood Avenue
Ridgewood, NJ 07450
*Book purchase from Bookends required to enter signing line.
Details: http://smarturl.it/FDNJ

WEDNESDAY, AUGUST 12 – BROOKLINE, MA
COOLIDGE CORNER THEATER with Brookline Booksmith | 6:00pm
290 Harvard Street
Brookline, MA 02446
*Tickets are $5 or free with the purchase of book from Brookline Booksmith.
Details: http://smarturl.it/FDMA

THURSDAY, AUGUST 13 – TORONTO, ONTARIO
INDIGO EATON CENTRE | 7:00pm
220 Yonge Street
Toronto, Ontario M5B2H1
*Details to come
Details: http://smarturl.it/FDTOR

SATURDAY, AUGUST 15 – AUSTIN, TX
BOOKPEOPLE | 6:00pm
603 North Lamar Boulevard
Austin, TX 78703
*Ticket includes entry and one book. Fans who purchase the book elsewhere can buy something of equal value from BookPeople (a gift card is the typical option) in order to receive a ticket for the signing line.
Details: http://smarturl.it/FDAUS

MONDAY, AUGUST 17 – TEMPE, AZ
CHANGING HANDS | 7:00pm
6428 South McClintock Drive
Tempe, AZ 85283
*Book purchase from Changing Hands required to enter signing line.
Details: http://smarturl.it/FDAZ

WEDNESDAY, AUGUST 19 – LOS ANGELES, CA
SKYLIGHT BOOKS | 7:30pm
1818 North Vermont Avenue
Los Angeles, CA 90027
*Book purchase from Skylight required to enter signing line.
Details: http://smarturl.it/FDLA

THURSDAY, AUGUST 20 – SAN FRANCISCO, CA
JEWISH COMMUNITY CENTER OF SAN FRANCISCO | 7:00pm
3200 California Street
San Francisco, CA 94118
*Ticketed event
Details: http://smarturl.it/FDSFJCC

FRIDAY, AUGUST 21 – SAN FRANCISCO, CA
BOOK PASSAGE | 12:30pm
1 Ferry Building
San Francisco, CA 94111
*Book required to enter signing line.
Details: http://smarturl.it/FDSFBP

SATURDAY, AUGUST 22 – SANTA CRUZ, CA
BOOKSHOP SANTA CRUZ | 7:00pm
1520 Pacific Avenue
Santa Cruz, CA 95060
*Details to come
Details: http://smarturl.it/FDStCruz

MONDAY, AUGUST 24 – PORTLAND, OR
POWELL’S BOOKS AT CEDAR HILLS CROSSING | 6:00pm
3415 SW Cedar Hills Boulevard
Beaverton, OR 97005
*Book required to enter signing line.
Details: http://smarturl.it/FDPDX

WEDNESDAY, AUGUST 26 – SEATTLE, WA
UNIVERSITY TEMPLE UNITED METHODIST CHURCH with University Bookstore | 7:00pm
1415 Northeast 43rd Street
Seattle, WA 98105
*Ticketed event.
Details: http://smarturl.it/FDSEA

 

 

Categories: Blogs