diff --git a/_includes/category_list.html b/_includes/category_list.html
index 360dd40..d83a611 100644
--- a/_includes/category_list.html
+++ b/_includes/category_list.html
@@ -5,6 +5,7 @@
+ {{ post.excerpt }}
{% endfor %}
diff --git a/_posts/media/2008-12-23-self-indulgent-musings-on-total.html b/_posts/media/2008-12-23-self-indulgent-musings-on-total.html
index 59a8f50..820194c 100644
--- a/_posts/media/2008-12-23-self-indulgent-musings-on-total.html
+++ b/_posts/media/2008-12-23-self-indulgent-musings-on-total.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Self-indulgent musings on total knowledge strategy games
diff --git a/_posts/media/2009-10-15-vendetta-online.html b/_posts/media/2009-10-15-vendetta-online.html
index 112ca03..8f326e2 100644
--- a/_posts/media/2009-10-15-vendetta-online.html
+++ b/_posts/media/2009-10-15-vendetta-online.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Vendetta Online
diff --git a/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html b/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html
index ceac319..2bf824d 100644
--- a/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html
+++ b/_posts/media/2009-11-03-vendetta-redux-eve-online-and-mmo-bug.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Vendetta redux, Eve Online, and the MMO bug
diff --git a/_posts/media/2010-01-08-scratching-itch.html b/_posts/media/2010-01-08-scratching-itch.html
index 42b9497..94b5e43 100644
--- a/_posts/media/2010-01-08-scratching-itch.html
+++ b/_posts/media/2010-01-08-scratching-itch.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Scratching the itch
diff --git a/_posts/media/2010-02-24-heavy-rain.html b/_posts/media/2010-02-24-heavy-rain.html
index 5e97cbb..658406e 100644
--- a/_posts/media/2010-02-24-heavy-rain.html
+++ b/_posts/media/2010-02-24-heavy-rain.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Heavy Rain
diff --git a/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html b/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html
index e783017..9b3025e 100644
--- a/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html
+++ b/_posts/media/2011-05-29-doctor-who-rebel-flesh-almost-people.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Rebel Flesh / The Almost People'
diff --git a/_posts/media/2011-05-31-rambling-review-portal-2.html b/_posts/media/2011-05-31-rambling-review-portal-2.html
index 327cd9f..23e07e7 100644
--- a/_posts/media/2011-05-31-rambling-review-portal-2.html
+++ b/_posts/media/2011-05-31-rambling-review-portal-2.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Rambling Review: Portal 2'
diff --git a/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html b/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html
index 0019890..3f44bb1 100644
--- a/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html
+++ b/_posts/media/2011-06-03-obligatory-river-song-speculation-thread.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Obligatory River Song speculation thread
diff --git a/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html b/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html
index f75c935..0805d5b 100644
--- a/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html
+++ b/_posts/media/2011-06-04-doctor-who-good-man-goes-to-war.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: A Good Man Goes to War'
diff --git a/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html b/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html
index df4de85..ce3f4ab 100644
--- a/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html
+++ b/_posts/media/2011-06-12-d-post-mortem-i-wanna-cast-missile.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'D&D Post-mortem: I wanna cast ''magic missile''!'
diff --git a/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html b/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html
index 188e8aa..60b227e 100644
--- a/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html
+++ b/_posts/media/2011-06-15-duke-nukem-forever-should-not-exist.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Duke Nukem Forever should not exist
diff --git a/_posts/media/2011-06-22-rambling-review-braid.html b/_posts/media/2011-06-22-rambling-review-braid.html
index addacc0..1c3e74d 100644
--- a/_posts/media/2011-06-22-rambling-review-braid.html
+++ b/_posts/media/2011-06-22-rambling-review-braid.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Rambling Review: Braid'
diff --git a/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html b/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html
index 23b4e2d..98da698 100644
--- a/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html
+++ b/_posts/media/2011-06-29-i-know-what-going-to-happen-in-doctor.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: I know what's going to happen in Doctor Who series 6
diff --git a/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html b/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html
index 49ca1e9..28e7410 100644
--- a/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html
+++ b/_posts/media/2011-07-02-d-post-mortem-getting-creative-with.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'D&D Post-mortem: Getting creative with your mage hands'
diff --git a/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html b/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html
index 3fe8e8a..13b7c80 100644
--- a/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html
+++ b/_posts/media/2011-07-22-puzzle-log-dante-shepherd-twitter-puzzle.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Puzzle Log: Dante Shepherd''s twitter puzzle'
diff --git a/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html b/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html
index 29ec822..0201818 100644
--- a/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html
+++ b/_posts/media/2011-08-28-doctor-who-let-kill-hitler.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: Let''s Kill Hitler'
diff --git a/_posts/media/2011-09-06-doctor-who-night-terrors.html b/_posts/media/2011-09-06-doctor-who-night-terrors.html
index 9957ef6..92af8da 100644
--- a/_posts/media/2011-09-06-doctor-who-night-terrors.html
+++ b/_posts/media/2011-09-06-doctor-who-night-terrors.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: Night Terrors'
diff --git a/_posts/media/2011-09-13-doctor-who-girl-who-waited.html b/_posts/media/2011-09-13-doctor-who-girl-who-waited.html
index 4774eed..e8c56d4 100644
--- a/_posts/media/2011-09-13-doctor-who-girl-who-waited.html
+++ b/_posts/media/2011-09-13-doctor-who-girl-who-waited.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Girl Who Waited'
diff --git a/_posts/media/2011-09-19-doctor-who-god-complex.html b/_posts/media/2011-09-19-doctor-who-god-complex.html
index dc0d686..51fbedd 100644
--- a/_posts/media/2011-09-19-doctor-who-god-complex.html
+++ b/_posts/media/2011-09-19-doctor-who-god-complex.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The God Complex'
diff --git a/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html b/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html
index 3d36203..fc9cf78 100644
--- a/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html
+++ b/_posts/media/2011-09-22-puzzle-log-mgwcc-172-vision-thing.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Puzzle Log: MGWCC #172 - The Vision Thing'
diff --git a/_posts/media/2011-09-28-doctor-who-closing-time.html b/_posts/media/2011-09-28-doctor-who-closing-time.html
index e3e3bd6..ab08cd9 100644
--- a/_posts/media/2011-09-28-doctor-who-closing-time.html
+++ b/_posts/media/2011-09-28-doctor-who-closing-time.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: Closing Time'
diff --git a/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html b/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html
index 81b24c1..47f8f91 100644
--- a/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html
+++ b/_posts/media/2011-10-05-doctor-who-wedding-of-river-song.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Wedding of River Song'
diff --git a/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html b/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html
index 63fa48d..6bcd846 100644
--- a/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html
+++ b/_posts/media/2011-12-05-why-i-excited-about-legend-of-korra.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Why I'm excited about The Legend of Korra
diff --git a/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html b/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html
index 44a45c0..974a41d 100644
--- a/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html
+++ b/_posts/media/2011-12-12-wandering-son-reflections-episode-1-no.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 1 - "Onna no Kotte, Nande Dekiteru?"'
diff --git a/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html b/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html
index ff7948b..841eee5 100644
--- a/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html
+++ b/_posts/media/2011-12-15-wandering-son-reflections-episode-2.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 2 - "Kirai, Kirai, Daikirai"'
diff --git a/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html b/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html
index 0c00b20..a0d3d88 100644
--- a/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html
+++ b/_posts/media/2011-12-19-wandering-son-reflections-episode-3-to.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 3 - "Romio to Jurietto"'
diff --git a/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html b/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html
index e55c4bd..23dfa58 100644
--- a/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html
+++ b/_posts/media/2011-12-22-wandering-son-reflections-episode-4-no.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 4 - "Watashi no Namae o Ageru"'
diff --git a/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html b/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html
index e9a0fb2..c3a2a26 100644
--- a/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html
+++ b/_posts/media/2011-12-29-doctor-who-doctor-widow-and-wardrobe.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Doctor, The Widow, and the Wardrobe'
diff --git a/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html b/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html
index 8c51c57..adc4e16 100644
--- a/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html
+++ b/_posts/media/2012-01-01-wandering-son-reflections-episode-5-no.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 5 - "Natsu no Owari ni"'
diff --git a/_posts/media/2012-01-23-mit-mystery-hunt-2012.html b/_posts/media/2012-01-23-mit-mystery-hunt-2012.html
index 76a0e97..853e4e6 100644
--- a/_posts/media/2012-01-23-mit-mystery-hunt-2012.html
+++ b/_posts/media/2012-01-23-mit-mystery-hunt-2012.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: MIT Mystery Hunt 2012
diff --git a/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html b/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html
index d52486e..0f217e5 100644
--- a/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html
+++ b/_posts/media/2012-01-25-wandering-son-reflections-episode-6.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 6 - "Bunkasai"'
diff --git a/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html b/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html
index c390dc2..034002b 100644
--- a/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html
+++ b/_posts/media/2012-01-28-wandering-son-reflections-episode-7-no.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Wandering Son Reflections: Episode 7 - "Barairo no Hoho"'
diff --git a/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html b/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html
index 8027474..d8c0dd9 100644
--- a/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html
+++ b/_posts/media/2012-04-23-concerto-for-rainy-day-2012-carolina.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Concerto for a Rainy Day - 2012 Carolina Spring Go Tournament report
diff --git a/_posts/media/2012-04-26-languages-of-skyrim.html b/_posts/media/2012-04-26-languages-of-skyrim.html
index 364f22d..2bc409b 100644
--- a/_posts/media/2012-04-26-languages-of-skyrim.html
+++ b/_posts/media/2012-04-26-languages-of-skyrim.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: Languages of Skyrim
diff --git a/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html b/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html
index 9e5025c..8387e2b 100644
--- a/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html
+++ b/_posts/media/2012-09-07-doctor-who-asylum-of-daleks.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: Asylum of the Daleks'
diff --git a/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html b/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html
index 3864be1..2926816 100644
--- a/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html
+++ b/_posts/media/2012-09-21-doctor-who-dinosaurs-on-spaceship.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: Dinosaurs on a Spaceship'
diff --git a/_posts/media/2012-10-03-doctor-who-town-called-mercy.html b/_posts/media/2012-10-03-doctor-who-town-called-mercy.html
index a2b38bd..c0eed46 100644
--- a/_posts/media/2012-10-03-doctor-who-town-called-mercy.html
+++ b/_posts/media/2012-10-03-doctor-who-town-called-mercy.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: A Town Called Mercy'
diff --git a/_posts/media/2012-10-18-doctor-who-power-of-three.html b/_posts/media/2012-10-18-doctor-who-power-of-three.html
index d3cdad1..b5be18a 100644
--- a/_posts/media/2012-10-18-doctor-who-power-of-three.html
+++ b/_posts/media/2012-10-18-doctor-who-power-of-three.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Power of Three'
diff --git a/_posts/media/2012-10-25-an-adventure-in-transliteration.html b/_posts/media/2012-10-25-an-adventure-in-transliteration.html
index a624aa1..100dcc0 100644
--- a/_posts/media/2012-10-25-an-adventure-in-transliteration.html
+++ b/_posts/media/2012-10-25-an-adventure-in-transliteration.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: An adventure in transliteration
diff --git a/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html b/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html
index 889386e..5099013 100644
--- a/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html
+++ b/_posts/media/2012-10-31-doctor-who-angels-take-manhattan.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: media
layout: post
title: 'Doctor Who: The Angels Take Manhattan'
@@ -16,4 +17,4 @@ blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-14776317181898837
blogger_orig_url: http://www.stringofbits.net/2012/10/doctor-who-angels-take-manhattan.html
---
-The Angels Take Manhattan is about endings. Not the end of the world, or the universe, or time, like past epic stories have been about. It is about regular human endings, about saying goodbye and the things in life that keep us from the people we love. It is about leaving Neverland, finding that Peter won't be coming back for you after all, even though he might want to.
The theme of endings is played with from the opening on: the Doctor tearing out the last page of his book and declaring "I hate endings" is paid off at the end of the story with Amy's line "You and me, on the last page". The dialogue throughout the episode is poignant, but this pair of lines perfectly bookends it. Rory's death is also (once again) hinted at throughout the episode. And as a counterpoint to the theme of endings, we have references to the last two and a half years scattered throughout this episode - small moments or lines of dialogue that echo Amy and Rory's story. That this is a departure story is coded deeply and obviously into this episode.
So, what force could possibly pull Wendy from Neverland? The answer is, of course, right there in the title: the Weeping Angels.
When I first watched Blink, it seemed to me that while they were a very clever idea, the Angels could only really work once, because there was only one story they were really suited for, and I had just watched it. So, I went in to The Time of Angels warily. And it turns out there was something else you could do with the Angels - collide them into a space marine action film and then suddenly change that into a story about trust. The Time of Angels also made the angels much scarier by suggesting that they were born in imagination, by thinking about them.
And coupled with this is a realization that didn't hit me until the second time I watched Blink: the Angels can move when nobody is looking at them. Yet repeatedly, in stories with the Angels, they are clearly visible as still statues when *none of the characters* are looking at them. Diegetically, then, they should be free to move, to zap their prey back in time.
So why do they stay stone-faced? The most interesting answer - and it seems consistent with Moffat's thematic tendencies and understanding of the franchise - is that the Angels have an meta-diegetic existence. They have to remain stone because *the viewer* is watching. Time of Angels also established, of course, that the Angels defense mechanism is based in part on their perceptions; they will remain stone as long as they *think* you can see them.
In other words, the Angels know you are watching them. They can see you.
And just in case you feel safe with the knowledge that it's only a television show, remember that even diegetically, they were born from imagination. They are by their nature written into existence.
But in The Angels Take Manhattan, it isn't just the Angels that have a hinted-at meta-diegetic existence. The entire episode plays heavily according to narrative logic, so much that it acquires the existence of the viewer in order to make basic sense. The first instance of this is when the Doctor explains that reading ahead - knowing your own personal future - makes it inevitable. That you can still change things as long as you don't know they are going to happen. Immediately after this declaration, though, Rory's name is shown on a tombstone. Note that this event is now inevitable - a fixed point has been created, to borrow the Doctor's phrase. But none of the *characters* have seen the tombstone, only the audience. And yet the fact that our seeing the tombstone makes Rory's death inevitable is clearly the intent of the narrative - otherwise there is no reason for it to be juxtaposed with the Doctor's speech about spoilers.
The other example is the Doctor's statement that they are allowed to read "things that are happening now, in parallel". There are two ways to read this: 'parallel' can mean 'written events that correspond with what we are doing right now'. But it also suggests that the two sets of events, in different time periods, are somehow happening at the same intrinsic 'moment'. Russel T Davies hinted at this idea in The End of Time, as well, when Rassilon says that the Doctor is "in possession of the Moment". But the 'present moment' in a story is really the moment that is receiving Narrative Focus. The "present" is the part of the story we're reading. This applies equally well to River's book and to the episode of Doctor Who.
So the diegetic rules of the narrative universe can operate on the meta-narrative level. This isn't really anything new for Doctor Who, but it has never been used this extensively before.
So the Angels have some amount of awareness of the narrative, and this gives them the power to attack the narrative. They never threaten to destroy the show completely, but they are able to write Amy and Rory out of it. And yet they exit with a dignity that few companions have ever been afforded. They die, but in a very normal, human way, after a full and normal life. They are ripped from Neverland, and that is tragic, but they still find a way to be happy.
And so Rory grows up, and adopts a son, who will eventually track down his grandfather and deliver a letter to him at a particular time and place. From his perspective, his son and daughter-in-law have barely been gone any time at all. This is a powerful parallel to the first appearance of the Angels, and a wonderful final note for Rory. It is a shame it didn't make it into the episode. I agree with the decision to cut it, though - the final notes for the episode are on Amy and the Doctor, which is correct. Rory receives the focus of the narrative for most of the episode itself, and Amy's departure hinges on her choice of Rory over the Doctor. Thematically, Brian's scene would have weakened the ending. It is better where it is, as a piece of para-textual lore, present but not interrupting the main narrative.
And so Amy grows up, not resenting a Doctor who never came back for her, but missing a friend who was separated by circumstance. It is a much kinder ending than I expected. And it comes on the heels of a story that emphasizes that leaving Fairyland is not a necessity, that it is okay to run away and stay a Fairy Child forever. So we know that this separation is cruel and unnecessary, required diegetically only by circumstance and meta-diegetically by the format of the show (which requires that companions come and go). The show has explicitly avoided allowing a reading that says we have to eventually grow up. Sometimes we do, but not because it is the only path to happiness.
\ No newline at end of file
+The Angels Take Manhattan is about endings. Not the end of the world, or the universe, or time, like past epic stories have been about. It is about regular human endings, about saying goodbye and the things in life that keep us from the people we love. It is about leaving Neverland, finding that Peter won't be coming back for you after all, even though he might want to.
The theme of endings is played with from the opening on: the Doctor tearing out the last page of his book and declaring "I hate endings" is paid off at the end of the story with Amy's line "You and me, on the last page". The dialogue throughout the episode is poignant, but this pair of lines perfectly bookends it. Rory's death is also (once again) hinted at throughout the episode. And as a counterpoint to the theme of endings, we have references to the last two and a half years scattered throughout this episode - small moments or lines of dialogue that echo Amy and Rory's story. That this is a departure story is coded deeply and obviously into this episode.
So, what force could possibly pull Wendy from Neverland? The answer is, of course, right there in the title: the Weeping Angels.
When I first watched Blink, it seemed to me that while they were a very clever idea, the Angels could only really work once, because there was only one story they were really suited for, and I had just watched it. So, I went in to The Time of Angels warily. And it turns out there was something else you could do with the Angels - collide them into a space marine action film and then suddenly change that into a story about trust. The Time of Angels also made the angels much scarier by suggesting that they were born in imagination, by thinking about them.
And coupled with this is a realization that didn't hit me until the second time I watched Blink: the Angels can move when nobody is looking at them. Yet repeatedly, in stories with the Angels, they are clearly visible as still statues when *none of the characters* are looking at them. Diegetically, then, they should be free to move, to zap their prey back in time.
So why do they stay stone-faced? The most interesting answer - and it seems consistent with Moffat's thematic tendencies and understanding of the franchise - is that the Angels have an meta-diegetic existence. They have to remain stone because *the viewer* is watching. Time of Angels also established, of course, that the Angels defense mechanism is based in part on their perceptions; they will remain stone as long as they *think* you can see them.
In other words, the Angels know you are watching them. They can see you.
And just in case you feel safe with the knowledge that it's only a television show, remember that even diegetically, they were born from imagination. They are by their nature written into existence.
But in The Angels Take Manhattan, it isn't just the Angels that have a hinted-at meta-diegetic existence. The entire episode plays heavily according to narrative logic, so much that it acquires the existence of the viewer in order to make basic sense. The first instance of this is when the Doctor explains that reading ahead - knowing your own personal future - makes it inevitable. That you can still change things as long as you don't know they are going to happen. Immediately after this declaration, though, Rory's name is shown on a tombstone. Note that this event is now inevitable - a fixed point has been created, to borrow the Doctor's phrase. But none of the *characters* have seen the tombstone, only the audience. And yet the fact that our seeing the tombstone makes Rory's death inevitable is clearly the intent of the narrative - otherwise there is no reason for it to be juxtaposed with the Doctor's speech about spoilers.
The other example is the Doctor's statement that they are allowed to read "things that are happening now, in parallel". There are two ways to read this: 'parallel' can mean 'written events that correspond with what we are doing right now'. But it also suggests that the two sets of events, in different time periods, are somehow happening at the same intrinsic 'moment'. Russel T Davies hinted at this idea in The End of Time, as well, when Rassilon says that the Doctor is "in possession of the Moment". But the 'present moment' in a story is really the moment that is receiving Narrative Focus. The "present" is the part of the story we're reading. This applies equally well to River's book and to the episode of Doctor Who.
So the diegetic rules of the narrative universe can operate on the meta-narrative level. This isn't really anything new for Doctor Who, but it has never been used this extensively before.
So the Angels have some amount of awareness of the narrative, and this gives them the power to attack the narrative. They never threaten to destroy the show completely, but they are able to write Amy and Rory out of it. And yet they exit with a dignity that few companions have ever been afforded. They die, but in a very normal, human way, after a full and normal life. They are ripped from Neverland, and that is tragic, but they still find a way to be happy.
And so Rory grows up, and adopts a son, who will eventually track down his grandfather and deliver a letter to him at a particular time and place. From his perspective, his son and daughter-in-law have barely been gone any time at all. This is a powerful parallel to the first appearance of the Angels, and a wonderful final note for Rory. It is a shame it didn't make it into the episode. I agree with the decision to cut it, though - the final notes for the episode are on Amy and the Doctor, which is correct. Rory receives the focus of the narrative for most of the episode itself, and Amy's departure hinges on her choice of Rory over the Doctor. Thematically, Brian's scene would have weakened the ending. It is better where it is, as a piece of para-textual lore, present but not interrupting the main narrative.
And so Amy grows up, not resenting a Doctor who never came back for her, but missing a friend who was separated by circumstance. It is a much kinder ending than I expected. And it comes on the heels of a story that emphasizes that leaving Fairyland is not a necessity, that it is okay to run away and stay a Fairy Child forever. So we know that this separation is cruel and unnecessary, required diegetically only by circumstance and meta-diegetically by the format of the show (which requires that companions come and go). The show has explicitly avoided allowing a reading that says we have to eventually grow up. Sometimes we do, but not because it is the only path to happiness.
diff --git a/_posts/technology/2006-08-22-programming-theory.html b/_posts/technology/2006-08-22-programming-theory.html
index 3ab2e6c..5c918fa 100644
--- a/_posts/technology/2006-08-22-programming-theory.html
+++ b/_posts/technology/2006-08-22-programming-theory.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Programming: The theory'
diff --git a/_posts/technology/2006-08-25-technophobia.html b/_posts/technology/2006-08-25-technophobia.html
index e08ae02..a6b9ee9 100644
--- a/_posts/technology/2006-08-25-technophobia.html
+++ b/_posts/technology/2006-08-25-technophobia.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Technophobia
diff --git a/_posts/technology/2006-11-09-decentralizing-second-life.html b/_posts/technology/2006-11-09-decentralizing-second-life.html
index 8a0f367..7fd8c84 100644
--- a/_posts/technology/2006-11-09-decentralizing-second-life.html
+++ b/_posts/technology/2006-11-09-decentralizing-second-life.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Decentralizing Second Life
diff --git a/_posts/technology/2007-05-01-28.html b/_posts/technology/2007-05-01-28.html
index 4090895..95c592f 100644
--- a/_posts/technology/2007-05-01-28.html
+++ b/_posts/technology/2007-05-01-28.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 2^8
diff --git a/_posts/technology/2007-05-13-then-they-fight-you.html b/_posts/technology/2007-05-13-then-they-fight-you.html
index ede9a6d..46c3aad 100644
--- a/_posts/technology/2007-05-13-then-they-fight-you.html
+++ b/_posts/technology/2007-05-13-then-they-fight-you.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Then They Fight You
diff --git a/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html b/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html
index 77da9f1..0b2acae 100644
--- a/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html
+++ b/_posts/technology/2007-07-24-linux-on-desktop-partial-solution.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Linux on the Desktop - a partial solution
diff --git a/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html b/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html
index f9e53ae..9e2b131 100644
--- a/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html
+++ b/_posts/technology/2008-11-19-nintendo-and-homebrew-arms-race.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Nintendo and the Homebrew Arms Race
diff --git a/_posts/technology/2008-12-06-paranoid-security-establishing.html b/_posts/technology/2008-12-06-paranoid-security-establishing.html
index 696621f..addd69e 100644
--- a/_posts/technology/2008-12-06-paranoid-security-establishing.html
+++ b/_posts/technology/2008-12-06-paranoid-security-establishing.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Paranoid Security: Establishing a Connection the Hard Way'
diff --git a/_posts/technology/2008-12-31-com-is-new-org.html b/_posts/technology/2008-12-31-com-is-new-org.html
index ce4d4ce..372585d 100644
--- a/_posts/technology/2008-12-31-com-is-new-org.html
+++ b/_posts/technology/2008-12-31-com-is-new-org.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: ".com is the new .org"
diff --git a/_posts/technology/2009-01-07-an-aside-on-education.html b/_posts/technology/2009-01-07-an-aside-on-education.html
index c3cfe3a..104234b 100644
--- a/_posts/technology/2009-01-07-an-aside-on-education.html
+++ b/_posts/technology/2009-01-07-an-aside-on-education.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: An aside on Education
diff --git a/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html b/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html
index 93c5c21..0b51360 100644
--- a/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html
+++ b/_posts/technology/2009-01-14-5-things-i-hate-about-fedora-10.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 5 things I hate about Fedora 10
diff --git a/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html b/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html
index f3dc2cd..b0516fc 100644
--- a/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html
+++ b/_posts/technology/2009-01-17-it-is-pitch-black-you-are-likely-to-be.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: It is pitch black. You are likely to be flamed by a fanboy.
diff --git a/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html b/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html
index 7afc75e..b7a4beb 100644
--- a/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html
+++ b/_posts/technology/2009-04-27-the-case-of-odd-networkmanager-behavior.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: The Case of the Odd NetworkManager Behavior
diff --git a/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html b/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html
index 5d3a9da..94d2a13 100644
--- a/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html
+++ b/_posts/technology/2009-05-27-how-to-fix-pulseaudio-in-fedora-in-2.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: How to fix PulseAudio in Fedora in 2 easy steps!
diff --git a/_posts/technology/2009-06-25-my-new-project-netjatafl.html b/_posts/technology/2009-06-25-my-new-project-netjatafl.html
index 4218fc0..f7fe7e6 100644
--- a/_posts/technology/2009-06-25-my-new-project-netjatafl.html
+++ b/_posts/technology/2009-06-25-my-new-project-netjatafl.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: My new project - netjatafl
diff --git a/_posts/technology/2009-07-02-twitter-from-command-line.html b/_posts/technology/2009-07-02-twitter-from-command-line.html
index d1def07..6a10b60 100644
--- a/_posts/technology/2009-07-02-twitter-from-command-line.html
+++ b/_posts/technology/2009-07-02-twitter-from-command-line.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Twitter from the command line
diff --git a/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html b/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html
index afc9d57..0153a5b 100644
--- a/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html
+++ b/_posts/technology/2009-07-03-thoughts-on-transhuman-revolution.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Thoughts on the Transhuman revolution
diff --git a/_posts/technology/2009-08-22-d20tools-03-is-here.html b/_posts/technology/2009-08-22-d20tools-03-is-here.html
index 94df819..5819c70 100644
--- a/_posts/technology/2009-08-22-d20tools-03-is-here.html
+++ b/_posts/technology/2009-08-22-d20tools-03-is-here.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: d20tools 0.3 is here
diff --git a/_posts/technology/2009-08-24-the-decentralized-metaverse.html b/_posts/technology/2009-08-24-the-decentralized-metaverse.html
index 9d55530..a966096 100644
--- a/_posts/technology/2009-08-24-the-decentralized-metaverse.html
+++ b/_posts/technology/2009-08-24-the-decentralized-metaverse.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: The Decentralized Metaverse
diff --git a/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html b/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html
index 635ef5e..b7bc196 100644
--- a/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html
+++ b/_posts/technology/2009-08-31-emacs-23-dbus-and-libnotify.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: emacs 23, dbus, and libnotify
diff --git a/_posts/technology/2009-08-31-so-close-netflix.html b/_posts/technology/2009-08-31-so-close-netflix.html
index e0ba50b..6b19acf 100644
--- a/_posts/technology/2009-08-31-so-close-netflix.html
+++ b/_posts/technology/2009-08-31-so-close-netflix.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: so close, Netflix
diff --git a/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html b/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html
index 553f987..83342b4 100644
--- a/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html
+++ b/_posts/technology/2009-09-08-tutorial-creating-opensim-terrain-with.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Tutorial: Creating OpenSim terrain with Blender'
diff --git a/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html b/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html
index afad78a..85bcf64 100644
--- a/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html
+++ b/_posts/technology/2010-01-08-bulding-bridges-in-metaverse.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Bulding bridges in the metaverse
diff --git a/_posts/technology/2011-05-26-bittorrent-linux-way.html b/_posts/technology/2011-05-26-bittorrent-linux-way.html
index d60a54a..6a8005b 100644
--- a/_posts/technology/2011-05-26-bittorrent-linux-way.html
+++ b/_posts/technology/2011-05-26-bittorrent-linux-way.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: BitTorrent, the Linux way
diff --git a/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html b/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html
index 171abdb..2c46d22 100644
--- a/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html
+++ b/_posts/technology/2011-06-02-gaming-in-linux-my-adventures-with-wine.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Gaming in Linux - my adventures with wine
diff --git a/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html b/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html
index ac63d9b..1281e32 100644
--- a/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html
+++ b/_posts/technology/2011-06-08-tabletop-roleplaying-over-internet.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Tabletop Roleplaying over the Internet
diff --git a/_posts/technology/2011-06-18-the-escapist-decline-of-website.html b/_posts/technology/2011-06-18-the-escapist-decline-of-website.html
index 9b7875b..09e2b12 100644
--- a/_posts/technology/2011-06-18-the-escapist-decline-of-website.html
+++ b/_posts/technology/2011-06-18-the-escapist-decline-of-website.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: The Escapist - decline of a website
diff --git a/_posts/technology/2011-06-26-project-treewars-beginning.html b/_posts/technology/2011-06-26-project-treewars-beginning.html
index 27710aa..891d847 100644
--- a/_posts/technology/2011-06-26-project-treewars-beginning.html
+++ b/_posts/technology/2011-06-26-project-treewars-beginning.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project TreeWars: The Beginning'
diff --git a/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html b/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html
index 0613222..9c0270a 100644
--- a/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html
+++ b/_posts/technology/2011-07-06-project-treewars-how-to-write-bad-code.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project TreeWars: How to write bad code'
diff --git a/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html b/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html
index 51b7077..7d0020d 100644
--- a/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html
+++ b/_posts/technology/2011-07-13-project-treewars-road-to-opengl.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project TreeWars: the road to OpenGL'
diff --git a/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html b/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html
index 4128bca..b836072 100644
--- a/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html
+++ b/_posts/technology/2011-07-17-project-treewars-when-is-opengl-not.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project TreeWars: When is an OpenGL not an OpenGL?'
diff --git a/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html b/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html
index 113db65..64820a9 100644
--- a/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html
+++ b/_posts/technology/2011-07-24-project-treewars-how-anna-got-her-title.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project TreeWars: How Anna got her Title Screen back'
diff --git a/_posts/technology/2011-09-07-more-thoughts-on-escapist.html b/_posts/technology/2011-09-07-more-thoughts-on-escapist.html
index 16091cc..f26b640 100644
--- a/_posts/technology/2011-09-07-more-thoughts-on-escapist.html
+++ b/_posts/technology/2011-09-07-more-thoughts-on-escapist.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: More thoughts on the Escapist
diff --git a/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html b/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html
index 4f134ec..96c3722 100644
--- a/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html
+++ b/_posts/technology/2011-09-15-ea-origin-or-case-study-in-bad-consumer.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'EA Origin, or: a Case Study in bad consumer experience'
diff --git a/_posts/technology/2011-10-14-dmr.html b/_posts/technology/2011-10-14-dmr.html
index 50c2ae1..218b95a 100644
--- a/_posts/technology/2011-10-14-dmr.html
+++ b/_posts/technology/2011-10-14-dmr.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: dmr
diff --git a/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html b/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html
index 30dcc8e..c91bf0c 100644
--- a/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html
+++ b/_posts/technology/2011-11-12-desura-what-steam-should-have-been.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Desura - what Steam should have been
diff --git a/_posts/technology/2011-12-18-project-treewars-going-in-circles.html b/_posts/technology/2011-12-18-project-treewars-going-in-circles.html
index 17b0d4d..9d74e0a 100644
--- a/_posts/technology/2011-12-18-project-treewars-going-in-circles.html
+++ b/_posts/technology/2011-12-18-project-treewars-going-in-circles.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'Project Treewars: Going in Circles'
diff --git a/_posts/technology/2012-04-19-pygo-go-game-client.html b/_posts/technology/2012-04-19-pygo-go-game-client.html
index 632a02d..073113b 100644
--- a/_posts/technology/2012-04-19-pygo-go-game-client.html
+++ b/_posts/technology/2012-04-19-pygo-go-game-client.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: pygo - a go game client
diff --git a/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html b/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html
index f10dbd1..adecc76 100644
--- a/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html
+++ b/_posts/technology/2014-12-27-what-hell-is-happening-to-psn.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: What the hell is happening to PSN?
@@ -17,4 +18,4 @@ blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-31280314593617704
blogger_orig_url: http://www.stringofbits.net/2014/12/what-hell-is-happening-to-psn.html
---
-All day yesterday, I watched my husband trying to log into FF XIV on the PS4. All day, the PSN sign in servers remained down. They're still listed as offline now. Xbox Live has been back up since yesterday afternoon. So what's taking Sony so long?
Keeping production servers online is a large part of what I do professionally, so... I know this problem domain pretty well. And I've seen a lot of... speculation that is deeply misinformed. Here are my thoughts on the problem.
First: the cause of the outage. All evidence points to this being a DDoS (Distributed Denial of Service) attack. This is when a whole lot of computers from a lot of different locations send as much traffic as they can at a service, in an attempt to overwhelm it and knock it offline. The most common tool used to send all this traffic is a botnet. Building and maintaining a botnet requires a large amount of technical expertise. *Using* a botnet, on the other hand, just requires money and connections. Because the people who take the time to build a botnet often want to make money from it, so they sell time on them.
Which brings us to the culprits of the DDoS; a group calling themselves Lizard Squad has taken credit for the attack. Whether they have any technical expertise is unknown, but they certainly seem to have access to one or more reasonably effective botnets. However, they claim to have stopped their attack yesterday, and PSN remains offline. Mitigating DDoS attacks is a tricky problem; there are things that work pretty well, but there's always an upper bound on how much traffic you can mitigate.
So there are a few possibilities.
- Lizard Squad is lying, and is still attacking PSN. If they have some vested interest in making Microsoft look more competent than Sony, this is pretty plausible. Mitigating a DDoS is a real challenge, and Sony and Microsoft both clearly can't cope with these attacks. The usual solution would be to bring up more instances of the signin server; if that isn't mitigating the issue then the network infrastructure may not be able to cope either. Which doesn't say great things about Sony or Microsoft's network infrastructure. But then, this whole scenario doesn't say great things about the infrastructures of either services.
- Another group is also attacking PSN. Not much to add here; if Sony is still overwhelmed with traffic there's little they can do.
- Sony intentionally kept PSN offline to do some sort of emergency upgrades. This seems really unlikely to me; there's simply too much demand during the holidays to justify this. Sony would surely bring the servers back up and work on patches in parallel with that.
- The attack exposed a software bug in Sony's signin servers. If the signin server software is crash-looping or inexplicably serving errors now, it may be down despite engineers working on a fix as hard as they can. This would suggest that they're relying pretty heavily on some sort of stateful information that has entered a bad state, possibly a cache of some kind. (which can't be invalidated for some reason) Another possibility, which would suck for everyone involved, is that some bug caused user authentication data to be corrupted when the server was overloaded. If Sony is having to restore username/password hash data from a backup, that would explain why they are still offline. It would also explain why PSN seems to be working for some users but not others right now.
Personally, I suspect #4. It fits the evidence and observed behavior of the system the best. If so, we can only hope that there's no permanent authentication data lost, because that could mean broken, unrecoverable login accounts.
\ No newline at end of file
+All day yesterday, I watched my husband trying to log into FF XIV on the PS4. All day, the PSN sign in servers remained down. They're still listed as offline now. Xbox Live has been back up since yesterday afternoon. So what's taking Sony so long?
Keeping production servers online is a large part of what I do professionally, so... I know this problem domain pretty well. And I've seen a lot of... speculation that is deeply misinformed. Here are my thoughts on the problem.
First: the cause of the outage. All evidence points to this being a DDoS (Distributed Denial of Service) attack. This is when a whole lot of computers from a lot of different locations send as much traffic as they can at a service, in an attempt to overwhelm it and knock it offline. The most common tool used to send all this traffic is a botnet. Building and maintaining a botnet requires a large amount of technical expertise. *Using* a botnet, on the other hand, just requires money and connections. Because the people who take the time to build a botnet often want to make money from it, so they sell time on them.
Which brings us to the culprits of the DDoS; a group calling themselves Lizard Squad has taken credit for the attack. Whether they have any technical expertise is unknown, but they certainly seem to have access to one or more reasonably effective botnets. However, they claim to have stopped their attack yesterday, and PSN remains offline. Mitigating DDoS attacks is a tricky problem; there are things that work pretty well, but there's always an upper bound on how much traffic you can mitigate.
So there are a few possibilities.
- Lizard Squad is lying, and is still attacking PSN. If they have some vested interest in making Microsoft look more competent than Sony, this is pretty plausible. Mitigating a DDoS is a real challenge, and Sony and Microsoft both clearly can't cope with these attacks. The usual solution would be to bring up more instances of the signin server; if that isn't mitigating the issue then the network infrastructure may not be able to cope either. Which doesn't say great things about Sony or Microsoft's network infrastructure. But then, this whole scenario doesn't say great things about the infrastructures of either services.
- Another group is also attacking PSN. Not much to add here; if Sony is still overwhelmed with traffic there's little they can do.
- Sony intentionally kept PSN offline to do some sort of emergency upgrades. This seems really unlikely to me; there's simply too much demand during the holidays to justify this. Sony would surely bring the servers back up and work on patches in parallel with that.
- The attack exposed a software bug in Sony's signin servers. If the signin server software is crash-looping or inexplicably serving errors now, it may be down despite engineers working on a fix as hard as they can. This would suggest that they're relying pretty heavily on some sort of stateful information that has entered a bad state, possibly a cache of some kind. (which can't be invalidated for some reason) Another possibility, which would suck for everyone involved, is that some bug caused user authentication data to be corrupted when the server was overloaded. If Sony is having to restore username/password hash data from a backup, that would explain why they are still offline. It would also explain why PSN seems to be working for some users but not others right now.
Personally, I suspect #4. It fits the evidence and observed behavior of the system the best. If so, we can only hope that there's no permanent authentication data lost, because that could mean broken, unrecoverable login accounts.
diff --git a/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html b/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html
index 120078b..ba91821 100644
--- a/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html
+++ b/_posts/technology/2015-10-30-intel-nuc-remote-controls-and-fedora-22.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: Intel NUC, remote controls, and Fedora 22
@@ -14,4 +15,4 @@ blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-24671501109772029
blogger_orig_url: http://www.stringofbits.net/2015/10/intel-nuc-remote-controls-and-fedora-22.html
---
-I've had a fun time getting kodi to work with my new remote on an Intel NUC. So, in case you're in a similar situation, here's what worked for me! These instructions are for Fedora 22 and the hardware I linked to in this paragraph, but a lot of the instructions should be applicable in slightly different situations as well.
- Update your Intel NUC to the latest bios. At least on the RYH line, they fixed some problems with the IR receiver in a recent update.
- In the NUC bios, make sure the IR port is enabled and set the IR controller type to "RC6". Kodi works much better out of the box with this protocol. Some of your buttons aren't going to work right, though. The hard part is fixing that.
- Do not install lirc. lirc is an unintentional trap created by well-meaning people. It will not help you here.
- Instead of lirc, install v4l-utils to get ir-keytable:
dnf -y install v4l-utils
- Now, here's why you don't want lirc: with an RC6 receiver, the kernel is going to parse your remote's input and output keyboard events. Unfortunately, many of the keysyms it sends aren't properly handled by Xorg. So, you need to remap those keysyms to working keysyms of your choice. To do that, you need exactly one bit of the process described here. Copy the
/etc/rc_keymaps/rc6_mce
file provided by wstewart at that link, and then run the command they mention:
ir-keytable -c -p RC-5,RC-6 -w /etc/rc_keymaps/rc6_mce
You'll need to get that command to run at startup, as well. I found that all the rest of wstewart's instructions were unnecessary with a modern kernel and kodi installation. - Now, fire up kodi, and bask in the glory of your remote working correctly!
If you want to remap what some of the buttons do, you can get the scancodes with ir-keytable -t
, then edit /etc/rc_keymaps/rc6_mce
. See the kodi keyboard shortcuts page for details on what keypress you need to send. If you can't figure out what the constant name for a key is, (most of them are obvious) refer to the kernel source's input.h.
\ No newline at end of file
+I've had a fun time getting kodi to work with my new remote on an Intel NUC. So, in case you're in a similar situation, here's what worked for me! These instructions are for Fedora 22 and the hardware I linked to in this paragraph, but a lot of the instructions should be applicable in slightly different situations as well.
- Update your Intel NUC to the latest bios. At least on the RYH line, they fixed some problems with the IR receiver in a recent update.
- In the NUC bios, make sure the IR port is enabled and set the IR controller type to "RC6". Kodi works much better out of the box with this protocol. Some of your buttons aren't going to work right, though. The hard part is fixing that.
- Do not install lirc. lirc is an unintentional trap created by well-meaning people. It will not help you here.
- Instead of lirc, install v4l-utils to get ir-keytable:
dnf -y install v4l-utils
- Now, here's why you don't want lirc: with an RC6 receiver, the kernel is going to parse your remote's input and output keyboard events. Unfortunately, many of the keysyms it sends aren't properly handled by Xorg. So, you need to remap those keysyms to working keysyms of your choice. To do that, you need exactly one bit of the process described here. Copy the
/etc/rc_keymaps/rc6_mce
file provided by wstewart at that link, and then run the command they mention:
ir-keytable -c -p RC-5,RC-6 -w /etc/rc_keymaps/rc6_mce
You'll need to get that command to run at startup, as well. I found that all the rest of wstewart's instructions were unnecessary with a modern kernel and kodi installation. - Now, fire up kodi, and bask in the glory of your remote working correctly!
If you want to remap what some of the buttons do, you can get the scancodes with ir-keytable -t
, then edit /etc/rc_keymaps/rc6_mce
. See the kodi keyboard shortcuts page for details on what keypress you need to send. If you can't figure out what the constant name for a key is, (most of them are obvious) refer to the kernel source's input.h.
diff --git a/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html b/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html
index 3c1f825..6390035 100644
--- a/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html
+++ b/_posts/technology/2015-11-06-the-orange-box-custom-usb-flight.html
@@ -1,4 +1,5 @@
---
+excerpt_separator:
category: technology
layout: post
title: 'The Orange Box: A custom USB Flight Control Panel'
@@ -17,4 +18,4 @@ blogger_id: tag:blogger.com,1999:blog-4209116010564764361.post-91953202969705527
blogger_orig_url: http://www.stringofbits.net/2015/11/the-orange-box-custom-usb-flight.html
---
-I play a lot of Elite: Dangerous. And while I use a reasonably nice HOTAS, I've long wanted a flight panel: a bank of toggle switches with LED indicators that would act as a USB joystick. I can only find one company selling such a thing, and their solution leaves exposed wiring. (a no-no when you live with cats) Also, their website looks like it is from the 90s and just feels kind of sketchy. (Seriously, guys, if you happen to read this, your website does not inspire confidence)
And, anyway, I've been looking for an excuse to learn some basic electronics for a long time. So, I built my own! Several other people have built similar things, but I decided to jump in head-first and not follow any guides, in hopes of learning about electronics and wiring along the way.
Acquiring Gear
First up, a parts list:
And a partial list of tools I needed:
Getting Started
Ok, now that you have this big pile of stuff, what do we do? I started by emulating everything; I was a bit worried about frying my new Arduino board! So I designed a circuit using
123d.circuits.io. You can see it
here. Connecting the switch turns on the LED and changes I/O pin 2 from high to low. (the pin is configured as INPUT_PULLUP, see the programming section later)
Next I replicated this with my physical tools. I started by wiring everything up, (you'll want those hybrid jumper/alligator wires to hook up the toggle switch!) then plugged my Arduino into the PC to give it power. Before throwing the switch, I uploaded this very simple sketch to it:
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT); // this is the Arduino's on-board LED.
}
void loop() {
int state = digitalRead(2);
if (state == HIGH) digitalWrite(13, LOW);
else digitalWrite(13, HIGH);
}
If this works as expected, then flipping the toggle switch should light up both the breadboard LED and the on-board LED (marked 'L' on the Arduino board). The logic is inverted (we write HIGH when we read LOW) because I'm using INPUT_PULLUP, which reverses the usual logic of the input pin. (This lets me wire the LED without worrying about how much current the input pin can sink. I'm probably being overly cautious here, actually.)
Building the thing
Now that I had a proof of concept, I moved on to building things in earnest. First, I needed a box to store it all in. I had trouble finding an appropriately-sized box (again, see "lessons learned"), so I decided to 3D Print one! I have access to a shared Ultimaker2 3D printer. So I designed and printed a box. I really don't recommend using this design. This was my first attempt ever at 3D printing. The print took about 13 hours, and the resulting box had a bunch of problems, despite my attempt to make careful measurements. I had to drill out the holes for the switches more, and had to hack up the back pretty badly to get the USB port out. I also neglected to put mounting posts in for the lid, (I printed some later, but it was a huge pain) or holes to mount the arduino board on. (The odd bumps on the inside and the plastic bar were meant to be a little physical barrier to hold the board in place, but they printed out way too low to actually do anything.)
So anyway, now I have a box. (the project quickly got nicknamed The Orange Box, naturally) Next, I created five of these, with varying LED colors:
This is just the design from the breadboard realized in a way that lets it interface with the Arduino sensor shield. The red wire is connected from 5V through the LED setup and onto one of the switch posts. The LED has a resistor in series with it; I used 1kΩ resistors for my red and yellow LEDs, and 10kΩ for blue and white.
The other switch post has lines going to both Ground (black) and the input pin. (white) The wire splices and connections are all soldered, *except* for the 3-pin dupont casing. To make those connections, I had to learn to work with dupont pins, which is a little complicated. You have to:
- Strip the end of your wire.
- Twist the exposed wire strands together. (this is often a good idea when working with stranded wire)
- Lay the wire onto the 'open' part of the dupont pin, and push it in a bit. Ideally you want the bottom of the pin to be flush against your wire casing.
- Fold the metal flanges on the pin around the wire with needle-nosed pliers, so that it's semi-closed.
- Crimp those flanges down with a crimp tool. Be careful not to crimp the 'top' half of the pin, where you don't have wire. You'll need that to mate the pin with the headers on the board.
- Using the pliers again, squeeze the metal that was flattened by the crimp tool into a rounder shape.
- Insert the pin into the casing. (For this project, I hade to make sure the voltage line was in the middle, to match the pinout on the shield) There is a correct orientation but it's a bit hard to describe. The pin should click into place and not come back out easily.
It takes a little practice to get the hang of it, but not having any connections soldered directly onto the Arduino makes it a lot more reusable!
Once I had all 5 of these, I mounted them in the box and wired them onto the sensor shield (which was connected to the arduino board. It just plugs right in on top!) With the 3-pin dupont widgets, this was super easy:
Those 3 rows of pins are just a row of Ground, a row of 5V, and then a row for all the I/O pins. So the white wires are all on the bottom row (the input signals), and the black wires are on the top. Each row is labelled on the board: G, V, and S.
Programming the Thing
For me, this was the easy part. Familiar territory. Arduino's "IDE" is really just a slightly specialized C++ framework. I wanted the OS to treat my device as a joystick with as little hassle as possible, so I used this
custom firmware for the Arduino's USB communication chip. (Note: you want to install that *last*, because while it's installed you can't upload new sketches to the Arduino. It's easily reversible, though, so you won't ruin anything.)
I wrote a simple library to interface with the Joystick firmware, and a sketch tailored to how I have my inputs setup and what I want them to do. The sketch interprets the toggle switches as momentary inputs; that is, it sends a short button-press event every time you toggle the switch, as opposed to "holding down" the button the entire time the switch is on. This design makes it work well with most of Elite: Dangerous' controls.
In a future iteration I hope to make this all a bit more generalized and include a lot more functionality in the Joystick library. But for now, this works really well!
The Finishing Touches
I printed some support structures to make it possible to screw the box (mostly) shut:
After putting these in place, I briefly lamented not printing counter-sunk screw holes into the box, but then I realized ABS plastic was soft enough that I didn't need them. All I had to do was tighten the screws a bit more, and:
And finally, with everything screwed in place, the finished product:
Lessons Learned
- 3D printing the project box sounded super cool, but I wouldn't do it again. It took too long, the resulting plastic is a bit weak for the job, and getting the hole placement just right was a pain. (and 3D printed parts don't take especially well to drilling) For my next iteration of this box I've purchased a pre-made project box.
- If I were to 3D print again: remember to put screw-holes and posts in!
Mounting the LEDs was a bit of a problem, since the LED holders assume you're wiring them in place. I couldn't use their intended mounting setup, and had to just hot-glue them into place instead. This happened because the LED holders were back-ordered, and didn't arrive until late in the project. - Soldering is fun, but moderately permanent. For future projects I'd rather invest in connectors that are slightly easier to disconnect. I bought a bunch of these in the hopes that the female connectors can mount to switch/button terminal posts. (early tests suggest they will work well)
- The Arduino Uno R3 + sensor shield is nice, but the total package is a bit big. I later discovered the Yourduino Robored, which has the same 3-row pinout as the sensor shield, but in a much smaller (and cheaper) package. I ordered a couple of these and intend to use them in future projects. One downside: they ship from Hong Kong and take a while to arrive.
- In the quiet of night (when I often play Elite) these toggle switches are loud enough to wake up and scare my housemate! I bought a bunch of rocker switches with LEDs already integrated for future use.
\ No newline at end of file
+I play a lot of Elite: Dangerous. And while I use a reasonably nice HOTAS, I've long wanted a flight panel: a bank of toggle switches with LED indicators that would act as a USB joystick. I can only find one company selling such a thing, and their solution leaves exposed wiring. (a no-no when you live with cats) Also, their website looks like it is from the 90s and just feels kind of sketchy. (Seriously, guys, if you happen to read this, your website does not inspire confidence)
And, anyway, I've been looking for an excuse to learn some basic electronics for a long time. So, I built my own! Several other people have built similar things, but I decided to jump in head-first and not follow any guides, in hopes of learning about electronics and wiring along the way.
Acquiring Gear
First up, a parts list:
And a partial list of tools I needed:
Getting Started
Ok, now that you have this big pile of stuff, what do we do? I started by emulating everything; I was a bit worried about frying my new Arduino board! So I designed a circuit using
123d.circuits.io. You can see it
here. Connecting the switch turns on the LED and changes I/O pin 2 from high to low. (the pin is configured as INPUT_PULLUP, see the programming section later)
Next I replicated this with my physical tools. I started by wiring everything up, (you'll want those hybrid jumper/alligator wires to hook up the toggle switch!) then plugged my Arduino into the PC to give it power. Before throwing the switch, I uploaded this very simple sketch to it:
void setup() {
pinMode(2, INPUT_PULLUP);
pinMode(13, OUTPUT); // this is the Arduino's on-board LED.
}
void loop() {
int state = digitalRead(2);
if (state == HIGH) digitalWrite(13, LOW);
else digitalWrite(13, HIGH);
}
If this works as expected, then flipping the toggle switch should light up both the breadboard LED and the on-board LED (marked 'L' on the Arduino board). The logic is inverted (we write HIGH when we read LOW) because I'm using INPUT_PULLUP, which reverses the usual logic of the input pin. (This lets me wire the LED without worrying about how much current the input pin can sink. I'm probably being overly cautious here, actually.)
Building the thing
Now that I had a proof of concept, I moved on to building things in earnest. First, I needed a box to store it all in. I had trouble finding an appropriately-sized box (again, see "lessons learned"), so I decided to 3D Print one! I have access to a shared Ultimaker2 3D printer. So I designed and printed a box. I really don't recommend using this design. This was my first attempt ever at 3D printing. The print took about 13 hours, and the resulting box had a bunch of problems, despite my attempt to make careful measurements. I had to drill out the holes for the switches more, and had to hack up the back pretty badly to get the USB port out. I also neglected to put mounting posts in for the lid, (I printed some later, but it was a huge pain) or holes to mount the arduino board on. (The odd bumps on the inside and the plastic bar were meant to be a little physical barrier to hold the board in place, but they printed out way too low to actually do anything.)
So anyway, now I have a box. (the project quickly got nicknamed The Orange Box, naturally) Next, I created five of these, with varying LED colors:
This is just the design from the breadboard realized in a way that lets it interface with the Arduino sensor shield. The red wire is connected from 5V through the LED setup and onto one of the switch posts. The LED has a resistor in series with it; I used 1kΩ resistors for my red and yellow LEDs, and 10kΩ for blue and white.
The other switch post has lines going to both Ground (black) and the input pin. (white) The wire splices and connections are all soldered, *except* for the 3-pin dupont casing. To make those connections, I had to learn to work with dupont pins, which is a little complicated. You have to:
- Strip the end of your wire.
- Twist the exposed wire strands together. (this is often a good idea when working with stranded wire)
- Lay the wire onto the 'open' part of the dupont pin, and push it in a bit. Ideally you want the bottom of the pin to be flush against your wire casing.
- Fold the metal flanges on the pin around the wire with needle-nosed pliers, so that it's semi-closed.
- Crimp those flanges down with a crimp tool. Be careful not to crimp the 'top' half of the pin, where you don't have wire. You'll need that to mate the pin with the headers on the board.
- Using the pliers again, squeeze the metal that was flattened by the crimp tool into a rounder shape.
- Insert the pin into the casing. (For this project, I hade to make sure the voltage line was in the middle, to match the pinout on the shield) There is a correct orientation but it's a bit hard to describe. The pin should click into place and not come back out easily.
It takes a little practice to get the hang of it, but not having any connections soldered directly onto the Arduino makes it a lot more reusable!
Once I had all 5 of these, I mounted them in the box and wired them onto the sensor shield (which was connected to the arduino board. It just plugs right in on top!) With the 3-pin dupont widgets, this was super easy:
Those 3 rows of pins are just a row of Ground, a row of 5V, and then a row for all the I/O pins. So the white wires are all on the bottom row (the input signals), and the black wires are on the top. Each row is labelled on the board: G, V, and S.
Programming the Thing
For me, this was the easy part. Familiar territory. Arduino's "IDE" is really just a slightly specialized C++ framework. I wanted the OS to treat my device as a joystick with as little hassle as possible, so I used this
custom firmware for the Arduino's USB communication chip. (Note: you want to install that *last*, because while it's installed you can't upload new sketches to the Arduino. It's easily reversible, though, so you won't ruin anything.)
I wrote a simple library to interface with the Joystick firmware, and a sketch tailored to how I have my inputs setup and what I want them to do. The sketch interprets the toggle switches as momentary inputs; that is, it sends a short button-press event every time you toggle the switch, as opposed to "holding down" the button the entire time the switch is on. This design makes it work well with most of Elite: Dangerous' controls.
In a future iteration I hope to make this all a bit more generalized and include a lot more functionality in the Joystick library. But for now, this works really well!
The Finishing Touches
I printed some support structures to make it possible to screw the box (mostly) shut:
After putting these in place, I briefly lamented not printing counter-sunk screw holes into the box, but then I realized ABS plastic was soft enough that I didn't need them. All I had to do was tighten the screws a bit more, and:
And finally, with everything screwed in place, the finished product:
Lessons Learned
- 3D printing the project box sounded super cool, but I wouldn't do it again. It took too long, the resulting plastic is a bit weak for the job, and getting the hole placement just right was a pain. (and 3D printed parts don't take especially well to drilling) For my next iteration of this box I've purchased a pre-made project box.
- If I were to 3D print again: remember to put screw-holes and posts in!
Mounting the LEDs was a bit of a problem, since the LED holders assume you're wiring them in place. I couldn't use their intended mounting setup, and had to just hot-glue them into place instead. This happened because the LED holders were back-ordered, and didn't arrive until late in the project. - Soldering is fun, but moderately permanent. For future projects I'd rather invest in connectors that are slightly easier to disconnect. I bought a bunch of these in the hopes that the female connectors can mount to switch/button terminal posts. (early tests suggest they will work well)
- The Arduino Uno R3 + sensor shield is nice, but the total package is a bit big. I later discovered the Yourduino Robored, which has the same 3-row pinout as the sensor shield, but in a much smaller (and cheaper) package. I ordered a couple of these and intend to use them in future projects. One downside: they ship from Hong Kong and take a while to arrive.
- In the quiet of night (when I often play Elite) these toggle switches are loud enough to wake up and scare my housemate! I bought a bunch of rocker switches with LEDs already integrated for future use.