<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4303014289591575077</id><updated>2011-11-27T19:05:00.518-05:00</updated><category term='apache'/><category term='linux'/><category term='wrapup'/><category term='ruby'/><category term='miscellaneous'/><category term='meme'/><category term='stuff in my apartment'/><category term='specials'/><category term='reviews'/><category term='twisted'/><category term='books'/><category term='metallica'/><category term='programming'/><category term='heavy metal'/><category term='music'/><category term='stackless'/><category term='nanowrimo'/><category term='writing prompt'/><category term='plone'/><category term='python'/><category term='amazon'/><category term='tarot'/><category term='excerpts'/><category term='twisted integration'/><category term='fiction'/><category term='writing'/><title type='text'>Twisted Writer</title><subtitle type='html'>The thoughts of a recovering programmer...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-663660405829778408</id><published>2010-10-25T12:57:00.000-04:00</published><updated>2011-07-10T13:18:33.525-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>It’s Time to Die … Or Is It?</title><content type='html'>Death ... it's a staple of fiction and movies.  Dramatic deaths.  Casual deaths.  Murders.&lt;br/&gt;&lt;br/&gt;It's a driving force to advance plot lines or to resolve a dramatic arc.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;There comes a time when a character needs to die.  Not because you hate them, but because it will advance the story towards its conclusion.&lt;br/&gt;&lt;br/&gt;And when that occurs, as a writer you have to ask yourself, "How comfortable am I with this?"&lt;br/&gt;&lt;br/&gt;To some authors, their characters are like their babies; if anything truly bad would happen to them, it would cause some emotional distress for the writer.  To others, a character is simply a vehicle through which the story is told.  And when it's that character's time to die ... they die.&lt;br/&gt;&lt;br/&gt;For me, I have no issue with killing off characters.  I've even killed off main characters in the last chapter ... because it was the only way to advance -- or in this case, finish -- the story.  It was the right thing to do for the story.&lt;br/&gt;&lt;br/&gt;In &lt;a href="http://www.amazon.com/gp/product/1439156816?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=1439156816"&gt;&lt;em&gt;On Writing&lt;/em&gt;&lt;/a&gt;, Stephen King repeatedly talks about how a writer's main job is to tell the truth.  Readers have a way of knowing when you're holding back, when you're fibbing to them, or when you're just plain ol' cheating them out of the whole story.  If you do this often -- I don't think you should do it all -- your once faithful readership is no longer interested in hearing or reading your tales.&lt;br/&gt;&lt;br/&gt;Why?  Because you don't write the truth.  Sure, you write fiction, which is basically a lie but it needs to be internally truthful.  This "truthiness" is a key element of someone's suspension of disbelief.  Without it, the reader doesn't buy it to the story you're telling.&lt;br/&gt;&lt;br/&gt;And the truth is ... people die.  They can die heroically.  Ironically.  Even in the most crappy ways.  For example, in &lt;a href="http://www.amazon.com/gp/product/160413402X?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=160413402X"&gt;&lt;em&gt;All Quiet on the Western Front&lt;/em&gt;&lt;/a&gt;, Paul Baumer's death is a poignant example of the senselessness of war.  Yes, the reader was attached to the character; but it was this very attachment that causes the final scene to have such emotional power.  If Baumer lived, the impact of the story would have been less (there are enough other powerful scenes that the book would still have impact) and the book would not have been as "great".&lt;br/&gt;&lt;br/&gt;So, how about you?  Do you have qualms about killing off a character?  Or are you a reader that doesn't like it when a favorite character bites the dust?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-663660405829778408?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/663660405829778408/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=663660405829778408' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/663660405829778408'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/663660405829778408'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/its-time-to-die-or-is-it.html' title='It’s Time to Die … Or Is It?'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3822781424299032150</id><published>2010-10-21T06:43:00.000-04:00</published><updated>2011-07-10T13:18:33.526-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>A Conversation Amongst Friends</title><content type='html'>Most writers like to write certain types of scenes more than others.  Some authors simply excel at action scenes.  Others are phenomenal at dramatic, soul-revealing dialog.&lt;br/&gt;&lt;br/&gt;And when it comes to dialog, some authors prefer to write certain types of interactions more than authors.  Whether it's a conversation filled with snarky one-liners, or one in which the characters are professing their love for one another, sometimes the author just likes to write certain types of conversations more than others.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I like to write scenes showing the interaction between friends.  Usually, there's quite a bit of sarcasm involved.&lt;br/&gt;&lt;br/&gt;I do like sarcasm.&lt;br/&gt;&lt;br/&gt;You can ask just about anyone that knows me and they'll agree.  The ones that don't agree ... well, they're just not that bright.&lt;br/&gt;&lt;br/&gt;But, also I like writing interactions between friends interesting is because there's often a lowering of your guard when dealing with close friends.  It allows some insight into the mind and soul of a character.  Readers like that sort of thing.  I like to write it.  In appropriate doses, of course.   A book filled with soul revealing dialog after soul revealing dialog would most likely bore me to death.&lt;br/&gt;&lt;br/&gt;At the same time, real friends often "punch up" their conversations with humor -- sometimes self-deprecating, sometimes biting remarks about one another -- and that's also an important part of the interplay that makes writing such interactions and conversations so fun for me.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3822781424299032150?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3822781424299032150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3822781424299032150' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3822781424299032150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3822781424299032150'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/conversation-amongst-friends.html' title='A Conversation Amongst Friends'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-746803210827189511</id><published>2010-10-20T06:29:00.000-04:00</published><updated>2011-07-10T13:18:33.526-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Minor Characters and Scene Stealing</title><content type='html'>Most stories have a score of minor characters, who shuffle in and out of the narrative.  Usually, they have their "screen time", convey any information they have, move the story forward, and leave.  Where do they go?  What do they do next?&lt;br/&gt;&lt;br/&gt;Most readers don't care and, probably, most writers don't either.  After all, their &lt;strong&gt;minor characters&lt;/strong&gt;.  If we cared about what happens in their life (beyond how it impacts the main characters), we'd be reading their story.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;But, sometimes, the writer stumbles across a minor character who refuses to quietly go away.  Something about them sticks in the mind, compelling you to keep telling their story.&lt;br/&gt;&lt;br/&gt;In those situations, the minor character sometimes ends up taking over the story.  Or, at least, butting their way into a larger piece of the action.&lt;br/&gt;&lt;br/&gt;In my novel, &lt;a href="http://www.amazon.com/gp/product/0557003806?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0557003806&amp;quot;"&gt;The Path Into Darkness&lt;/a&gt;, the character of Lucia was originally intended to be a minor, throwaway character.  She existed, at first, only to show how inept the main character Mark was with women.  Ultimately, though, Lucia was a bit too interesting of a character to just quietly go away.  And, in this case, it was probably one of the better things I could have done with the story.&lt;br/&gt;&lt;br/&gt;It ended up being a much stronger story once I "upgraded" Lucia from minor character to an "almost" main character.  In doing so, you could see not only Mark's initial ineptness with women, but also some growth on his part due to interacting with her.&lt;br/&gt;&lt;br/&gt;Do you have a minor character that refused to go away and ended up stealing some of the spotlight?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-746803210827189511?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/746803210827189511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=746803210827189511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/746803210827189511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/746803210827189511'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/minor-characters-and-scene-stealing.html' title='Minor Characters and Scene Stealing'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3393543187063387947</id><published>2010-10-18T23:30:00.000-04:00</published><updated>2011-07-10T13:18:33.526-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Protagonist. Antagonist. I’m the One With the Gun.</title><content type='html'>The basic structure of a story is a time tested formula.  Protagonist versus antagonist -- whether that antagonist be another person, a creature, or even the elements.&lt;br/&gt;&lt;br/&gt;Just like parents, writers aren't really supposed to favor any one character over another.  But it happens.  Some of them are just plain fun to write.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;For anyone keeping score at home, this is a combination of two writing prompts, since they complement each other.  In my case, they also happen to be so inter-related that I didn't feel right separating them.&lt;br/&gt;&lt;br/&gt;My favorite protagonist comes from a &lt;a href="http://www.nanowrimo.org"&gt;NaNo&lt;/a&gt; project a few years back.  His name is James Garreth.  He's actually younger than most of my main characters usually are ... he's 18 and on the run from a pair of FBI agents.&lt;br/&gt;&lt;br/&gt;One of whom isn't really an FBI agent, but a medical doctor specialized in the condition afflicting Garreth.  Doctor McEwon also happens to be my favorite antagonist.  Mostly because he's just plain creepy.  And unethical.  He has a bit of a sadistic streak as well, but that sort of goes hand in hand with the creepy unethicalness that oozes from him.&lt;br/&gt;&lt;br/&gt;Where Jason Garreth is fun to write due to his youthful, nothing-can-stop-me perspective, McEwon has a jaded cynical outlook on life that makes them a mirror pairing.  In the scenes that they share page space, they have an interesting interplay that helps (in my opinion, at least) capture the theme of that particular project.&lt;br/&gt;&lt;br/&gt;I'm not usually big on theme, but in this case it surfaced in the story and made it a more compelling read.  Not that many other people have read that book.  It suffers the fate of many NaNo projects, sitting dejectedly on my computer waiting for me to have some free time to go through and really give it a good rewrite.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3393543187063387947?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3393543187063387947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3393543187063387947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3393543187063387947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3393543187063387947'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/protagonist-antagonist-im-one-with-gun.html' title='Protagonist. Antagonist. I’m the One With the Gun.'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6781742757923008850</id><published>2010-10-16T22:36:00.000-04:00</published><updated>2011-07-10T13:18:33.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Romance and Writing</title><content type='html'>Romance is not just a genre of fiction and movies.&lt;br/&gt;&lt;br/&gt;One of the key ingredients to a dramatic story is romance.  Even light fare -- action movies or comedies for example -- almost always have some romantic element to them.  It may not be developed greatly, but it's there, adding depth and drama to the overall story.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I don't write romance stories, but I do include elements of romance in my works.&lt;br/&gt;&lt;br/&gt;Usually, I have two characters both acting as protagonist.  Often they can only be successful working together.  Always -- I can generalize, since it's my writing I'm talking about -- one of them is male, the other female.&lt;br/&gt;&lt;br/&gt;And just as I said "always" above, I'll say it again ... they always end up in a romantic relationship.  Stress, fatigue, and striving for a common goal has a way of doing that to people.  I don't play up the romance too much; it's much more of a physical, "chemistry" based relationship that forms because of the constant close quarters the two characters are placed into.&lt;br/&gt;&lt;br/&gt;As I don't write erotica, I don't go into much detail on any sex that they may have.  I will mention if they kiss, hug, or otherwise have some (non-sexual) physical contact.  They fact that they have sex will be brought up as well, but the scene always "fades to black" once the sheets are pulled back.&lt;br/&gt;&lt;br/&gt;What about you?  Do you like to write (or read) romance in books?  Do you want the steamy details or is the "fade to black" approach good for you?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6781742757923008850?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6781742757923008850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6781742757923008850' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6781742757923008850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6781742757923008850'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/romance-and-writing.html' title='Romance and Writing'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3502577436713984861</id><published>2010-10-16T08:12:00.000-04:00</published><updated>2011-07-10T13:18:33.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Authors to Admire</title><content type='html'>Most everyone has someone that they admire and look up to, for inspiration or as a role model for how they should do things.  Writers, being people, are no different.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I've always liked and admired the work of Terry Pratchett.  From the first book of his that I read (&lt;a href="http://www.amazon.com/gp/product/0060855886?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0060855886"&gt;The Light Fantastic&lt;/a&gt;) through non-Discworld books such as &lt;a href="http://www.amazon.com/gp/product/0060853972?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0060853972"&gt;Good Omens&lt;/a&gt; (with Neil Gaiman) and &lt;a href="http://www.amazon.com/gp/product/0552133256?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0552133256"&gt;Strata&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;When I read about his diagnosis of early onset Alzheimer's and subsequent creation of his &lt;a href="http://www.matchitforpratchett.org/"&gt;Match It For Pratchett&lt;/a&gt; fund to raise money for research, I was even more impressed.&lt;br/&gt;&lt;br/&gt;Years ago, I used to be very active on Usenet and newsgroups -- I'm not active there anymore because I don't have access to an NNTP server anymore ... sigh -- you used to be able to run into Pratchett in the newsgroup dedicated to his work.  He was very engaging with his fans, and just seemed to be a pretty cool and interesting fellow.  A little bizarre at times, but who isn't?&lt;br/&gt;&lt;br/&gt;Oh, and let's not forget that &lt;a href="http://www.mnn.com/earth-matters/wilderness-resources/blogs/sir-terry-pratchett-forges-a-sword-with-a-meteorite"&gt;he forged his own magical sword&lt;/a&gt; after being knighted by the Queen.&lt;br/&gt;&lt;br/&gt;I used to try to write humor and satire, but after several failed attempts gave up on it.  However, Pratchett's work still provides some good guidance, because his characters and world are very well developed.  I feel that every author should strive to have such well-rounded and in-depth development.&lt;br/&gt;&lt;br/&gt;Who do you admire in the writing field?  Is there someone you look to for guidance (in actual writing or non writing endeavors)?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3502577436713984861?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3502577436713984861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3502577436713984861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3502577436713984861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3502577436713984861'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/authors-to-admire.html' title='Authors to Admire'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2547662154082539297</id><published>2010-10-14T23:43:00.000-04:00</published><updated>2011-07-10T13:18:33.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>How to Map a Fictional World</title><content type='html'>There was a time, back when I was in middle and high school, that I would sit down with a blank piece of paper and have fun drawing imaginary coastlines, mountain ranges, forests, and other items.  A little later I got some software that could help me to do that; but it still boils down to your imagination and -- if you want a "realistic" and believable world, some knowledge of geography helps.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;Of course, I tend to write stories set in our modern, contemporary world.  This cuts down a lot on my need to generate maps.&lt;br/&gt;&lt;br/&gt;I do, however, make up small towns and other far, out-of-the-way locations for parts of the story to take place in.  I do this, generally, by loading up &lt;a href="http://earth.google.com"&gt;Google Earth&lt;/a&gt; and zooming around the broad, general location that I'm looking to have the story take place in.  I try to find an open expanse (i.e., one with no real town in) unless I want to try to write about a town I've never been to ... sometimes I do.&lt;br/&gt;&lt;br/&gt;For the bulk of most of my stories, the action takes place in large cities, places like New York, Philadelphia, and London.  It's easy to work with these, since maps of those cities are available at book stores, online, and even in encyclopedias.&lt;br/&gt;&lt;br/&gt;Do you make up maps?  How do you decide on how things should look?  Or are you like me and take the "cop-out" of setting things in real places?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2547662154082539297?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2547662154082539297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2547662154082539297' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2547662154082539297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2547662154082539297'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/how-to-map-fictional-world.html' title='How to Map a Fictional World'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5756401149243367665</id><published>2010-10-13T23:34:00.000-04:00</published><updated>2011-07-10T13:18:33.527-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>My Best World-building</title><content type='html'>Even stories that take place in a contemporary setting have some element of world building in them.  Of course, fantasy and science fiction are the best examples of complex world-building exercises.  But even thrillers like &lt;em&gt;The Hunt for Red October&lt;/em&gt; need to have some world building to make the story work.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;My best work at world-building is in my story &lt;a href="https://www.lulu.com/commerce/index.php?fBuyProduct=3510952"&gt;&lt;em&gt;The Path Into Darkness&lt;/em&gt;&lt;/a&gt;.  It features a complicated "world within the world", a secret history that runs parallel to the rest of the world.&lt;br/&gt;It's a world where magic exists side-by-side with the mundane; although the presence of the magic is hidden by the various forces that can control it.  Some of this activity is to keep "normal people" safe; another part of it is to horde the power for themselves so that they are the only ones who can control it.&lt;br/&gt;&lt;br/&gt;Not only is this hidden, secret history complex and involved, so is the methodology of magic as it pertains to that story.  There are several different styles, exemplified by the different approaches of the two main characters -- one is a more "traditional" sorcerer, a la a typical fantasy story, whereas the other blends magical forces into various technological devices making.&lt;br/&gt;&lt;br/&gt;The setting of &lt;a href="https://www.lulu.com/commerce/index.php?fBuyProduct=3510952"&gt;&lt;em&gt;The Path Into Darkness&lt;/em&gt;&lt;/a&gt; is definitely my most "complete" setting.  I spent quite a lot of time doing research and figuring out exactly what I wanted to do with it; along the way, I blended some mythology, some actual occultism and mysticism, and some of my own ideas together to make a logical, coherent setting that can propel the story forward.&lt;br/&gt;&lt;br/&gt;What is your best setting and world building project?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5756401149243367665?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5756401149243367665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5756401149243367665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5756401149243367665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5756401149243367665'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/my-best-world-building.html' title='My Best World-building'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2467532183505642616</id><published>2010-10-12T23:24:00.000-04:00</published><updated>2011-07-10T13:18:33.528-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Favorite Characters to Write</title><content type='html'>When you read some books, you can tell right away that certain characters are favorites of the author.  It doesn't necessarily mean that they show an undue favoritism -- like letting them constantly survive situations that they shouldn't -- but it could be something as simple as certain characters getting a lot more "screen time" than their role in the story warrants.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I have two "favorite" characters, both of them are minor characters.  They don't get involved in all that many dangerous situations (in fact, one of them doesn't ever get in any hazardous scenarios).&lt;br/&gt;&lt;br/&gt;Nevertheless, they're fun to write.  Part of it is their attitude, some of it their sense of humor.  Both characters in question are fairly sarcastic and irreverent; traits that I find very fun to write.&lt;br/&gt;&lt;br/&gt;The first of these characters is Tommy McNally, a long-time friend of one of my main characters, Mark Roberts.  Tommy is a bit of lech, bit of barfly, and at times seems to exist only to get Mark into troubling social situations.  But when the chips are down and Mark needs someone to do him a big favor, Tommy steps up and delivers.  Complaining a bit as he does so, but at the end of the day, he's there for Mark.&lt;br/&gt;&lt;br/&gt;The other character is Kimi Sasaki, younger sister of a character Tori Sasaki.  Kimi is both incredibly helpful and very frustrating for Tori to deal with.  When Tori has a crush on another character, Kimi is more than happy to announce it to the character in question.  Later, Kimi gives helpful advise for a date.  She is the annoying younger sibling, that the older one really couldn't live without.&lt;br/&gt;&lt;br/&gt;Do you have a favorite character to write?  Is there a point of view or attitude that you just love to immerse yourself in and can write page after page of?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2467532183505642616?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2467532183505642616/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2467532183505642616' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2467532183505642616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2467532183505642616'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/favorite-characters-to-write.html' title='Favorite Characters to Write'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3909824109545663542</id><published>2010-10-12T01:58:00.000-04:00</published><updated>2011-07-10T13:18:33.528-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>The Strangest, the Weirdest Situations For Your Characters</title><content type='html'>The essence of a good story revolves around the characters and the situations/messes they find themselves in.  Some types of stories call for strange situations stacked on top of the bizarre, where others need little more than having the characters be in the same room.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;So what's the strangest, weirdest situation that one of my characters have been in?&lt;br/&gt;&lt;br/&gt;In terms of simply strange, one of my characters (a neurotic man named Mark Roberts) found himself exiting a book store than didn't really exist.  How did he know it wasn't real?  Simple really ... upon exiting the store he glanced behind him to see a solid brick wall where the door should have been.&lt;br/&gt;&lt;br/&gt;The story gets weirder after that (in the fantastical sense of the word) as a series of coincidences compound one on top of the other.  But they're all set off by that initial strange occurrence outside of a non-existent bookstore in Greenwich Village.&lt;br/&gt;&lt;br/&gt;Of course, I tend to write in the fantasy genre, so weird and strange end up actually being run of the mill.&lt;br/&gt;&lt;br/&gt;If you look at things from that perspective, the strangest situation any of my characters have been in was a job interview.  Hardly bizarre for you or I, but out of the ordinary for Justin Ashton -- who's world goes from normal to gunfights-with-unidentifiable-creatures-in-Central-Park weird in about 2 days.&lt;br/&gt;&lt;br/&gt;What's the strangest thing you've ever done to one of your characters?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3909824109545663542?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3909824109545663542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3909824109545663542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3909824109545663542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3909824109545663542'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/strangest-weirdest-situations-for-your.html' title='The Strangest, the Weirdest Situations For Your Characters'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6942371678790754411</id><published>2010-10-11T01:59:00.000-04:00</published><updated>2011-07-10T13:18:33.528-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>How to Make Believable Characters</title><content type='html'>As I mentioned in my post about &lt;a href="http://www.stevecoursen.com/415/the-best-ways-to-name-your-character/"&gt;naming characters&lt;/a&gt;, they tend to pop into my thoughts almost fully formed.  They tend to have a name already attached to them, and a very general description for them.  I don't really have a process that causes that result.  The closest I've ever done it "on purpose" is if I go to sleep actively mulling a story over in my head.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;So when I run across people asking "How do you get ideas for your char­ac­ters?"  I do draw a bit of a blank.  I do know that every character I've ever written starts out as basically a -- for lack of a better term -- blank.  At most, they have a gender.  They also may initially have a generic name.  Or more accurately, an acronym.  I've used the acronym U.L.I., which stands for Unnamed Love Interest, in several stories until I figured out more about the character in question.&lt;br/&gt;&lt;br/&gt;When I need more specifics on a character, such as during a rewrite, I read what I have written about to get them firmly in my thoughts.  Then I promptly do something else.  Like go for a walk or go to sleep.  It's when my subconscious mind can wander that the character will suddenly pop back into my thoughts, much more firmly developed.&lt;br/&gt;&lt;br/&gt;When they resurface from the depths, they usually have a concrete name.  And a bit more fleshed out description of how they look -- hair color, height, clothing style, etc.  Since they're still not fully formed yet, I push them back away from my current thoughts, and go do a mindless task where they can "simmer" a bit.&lt;br/&gt;&lt;br/&gt;Usually on this second resurfacing, they are "complete" characters.  They usually even have a mostly finished back story, or at least enough of one to be both reasonable and complete for their needs in the current writing piece.&lt;br/&gt;&lt;br/&gt;It's not a very methodical approach to developing characters.  My method is a bit "intuitive" in nature, and somewhat difficult to describe to others.  But it works, and I suppose that's the most important part, isn't it?&lt;br/&gt;&lt;br/&gt;What works for you?  Do you do character sketches and actively build a character as a writing excercise?  I'd like to know how others approach this problem.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6942371678790754411?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6942371678790754411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6942371678790754411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6942371678790754411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6942371678790754411'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/how-to-make-believable-characters.html' title='How to Make Believable Characters'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2684936896879000620</id><published>2010-10-09T11:03:00.000-04:00</published><updated>2011-07-10T13:18:33.529-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Favorite Genre of Fiction</title><content type='html'>My &lt;strong&gt;favorite genre of fiction&lt;/strong&gt; to read is fantasy.  I do like some science fiction, horror, and some thrillers.  But I often return to fantasy because it seems to capture -- for me, at least -- everything that fiction "should" be.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;Even then, however, I only really like a small subset of fantasy for reading purposes.  It's similar to my taste in science fiction as well.  I like the humorous fantasy story, a la Terry Pratchett's Discworld series.  Or it's science fiction equivalent of the Hitchhiker's Guide series by Douglas Adams.&lt;br/&gt;&lt;br/&gt;When I write, though, it tends to be urban fantasy, which is odd because that's a genre I don't read much.  It just happens to be the genre that I get lots of ideas for.  And not much on the way of humor either in my stories, at least not the levels of satire present in Pratchett's work.&lt;br/&gt;&lt;br/&gt;While I say that fantasy is my favorite genre, I have difficulty stomaching and reading most "serious" fantasy.  Sure, I can sit and read through Lord of the Rings any day of the week; it's the scads of imitators to that story that I can read.  The satirical and humorous fantasy works don't take themselves so mind-numbingly serious like so many other fantasy works do.&lt;br/&gt;&lt;br/&gt;What about your favorite genre?  Why is it your favorite?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2684936896879000620?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2684936896879000620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2684936896879000620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2684936896879000620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2684936896879000620'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/favorite-genre-of-fiction.html' title='Favorite Genre of Fiction'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-799470712184132848</id><published>2010-10-08T17:17:00.000-04:00</published><updated>2011-07-10T13:18:33.529-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Music and the Creative Process</title><content type='html'>Do you need absolute silence to write?  Or can you handle some background noise, maybe even some music to help your creative juices get going?&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I find silence to be too disturbingly different from my normal environment to be able to focus on the writing task at hand.  I need some sort of noise in the background, either from a TV show (if &lt;a href="http://www.stevecoursen.com/461/most-comfortable-place-to-write/"&gt;I'm writing on my couch&lt;/a&gt;) or from some MP3s playing on my desktop PC.&lt;br/&gt;&lt;br/&gt;There's been a lot of discussions about whether or not listening to music can actually interfere with the creative process.  Some people say that listening to instrumental music doesn't interfere, but if there's words it can cause a disconnect between what you're trying to think about and what the singer is singing about.&lt;br/&gt;&lt;br/&gt;After all, "music" sounds like "muse" and, to some extent, that's the effect it has for me.&lt;br/&gt;&lt;br/&gt;That's why I suggest that you organize your MP3 collection into play lists, so that the music you listen to is on topic to what you're doing.  When writing a violent fight scene, for example, it's probably best to listen to some high powered heavy metal.  That sort of music probably wouldn't be the most conducive to the process if you're imagining a tender moment between two characters.&lt;br/&gt;&lt;br/&gt;To be up front, I like to listen to music when doing various everyday tasks -- when I go for a walk, when I'm playing a game on the Xbox, or even when I'm browsing some Web sites.  But it has to fit what I'm doing.  I don't listen to slow symphonic music when I'm playing Modern Warfare; it doesn't fit.  That's when you need to be listening to some Metallica, AC/DC, or the like.&lt;br/&gt;&lt;br/&gt;When the music fits the task, I've found that everything goes smoother and becomes "funner".  Whether it's just taking a walk through a park or writing my latest novel, I like to have a beat and rhythm to what I'm doing.  Music provides that in a way, that to me at least, isn't obstructive to the process.&lt;br/&gt;&lt;br/&gt;What do you think?  Do you like to listen to music when you write?   Do you have your songs organized so that you only listen to what matches the current task?&lt;br/&gt;&lt;br/&gt;7. Do you lis­ten to music while you write? What kind? Are there any songs you like to relate/apply to your char­ac­ters?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-799470712184132848?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/799470712184132848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=799470712184132848' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/799470712184132848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/799470712184132848'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/music-and-creative-process.html' title='Music and the Creative Process'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-7859627071924361439</id><published>2010-10-07T18:11:00.000-04:00</published><updated>2011-07-10T13:18:33.529-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Most Comfortable Place to Write</title><content type='html'>Some people can put pen to paper (or fingers to keyboard) anywhere at any time.  Middle of the night on a work day?  Not a problem.  On a crowded subway car?  Good to go.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;br/&gt;Me ... I'm more comfortable sitting down to write before I go to bed.  After everything that needed to get done that day is finished.  Dinner's done, my daughter's asleep, and the darkness of night envelops me.&lt;br/&gt;&lt;br/&gt;I like to sit on the couch, seat reclined, laptop firmly on my ... laptop.&lt;br/&gt;&lt;br/&gt;Sometimes a cup of coffee is on the end table to my right.  Other times it's a can of Dr. Pepper.  I'm most productive (creative writing-wise) on the couch.&lt;br/&gt;&lt;br/&gt;I've tried to write longhand every once and a while over the past few years, but my hand cramps up way too fast.  It seems that years of being in the computer field has given the ability to type quickly and accurately but my wrist and hand muscles have atrophied for the purposes of writing with a pen.&lt;br/&gt;&lt;br/&gt;How about you?  Where do you like to write?  Do you use a computer, or do you do it the old-fashioned way?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-7859627071924361439?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/7859627071924361439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=7859627071924361439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7859627071924361439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7859627071924361439'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/most-comfortable-place-to-write.html' title='Most Comfortable Place to Write'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-1763640145473702092</id><published>2010-10-06T16:40:00.000-04:00</published><updated>2011-07-10T13:18:33.529-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Is There an Ideal Character Age?</title><content type='html'>Some writers are great at writing old characters or very young characters.  They have a gift to get inside the thoughts and convey the emotions of people who are of drastically different age.  Others like to keep their retinue of characters around the writer's actual age, as a sort of virtual entourage.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;I tend to write stories about characters close to my age.  Most often, these characters are a few years younger than I am at the time of the writing.  I find it easy to convey those sort of characters thoughts and feelings; hell, it wasn't that long ago that I was their ago and still can remember what was running through my mind at those times.&lt;br/&gt;&lt;br/&gt;Occasionally, I write a scene that has a very young character, although they are most often a flashback-type scene where one of the main characters is shown at a earlier time.&lt;br/&gt;&lt;br/&gt;For those that want juts the numbers, the youngest character I've had a completed story was 17 and the oldest was about 102 at the time they died in another story.  Although the 102 year old didn't say anything or directly interact with the other characters, he had maintained a diary that was found.&lt;br/&gt;&lt;br/&gt;How about you?  Who is your youngest char­ac­ter? Old­est? How about “youngest” and “old­est” in terms of when you cre­ated them?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-1763640145473702092?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/1763640145473702092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=1763640145473702092' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1763640145473702092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1763640145473702092'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/is-there-ideal-character-age.html' title='Is There an Ideal Character Age?'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-8438135688621813788</id><published>2010-10-05T15:00:00.000-04:00</published><updated>2011-07-10T13:18:33.530-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>First stories and characters</title><content type='html'>Every writer has to start somewhere.  So what was you first story about?  What sort of characters did you have?&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;In high school, I used to write little scenes in class (most often when we had a substitute teacher in).  They weren't very good at all, and often didn't make any sort of real sense.&lt;br/&gt;&lt;br/&gt;The characters in them were would you would call "cardboard cutouts".  Almost every one of them was a clone of some character I had read in a book.  At that time, I was reading a lot of Robert Asprin, Douglas Adams, and Terry Pratchett.  So, the characters were basically rip-offs of them, with a few, minor changes so that I could consider them "my own".&lt;br/&gt;&lt;br/&gt;I suppose you could call those early stories a sort of fan fiction, but it wasn't entirely intentional.  I didn't try to add to the already established settings like you would do in a "true" fan fiction.  I actually was trying to make my own stories; I just didn't know how to do anything other than emulate the writers I was constantly reading.&lt;br/&gt;&lt;br/&gt;What were you first stories like?  What sort of characters did you write?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-8438135688621813788?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/8438135688621813788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=8438135688621813788' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8438135688621813788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8438135688621813788'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/first-stories-and-characters.html' title='First stories and characters'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-4653561202328616212</id><published>2010-10-04T11:58:00.000-04:00</published><updated>2011-07-10T13:18:33.530-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>The Best Ways to Name Your Character</title><content type='html'>Everyone involved with creative writing has to come up with good character names.  Of course, "good character name" means something different to each of us.  If you think about it, there's a number of characters that you've read over the years that stick in your mind -- either because of their actions in the story or because of their name.  Some authors are particularly good at creating memorable names (Dickens and Rowling, for example).&lt;br/&gt;&lt;br/&gt;With the popularity of role-playing games, this topic has expanded past the creative writer.  How can you come up with a good name for use in a computer game?&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;strong&gt;&lt;em&gt;How do you come up with names, for char­ac­ters (and for places if you’re writ­ing about fic­tional places)?&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;&lt;br/&gt;Generally, though, when a character pops into my mind they spring forth with a name at the same time.  And, for the post part, that name fits them in a way that only that name can.&lt;br/&gt;&lt;br/&gt;Sometimes, though, I conceive a character that doesn't come "pre-named".  At those times, I like to consult lists of baby names, since something on the list will trigger a "good name".  There's Web sites with &lt;a href="http://www.babyhold.com/"&gt;lists of baby name and name trends&lt;/a&gt; that are particularly helpful.&lt;br/&gt;&lt;br/&gt;Sometimes, though, I've had to change a character's name after the fact; if, for example, the new character's name is too similar to an existing character's name I have to change it to avoid confusion.  Say you already have a character named Mary ... I don't like introducing a new one named Maria or Maryanne or anything close to the sound of Mary.&lt;br/&gt;&lt;br/&gt;I'm not sure if that's an actual writing "no-no" to have characters with too similar sound names, but for me it's taboo.  I also try not to have too many of the same names from story to story, unless I'm actively writing a continuation of the previous story, which, of course, would necessitate having the same characters to some extent.&lt;br/&gt;&lt;br/&gt;I've noticed that I tend to have at least one character per story who's an immigrant of some fashion -- most of my story's are set in New York City and the surround area, so it's extremely likely to run into someone who has just arrived from another country.  In those situations, I use a quick Google search to find name lists for the origin country (or more specifically, the origin ethnicity if the character is say, a Turk who grew up in England before coming to States).&lt;br/&gt;&lt;br/&gt;What works for you when you need to come up with a character name?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-4653561202328616212?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/4653561202328616212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=4653561202328616212' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4653561202328616212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4653561202328616212'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/best-ways-to-name-your-character.html' title='The Best Ways to Name Your Character'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-4458804482247349666</id><published>2010-10-03T10:51:00.000-04:00</published><updated>2011-07-10T13:18:33.530-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>How Many Characters is Too Many?</title><content type='html'>Some books have scores of characters, providing the ensemble cast through which the author tells the story (for instance, the &lt;em&gt;Lord of the Rings&lt;/em&gt; trilogy has loads of characters, most of them minor).  How many is too many, though?&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br/&gt;&lt;em&gt;&lt;strong&gt;How many char­ac­ters do you have? Do you pre­fer males or females?&lt;/strong&gt;&lt;/em&gt;&lt;br/&gt;&lt;br/&gt;I try to keep the number of characters in any story to a "manageable" amount.  Too many of them and they begin to fight for the reader's attention as well as beginning to vie for page time.  Too few and it becomes boring (in my opinion) as the story begins to read like a monologue.&lt;br/&gt;&lt;br/&gt;Lately, I've felt you need to have at least two characters in any meaningful scene, otherwise you can't have any decent dialogue.  I hate writing paragraph after paragraph of exposition and descriptive prose.  If it bores me to write, it probably bores people to read (assuming anyone actually reads my work).&lt;br/&gt;&lt;br/&gt;The lead character usually has a small group of friends, somewhere between 2 and 4, that are tangentially involved in the main story.  They provide some grounding and serve to show the protagonist is functional in some regards.  This is important, because all my main characters tend to be "broken" in some way; either through mild mental illness, physical issues, or social problems.  Even the most social inept person has a small network of people (not necessarily friends, usually family) that help to ground them in some fashion.&lt;br/&gt;&lt;br/&gt;My main protagonist is almost always male.  Why?  Because that's what I am, I know how they think, and I feel more comfortable writing from their perspective.  There are always female characters involved in the story, but I don't get into their heads as much, because I'm not always exactly sure what they'd be thinking.  I think I can handle their dialogue and their actions fairly well -- I've never been told that my female characters do or say "unwomanly" things -- I'm just not as comfortable writing their thought processes.&lt;br/&gt;&lt;br/&gt;In my last several stories, the female character has also served as a "co-protagonist".  She represents the driving force that takes the main character into the "other world", bringing him from his every day life and dumping him into the "hidden world" that the story revolves.  Some times this has been not so subtle (for example, she gets helps him to get hired for a job that puts him directly into the "hidden world"), other times it's the result of simply knowing this woman (she's a part of the "hidden world" and weirdness surrounds her).&lt;br/&gt;&lt;br/&gt;How many characters do &lt;strong&gt;you&lt;/strong&gt; like to have in a story?  Is it easier for you to write female characters or males?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-4458804482247349666?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/4458804482247349666/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=4458804482247349666' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4458804482247349666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4458804482247349666'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/how-many-characters-is-too-many.html' title='How Many Characters is Too Many?'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-1274626631066724793</id><published>2010-10-02T14:33:00.000-04:00</published><updated>2011-07-10T13:18:33.531-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>My Favoritest Story Setting</title><content type='html'>First things first ... yes, I'm fully aware that favoritest is not a real word.  Now that that's out the way, we can on to the topic at hand.  &lt;strong&gt;Story setting&lt;/strong&gt;.  Some writers like to use the same setting for each book or story; usually this is because the books are in a series (like the Harry Potter series) and sometimes its a shared setting for all the (not necessarily related) books that they write (Terry Pratchett's Discworld is like this).  Some writers like to make up their own world, essentially giving them full control over all the details, without needing everything to make realistic sense.  Others (I'm firmly in this camp) like to use the real world as the backdrop for their stories, because you and I and everyone else knows how things work in the real world.&lt;br/&gt;&lt;br/&gt;Or at least in theory we know how they work.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt;Tell us about your favorite writ­ing project/universe that you’ve worked with and why.&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;My favorite project/universe/setting that I've worked with is alternate Earth, where almost everything is exactly like what you or I or anyone else knows.  There's just a few changes sprinkled in to make it fantastical.  Just about every horror book, thriller, or heck most non-genre fiction uses this type of setting (usually without the obvious fantastical elements).&lt;br/&gt;&lt;br/&gt;In the past, I've tried to come up with complete alternate world settings, but they always felt hollow and incomplete.  Now, I like to do what I, for lack of knowing the correct term, call "world within world".  Think Harry Potter.  The outside, every day world is pretty much what you or I experience on a day-to-day basis.  However, hidden just beyond the periphery is a secret world of magic.  Or monsters.  Or sparkly vampires.  Or unicorns.  It doesn't matter &lt;strong&gt;what&lt;/strong&gt; lays beyond, just that something does.&lt;br/&gt;&lt;br/&gt;And, into this hidden world the characters are thrust and now have to cope with learning the "truth" of their reality.  It's the act of uncovering all that "truthiness" that I find interesting.  It's also, conveniently, where the drama is as well as all that tasty character growth and other literary terms.&lt;br/&gt;&lt;br/&gt;Now, do I wish that I had created some sort of wondrously complex and detailed world like Tolkein' s Middle Earth, or Pratchett's Discworld?  Of course I do.  At the same time, however, being able to say "Meanwhile, on the Upper East Side" and have readers &lt;strong&gt;instantly&lt;/strong&gt; know what I'm talking about is worth it's weight in literary gold.&lt;br/&gt;&lt;br/&gt;Someday I do intend to fully flesh out and develop a completely "my own" world setting.  But for now, I'm content with using a world with the world.&lt;br/&gt;&lt;br/&gt;Is there a particular story setting or world that you like to write apart?  A favorite that you like reading more about?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-1274626631066724793?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/1274626631066724793/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=1274626631066724793' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1274626631066724793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1274626631066724793'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/my-favoritest-story-setting.html' title='My Favoritest Story Setting'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5089976753984401706</id><published>2010-10-02T13:20:00.000-04:00</published><updated>2011-07-10T13:18:33.531-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meme'/><category scheme='http://www.blogger.com/atom/ns#' term='writing prompt'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>30 Day Writing Meme</title><content type='html'>I loiter on a writer's forum (&lt;a href="http://www.absolutewrite.com/forums"&gt;Absolute Write&lt;/a&gt;).  While reading the "Did you update your blog today?" thread, I noticed a lot of others were doing this.  So, I figured, "Why not?"&lt;br/&gt;&lt;br/&gt;Of course, &lt;strong&gt;they&lt;/strong&gt; got the memo and all started it on the 1st.  So I'm a day late (and probably a dollar short, as usual).  Fraptious day, of course, because I'll have multiple posts today.  The first being this one, and then I'll be very shortly doing the 1st writing prompt.&lt;br/&gt;&lt;br/&gt;&lt;a name='more'&gt;&lt;/a&gt;All 30 prompts:&lt;br/&gt;&lt;br/&gt;1. Tell us about your favorite writ­ing project/universe that you’ve worked with and why.&lt;br/&gt;2. How many char­ac­ters do you have? Do you pre­fer males or females?&lt;br/&gt;3. How do you come up with names, for char­ac­ters (and for places if you’re writ­ing about fic­tional places)?&lt;br/&gt;4. Tell us about one of your first stories/characters!&lt;br/&gt;5. By age, who is your youngest char­ac­ter? Old­est? How about “youngest” and “old­est” in terms of when you cre­ated them?&lt;br/&gt;6. Where are you most com­fort­able writ­ing? At what time of day? Com­puter or good ol’ pen and paper?&lt;br/&gt;7. Do you lis­ten to music while you write? What kind? Are there any songs you like to relate/apply to your char­ac­ters?&lt;br/&gt;8. What’s your favorite genre to write? To read?&lt;br/&gt;9. How do you get ideas for your char­ac­ters? Describe the process of cre­at­ing them.&lt;br/&gt;10. What are some really weird sit­u­a­tions your char­ac­ters have been  in? Every­thing from seri­ous canon scenes to meme ques­tions counts!&lt;br/&gt;11. Who is your favorite char­ac­ter to write? Least favorite?&lt;br/&gt;12. In what story did you feel you did the best job of world­build­ing? Any side-notes on it you’d like to share?&lt;br/&gt;13. What’s your favorite cul­ture to write, fic­tional or not?&lt;br/&gt;14. How do you map out loca­tions, if needed? Do you have any to show us?&lt;br/&gt;15. Mid­way ques­tion! Tell us about a writer you admire, whether pro­fes­sional or not!&lt;br/&gt;16. Do you write roman­tic rela­tion­ships? How do you do with those, and how “far” are you will­ing to go in your writ­ing? ;)&lt;br/&gt;17. Favorite pro­tag­o­nist and why!&lt;br/&gt;18. Favorite antag­o­nist and why!&lt;br/&gt;19. Favorite minor that decided to shove him­self into the spot­light and why!&lt;br/&gt;20. What are your favorite char­ac­ter inter­ac­tions to write?&lt;br/&gt;21. Do any of your char­ac­ters have chil­dren? How well do you write them?&lt;br/&gt;22. Tell us about one scene between your char­ac­ters that you’ve never writ­ten or told any­one about before! Seri­ous or not.&lt;br/&gt;23. How long does it usu­ally take you to com­plete an entire story—from  plan­ning to writ­ing to post­ing (if you post your work)?&lt;br/&gt;24. How will­ing are you to kill your char­ac­ters if the plot so  demands it? What’s the most inter­est­ing way you’ve killed some­one?&lt;br/&gt;25. Do any of your char­ac­ters have pets? Tell us about them.&lt;br/&gt;26. Let’s talk art! Do you draw your char­ac­ters? Do oth­ers draw them?  Pick one of your OCs and post your favorite pic­ture of him!&lt;br/&gt;27. Along sim­i­lar lines, do appear­ances play a big role in your  sto­ries? Tell us about them, or if not, how you go about design­ing  your char­ac­ters.&lt;br/&gt;28. Have you ever writ­ten a char­ac­ter with phys­i­cal or men­tal  dis­abil­i­ties? Describe them, and if there’s noth­ing major to speak  of, tell us a few smaller ones.&lt;br/&gt;29. How often do you think about writ­ing? Ever come across some­thing IRL that reminds you of your story/characters?&lt;br/&gt;30. Final ques­tion! Tag some­one! And tell us what you like about that  per­son as a writer and/or about one of his/her characters!&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5089976753984401706?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5089976753984401706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5089976753984401706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5089976753984401706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5089976753984401706'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2010/10/30-day-writing-meme.html' title='30 Day Writing Meme'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2161838704014027164</id><published>2008-10-15T09:05:00.000-04:00</published><updated>2008-10-15T09:05:00.228-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nanowrimo'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Prepping for NaNoWriMo</title><content type='html'>I just created an account at &lt;a href="http://www.nanowrimo.org/"&gt;National Novel Writing Month&lt;/a&gt;.  I first heard about it last year at Thanksgiving.  Since that was smack dab at the end of the month, I couldn't very well enter into it, could I?&lt;br /&gt;&lt;br /&gt;So, I'm prepping for it now, by doing some preliminary brainstorming for ideas.  I have a few that I like.  Now I just need to trim it down to the one idea I will work on for the month.&lt;br /&gt;&lt;br /&gt;I'll be updating my &lt;a href="http://www.nanowrimo.org/eng/user/411508"&gt;author page&lt;/a&gt; once November starts.  I hope to be able to keep the pace.&lt;br /&gt;&lt;br /&gt;Anyone else doing NaNoWriMo this year?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2161838704014027164?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2161838704014027164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2161838704014027164' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2161838704014027164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2161838704014027164'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/prepping-for-nanowrimo.html' title='Prepping for NaNoWriMo'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2227177098030178651</id><published>2008-10-14T12:53:00.003-04:00</published><updated>2008-10-14T13:00:51.417-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Chapter 1, The Path Into Darkness</title><content type='html'>&lt;div style="float:right"&gt;&lt;br /&gt;&lt;a href="https://www.lulu.com/commerce/index.php?fBuyProduct=3490204"&gt;&lt;img alt="Path Into Darkness e-book" src="http://www.tempestnetworks.net/images/thumbnail_hardcover.jpg"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Spiders skittered around the periphery of his vision.  Everything was shrouded in deep shadow; all he could see and hear were the spiders.  There were hundreds of them, maybe thousands--crawling over him, on his face, through his hair.  He felt the prickling of their steps as they weaved their way over his body.&lt;br /&gt;&lt;p&gt;Something loomed into his vision; a large bloated shape, a glistening black that allowed him to see his own reflection.  Small spiders moved over his body, leaving wisps of white silk webbing all about him.  &lt;br /&gt;&lt;p&gt;A bright light shone--its sudden appearance startled him--which only served to draw further attention to huge spider hovering over him.  It spun webbing, entangling his body within the strands.  He struggled against the webs, first tossing his body to the left.  Then he threw himself to his right, but the webs were already over his legs and pinned his arms to his sides.&lt;br /&gt;&lt;p&gt;In a panic, Mark craned his head side to side, vainly struggling for a glimpse of his surroundings.  It looked like a hospital ward; beds lined the wall he was against as well as the wall opposite him.  Other large spiders could be seen, hanging on thick strands of web over the other beds or encasing other forms–-patients he supposed, it was a hospital after all.  The chattering sound of mandibles and the clicking of the spiders filled his ears.&lt;br /&gt;&lt;p&gt;Before each bed, a person stood; each was watching the process, some made notes on clipboards.  They were all dressed as doctors, but what sort of doctor would stand by idly and watch what was happening?&lt;br /&gt;&lt;p&gt;He struggled to see past the bloated form in front of him, to see if someone stood at the foot of his bed.  Straining to see, he was able to see his ″doctor″; the man made no notes and held no clipboard.  He was simply watching, occasionally shaking his head and making a sort of clucking sound with his teeth.  For some reason--Mark couldn't be sure why--but the man's presence was more upsetting than the spiders.  &lt;br /&gt;&lt;p&gt;He looked to be of median age, with short, brown hair and a short, gray-streaked beard and a pair of small eyeglasses.  They made brief eye contact, and the other man smiled wryly, saying, "Excita sursum, pro est quoque tardus!"&lt;br /&gt;&lt;p&gt;Once he spoke, the large spider over him stopped and quickly began to move away.  The man spoke again, making vigorous hand gestures, "Hora est tardus, quod vos opus efficia.  Nunc vigila!"&lt;br /&gt;&lt;br /&gt;&lt;center&gt;*&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Mark sat bolt upright in his bed, beads of sweat ran down his face,clinging to his body.  Through vision still fuzzy from his sleep, he looked around in a panic.  He sighed heavily;to his relief, he saw that he was in his own bedroom. His simply decorated and cozy room.  Not a hospital ward.  And no spiders, let alone their webbing in sight.&lt;br /&gt;&lt;p&gt;He had had this particular dream--the spider dream as he referred it to his friends, to differentiate from his other bizarre dreams--for the last few days.  Each time it had taken longer for him to wake, allowing him to gather more details about it.   While the man had been in these dreams before, speaking was a new addition.  But what language was that?  It sounded like Latin, or at least something old like that.  Mark only spoke English, and bits of Spanish that he learned in school; both of which were no help to figure out what the man had said.&lt;br /&gt;&lt;p&gt;He rummaged through his night stand and pulled out a spiral notebook. Grabbing a pen, he wrote down tonight's dream.  He hoped he had the words correct and that he could find a good on-line translator that could help him make some sense of them.  He put his dream journal back away and wiped the sweat from himself, before trying to go to sleep again.&lt;br /&gt;&lt;p&gt;A few hours later, Mark woke up again; he had no odd dreams or nightmares this time.  As far as he could remember, it was just dreamless sleep, restful for his body but his mind was still groggy and on edge.  He got out of bed slowly, and started his morning routine.  &lt;br /&gt;&lt;p&gt;First, he showered.  He was still groggy and he caught himself almost dozing off again as he stood motionless in the spray of the hot water.  He toweled himself dry and got out of the shower.  Wiping the steam fog from the mirror, he spent a few moments making odd faces and expressions at his reflection.  He brushed at his hair haphazardly.  He made a grimace at his reflection, and brushed it in a different direction.  Not liking that, he ran the brush through his hair again.  He never liked his wavy hair, or the unruly cowlick that happened whenever he had his hair cut short.  Unfortunately, his office job necessitated a ″professional″ hair cut, and, thus, his daily battle with his hair.  It used to be so much quicker when his hair was longer.&lt;br /&gt;&lt;p&gt;Perhaps it was just his tiredness, but he made more faces at the mirror and decided that he didn't like anything he saw.  No, he didn't like what he saw at all today--not that he ever liked the way he looked, but today was particularly bad.  The only thing he liked was his nose, and he was pretty sure that was only because his goatee drew attention from it.    &lt;br /&gt;&lt;p&gt;Then, he took his medications--one for his allergies as springtime was hellish for him and another for anxiety.  He smiled slightly at the thought that maybe he should take the anxiety pill first thing in the morning, before having his daily bout of self-disapproval.&lt;br /&gt;&lt;p&gt;He worked not far from his Manhattan apartment, in an engineering firm's accounts receivable department.  It was rare that Mark spoke about his work; when he did, his friends would make over dramatic pantomimes, loudly ask how he could do such a boring and mundane job.  Of course, it wasn't as if Tommy or Peter had ″glamorous″ jobs.  Tommy was a courier for a law firm and Peter was "self-employed", but mostly he just collected disability pay and went to see a psychiatrist three times a week.&lt;br /&gt;&lt;p&gt;Even though he had psychiatric medications, Mark wasn't one for therapy and therapists.  Peter, once an actor, was now effectively crippled by his paranoia, unable to perform in front of audiences or large crowds, let alone overcome the daily struggle to leave his own apartment.  &lt;br /&gt;&lt;p&gt;Mark had recently begun to worry that there was something seriously wrong with himself, far beyond what his nagging worries and anxious thoughts.  There were, of course, the nightmares; always vivid and almost always about some sort of constrictions or impeding death.  And there always was the ″doctor″.  He wasn't always in that guise, true, but it was always him.  Middle aged, stern looking, with a full beard, the man in his dreams had never spoken before last night.  And now that he had, he spoke in a language that Mark didn't know.  That confused and frightened him; how could such a thing happen?  .  &lt;br /&gt;&lt;p&gt;From all that he had ever learned about dreams, it didn’t seem possible for something like last night's dream to occur.  Unless, of course, what the man said was some gibbering nonsensical language conceived by Mark's subconscious or perhaps it was a riddle.  The mind works oddly at times, trying to express your deepest fears and concerns through dreams, but it wasn't always clear; hiding behind symbols and inscrutable patterns.  Mark remembered that much from introductory classes in psychology he had taken at college.&lt;br /&gt;&lt;p&gt;As soon as he could find the time, he intended to find out what, if anything, those words meant.  He hoped it would be something simple; maybe those words were something Mark had heard once in a documentary or a movie.  On the other hand--highly unlikely as it would seem--maybe he was somehow dreaming in a language that he didn't know.  The idea of that alone was enough to cause a shiver to run along his spine.  He thought that he would prefer the simpler, more reasonable explanation.&lt;br /&gt;&lt;p&gt;And, yet, what if it wasn't just his mind playing tricks on him?  Could it be something worse, and not just strange dreams and restless sleep?  He would have liked to be able to do nothing other than to mull these thoughts over.  Mark had always been one to think problems through and try to see all the angles concerned.  It had only occasionally proved to be useful, and it usually just resulted in him appearing to be indecisive and non-committal.&lt;br /&gt;&lt;p&gt;Those matters would have to wait until another time, though, as the pressing concerns of accounts receivable were weighing heavily on him.  He smiled absentmindedly as he sat down in his cubicle and logged into his workstation.  He took a sip of coffee and answered his ringing phone.  ″Petersen and Jones Engineering, Mark Roberts speaking," he said.&lt;br /&gt;&lt;p&gt;″Hello, Mister Roberts," the voice on the phone said.  ″Misters McNally and Cooper would like to know your availability vis-à-vis a lunch appointment.″&lt;br /&gt;&lt;p&gt;"Yes, I can do lunch today, Tommy.  And your snooty businessman impression still needs work."&lt;br /&gt;&lt;p&gt;"Good, I'll be down by your building dropping a contract off around noon.  I’ll make sure Pete's medicated enough to leave his apartment."&lt;br /&gt;&lt;p&gt;"I'm sure you don't have to do that," Mark said.  "Just tell him that the government will be activating all the microphones in his apartment at noon.  No need to get him all doped up and stupid."&lt;br /&gt;&lt;p&gt;"Yeah, you have a point Mark.  I'll meet you two out front later."&lt;br /&gt;&lt;p&gt;Hanging up the phone, Mark concluded that at least today wouldn’t be totally dull.   There'd be an entertaining lunch, and most likely on the house as Tommy would make sure to pick a place where he knew the wait staff.   Maybe not for all three of them, but at least for himself.&lt;br /&gt;&lt;p&gt;The hours until lunchtime slowly passed, with Mark having to do the usual routine of calling vendors and customers to arrange payments and billing schedules.  It was a fairly easy job, since the firm was itself financially successful, but also was lucky enough to have clients who diligently paid on schedule.&lt;br /&gt;&lt;p&gt;The whole while, he felt like someone was watching him.  He caught himself glancing out his cubicle entrance; he even stood up once and looked all around the office.  Even though he saw no-one or anything like a camera or other recorder, he still couldn’t shake the feeling.  After his second cup of coffee at around 11:45 AM, he felt a mild pain that seemed to be centered behind his eyes.&lt;br /&gt;&lt;p&gt;He stopped looking over the invoices he was working on and rubbed his temples, while squeezing his eyes shut tightly.  The pain lessened a bit, allowing his to return to work.  Again, however, the feeling of being watched returned; this time it felt like someone was standing over his shoulder.  Mark was sure he felt something breathing on the back of his neck.&lt;br /&gt;&lt;p&gt;He quickly turned around to see what was behind him.  As he suspected, there was nothing there.  Swiveling his chair around to face his desk once more, his foot caught on the small garbage can in his cubicle, making it clatter against his file cabinet.  Lucia, who sat in the cubicle opposite his, looked up at the commotion with a puzzled expression.  "Everything ok, Mark?" she asked.&lt;br /&gt;&lt;p&gt;Lucia Pietrangeli was somewhat attractive to Mark, but first and foremost she was a coworker; and that meant, to him at least, that she was off limits and not worth the hassle of thinking about it in that fashion.  He was certain that had  she not been a work associate she would be firmly in the attractive category, but of course, that would then mean that he would be unable to talk to her due to his quirky social anxieties.  He sighed a bit at how messed up his brain was, before saying, "Yeah.  I think I just had too much coffee.  I’m a little jittery."&lt;br /&gt;&lt;p&gt;"You're always a little jittery, Mark.  Do you ever relax?"&lt;br /&gt;&lt;p&gt;"Who has time to relax?"  He glanced at his watch and noticed that it was almost noon.  "I'm going to lunch," he said, adding, "Be back in an hour."&lt;br /&gt;&lt;p&gt;"You want some company?" Lucia asked.&lt;br /&gt;&lt;p&gt;"Can't today, I'm meeting with some friends."  He stopped for a second, before saying, "We'll get lunch tomorrow, ok?"&lt;br /&gt;&lt;p&gt;"Sure thing," she said.  "I get to pick the place this time though."&lt;br /&gt;&lt;p&gt;He stood up and grabbed his jacket, heading towards the elevators.  As he waited for the elevator to arrive, he rolled his head from side to side with eyes shut.  He heard the bell that signaled the elevator's arrival and opened his eyes, with a heavy sigh.&lt;br /&gt;&lt;p&gt;What he saw, however, was not what he expected.  Instead of the familiar open elevator doors in the little lobby on the fifteenth floor of the Beakerman building, Mark saw a dimly lit vestibule with large cobwebs clinging to the vaulted ceiling.  Spiders could be seen traversing the webbing, heading to and fro along the strands.  &lt;br /&gt;&lt;p&gt;Where the open elevator doors would be was instead a yawning pit; the sight of which filled him with a rush of vertigo.  He steadied himself and peered over the edge of the pit, trying to peer into its depths.  He could see, faintly, some large form writhing therein.&lt;br /&gt;&lt;p&gt;In a panic, he turned his head, gathering in what he could of his surroundings.  He couldn't see his coworkers, nor any of the drab office decorations or paintings, nor the various potted plants.  Instead, there was only himself, the spiders crawling along their webs, and the writhing, pulsating form in the pit.&lt;br /&gt;&lt;p&gt;"Nunc vigila, Marcus," a voice said.  &lt;br /&gt;&lt;p&gt;He recognized it immediately as the voice from last night’s dream.  "Vestri semita plumbum in obscurum quod puteus."&lt;br /&gt;&lt;p&gt;He spun around to see where the man was, but as he did so he became dizzy.  Stopping to steady himself, his vision darkened and the scene before him faded away.&lt;br /&gt;&lt;p&gt;When his senses became clear again, he was standing in the elevator lobby; the door to the elevator open before him and quiet soothing symphonic music emanated from within.  He looked around, and to his relief there was no one there to have witnessed his odd behavior.  This was getting out of hand now, weird dreams were one thing but hallucinations were an all together different concern.  He hoped that maybe it was just the lack of sleep and he hadn't hallucinated, but briefly zoned out while waiting for the elevator.  The thought that his mind was simply overtired and was causing him to have a daydream put him a little bit at ease.&lt;br /&gt;&lt;p&gt;He was still deep in thought when he emerged from the building and onto the sidewalk outside.  Peter was already waiting outside, leaning against the building and smoking a cigarette.  &lt;br /&gt;&lt;p&gt;They exchanged greetings and Mark leaned against the wall as well, waiting for Tommy to get there.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;*&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;As usual, Tommy was late.  He always ran late when he was delivering contracts, as they required him to wait for the receiving party's signatures and that gave him time to make small talk with the secretaries.  He was fairly popular with them, always eliciting an easy laugh or smile.&lt;br /&gt;&lt;p&gt;This annoyed Mark, who had always found it difficult to engage easily in conversation with anyone, let alone women.  He would often find himself taking shallow breaths and could feel sweat beading on his forehead; thankfully, the pill he took for anxiety helped but it didn't make it any easier for him.  Mark was often at a loss for what to say next in a conversation with a stranger, fearing that he would offend them or anger them.  The truth of the matter was that the only people he felt at ease with, at least for social situations, were Peter and Tommy.&lt;br /&gt;&lt;p&gt;He had known Tommy for what seemed like forever.  They had grown up together in New Jersey and moved into New York City at about the same time, which was when Mark graduated from college and Tommy had dropped out of law school.  It always amused him that Tommy had decided he couldn't bear to be a lawyer, but had no problem collecting a paycheck from them.&lt;br /&gt;&lt;p&gt;Peter lived in the same building where Mark's first apartment was.  They clicked fairly quickly, sharing the common bond of questionable sanity.  Further, at that time Peter was still actively acting in plays and kept dragging Mark to various cast parties and after show events.  Unlike the other two however, Peter was well into his forties and was recognized from time to time for either one of the many plays he had been in or the television show he had been on in the 90s.&lt;br /&gt;&lt;p&gt;When Tommy arrived, they walked around the corner to a little Mexican place.  The restaurant had good food and, more importantly for Tommy, his current love interest worked the lunch shift there.  This guaranteed them a reduced bill, at the expense of Mark and Peter having to endure Carmen constantly coming over to their table to talk to Tommy.&lt;br /&gt;&lt;p&gt;During the meal, they made mindless conversation, which briefly touched upon politics, the hotness or non-hotness of the women walking past the restaurant, and how much all three of them disliked the selection of movies playing at the theater closest to their apartments.&lt;br /&gt;&lt;p&gt;After finishing his meal, Tommy excused himself from the table, going over to the kitchen entrance to talk with Carmen.  Mark and Peter still had some of their meal left, so they assumed they would be finished by the time that Tommy was finished with his business.&lt;br /&gt;&lt;p&gt;"Something weird happened today," Mark said, nervously tapping his fork against his plate.&lt;br /&gt;&lt;p&gt;Taking a sip of his soda, Peter asked, "What?"&lt;br /&gt;&lt;p&gt;Mark answered, "I had some sort of hallucination, or maybe just a daydream.  It was a new version of the spiders dream.  It happened when I went to get on the elevators before."&lt;br /&gt;&lt;p&gt;"Buildings have spiders in them, Mark.  That's not something to worry about."&lt;br /&gt;&lt;p&gt;Mark laughed, before saying, "The paranoiac is telling me not to worry about something bad happening to me."&lt;br /&gt;&lt;p&gt;"It's just spiders."&lt;br /&gt;&lt;p&gt;"No, it wasn't just that," Mark said.  "The whole place took on a weird look, like one of those medieval churches or something.  And, instead of the elevators, there was a deep pit with some thing at the bottom.  I couldn't tell what it was, but I could definitely see it writhing about in the shadows."&lt;br /&gt;&lt;p&gt;"Really?"  Peter asked.  "Now that is worrisome I think.   Hallucinations are serious stuff, Mark.  I think you need to see a professional, I can see if my psychiatrist is taking on new patients if you'd like.″&lt;br /&gt;&lt;p&gt;Mark put a twenty dollar bill on the table and stood up.  "Not doing that," he said, before adding, "I have to get back to work.  Tell Tommy I'll catch up with him later."&lt;br /&gt;&lt;p&gt;Peter sat in silence, waiting for Tommy to get out of the back office.  The entire time, he was thinking over what Mark had just told him.  He knew about Mark having the "spider dream" almost nightly and how it was made him very frazzled.  Peter could only wonder how he would be after a few days of seeing them even when he was awake.&lt;br /&gt;&lt;br /&gt;&lt;center&gt;*&lt;/center&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Mark thought that he should go back to the restaurant and apologize to Peter for his outburst.  After all, what if he really were going crazy?  What would happen then?  He grimaced at the thought of being committed to an institution or hospital, constantly being monitored and medicated.&lt;br /&gt;&lt;p&gt;It's just stress, he kept telling himself.  Lack of sleep and the realization that he had just had another disappointing year in his disappointing life all culminating in this series of dreams and visions.  Maybe it was his subconscious crying out for a change, a desperate plea for Mark to shake up his meaningless and empty life.  &lt;br /&gt;&lt;p&gt;While he was afraid and hesitant to talk to therapist or psychiatrist about recent events, he felt that it was safe to confide in Peter.  After all, how could Peter, who had his own ailments, be judgmental about it?  How couldn't he understand Mark's fears of being institutionalized?  &lt;br /&gt;&lt;p&gt;Mark still remembers the creepy, almost surreal, stories that Peter would sometimes tell about his time in a mental hospital.  There was no way, no how, that Mark wanted to be anywhere near such a place.&lt;br /&gt;&lt;p&gt;Now that he was at the front entrance to his office building, making amends with Peter would have to wait, and Mark was certain that Peter would understand his reaction.  After all, Peter occasionally freaked out and ranted at Mark and Tommy about black helicopters coming for them in the middle of the night; they always let it slide when Peter told them he forget to take his pills.  Mark expected the same from his friend.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2227177098030178651?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2227177098030178651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2227177098030178651' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2227177098030178651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2227177098030178651'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/chapter-1-path-into-darkness.html' title='Chapter 1, The Path Into Darkness'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3428153770276302571</id><published>2008-10-13T08:26:00.003-04:00</published><updated>2008-10-13T08:30:05.746-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>Generating Traffic</title><content type='html'>This &lt;a href="http://www.bigrichjerk.com/blog/2008/10/12/review-web-traffic-juggernaut/"&gt;review of Web Juggernaut&lt;/a&gt; showed up when I was searching around for ways to get visitors to this blog.  I'm not trying to do the whole "niche blogging" thing to make money or anything, I just want to get my ideas on software and writing shared with other people.&lt;br /&gt;&lt;br /&gt;Which, of course, requires visitors.  It seems like a fairly easy link exchanging type program.  I have no idea if it works or not, but I'm still doing my research.&lt;br /&gt;&lt;br /&gt;I know that the best method of getting traffic is to have good solid content, but that takes time to develop and I am working on that.  In the meantime, what programs or methods have worked well for you?&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3428153770276302571?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3428153770276302571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3428153770276302571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3428153770276302571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3428153770276302571'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/generating-traffic.html' title='Generating Traffic'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-8411392854875404243</id><published>2008-10-12T08:29:00.002-04:00</published><updated>2008-10-12T08:40:08.056-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Death of a Hard Drive</title><content type='html'>On Saturday, one of the hard drives in my near ancient Linux server failed.  Even though I had back-ups of some of my data, I was lax and hadn't backed up some of the information for a few of the web sites that reside there.&lt;br /&gt;&lt;br /&gt;So, until I can rebuild those web sites, I have to use the &lt;b&gt;mod_rewrite&lt;/b&gt; features of Apache to temporarily redirect visitors to a working web site.  This is done with the following entry in the virtual host information:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;VirtualHost&amp;gt;&lt;br /&gt;  ServerName www.stevecoursen.com&lt;br /&gt;  RewriteEngine On&lt;br /&gt;  RewriteRule ^(.*) http://blog.stevecoursen.com [R,NC,L]&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So, if you were trying to go to a different website, but ended up here, it's because I haven't restored or rebuilt the site you were trying to get to.  It would also be the reason why no one was able to really get to this blog yesterday either, as the machine that failed is also my DNS server.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-8411392854875404243?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/8411392854875404243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=8411392854875404243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8411392854875404243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8411392854875404243'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/death-of-hard-drive.html' title='Death of a Hard Drive'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5020701769347174212</id><published>2008-10-10T08:05:00.002-04:00</published><updated>2008-10-10T11:17:10.936-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>Official Gmail Blog: New in Labs: Stop sending mail you later regret</title><content type='html'>It's late night on a Friday, you've just come back from a party, and you get the brilliant idea to send an email to an ex.  Never fear, Google's Mail Goggles are here.&lt;br /&gt;&lt;br /&gt;It's an add-on that asks math questions to verify your sobriety during designated hours.  If you answer the questions correctly, the mail will be sent.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gmailblog.blogspot.com/2008/10/new-in-labs-stop-sending-mail-you-later.html"&gt;Official Gmail Blog: New in Labs: Stop sending mail you later regret&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5020701769347174212?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5020701769347174212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5020701769347174212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5020701769347174212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5020701769347174212'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/official-gmail-blog-new-in-labs-stop.html' title='Official Gmail Blog: New in Labs: Stop sending mail you later regret'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-975466643294307240</id><published>2008-10-09T09:27:00.000-04:00</published><updated>2008-10-09T09:27:00.391-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Encouraging Children to Write</title><content type='html'>&lt;p&gt;Children can be surprisingly adept at making up stories.  They do it all the time, when they lie or need to make an excuse for why they didn't clean their rooms.  Schools don't actively encourage it enough, but creative writing can put all that story telling ability to good use.&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Read:  &lt;/strong&gt;Of course, the very first step in encouraging a child to write is to also encourage them to read.  They need to read just about anything and everything they can both get their hands on and understand (so that means no &lt;strong&gt;War and Peace&lt;/strong&gt; for the 1st graders!). &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Discuss: &lt;/strong&gt;It works best when you've read the same book or article and can talk to them about it.  Share your favorite characters or scenes; talk about what made you want to read to the end of the story.  Being diligent about this will lead you to learn what type of fiction that the child likes.  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Read Some More: &lt;/strong&gt;Inevitably, people write what they already like to read.  After all, it's very difficult to write a good horror story if you don't like horror, let alone have never read any.  Each genre of fiction has certain expectations and conventions that readers expect; in fact, they will feel outright cheated if one doesn't employ those conventions in some form or another.  The only way to really learn what these expectations are and how to work with them, is to read.  &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Brainstorm: &lt;/strong&gt;Buy them a journal or a notebook to write in.  Encourage them to write their ideas down and to try to plan out their stories.  Once a week go through it with them, and brainstorm with them to help flesh a basic idea out into a full story.  Make sure that when you do this, you don't supply any ideas though; encourage their creativity, don't write vicariously through them.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Support: &lt;/strong&gt;Hopefully, they will like a type of fiction that you are comfortable with, so that you can be a supportive critic of their work.  Most writers tend to be shy about their works, nervous that they either have no talent or that no one will like the story they're telling.  Print out their stories and make them into home-made magazines.  Start up a blog and post the stories there for others to read -- a community like MySpace is good for this because you can limit who can read the blog.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Feedback:  &lt;/strong&gt;The most important thing to remember is that when you give feedback on their work, always be encouraging.  Young writers tend to be easily dissuaded from sharing their works if they get negative feedback.  Be sure that you focus on things like grammar and spelling; even with computers, grammar errors can slip through and make a piece of fiction incomprehensible.&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;With these 6 steps, you should be able to get your child to write not just fiction that they enjoy, but hopefully that they can share proudly with the world and have others enjoy as well.&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-975466643294307240?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/975466643294307240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=975466643294307240' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/975466643294307240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/975466643294307240'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/encouraging-children-to-write.html' title='Encouraging Children to Write'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6314607428765577287</id><published>2008-10-08T12:20:00.001-04:00</published><updated>2008-10-08T12:21:44.374-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Ruby On Rails Development</title><content type='html'>&lt;div id="body"&gt;&lt;p&gt;Over the past few years open source software, web platform and technologies have taken stake of web development and web application development. With Ruby on Rails hype in IT industry we have seen proportionate increase in performance and scalability problems. Ruby on Rails was extracted from Basecamp by David Heinemeier Hansson, is a framework for web application. Ruby on Rails development India offers Ruby on Rails offshore outsourcing web development and is based on open source web platform, LAMP. Ruby is object oriented programming language, it is blend of different languages - it has taken concept from Smalltalk, ease to use from Python and reality and flow from Pearl. Rails is well stack, comprehensive open source framework for developing database supported web applications, dynamic websites using model view controller (MVC) methodology.&lt;br /&gt;With your database and web server, the Rail web development environment helps you develop complete, simple web application with rich functionality and interactivity. Because of the flexibility it provides Ruby on Rails is well suited for e-commerce development, content management, oscommerce, collaboration and online social communities. Since Rail works well with wide range of web servers and databases it is really easy to deploy web solutions using Rails.&lt;/p&gt;&lt;p&gt;Ruby on Rails (RoR) development main features include Model View Controller architecture that separates data from logic i.e. presentation layer and helps in organizing application program. RoR database access library simplifies data handling. Rails framework consists of extensive AJAX library, Ruby uses this library to generate AJAX code and the required Java script is automatically generated.&lt;/p&gt;&lt;p&gt;Let us discuss in brief Ruby on Rails framework, it includes following packages: ActiveRecord, ActiveResource (Active Web Service Package), ActionPack, Active Support, ActionMailer. These packages can be customized by adding plug-ins and extending existing functionalities of these packages.&lt;/p&gt;&lt;p&gt;Ruby on Rails outsourcing companies help to develop database driven web applications. Flickr is one of the best example of the web application developed for sharing photos on web. With ruby on rails, developers are able to design web applications that are simple and logical. As database driven websites share common set of parameters, rail handles code for connecting application to database; at the same MVC for application development separates data from logic. Scaffolding technology of Rails framework creates the skeleton application that contains model, view and controller components and controller performs all the application actions.&lt;/p&gt;&lt;p&gt;In brief, Ruby on Rails development is used for providing object oriented and component based web application development services. Ruby on rails outsourcing companies in India provide Ruby on Rails developers, outsource Ruby programmers to clients globally.&lt;/p&gt;&lt;/div&gt;&lt;div style="font-style: italic;" id="sig" class="sig"&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;b&gt;Rakhi&lt;/b&gt;, is a SEO strategist, SEO copywriter, SEO executive at open source development company in India outsourcing Ruby on Rails development. &lt;a id="link_74" target="_new" href="http://www.open-source-development.com/ruby_on_rails.shtml"&gt;Ruby on Rails development&lt;/a&gt; in India offers offshore &lt;a id="link_75" target="_new" href="http://www.open-source-development.com/"&gt;open source development&lt;/a&gt;, open source software solutions, offshore Ruby on Rails offshore outsourcing, Ruby on Rails development, outsourcing Ruby on Rails development, &lt;a id="link_76" target="_new" href="http://www.open-source-development.com/ruby_on_rails.shtml"&gt;Ruby on Rails CMS&lt;/a&gt;, open source software solutions, open source development India. We provide simple, logical and most reliable, high quality solutions to global clientèles.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Looking for open source web design development, open source software solutions, CMS solutions, drop us mail at: &lt;a id="link_77" href="mailto:webmaster@open-source-development.com"&gt;webmaster@open-source-development.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;Article Source: &lt;a id="link_78" href="http://ezinearticles.com/?expert=Rakhee_Chowdhary"&gt;http://EzineArticles.com/?expert=Rakhee_Chowdhary&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Note:  I'm short on time this week, so I'm half-mailing it in.  I'm re-posting interesting articles that I find.&lt;br /&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6314607428765577287?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6314607428765577287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6314607428765577287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6314607428765577287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6314607428765577287'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/ruby-on-rails-development.html' title='Ruby On Rails Development'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-9049662912382481871</id><published>2008-10-06T08:35:00.001-04:00</published><updated>2008-10-06T08:44:59.855-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Singleton Pattern for Python</title><content type='html'>In software engineering, the singleton pattern is a design pattern that is used to restrict instantiation of a class to one object. This is useful when exactly one object is needed to coordinate actions across the system. Sometimes it is generalized to systems that operate more efficiently when only one or a few objects exist.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Singleton(object):&lt;br /&gt;  instance = None&lt;br /&gt;  lock_obj = threading.RLock()&lt;br /&gt;&lt;br /&gt;  def __new__(self, *args, **kwargs):&lt;br /&gt;      return self.get_instance( *args, **kwargs )&lt;br /&gt;&lt;br /&gt;  @classmethod&lt;br /&gt;  def get_instance(clazz, *args, **kwargs):&lt;br /&gt;      with clazz.lock_obj:&lt;br /&gt;          if clazz.instance is None:&lt;br /&gt;              clazz.instance = object.__new__(clazz, *args, **kwargs)&lt;br /&gt;              clazz.instance.init(*args, **kwargs)&lt;br /&gt;      return clazz.instance&lt;br /&gt;        &lt;br /&gt;  def __init__(self, *args, **kwargs):&lt;br /&gt;      super( Singleton, self ).__init__(*args, **kwargs)&lt;br /&gt;&lt;br /&gt;    &lt;br /&gt;  def init(self, *args, **kwargs):&lt;br /&gt;      pass&lt;br /&gt;&lt;br /&gt;class Test(Singleton):&lt;br /&gt;  def init(self, *args, **kwargs):&lt;br /&gt;      #do initializations here, not in __init__&lt;br /&gt;      pass&lt;br /&gt;&lt;br /&gt;print Test()&lt;br /&gt;print Test()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The output of printing the value of the result of the "creating" the 2 Test objects will show that actually only one Test object was created.&lt;br /&gt;&lt;br /&gt;This pattern is needed very often in Python, although when it is needed it addresses the problem very handily.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Note:  this is code based off some searching earlier this year.  I no longer remember exactly where I found the original that I based this work off of.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-9049662912382481871?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/9049662912382481871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=9049662912382481871' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/9049662912382481871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/9049662912382481871'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/in-software-engineering-singleton.html' title='Singleton Pattern for Python'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-757143771371793244</id><published>2008-10-04T09:07:00.002-04:00</published><updated>2008-10-04T09:07:00.545-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Associated Content</title><content type='html'>I've heard good things about &lt;a href="http://www.associatedcontent.com/"&gt;Associated Content&lt;/a&gt;, where you get paid for publishing content and articles.  So, I submitted two pieces of flash fiction (short stories of up to 2000 words).  They're now available for viewing.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Timmy's father shipped out on active military duty the previous Christmas. Before he left, he gave Timmy a collection of little green army men; most of which were his favorite&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; toys when he was younger.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;Toy Soldiers Off to War&lt;/strong&gt;&lt;br /&gt;A piece of flash fiction (a short story up to 2000 words).&lt;br /&gt;&lt;a href="http://www.associatedcontent.com/article/1052942/toy_soldiers_off_to_war.html"&gt;View more »&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The Montoya was berthed in Fueling Bay 2-A. James Sandersen had the annoying habit of liking to run the ship down below manufacturer's recommendation on fuel levels. He also ran the ship past suggested maintenance schedules, but that was due to finances more than any other factor. Sandersen always insisted that the shipbuilders were in a cartel with the fuelers, but that was neither here nor there.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;strong&gt;Deal Done Bad&lt;/strong&gt;&lt;br /&gt;A piece of science fiction flash fiction (a short story of up to 2000 words).&lt;br /&gt;&lt;a href="http://www.associatedcontent.com/article/1052936/deal_done_bad.html"&gt;View more »&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-757143771371793244?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/757143771371793244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=757143771371793244' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/757143771371793244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/757143771371793244'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/associated-content.html' title='Associated Content'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-1817849584988345847</id><published>2008-10-03T14:08:00.003-04:00</published><updated>2008-10-03T14:09:57.275-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stackless'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>EVE Online's Stackless Architecture</title><content type='html'>I just saw this article about &lt;a href="http://www.massively.com/2008/09/28/eve-evolved-eve-onlines-server-model/"&gt;EVE Online's Server Model&lt;/a&gt;.  Very interesting and informative read, and a testament to Stackless's reliability and usability.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-1817849584988345847?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/1817849584988345847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=1817849584988345847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1817849584988345847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1817849584988345847'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/eve-onlines-stackless-architecture.html' title='EVE Online&apos;s Stackless Architecture'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-9103841463960573685</id><published>2008-10-03T10:39:00.005-04:00</published><updated>2008-10-03T12:46:34.984-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wrapup'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Weekly Roundup</title><content type='html'>This week has seen some interesting news in the Python world.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In particular, the &lt;a href="http://docs.python.org/whatsnew/2.6.html"&gt;release of Python 2.6&lt;/a&gt;, with support for json and a new multiprocessing paradigm.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In my research for other projects, I ran across an older article by the ineffable effbot about &lt;a href="http://effbot.org/zone/thread-synchronization.htm"&gt;thread synchronization&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;One of the more interesting, and sometimes confusing, parts of Python is list comprehensions, explained in good detail in this article on &lt;a href="http://lexicalclosures.blogspot.com/2008/09/comprehending-list-comprehensions.html"&gt;comprehending list comprehensions&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;I don't often need to write a parser, but the ideas presented in the &lt;a href="http://dealmeida.net/2008/10/01/zen-of-parsing"&gt;"Zen of Parsing"&lt;/a&gt; seem very useful for those rare instances.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;On the other hand, not everything I did this week was programming related.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I stumbled across this &lt;a href="http://www.positivityblog.com/index.php/2008/06/13/ernest-hemingways-top-9-words-of-wisdom/"&gt;list of words of wisdom from Ernest Hemmingway&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Questions about copyright?  You know you have them, and here are the &lt;a href="http://www.templetons.com/brad/copymyths.html"&gt;big myths about copyright&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-9103841463960573685?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/9103841463960573685/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=9103841463960573685' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/9103841463960573685'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/9103841463960573685'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/weekly-roundup.html' title='Weekly Roundup'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-73474087380444885</id><published>2008-10-02T08:33:00.004-04:00</published><updated>2008-10-02T08:56:55.075-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='stackless'/><category scheme='http://www.blogger.com/atom/ns#' term='twisted'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Perspective Broker Authentication for Stackless Python</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596100329?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596100329"&gt;&lt;img src="http://www.tempestnetworks.net/images/51PY-oaLAsL._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img alt="" style="border: medium none  ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596100329" border="0" width="1" height="1" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://twistedmatrix.com/projects/core/documentation/howto/pb-intro.html"&gt;Twisted Matrix's Perspective Broker&lt;/a&gt; is, to me at least, the main compelling reason to use the entire framework.  It's also an area that is lacking in documentation that is usable to a newbie to the framework.&lt;br /&gt;&lt;br /&gt;One of the things provided by the Perspective Broker is an &lt;a href="http://twistedmatrix.com/projects/core/documentation/howto/pb-cred.html"&gt;authentication framework&lt;/a&gt;, based around the concept of an avatar.  We're going to create a Perspective Broker authenticator that is more complex than what is presented in the Twisted Matrix documentation.&lt;br /&gt;&lt;br /&gt;In one of the projects I worked on, we needed to have a central authentication server, to which all the other object brokers would authenticate against.  Due to the way that Twisted operates, a user needs to authenticate against the broker that they are currently connected to.  We need to build a authenticator that can authenticate for itself, or if needed, recursively authenticate against another server.&lt;br /&gt;&lt;br /&gt;To achieve this goal, we run into the first hurdle, Twisted doesn't pass a meaningful password around.  This changes the order of authentication slightly then, as we now need to authenticate against the main authenticating server first.  That server then gives us a cookie, known as &lt;span style="font-weight: bold;"&gt;authentication_cookie&lt;/span&gt; in the code below.  This cookie is good for this login session with the main authenticator.  When connecting and authenticating against any other broker in the system, we pass the username and this cookie as our credentials.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class UsernamePasswordDatabaseChecker:&lt;br /&gt; interface.implements(checkers.ICredentialsChecker)&lt;br /&gt;&lt;br /&gt; credentialInterfaces = (credentials.IUsernamePassword,&lt;br /&gt;                         credentials.IUsernameHashedPassword)&lt;br /&gt;&lt;br /&gt; def __init__( self, login_service ):&lt;br /&gt; self.login_service = login_service&lt;br /&gt; &lt;br /&gt; def passcheck( self, account, credentials ):&lt;br /&gt;     if not account:&lt;br /&gt;         return failure.Failure( NoSuchAccount( ) )&lt;br /&gt;     c1 = credentials.checkPassword( account.password )&lt;br /&gt;     c2 = credentials.checkPassword( account.authentication_cookie )&lt;br /&gt;     if c1:&lt;br /&gt;         return login_server.MasterAuthenticationStatus( account.username,&lt;br /&gt;                                                         account, 1 )&lt;br /&gt;     elif c2:&lt;br /&gt;         return login_server.MasterAuthenticationStatus( account.username,&lt;br /&gt;                                                         account, 0 )&lt;br /&gt;     elif not c1 and not c2 and account.authentication_cookie:&lt;br /&gt;         return failure.Failure( AuthenticationCookieMismatch( ) )&lt;br /&gt;     elif not c1 and not c2 and not account.authentication_cookie:&lt;br /&gt;         return failure.Failure( InvalidPassword( ) )&lt;br /&gt;     return failure.Failure( NoSuchAccount( ) )&lt;br /&gt;&lt;br /&gt; @reactor.deferred_tasklet&lt;br /&gt; def store_auth_cookie( self, auth_status ):&lt;br /&gt;     bcr = reactor.blocking_tasklet( self.login_service.callRemote )&lt;br /&gt;     return bcr( "store_authentication_cookie", auth_status )&lt;br /&gt;&lt;br /&gt; @reactor.deferred_tasklet&lt;br /&gt; def requestAvatarId(self, credentials ):&lt;br /&gt;     if hasattr( self.login_service, "callRemote" ):&lt;br /&gt;         bcr = reactor.blocking_tasklet( self.login_server.callRemote )&lt;br /&gt;         acct = bcr( "get_account", credentials.username )&lt;br /&gt;         self.passcheck( acct, credentials )&lt;br /&gt;         status = bcr( "account_status", acct )&lt;br /&gt;         rv = self.store_auth_cookie( status )&lt;br /&gt;         return rv&lt;br /&gt;     else:&lt;br /&gt;         rv = self.login_service.authenticate_account( credentials )&lt;br /&gt;         return rv&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;We use one of the function decorators from when we first started &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-python-meets-twisted-matrix.html"&gt;integrating Twisted into Stackless python&lt;/a&gt;, the &lt;span style="font-weight: bold;"&gt;deferred_tasklet&lt;/span&gt;.  If you haven't read that article, the &lt;span style="font-weight: bold;"&gt;deferred_tasklet&lt;/span&gt; decorator wraps the function to run in a seperate Stackless tasklet, while still returning a &lt;span style="font-weight: bold;"&gt;Deferred &lt;/span&gt;that can be used by the rest of the Twisted machinery.&lt;br /&gt;&lt;br /&gt;The&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;referenced member &lt;span style="font-weight: bold;"&gt;login_service&lt;/span&gt; is a straight-forward object that implements the function &lt;span style="font-weight: bold;"&gt;authenticate_account&lt;/span&gt;.  If the credentials it is passed are good, it returns an object -- this object is the avatar required by the Perspective Broker.  If the credentials are bad, it returns None, which then gets translated into an appropriate remote exception.&lt;br /&gt;&lt;br /&gt;The core ingredient in this is whether or not &lt;span style="font-weight: bold;"&gt;UsernamePasswordDatabaseChecker&lt;/span&gt;'s member &lt;span style="font-weight: bold;"&gt;login_service&lt;/span&gt; has a member method &lt;span style="font-weight: bold;"&gt;callRemote.&lt;/span&gt;  In this scenario, we make remote calls to do the authentication.  We use another one of function decorators, &lt;span style="font-weight: bold;"&gt;blocking_tasklet&lt;/span&gt;, to do this so that our code can remain synchronous in style.&lt;br /&gt;&lt;br /&gt;All in all, using Stackless tasklets to implement this setup results in less lines of code, and code that is straight-forward and easy to understand.  The purely Twisted incarnation of this setup result in a crazy amount of nested callbacks that were very difficult to follow during initial testing, let alone a few months later.&lt;br /&gt;&lt;br /&gt;The examples for &lt;span style="font-weight: bold;"&gt;login_service&lt;/span&gt; can be provided, if anyone wants, I just need to dig through the CVS repository to find them.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-73474087380444885?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/73474087380444885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=73474087380444885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/73474087380444885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/73474087380444885'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/perspective-broker-authentication-for.html' title='Perspective Broker Authentication for Stackless Python'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-7110670271853437572</id><published>2008-10-01T09:16:00.002-04:00</published><updated>2008-10-01T09:16:00.389-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><category scheme='http://www.blogger.com/atom/ns#' term='stuff in my apartment'/><title type='text'>Stuff in the refrigerator</title><content type='html'>Now that we've looked at the stuff in my living room, let's wander over into the kitchen and check out the fridge.&lt;br /&gt;&lt;br /&gt;1.&lt;span style="font-weight: bold;"&gt;  Grapes:&lt;/span&gt;  There's some other fruit in there as well (peaches, strawberries, and some pineapple).  But I like the grapes, especially the seedless ones.  You can just keep popping them into your mouth, one after the other after the other.  Before you know it, you've eaten way more than you should have.  &lt;span style="font-weight: bold;"&gt;My rating:&lt;/span&gt; A+&lt;br /&gt;2.  &lt;span style="font-weight: bold;"&gt;Milk:  &lt;/span&gt;Combined with some chocolate chip cookies, this is my ideal after-dinner treat.  Oh, and it's useful for coffee and cereal.  But, really, it's all about combining it with cookies.&lt;span style="font-weight: bold;"&gt;  My rating:&lt;/span&gt;  A&lt;br /&gt;3.  &lt;span style="font-weight: bold;"&gt;Diet Dr. Pepper:  &lt;/span&gt;Of all the different sodas I've tried, this is the one that tastes least like diet soda.  This, of course, is important as some diet soda ends up tasting horrible reminding you that you've opted for lower calories over good taste.  It also happens to be my favorite mixer with certain alcohol.&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;  My rating: &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;A&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;4.  &lt;span style="font-weight: bold;"&gt;Salad:  &lt;/span&gt;I don't usually eat all that healthy.  I mean, I try to.  I want to.  However, I happen to like the way certain foods -- usually the ones that are not good for you at all -- taste.  I do like salad though, particularly simple just a simple combo of tomatoes, lettuce, and radishes.&lt;span style="font-weight: bold;"&gt;  My rating:&lt;/span&gt; B+&lt;br /&gt;5.  &lt;span style="font-weight: bold;"&gt;Southern Comfort:  &lt;/span&gt;I haven't drank Southern Comfort straight up since college, and it was the leading cause of some of my stupider decisions.  I do like to, &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;occasionally&lt;/span&gt;, mix it with the aforementioned Diet Dr. Pepper into a very tasty adult beverage.&lt;span style="font-weight: bold;"&gt;  My rating:  &lt;/span&gt;A+&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-7110670271853437572?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/7110670271853437572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=7110670271853437572' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7110670271853437572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7110670271853437572'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/10/stuff-in-refrigerator.html' title='Stuff in the refrigerator'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-4456800781336581102</id><published>2008-09-30T12:13:00.000-04:00</published><updated>2008-09-30T12:13:00.606-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='twisted'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>A quick update...</title><content type='html'>I planned on having an entry tomorrow showing a more in-depth example of combining Twisted with Stackless python, but it's taking a little longer than expected to get all the pieces together.  The example will be using what is in my opinion the most useful part of Twisted:  the Perspective Broker.  I have several working systems that utilize it, but pulling out just enough to demonstrate how to use the PB with Stackless is proving a little troublesome.&lt;br /&gt;&lt;br /&gt;It should be ready by Thursday.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-4456800781336581102?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/4456800781336581102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=4456800781336581102' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4456800781336581102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4456800781336581102'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/quick-update.html' title='A quick update...'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-541218127498193803</id><published>2008-09-30T08:15:00.008-04:00</published><updated>2008-10-01T06:06:49.642-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='twisted'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Multi-Threaded Twisted / Stackless Integration</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596100329?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596100329"&gt;&lt;img src="http://www.tempestnetworks.net/images/51PY-oaLAsL._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img alt="" style="border: medium none  ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596100329" border="0" width="1" height="1" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Another way to integrate Twisted with Stackless python, is to use multiple threads.  One thread handles Twisted's reactor while Stackless tasklets run in at least one other thread.  This lowers the deterministic nature of Stackless, but for certain conditions may be more effective than trying to &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-python-meets-twisted-matrix.html"&gt;integrate Twisted and Stackless into a single thread&lt;/a&gt;.  Communication between the threads is handled through a &lt;span style="font-weight: bold;"&gt;channel&lt;/span&gt;, which according to the documentation for Stackless python is thread-safe.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;the_channel = stackless.channel( )&lt;br /&gt;&lt;br /&gt;def a_func( *args ):&lt;br /&gt;    print "a_func:", args&lt;br /&gt;    return args&lt;br /&gt;&lt;br /&gt;def dispatch( d, func, *args, **kwargs ):&lt;br /&gt;    d1 = defer.maybeDeferred( func, *args, **kwargs )&lt;br /&gt;    d1.addCallback( lambda x: reactor.callFromThread( d.callback, x ) )&lt;br /&gt;    d1.addErrback( lambda x: reactor.callFromThread( d.errback, x ) )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;For our example, we'll be calling &lt;span style="font-weight: bold;"&gt;a_func&lt;/span&gt; to run in the Stackless thread.  This is handled through the helper function &lt;span style="font-weight: bold;"&gt;dispatch&lt;/span&gt;.  The result of the function will be wrapped up in a &lt;span style="font-weight: bold;"&gt;Deferred&lt;/span&gt;.  Through the reactor's &lt;span style="font-weight: bold;"&gt;callFromThread&lt;/span&gt; method we'll be able to fire the callback chain inside the thread running the main Twisted reactor loop.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;the_channel&lt;/span&gt; is our cross-thread communication channel, through which the requests for function invocation will be passed.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def stackless_dispatcher( chan ):&lt;br /&gt;    while True:&lt;br /&gt;       try:&lt;br /&gt;           d, func, args, kwargs = chan.receive( )&lt;br /&gt;           t = stackless.tasklet( dispatch )&lt;br /&gt;           t( d, func, args, kwargs )&lt;br /&gt;           print threading.currentThread( )&lt;br /&gt;           stackless.schedule( )&lt;br /&gt;       except:&lt;br /&gt;           break&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is the main loop of the Stackless thread.  This method loops until an error condition occurs -- in this simplified version that is enough.  It blocks on the main channel, until it receives a function, function arguments, and a &lt;span style="font-weight: bold;"&gt;Deferred&lt;/span&gt; that will be fired upon function completion.  It then creates a tasklet to run the function in.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def call_in_stackless( chan, func, *args, **kwargs ):&lt;br /&gt;    d = defer.Deferred( )&lt;br /&gt;    t1 = stackless.tasklet( chan.send )&lt;br /&gt;    t1( (d,func,args,kwargs) )&lt;br /&gt;    stackless.schedule( )&lt;br /&gt;    return d&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This function is called from within the reactor's thread to cause a function invocation inside the Stackless thread.  Because Stackless complains about deadlock when sending on channels, we have to create a tasklet to send on the main channel.  The function, arguments, and a newly created &lt;span style="font-weight: bold;"&gt;Deferred&lt;/span&gt; are sent via the channel and the &lt;span style="font-weight: bold;"&gt;Deferred &lt;/span&gt;is returned from the function.   Ultimately, this &lt;span style="font-weight: bold;"&gt;Deferred&lt;/span&gt; will have it's callback chain fired so at this point, traditional Twisted-style programming can continue.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;def test( chan ):&lt;br /&gt;    print threading.currentThread( )&lt;br /&gt;    d = call_in_stackless( chan, a_func, 1 )&lt;br /&gt;    d2 = call_in_stackless( chan, a_func, 1, 2 )&lt;br /&gt;    dl = defer.DeferredList( [ d, d2 ] )&lt;br /&gt;    dl.addCallback( lambda x: reactor.callLater( 0, reactor.stop ) )&lt;br /&gt;    def ender( x, chan ):&lt;br /&gt;        t = stackless.tasklet( chan.send )&lt;br /&gt;        t( x )&lt;br /&gt;        stackless.schedule( )&lt;br /&gt;    dl.addCallback( ender, chan )&lt;br /&gt;&lt;br /&gt;reactor.callInThread( stackless_dispatcher, the_channel )&lt;br /&gt;reactor.callLater( 0, test, the_channel )&lt;br /&gt;reactor.run( )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is just a test of the premise.  It should operate as expected, with &lt;span style="font-weight: bold;"&gt;a_func &lt;/span&gt;being invoked twice inside the Stackless thread before the reactor is stopped.  We force a shutdown of the Stackless loop by passing a single argument through the channel -- since the receiving side is expecting a 4-part tuple this will cause an exception and stop the loop.&lt;br /&gt;&lt;br /&gt;This form of integration does allow for some more concurrency than the &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-python-meets-twisted-matrix.html"&gt;previously discussion integration method&lt;/a&gt;.  While we have to worry about Python's GIL (global interpretor lock) cutting down our actual concurrency, if the application is heavily I/O-bound this is not much of an issue since the GIL is released whenever control passes into the Twisted's reactor loop.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-541218127498193803?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/541218127498193803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=541218127498193803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/541218127498193803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/541218127498193803'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/multi-threaded-twisted-stackless.html' title='Multi-Threaded Twisted / Stackless Integration'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-1201996716178630586</id><published>2008-09-29T08:54:00.000-04:00</published><updated>2008-09-29T08:54:00.503-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Bestsellers and Book Sales Expectations</title><content type='html'>&lt;span style="font-style: italic;"&gt;Note:  I found the following while surfing and googling around.&lt;/span&gt;  &lt;span style="font-style: italic;"&gt;The article's terms of use allows for copying it, as long as I maintain the proper attributions.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Most new authors have no idea how book sales happen or what numbers to expect. A typical successful book from a major publisher sells between 20,000 and 40,000 copies. Healthy book sales from a smaller publisher may number at least 5,000 copies, whereas a self-published book may be considered promising if it sells as few as 1,000 copies to a wide audience.&lt;br /&gt;&lt;br /&gt;Set your sales goals high but your expectations lower. Obviously you want &lt;a href="http://scoursen.online69.hop.clickbank.net"&gt;high sales for you book&lt;/a&gt;; otherwise, why do all the work? But be clear about your vision. If you plan to author a book for your own seminar business, your expectations will necessarily be different from those of the author who wants to become a world-class speaker and subject-matter guru. Clearly a book about diets will have broader market appeal than a book on corporate strategic planning.&lt;br /&gt;&lt;br /&gt;Your ability to drive book sales will also depend on the name recognition you’ve already established. Someone like Dr. Phil McGraw can realistically expect his next book to sell millions of copies regardless of the subject matter. How’s your name recognition?&lt;br /&gt;&lt;br /&gt;Most people are surprised to hear that less than half of book sales each year are through bookstores, leaving other possibilities for authors to pursue.&lt;br /&gt;&lt;br /&gt;Many new authors just assume their book will appear in bookstores. If the book is self-published, it is very unlikely you will be able to crack the bookstore market; therefore, it will be important to consider:&lt;br /&gt;&lt;br /&gt;* Sales through your own Web site&lt;br /&gt;* Sales through Amazon.com and BarnesandNoble.com&lt;br /&gt;* Sales through other Web sites and affiliate programs&lt;br /&gt;* Sales through print catalogs&lt;br /&gt;* Sales to specialty markets for premium incentives (organizations and corporations)&lt;br /&gt;* Sales to mass merchandisers or other retailers&lt;br /&gt;&lt;br /&gt;Almost the only way to get your book into national bookstore chains is to be published by a traditional publisher. They have the distribution methods in place to make this possible.&lt;br /&gt;&lt;br /&gt;You may choose to self-publish and work on sales through some of these non-bookstore channels, get to credible sales figures, and then approach a traditional publisher to finally hit that desirable bookstore market.&lt;br /&gt;&lt;br /&gt;If you sell your own book, you know exactly how many books you printed, how many have been sold, and how many are left to be sold in the printing.&lt;br /&gt;&lt;br /&gt;Oddly enough, when books are &lt;a href="http://scoursen.online69.hop.clickbank.net"&gt;published by traditional publishers&lt;/a&gt; and go through the bookstore system, there are very few avenues open for authors and even publishers to track "real" sales of books. The Bookscan report from Neilsen Broadcast Data Systems, available since 2001, provides weekly sales by the major book retailers. But only the very largest companies can afford this expensive service. It is virtually impossible to estimate the real sales of a book from the quantities that are shipped to the stores. Remember, all "sales” to bookstores are made with a long-established, full-price return policy anytime. That means all the books could be returned to you, even a year later. Major publishers expect overall return rates of 20 percent to 30 percent, but individual books can be much, much higher.&lt;br /&gt;&lt;br /&gt;When your book is returned, it doesn’t mean that someone bought it, didn’t like it, and sent it back through the bookstore. Far more likely, it was never sold in the first place, and the bookstore returned it to the distributor after sixty to ninety days.&lt;br /&gt;&lt;br /&gt;You will see sales numbers on your royalty statement, but generally there is also a reserve for expected returns as well.&lt;br /&gt;&lt;br /&gt;If your book is published by a traditional publisher or printed by Lightning Source, you can call the distributor Ingram’s sales tracking phone number, 615-213-6803, to hear about sales for both the previous week and last year.&lt;br /&gt;&lt;br /&gt;It seems that most authors these days say their book is a best seller, and that’s because there is no established, objective criteria for what that means. There are roughly forty national and regional best-seller lists in the United States. The New York Times’ list is probably the most well-known and respected. Another one that is well-known, especially inside the publishing industry, is provided by Publishers Weekly (PW). In 2005, 442 adult titles were declared best-sellers, according to the Publisher’s Weekly compilations.&lt;br /&gt;&lt;br /&gt;Some best-seller lists such as those belonging to Publisher’s Weekly and USA Today are based on national surveys, with others on much less objective criteria. The New York Times bases their list on a poll of both chain and independent bookstores. The list from the American Booksellers Association polls only independent bookstores. The Los Angeles Times polls thirty bookstores in the Los Angeles metropolitan area to compile its list.&lt;br /&gt;&lt;br /&gt;Only eight self-published books have made it to number one on the Publishers Weekly bestseller list.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Copyright (c) 2007 Gail Richards&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-1201996716178630586?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/1201996716178630586/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=1201996716178630586' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1201996716178630586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/1201996716178630586'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/bestsellers-and-book-sales-expectations.html' title='Bestsellers and Book Sales Expectations'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3433578122680549233</id><published>2008-09-28T09:46:00.000-04:00</published><updated>2008-09-28T09:46:00.293-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>Sunday Funnies</title><content type='html'>They're not necessarily new, but these are some strips I like.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xkcd.com/"&gt;&lt;img src="http://imgs.xkcd.com/comics/real_programmers.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.giantitp.com/comics/oots0001.html"&gt;The Order of the Stick&lt;/a&gt; (doesn't allow hot linking :( ).&lt;br /&gt;&lt;br /&gt;I know, no great new findings here, but I thought it'd be nice to share to those few out there who may not actually have seen either of these strips before.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3433578122680549233?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3433578122680549233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3433578122680549233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3433578122680549233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3433578122680549233'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/sunday-funnies.html' title='Sunday Funnies'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-369542978384543032</id><published>2008-09-27T13:40:00.003-04:00</published><updated>2008-09-28T14:00:38.540-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Observer pattern for Python</title><content type='html'>&lt;div style="float:right"&gt;&lt;a href="http://www.amazon.com/gp/product/0596007973?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596007973"&gt;&lt;img border="0" src="http://www.stevecoursen.com/51WEJPkPyuL._SL160_.jpg" /&gt;&lt;/a&gt;&lt;img border="0" width="1" alt="" style="border:none !important; margin:0px !important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596007973" height="1" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Observer pattern is mainly used to implement a distributed event handling system.  The primary objective of this pattern is to provide a way to handle run-time one-to-many relationships between objects in a loosely coupled arrangement.&lt;br /&gt;&lt;br /&gt;In this configuration, the Observable object doesn't know anything more about it's Observers than a very limited interface.  The Observable needs to provide a wide interface for allowing other objects to gain access to it's current state.&lt;br /&gt;&lt;br /&gt;The event from the observable object's point of view is called &lt;b&gt;notification&lt;/b&gt; and the event from the observers' point of view is called &lt;b&gt;update&lt;/b&gt;.&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;class Observable( object ):&lt;br /&gt;  def __init__( self, *args, **kwargs ):&lt;br /&gt;      super( Observable, self ).__init__( *args, **kwargs )&lt;br /&gt;      self.__dirty = False&lt;br /&gt;      self.__observers = weakref.WeakKeyDictionary( )&lt;br /&gt;&lt;br /&gt;  def attach_observer( self, obs ):&lt;br /&gt;      if obs not in self.__observers:&lt;br /&gt;          self.__observers[obs] = 1&lt;br /&gt;      return self&lt;br /&gt;&lt;br /&gt;  def detach_observer( self, obs ):&lt;br /&gt;      if obs in self.__observers:&lt;br /&gt;          del self.__observers[obs]&lt;br /&gt;      return self&lt;br /&gt;&lt;br /&gt;  def set_dirty( self, d ):&lt;br /&gt;      self.__dirty = d&lt;br /&gt;      return self.__dirty&lt;br /&gt;&lt;br /&gt;  def is_dirty( self ):&lt;br /&gt;      return self.__dirty&lt;br /&gt;&lt;br /&gt;  def notify_all( self ):&lt;br /&gt;      for observer in self.__observers.keys( ):&lt;br /&gt;          observer.observer_update( self )&lt;br /&gt;&lt;br /&gt;  def notify_check( self ):&lt;br /&gt;      if self.is_dirty( ):&lt;br /&gt;          self.notify_all( )&lt;br /&gt;          self.set_dirty( False )&lt;br /&gt;&lt;/pre&gt;          &lt;span style="font-weight: bold;"&gt;attach_observer &lt;/span&gt;and &lt;span style="font-weight: bold;"&gt;detach_observer&lt;/span&gt; maintain the list of Observers that are interested in this object.  After any change in state, &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;notify_all&lt;/span&gt;&lt;/span&gt; should be called.  If this state change is part of a larger transaction, the combination &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;set_dirty&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;notify_check &lt;/span&gt;should be called.&lt;br /&gt;&lt;br /&gt;If you're also using &lt;a href="http://www.stackless.com/"&gt;Stackless python&lt;/a&gt;, you may want to have &lt;span style="font-weight: bold;"&gt;notify_all&lt;/span&gt; use the &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-event-loops.html"&gt;event-loop mechanism&lt;/a&gt; we've previously discussed.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class Observer( object ):&lt;br /&gt;  def __init__(self, *args, **kwargs ):&lt;br /&gt;      pass&lt;br /&gt;&lt;br /&gt;  def observer_update( self, object ):&lt;br /&gt;      pass&lt;br /&gt;&lt;/pre&gt;The Observer object is very easy to implement.  Really, only it needs  &lt;span style="font-weight: bold;"&gt;observer_udpate &lt;/span&gt;defined since that method is called by Observable during &lt;span style="font-weight: bold;"&gt;notify_all&lt;/span&gt;.  The observed object passes itself as the argument to &lt;span style="font-weight: bold;"&gt;observable_update&lt;/span&gt; so that the observer knows which of the objects it currently is observing has been updated.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-369542978384543032?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/369542978384543032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=369542978384543032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/369542978384543032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/369542978384543032'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/observer-pattern-for-python.html' title='Observer pattern for Python'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-7076925289422558724</id><published>2008-09-27T09:30:00.002-04:00</published><updated>2008-09-28T10:04:45.240-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>NewNovelist Review</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="http://scoursen.newnovel.hop.clickbank.net/"&gt;&lt;img src="http://www.newnovelist.com/images/box.gif" border="no" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I stumbled across this software package during a google search on tools for writers.  I bought it and installed it after doing some more research about it.&lt;br /&gt;&lt;br /&gt;Even though I tend to be a &lt;a href="http://blog.stevecoursen.com/2008/09/another-day-another-page.html"&gt;"pantser"&lt;/a&gt; when it comes to writing, I went through the dialogs and screens.  I won't make any grandiose claims about it, but I found that after I had spent a few hours following the wizards, I had a much better and firmer grasp of where I wanted my last project to end up.&lt;br /&gt;&lt;br /&gt;It made me think about things like character arcs and other details of story development that I usually don't spend much time planning.  While that tactic worked for me in the past, it was proving difficult on my last project -- &lt;a href="http://www.nanowrimo.org/node/1065561"&gt;the great swamp of the middle of the novel&lt;/a&gt; -- that using this software helped me plan my way past.&lt;br /&gt;&lt;br /&gt;Its not going to turn you into a novelist without you doing the legwork, but if you really want to write a book and are willing to put in the work to do it, then &lt;a href="http://scoursen.newnovel.hop.clickbank.net/"&gt;NewNovelist&lt;/a&gt; will help you.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;My Rating:  &lt;/span&gt;A&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-7076925289422558724?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/7076925289422558724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=7076925289422558724' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7076925289422558724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7076925289422558724'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/newnovelist-review.html' title='NewNovelist Review'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-767718640133305460</id><published>2008-09-26T09:30:00.000-04:00</published><updated>2008-09-26T09:30:00.218-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wrapup'/><title type='text'>Weekly Roundup</title><content type='html'>So, it's Friday, and here we go with a small handful of YouTube clips I watched this week:&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/e9Q3orQhEcA&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/e9Q3orQhEcA&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JuAskRsP5K0&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/JuAskRsP5K0&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Complete with bad-ass jazzy Samurai gonna kick yo butt music.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/kt5pDHrD8UY&amp;amp;hl=en&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/kt5pDHrD8UY&amp;amp;hl=en&amp;amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;Yeah, I'm still digging the new Metallica album.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-767718640133305460?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/767718640133305460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=767718640133305460' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/767718640133305460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/767718640133305460'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/weekly-roundup.html' title='Weekly Roundup'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3610886357360367645</id><published>2008-09-25T08:05:00.003-04:00</published><updated>2008-09-28T13:19:40.494-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='stackless'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Event-based Programming for Python</title><content type='html'>&lt;div style="float:right"&gt;&lt;a href="http://www.amazon.com/gp/product/0596007973?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596007973"&gt;&lt;img src="http://www.stevecoursen.com/51WEJPkPyuL._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img alt="" style="border: medium none  ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596007973" width="1" border="0" height="1" /&gt;&lt;/div&gt;&lt;br /&gt;Oftentimes, you need to have objects that communicate with each other via events.  This is a very useful setup, for example, in a GUI -- where these events represent things like mouse clicks, key strokes, or button presses.  That's not what I developed these classes for, since I was more interested in simulating things and the event system seemed like the most natural fit, but the recipe is still relevant to other event handling needs.&lt;br /&gt;&lt;br /&gt;We're going to build upon earlier discussions, most notably about&lt;a href="http://blog.stevecoursen.com/2008/09/stackless-event-loops.html"&gt; Stackless event loops&lt;/a&gt; by adding in some concrete examples of using that recipe.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://learn2program.wordpress.com/2008/09/21/observer-pattern/"&gt;Observer pattern&lt;/a&gt; strikes again, as I'm defining the relationship between the event generator and the event listener as one of Observable and Observer.  We'll make use of the &lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;channel_processor&lt;/span&gt;&lt;/span&gt; &lt;a href="http://loveandtheft.org/2008/09/22/python-decorators-explained/"&gt;function decorator&lt;/a&gt; described in &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-event-loops.html"&gt;Stackless event loops&lt;/a&gt;.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class EventObserver( object ):&lt;br /&gt; def __init__( self, *args, **kwargs ):&lt;br /&gt;     super( EventObserver, self ).__init__( *args, **kwargs )&lt;br /&gt;&lt;br /&gt; @channel_processor&lt;br /&gt; def event_transieve( self, *args, **kwargs ):&lt;br /&gt;     evt = kwargs.get( 'data', None )&lt;br /&gt;     self.process_event( evt )&lt;br /&gt;&lt;br /&gt; def process_event( self, event ):&lt;br /&gt;     pass&lt;br /&gt;&lt;br /&gt; def event_notify( self, event ):&lt;br /&gt;     self.event_transieve( event )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This is straight-forward enough.  The only trickery (if you could call it that) is in the &lt;span style="font-weight: bold;"&gt;event_transieve&lt;/span&gt; method.  And all that does is take whatever is passed as the &lt;a href="http://blog.padraigkitterick.com/2008/06/21/automatic-key-generation-with-app-engine/"&gt;keyword argument&lt;/a&gt; &lt;span style="font-style: italic;"&gt;data&lt;/span&gt; and call the method &lt;span style="font-weight: bold;"&gt;process_event&lt;/span&gt;.  In this base class implementation, that function does nothing.&lt;br /&gt;&lt;br /&gt;One bit of niftiness does occur, however, when the &lt;span style="font-weight: bold;"&gt;event_transieve&lt;/span&gt; method is invoked.  Through the use of function decorators (and therefore transparent to the calling client) this method actually spans across &lt;a href="http://nameless-sorrows.blogspot.com/2008/06/stackless-notes-1.html"&gt;tasklets&lt;/a&gt;, granting some semblance of concurrency.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class EventObservable( object ):&lt;br /&gt; def __init__( self, *args, **kwargs ):&lt;br /&gt;     super( EventObservable, self ).__init__( *args, **kwargs )&lt;br /&gt;     self.__event_observers = weakref.WeakKeyDictionary( )&lt;br /&gt;     self.__events = [ ]&lt;br /&gt;&lt;br /&gt; def attach_event_observer( self, obs, level=1 ):&lt;br /&gt;     if obs not in self.__event_observers:&lt;br /&gt;         self.__event_observers[obs] = level&lt;br /&gt;     return self&lt;br /&gt;&lt;br /&gt; def detach_event_observer( self, obs ):&lt;br /&gt;     if obs in self.__event_observers:&lt;br /&gt;         del self.__event_observers[obs]&lt;br /&gt;     return self&lt;br /&gt;&lt;br /&gt; @channel_processor&lt;br /&gt; def dispatcher( self, *args, **kwargs ):&lt;br /&gt;     data = kwargs.get( 'data', None )&lt;br /&gt;     wlist = []&lt;br /&gt;     for key in self.__event_observers.keys( ):&lt;br /&gt;         val = self.__event_observers[key]&lt;br /&gt;         seok = SortableEventObserverKey( key, val )&lt;br /&gt;         heapq.heappush( wlist, seok )&lt;br /&gt;     while len( wlist ):&lt;br /&gt;         obs = heapq.heappop( wlist )&lt;br /&gt;         obs( evt )&lt;br /&gt;&lt;br /&gt; def dispatch_event( self, event ):&lt;br /&gt;     self.dispatcher( event )&lt;br /&gt;     return event&lt;br /&gt;&lt;/pre&gt;Now, we can safely ignore the &lt;span style="font-weight: bold;"&gt;attach_event_observer&lt;/span&gt; and  methods -- they only exist to implement the Observer pattern.  The only method we really care about at the moment is &lt;span style="font-weight: bold;"&gt;dispatcher&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;In this method we simply loop over all the currently registered observers, invoking (ultimately) their &lt;span style="font-weight: bold;"&gt;event_notify&lt;/span&gt; method.  If you don't see how that happens, just be patient and wait until we look at the &lt;span style="font-weight: bold;"&gt;SortableEventObserverKey &lt;/span&gt;helper class and it's definition of the &lt;span style="font-weight: bold;"&gt;__call__ &lt;/span&gt;method.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class SortableEventObserverKey( object ):&lt;br /&gt; def __init__( self, kval, weight, *args, **kwargs ):&lt;br /&gt;     super( SortableEventObserverKey, self ).__init__( *args, **kwargs )&lt;br /&gt;     self.__value = kval&lt;br /&gt;     self.__weight = weight&lt;br /&gt;&lt;br /&gt; def __cmp__( self, other ):&lt;br /&gt;     return cmp( self.__weight, other.__weight )&lt;br /&gt;&lt;br /&gt; def __call__( self, event ):&lt;br /&gt;     return self.__value.event_notify( event )&lt;br /&gt;&lt;br /&gt; def __repr__( self ):&lt;br /&gt;     return "%s, %s" % ( self.__value, self.__weight )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, I hate that I had to throw something like that into the discussion.  The helper class only exists to make the comparison functions easier when using the &lt;a href="http://docs.python.org/lib/module-heapq.html"&gt;heap queue&lt;/a&gt;.  For anyone unfamiliar with heaps, a heap ensures that the highest weighted object is at the front of the queue and will be the first one taken out of the structure.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class EventParticipant( EventObservable, EventObserver ):&lt;br /&gt; def __init__( self, *args, **kwargs ):&lt;br /&gt;     super( EventParticipant, self ).__init__( *args, **kwargs )&lt;br /&gt;     event_manager = kwargs.get( "event_manager", "events" )&lt;br /&gt;     self.event_manager = pytypes.get_event_manager( event_manager )&lt;br /&gt;&lt;br /&gt; def generate_event( self, event_type, *data, **kwargs ):&lt;br /&gt;     evt = self.event_manager.create_event( self, event_type, *data, **kwargs )&lt;br /&gt;     return self.dispatch_event( evt )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here's the easy class to implement.  It defines the &lt;span style="font-weight: bold;"&gt;EventParticipant&lt;/span&gt;, which is both the Observable and the Observer.  This is, utlimately, the class that I extend for my simulations since my program domain requires for the objects to both generate events and be interested in other object's events.  Simply extending from this class gives you that ability in a nice, clean, and concurrent fashion (or, at least as concurrent as &lt;a href="http://www.stackless.com/"&gt;Stackless&lt;/a&gt; gets you).&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3610886357360367645?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3610886357360367645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3610886357360367645' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3610886357360367645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3610886357360367645'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/event-based-classes-for-python.html' title='Event-based Programming for Python'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5481900920865193387</id><published>2008-09-24T09:30:00.000-04:00</published><updated>2008-09-24T09:30:00.610-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><category scheme='http://www.blogger.com/atom/ns#' term='stuff in my apartment'/><title type='text'>Things on my living room floor...</title><content type='html'>To continue with the theme of "Stuff in Steve's Apartment", I'm now going to survey items found in my living room.  To qualify, they must in some way or another, be in contact with the floor (which, by the way, is a nice hardwood floor that just cries out for you to slide on when wearing socks).&lt;br /&gt;&lt;br /&gt;1.  &lt;span style="font-weight: bold;"&gt;Kramer electric guitar:&lt;/span&gt;  I don't know the model number, as it was a gift from a friend when he was moving out of his ex-girlfriend's place.  He didn't know how to play it very well, so he handed it off to me; not that I'm really any better at it.  I know some scales, and a bunch of chords though.  And I can play a mean "Bad to the Bone" and "Creeping Death".  Yes, I know the songs aren't related to each other, but my musical tastes are all over the place.  &lt;span style="font-weight: bold;"&gt;Rating:  &lt;/span&gt;B+ (has an electrical fault in one of the pickups, so the sounds fades at times)&lt;br /&gt;&lt;br /&gt;2.  &lt;span style="font-weight: bold;"&gt;Yamaha &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;FG&lt;/span&gt;720&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;SL&lt;/span&gt; acoustic guitar:&lt;/span&gt;  Got this one as a Christmas present.  Originally a left-handed guitar, I restrung it as a right-handed guitar.  I'm sure that's against some rule in the guitarist's rule book.  On this I usually just &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;exercise&lt;/span&gt; my knowledge of chords, and play "Horse with No Name" and/or "Wish You Were Here".  I'm sure my neighbors are sick to death of those songs by now.  &lt;span style="font-weight: bold;"&gt;Rating:  &lt;/span&gt;A+&lt;br /&gt;&lt;br /&gt;3.  &lt;span style="font-weight: bold;"&gt;Peavey TKO 80 amplifier:&lt;/span&gt;  Something else that my neighbors must really love.  I try to keep the output level low.  Really, I do.  My daughter occasionally will play with the dials when I'm not paying attention though, and then, at some point, later I'll turn it on and it's reverb and distortion city.  &lt;span style="font-weight: bold;"&gt;Rating:  &lt;/span&gt;B+  (don't use it enough to get a higher rating)&lt;br /&gt;&lt;br /&gt;4.  &lt;span style="font-weight: bold;"&gt;La-z-boy Couch:  &lt;/span&gt;I love this thing.  The end seats recline.  It's very comfortable, and I can fit on it when I lay on it and stretch out.  &lt;span style="font-weight: bold;"&gt;Rating:  &lt;/span&gt;A+&lt;br /&gt;&lt;br /&gt;5.  &lt;span style="font-weight: bold;"&gt;Dell PowerEdge 400SC:&lt;/span&gt;  This is my web server, mail server, and FTP server.  It runs Linux (an older version of Fedora actually) and a whole bunch of custom-build packages and programs.  It's the outlet for my inner computer geek.  &lt;span style="font-weight: bold;"&gt;Rating:  &lt;/span&gt;A&lt;br /&gt;&lt;br /&gt;Unlike with the stuff on my bookshelf, I didn't move these items in anyway before reviewing them -- some were too big (the couch) and others, well, moving them would have made writing this entry difficult (the Linux server). &lt;br /&gt;&lt;br /&gt;Later in the week, I'll be reviewing stuff in my rerigerator.  (I actually have to go food shopping first, as there's nothing to review at the moment.)&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5481900920865193387?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5481900920865193387/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5481900920865193387' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5481900920865193387'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5481900920865193387'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/things-on-my-living-room-floor.html' title='Things on my living room floor...'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6274998304531688611</id><published>2008-09-23T16:00:00.002-04:00</published><updated>2008-09-23T16:00:00.851-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='specials'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><title type='text'>Special Price on E-book Version of Path Into Darkness</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="https://www.lulu.com/commerce/index.php?fBuyProduct=3490204"&gt;&lt;img alt="Path Into Darkness e-book" src="http://www.stevecoursen.com/thumbnail_paperback" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;For the next week (until 4pm, Tuesday September 30, 2008), the price for the e-book download version of Stephen Coursen's &lt;span style="font-weight: bold;"&gt;Path Into Darkness&lt;/span&gt; is reduced to &lt;a href="https://www.lulu.com/commerce/index.php?fBuyProduct=3490204"&gt;$2.95&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Any blogger interested in doing a review of the book, can contact me in the comments section and I'll get them an e-book for review purposes.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6274998304531688611?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6274998304531688611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6274998304531688611' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6274998304531688611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6274998304531688611'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/special-price-on-e-book-version-of-path.html' title='Special Price on E-book Version of Path Into Darkness'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-7971871470580423744</id><published>2008-09-23T09:30:00.003-04:00</published><updated>2008-09-28T13:20:17.353-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='stackless'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Stackless Event Loops</title><content type='html'>&lt;div style="float:right"&gt;&lt;a href="http://www.amazon.com/gp/product/0596007973?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596007973"&gt;&lt;img src="http://www.stevecoursen.com/51WEJPkPyuL._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img alt="" style="border: medium none  ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596007973" width="1" border="0" height="1" /&gt;&lt;/div&gt;&lt;br /&gt;This is a follow-on article to &lt;a href="http://blog.stevecoursen.com/2008/09/stackless-python-meets-twisted-matrix.html"&gt;Stackless Python Meets Twisted Matrix&lt;/a&gt;.  This time how to use &lt;a href="http://loveandtheft.org/2008/09/22/python-decorators-explained/"&gt;function decorators&lt;/a&gt; to turn a ordinary looking function in a looping event dispatcher.  Useful for the Observer design pattern.&lt;br /&gt;&lt;br /&gt;Through the syntactical power of decorators, one can can convert any function into a continuously run event loop.  This utilizes &lt;a class="generated" href="http://www.stackless.com/" target="_self"&gt;Stackless Python&lt;/a&gt;, which has been discussed in earlier articles on not only this web site, but many many others as well.&lt;br /&gt;&lt;br /&gt;The premise behind this event loop is this:  a &lt;a href="http://nameless-sorrows.blogspot.com/2008/06/stackless-notes-1.html"&gt;tasklet&lt;/a&gt; runs and dispatches incoming "events" to a handler function.  To the outside caller, it appears to be a regular function call, but the mechanisms provided by the decorator allow the execution of the "event handler" to be run in a seperate tasklet.  If desired, this premise can be extended further to allow for the event loop to run in its own thread.&lt;br /&gt;&lt;br /&gt;First, let's look at the class that does all the heavy lifting.&lt;br /&gt;&lt;pre&gt;class ChannelProcessor:&lt;br /&gt;  def __init__( self, action ):&lt;br /&gt;      self.channel = stackless.channel( )&lt;br /&gt;      self.action = action&lt;br /&gt;      self.running = True&lt;br /&gt;      self.process( )&lt;br /&gt;&lt;br /&gt;  def stop( self ):&lt;br /&gt;      self.running = False&lt;br /&gt;      self.channel.send( 1 )&lt;br /&gt;&lt;br /&gt;  @blocking_tasklet&lt;br /&gt;  def __call__( self, *args, **kwargs ):&lt;br /&gt;      c = stackless.channel( )&lt;br /&gt;      self.channel.send( (c,args,kwargs) )&lt;br /&gt;      rv = c.receive( )&lt;br /&gt;      if isinstance( rv, failure.Failure ):&lt;br /&gt;          raise rv.value&lt;br /&gt;      return rv           &lt;br /&gt;&lt;br /&gt;@deferred_tasklet&lt;br /&gt;def process( self ):&lt;br /&gt;  while self.running:&lt;br /&gt;      vals = self.channel.receive( )&lt;br /&gt;      if len( vals ) == 3:&lt;br /&gt;          c,args,kwargs = vals&lt;br /&gt;          d = defer.Deferred( )&lt;br /&gt;          d.addBoth( c.send )&lt;br /&gt;          _wrapper( d, self.action, *args, **kwargs )&lt;br /&gt;      else:&lt;br /&gt;          self.running = False&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;This code makes use of the decorators described in an earlier article, available &lt;a title="Using Twisted with Stackless Python" class="generated" href="http://blog.stevecoursen.com/2008/09/stackless-python-meets-twisted-matrix.html" target="_self"&gt;here&lt;/a&gt;.  As you will notice, the core of the event loop is contained in the &lt;b&gt;process&lt;/b&gt; function, which runs in it's own tasklet (due to being decorated by the &lt;b&gt;deferred_tasklet&lt;/b&gt; decorator).  It doesn't matter if you aren't using Twisted for this code to work, although you will need Twisted installed for it to run (unless you change the mechanices of &lt;b&gt;deferred_tasklet&lt;/b&gt;).&lt;br /&gt;&lt;b&gt;&lt;br /&gt;process&lt;/b&gt; simply loops until told otherwise (via the &lt;b&gt;stop&lt;/b&gt; method), receiving data from it's channel.  If the data is a tuple of 3 items, it calls the original function (stored in the &lt;b&gt;action&lt;/b&gt; member).  Return value from the event handler is sent on a channel, which we received as the 1st element of the tuple.&lt;br /&gt;&lt;br /&gt;An outside caller enters into this mechanism via the &lt;b&gt;__call__&lt;/b&gt; method.  This method creates a new channel, and then passes that channel, and the parameters it was called with along the object's channel.  It then waits for data to be sent back to it.  After a quick look at the data returned, it either returns the data through the traditional means or raises an exception (if it received an exception).&lt;br /&gt;&lt;br /&gt;Now, for the decorator:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;@decorator&lt;br /&gt;def channel_processor( f, *args, **kwargs ):&lt;br /&gt;  func_obj = None&lt;br /&gt;  if type( f ) == types.MethodType:&lt;br /&gt;      target = f.im_self&lt;br /&gt;      target_name = f.func_name + '_cp'&lt;br /&gt;      if not hasattr( target, target_name ):&lt;br /&gt;          func_obj = ChannelProcessor( f )&lt;br /&gt;          setattr( target, target_name, func_obj )&lt;br /&gt;      else:&lt;br /&gt;          func_obj = getattr( target, target_name )&lt;br /&gt;  elif not hasattr( f, "_cp" ):&lt;br /&gt;      setattr( f, '_cp', ChannelProcessor( f ) )&lt;br /&gt;      func_obj = f._cp&lt;br /&gt;  else:&lt;br /&gt;      func_obj = f._cp&lt;br /&gt;  return func_obj( *args, **kwargs )&lt;/pre&gt;&lt;br /&gt;Here, we create a &lt;b&gt;ChannelProcessor&lt;/b&gt; object and stuff it into the calling function's member list (as a member named &lt;b&gt;_cp&lt;/b&gt;).  If it already exists, great.  In any case, we then call the object, which will lead us into the &lt;b&gt;__call__&lt;/b&gt; method shown above.&lt;br /&gt;&lt;br /&gt;A special case is made if we are an object's method, instead of a regular function.  This does not happen in the regular use-case of a decorator (when using the &lt;i&gt;@decorator_name&lt;/i&gt; syntax).  It only happens when we do something like:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;class A:&lt;br /&gt;  def __init__( self ):&lt;br /&gt;      self.func = channel_processor( func )&lt;br /&gt;&lt;br /&gt;  def func( self, *args ):&lt;br /&gt;      print "Here i am with arg list:", args&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;You use this method if you need to have each object having it's own tasklet that handles events.  Using the standard decorator syntax results in each function having it's own event handling tasklet.&lt;br /&gt;&lt;br /&gt;I tend to use the per-function methodology, but as usual, your mileage may vary.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-7971871470580423744?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/7971871470580423744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=7971871470580423744' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7971871470580423744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7971871470580423744'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/stackless-event-loops.html' title='Stackless Event Loops'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5296905376037956819</id><published>2008-09-22T16:23:00.005-04:00</published><updated>2008-09-23T12:05:19.734-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>Horses for courses....</title><content type='html'>Many years ago, when I was still in high school, my parents bought a chunk of undeveloped land in Montana.  A few years ago, they retired, bought another, smaller chunk of land in Montana.  They moved out west and started up a small ranch.&lt;br /&gt;&lt;br /&gt;My daughter spends every summer out there (yay!  mini vacation for me!) and has become quite adept at riding and other ranch activities.  During her trip this year, she fell off one of the mares and cut her arm up pretty good on some barbed wire fencing.  She's quite alright now, and in fact brags about how tough she is when showing off the scar.&lt;br /&gt;&lt;br /&gt;Fast forward to yesterday.  My mother called and told me that my father fell off of one of the horses (a stallion aptly named Scar).  He cut his head open, had to get some stitches and staples.  Additionally, he had a level 2 concussion which is causing him the usual side effects of concussions (forgetfulness, nausea, problems sleeping).&lt;br /&gt;&lt;br /&gt;So, I decided to give a plug the website for their ranch business, &lt;a href="http://www.peakperformancequarterhorses.com/"&gt;Peak Performance Quarter Horses&lt;/a&gt;.  I'm involved in the hosting of the site, but had nothing to do with the design.&lt;br /&gt;&lt;br /&gt;Anyways, godspeed on my father's recovery.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5296905376037956819?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5296905376037956819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5296905376037956819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5296905376037956819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5296905376037956819'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/horses-for-courses.html' title='Horses for courses....'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6718174487264957188</id><published>2008-09-21T09:46:00.003-04:00</published><updated>2008-09-23T09:39:06.477-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><category scheme='http://www.blogger.com/atom/ns#' term='stuff in my apartment'/><category scheme='http://www.blogger.com/atom/ns#' term='books'/><title type='text'>Stuff on my bookshelf</title><content type='html'>I'm picking 5 things off my living room bookshelf (ok, so they're already picked off the shelf ... I did do some footwork before I started to type this).  Let's give them a quick review, shall we?&lt;br /&gt;&lt;br /&gt;1.  &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.amazon.com/gp/product/0810993139?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0810993139"&gt;Diary of a Wimpy Kid&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0810993139" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;:&lt;/span&gt;  This isn't my book.  Honest.  My daughter loves it.  She talks about it constantly, in that way that only ten years can.  At her school's book fair last week, she bought the &lt;a href="http://www.amazon.com/gp/product/0810979772?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0810979772"&gt;Diary of a Wimpy Kid Do-It-Yourself Book&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0810979772" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;.  She hasn't done anything with it, but she sure keeps talking about it.  &lt;span style="font-weight: bold;"&gt;My rating:&lt;/span&gt; n/a.  &lt;span style="font-weight: bold;"&gt;Daughter's rating:&lt;/span&gt; A+&lt;br /&gt;&lt;br /&gt;2. &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.amazon.com/gp/product/0061020702?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0061020702"&gt;The Light Fantastic&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0061020702" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;&lt;/span&gt;:  The first Terry Pratchett book I bought, because I had read a review of it in an old Dragon magazine.  Yes, I'm that much of a geek -- no need to talk any further about it.  Very funny book, as just about everyone who I've ever lent it to will insist.  Skewers that highfalootin' fantasy genre, which can get a bit full of itself at times.  &lt;span style="font-weight: bold;"&gt;My rating:  &lt;/span&gt;A+&lt;br /&gt;&lt;br /&gt;3.  &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.amazon.com/gp/product/044100931X?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=044100931X"&gt;Another Fine Myth/Myth Conceptions 2-in1 (Myth 2-in-1)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=044100931X" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;&lt;/span&gt;:  Another book I bought based off of a review I read in Dragon magazine.  Yes, yes, I know.  Geek.  Anyway, very good stuff here, very ... uh, punny.  Re-read it last year after the author, Robert Asprin, passed away.  &lt;span style="font-weight: bold;"&gt;My rating: &lt;/span&gt;A&lt;br /&gt;&lt;br /&gt;4.  &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.amazon.com/gp/product/0415161401?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0415161401"&gt;Colloquial Russian: The Complete Course for Beginners (Colloquial Series)&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0415161401" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;&lt;/span&gt;:  An odd selection off the shelf.  I was, at one time or another, a linguistics major in college.  I picked up all sorts of language books -- German, Latin, Russian, Danish, Old English, even Sanskrit.  Eventually, I wandered over into the world of computer science, where my fascination with languages continued on with books on Java, Python, C, C++, and Perl.  Once a linguaphile, always a linguaphile.  &lt;span style="font-weight: bold;"&gt;My rating:  &lt;/span&gt;B+&lt;br /&gt;&lt;br /&gt;5.  &lt;span style="font-weight: bold;"&gt;&lt;a href="http://www.lulu.com/content/2726927"&gt;The Path Into Darkness&lt;/a&gt;:&lt;/span&gt;  Hey, the Web wouldn't be all about shameless self-promotion, if I didn't mention this book.  Yes, I wrote it.  I also have a hardcover copy of it on the shelf, but since I'm only doing quick reviews on 5 items, I choose the paperback version.  I like it.  Hell, if I didn't like it, I wouldn't have finished writing it, re-reading it, and editing it.  It's self-published, which I know some people dislike, but there's a very good reason for that -- but I'm not goind to tell y'all what that is.  &lt;span style="font-weight: bold;"&gt;My rating:&lt;/span&gt; A-.  (Ha!  You expected me to give myself an A+, didn't you?  C'mon, fess up...)&lt;br /&gt;&lt;br /&gt;Well, there you go ... 5 items off the shelf, reviewed, and then they'll be going back onto the shelf a few minutes after I click on the "Publish Post" button.&lt;br /&gt;&lt;br /&gt;Stay tuned for another riveting chapter in "Stuff In Steve's Apartment" continues...&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6718174487264957188?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6718174487264957188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6718174487264957188' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6718174487264957188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6718174487264957188'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/stuff-on-my-bookshelf.html' title='Stuff on my bookshelf'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-7934808756379431033</id><published>2008-09-20T11:21:00.009-04:00</published><updated>2008-09-21T10:11:34.587-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reviews'/><category scheme='http://www.blogger.com/atom/ns#' term='music'/><category scheme='http://www.blogger.com/atom/ns#' term='heavy metal'/><category scheme='http://www.blogger.com/atom/ns#' term='metallica'/><title type='text'>Metallica's Death Magnetic is ... well ... pretty damn good.</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;iframe src="http://rcm.amazon.com/e/cm?t=randomthoug08-20&amp;amp;o=1&amp;amp;p=8&amp;amp;l=as1&amp;amp;asins=B00192KCQ0&amp;amp;fc1=000000&amp;amp;IS2=1&amp;amp;lt1=_blank&amp;amp;m=amazon&amp;amp;lc1=0000FF&amp;amp;bc1=000000&amp;amp;bg1=FFFFFF&amp;amp;f=ifr" style="width: 120px; height: 240px;" marginwidth="0" marginheight="0" scrolling="no" frameborder="0"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This isn't usually a music review site, but I picked up Metallica's new album, &lt;a href="http://www.amazon.com/gp/product/B00192KCQ0?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00192KCQ0"&gt;Death Magnetic&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B00192KCQ0" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt; this week.&lt;br /&gt;&lt;br /&gt;I was skeptical, what with having been disappointed by &lt;a href="http://www.amazon.com/gp/product/B00008OWZG?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00008OWZG"&gt;St. Anger&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B00008OWZG" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;.  There was a lot of hype surrounding this one, and how it would be a return to their older sound.  Personally, I liked &lt;a href="http://www.amazon.com/gp/product/B000002HMH?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000002HMH"&gt;Load&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000002HMH" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt; and &lt;a href="http://www.amazon.com/gp/product/B00000B96L?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00000B96L"&gt;Reload&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B00000B96L" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt; (truth be told, I preferred the latter).&lt;br /&gt;&lt;br /&gt;I popped the CD into my car's player and listened to it on the drive to and from work.  Then again did the same the next day.  There's a lot of goodness in the tracks, although the quality of the sound is ... poor.  There are four "pure good" songs on the album, which I've taken the liberty of putting into the Amazon MP3 player so you can get the feel for them.&lt;br /&gt;&lt;br /&gt;&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" id="Player_bbdd0e1f-87c5-494b-a347-01c3f96163c2" width="160" height="300"&gt; &lt;param name="movie" value="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822%2FUS%2Frandomthoug08-20%2F8014%2Fbbdd0e1f-87c5-494b-a347-01c3f96163c2&amp;amp;Operation=GetDisplayTemplate"&gt;&lt;param name="quality" value="high"&gt;&lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&amp;amp;MarketPlace=US&amp;amp;ID=V20070822%2FUS%2Frandomthoug08-20%2F8014%2Fbbdd0e1f-87c5-494b-a347-01c3f96163c2&amp;amp;Operation=GetDisplayTemplate" id="Player_bbdd0e1f-87c5-494b-a347-01c3f96163c2" quality="high" bgcolor="#ffffff" name="Player_bbdd0e1f-87c5-494b-a347-01c3f96163c2" allowscriptaccess="always" type="application/x-shockwave-flash" width="160" align="middle" height="300"&gt;&lt;/embed&gt;&lt;/object&gt; &lt;noscript&gt;&lt;a href="http://ws.amazon.com/widgets/q?ServiceVersion=20070822&amp;MarketPlace=US&amp;ID=V20070822%2FUS%2Frandomthoug08-20%2F8014%2Fbbdd0e1f-87c5-494b-a347-01c3f96163c2&amp;Operation=NoScript"&gt;Amazon.com Widgets&lt;/a&gt;&lt;/noscript&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;The opening track, "That Was Just Your Life", is incredibly good.  Fast, crunchy guitar.  Interesting singing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The first single, "The Day That Never Comes", starts slow and ends fast.  It reminds me somewhat of something like One or Fade to Black, but without reaching their slowness.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"All Nightmare Long" is just plain awesome.  I love that chorus of "Hunt you down without mercy"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;"My Apocalypse" is an awesome way to end the album.  It's fast and lots of violent, death imagery without the cartooniness rampant in today's "modern" heavy metal.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The world could have done without "The Unforgiven III", which is the only clunker on the album.  Overall, it's a massive step in the right direction for the band -- their last few studio works had more clunkers than gems.  I think it fits firmly into the sort of work they should have put out following &lt;a href="http://www.amazon.com/gp/product/B000002H6C?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000002H6C"&gt;...And Justice for All&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000002H6C" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt; and/or &lt;a href="http://www.amazon.com/gp/product/B000002H97?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000002H97"&gt;Metallica&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000002H97" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;.&lt;br /&gt;&lt;br /&gt;Overall, I have to give this one 4 out of 5 stars.  It's no &lt;a href="http://www.amazon.com/gp/product/B000002H33?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B000002H33"&gt;Master of Puppets&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B000002H33" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;, but it's definitely more in line with what the Metallica fan base was looking for.&lt;br /&gt;&lt;br /&gt;(Yes, I know that I whored this review up with Amazon links.  Hey, guy's gotta eat, you know.)&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-7934808756379431033?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/7934808756379431033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=7934808756379431033' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7934808756379431033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/7934808756379431033'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/metallicas-death-magnetic-is-well.html' title='Metallica&apos;s Death Magnetic is ... well ... pretty damn good.'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-4377056961435809690</id><published>2008-09-12T12:00:00.001-04:00</published><updated>2008-09-23T09:38:42.478-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='excerpts'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Chapter Two excerpt</title><content type='html'>&lt;div style="float: right;"&gt;&lt;a href="http://www.lulu.com/content/2726927"&gt;&lt;img src="http://www.stevecoursen.com/thumbnail_paperback" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/commerce/index.php?fBuyContent="&gt;&lt;br /&gt;&lt;img src="http://www.lulu.com/services/buy_now_buttons/images/book.gif" alt="Support independent publishing: buy this book on Lulu." /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The second chapter from the urban fantasy novel &lt;b&gt;The Path Into Darkness&lt;/b&gt; is available &lt;a href="http://www.stevecoursen.com/excerpt2"&gt;here&lt;/a&gt; (pdf is &lt;a href="http://www.stevecoursen.com/excerpt2.pdf"&gt;here&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-4377056961435809690?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/4377056961435809690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=4377056961435809690' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4377056961435809690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/4377056961435809690'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/chapter-two-excerpt.html' title='Chapter Two excerpt'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-8165866767377431394</id><published>2008-09-11T13:00:00.002-04:00</published><updated>2008-09-23T09:38:42.479-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Now if only I had a Kindle....</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/B001FSKEDE?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B001FSKEDE"&gt;&lt;img src="http://www.stevecoursen.com/51TWRtEQr5L._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=B001FSKEDE" alt="" style="border: medium none  ! important; margin: 0px ! important;" width="1" border="0" height="1" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Kindle Edition of The Path Into Darkness is available on &lt;a href="http://www.amazon.com/gp/product/B001FSKEDE?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B001FSKEDE"&gt;Amazon.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Of course, I didn't plan ahead in any fashion and actually &lt;b&gt;buy&lt;/b&gt; a Kindle, so I can see what it looks like or anything on the final platform.  Noooo, that would've made sense.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-8165866767377431394?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/8165866767377431394/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=8165866767377431394' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8165866767377431394'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/8165866767377431394'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/now-if-only-i-had-kindle.html' title='Now if only I had a Kindle....'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3696972919766081107</id><published>2008-09-10T12:00:00.002-04:00</published><updated>2008-09-24T13:28:21.532-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Another day, another page</title><content type='html'>I've been very slowly (very very very slowly) working on my next novel-length story.  I'm trying something different this time, in both genre and in my approach to the actual writing. &lt;br /&gt;&lt;br /&gt;Approach-wise, I'm trying to do more up-front planning, including a plot synopsis, somewhat detailed character sketches (that can change, of course, if the story requires).  I usually don't plan these things out and just use the BIC approach (but-in-chair), but that hasn't been working at all for this project -- this approach makes me what some call a "pantser" (due to writing by the seat of one's pants).  It feels that I need to have some structure in place to cajole the characters into starting along with their plots and motives.&lt;br /&gt;&lt;br /&gt;Genre-wise, it's more of a science-fiction work than I usually do (I usually write some sort of fantasy, most often ye olde "high fantasy").  This one has a more dystopian setup, with evil/ruthless drug companies, disaffected youth, etc.  It's a stretch for me, but I like the idea too much to just disregard it.&lt;br /&gt;&lt;br /&gt;Anyway, I'm about 9 pages in on the rough draft, and I like what I've written so far, which is also a first because I usually don't like what's on the page until somewhere in the mid-20s.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3696972919766081107?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3696972919766081107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3696972919766081107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3696972919766081107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3696972919766081107'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/another-day-another-page.html' title='Another day, another page'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6453663191424853791</id><published>2008-09-08T12:00:00.002-04:00</published><updated>2008-09-23T09:38:42.480-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='excerpts'/><category scheme='http://www.blogger.com/atom/ns#' term='fiction'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>Chapter One excerpt</title><content type='html'>&lt;div style="float: right;"&gt;&lt;a href="http://www.lulu.com/content/2726927"&gt;&lt;img src="http://www.stevecoursen.com/thumbnail_paperback" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/commerce/index.php?fBuyContent="&gt;&lt;br /&gt;&lt;img src="http://www.lulu.com/services/buy_now_buttons/images/book.gif" alt="Support independent publishing: buy this book on Lulu." /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The first chapter from the urban fantasy novel &lt;b&gt;The Path Into Darkness&lt;/b&gt; is available &lt;a href="http://www.stevecoursen.com/excerpt1"&gt;here&lt;/a&gt; (pdf is &lt;a href="http://www.stevecoursen.com/excerpt1.pdf"&gt;here&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6453663191424853791?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6453663191424853791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6453663191424853791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6453663191424853791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6453663191424853791'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/chapter-one-excerpt.html' title='Chapter One excerpt'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-2415167091192714719</id><published>2008-09-06T12:00:00.003-04:00</published><updated>2008-09-23T09:38:42.480-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='books'/><category scheme='http://www.blogger.com/atom/ns#' term='writing'/><title type='text'>New Site Launch</title><content type='html'>&lt;div style="float: right;"&gt;&lt;a href="http://www.lulu.com/content/2726927"&gt;&lt;img src="http://www.stevecoursen.com/thumbnail_paperback" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/commerce/index.php?fBuyContent="&gt;&lt;br /&gt;&lt;img src="http://www.lulu.com/services/buy_now_buttons/images/book.gif" alt="Support independent publishing: buy this book on Lulu." /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Launched a &lt;a href="http://www.stevecoursen.com/"&gt;new site&lt;/a&gt; to sort of centralize information about the book &lt;span style="font-weight: bold;"&gt;The Path Into Darkness&lt;/span&gt;.  There's not much content there yet, mostly because the book is still winding it's way through the distributor channels before it can get listed and sold on online bookstores, although it is available at &lt;a href="http://stores.lulu.com/store.php?fAcctID=2529150"&gt;the author's storefront&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Next week, &lt;a href="http://www.stevecoursen.com/excerpts"&gt;excerpts&lt;/a&gt; from the book will be available.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-2415167091192714719?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/2415167091192714719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=2415167091192714719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2415167091192714719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/2415167091192714719'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/new-site-launch.html' title='New Site Launch'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3311710009727211724</id><published>2008-09-05T12:00:00.004-04:00</published><updated>2008-10-12T08:37:03.609-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Adventures in Webpage Content Injection.</title><content type='html'>I run several web sites and recently decided that I wanted to add some common text to the bottom of all the pages.  Since I don't generate the content, it would be best if the server did this as it served the pages.&lt;br /&gt;&lt;br /&gt;A quick search through Apache's module directory and I saw that mod_layout fit the bill ... in theory, at least.  I had tried, in vain, for the last two days to get mod_layout working with my antiquated Linux server (fedora core 3), before I decided that I should really look into my other options -- especially since mod_layout hadn't been updated and from what I could see from forums, it's developer wasn't exactly interested in making it working with Apache 2.0+.&lt;br /&gt;&lt;br /&gt;Then I saw a post about how mod_rewrite could be cajoled into doing this sort of a task.  Essentially it does this by rewriting the request into a CGI call, passing the original requested file name as a paramter.&lt;br /&gt;&lt;br /&gt;Like so:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;RewriteRule /(.*)  /wrapper.cgi?file=$1 [nc,l,qsa]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;All the examples were using PHP.  My server is old (as mentioned above) and you can't really find RPM's for older Fedora's.  So, since I don't have PHP installed, I looked at my options ... and it immediately struck me that Python would be up to the task.&lt;br /&gt;&lt;br /&gt;So, you need to create a Python scripted named &lt;pre&gt;wrapper.cgi&lt;/pre&gt; which contains:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import os&lt;br /&gt;import os&lt;br /&gt;import re&lt;br /&gt;import urllib&lt;br /&gt;&lt;br /&gt;print "Content-type: text/html"&lt;br /&gt;print&lt;br /&gt;docroot = os.getenv( 'DOCUMENT_ROOT' )&lt;br /&gt;fname = docroot + urllib.unquote( os.getenv( 'REQUEST_URI' ) )&lt;br /&gt;buff = open( fname ).read( )&lt;br /&gt;&lt;br /&gt;mobj = re.compile( '&amp;lt;body[^&amp;gt;]*&gt;', re.IGNORECASE | re.VERBOSE )&lt;br /&gt;mobj2 = re.compile( '&amp;lt;/body&amp;gt;', re.IGNORECASE | re.VERBOSE )&lt;br /&gt;obj = mobj.search( buff )&lt;br /&gt;obj2 = mobj2.search( buff )&lt;br /&gt;header = buff[:obj.end()]&lt;br /&gt;body = buff[obj.start( ):obj2.start( )]&lt;br /&gt;footer = buff[obj2.start():]&lt;br /&gt;&lt;br /&gt;print header&lt;br /&gt;if os.path.exists( docroot + '/header.inc' ):&lt;br /&gt;   print open( docroot + '/header.inc' ).read( )&lt;br /&gt;print body&lt;br /&gt;if os.path.exists( docroot + '/footer.inc' ):&lt;br /&gt;   print open( docroot + '/footer.inc' ).read( )&lt;br /&gt;print footer&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So, now I have a framework and method for wrapping all the assorted web pages with some common header &amp;amp; footer code (such as some essential support links, for example).&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3311710009727211724?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3311710009727211724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3311710009727211724' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3311710009727211724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3311710009727211724'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/adventures-in-webpage-content-injection.html' title='Adventures in Webpage Content Injection.'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-6936568307237263583</id><published>2008-09-04T12:00:00.001-04:00</published><updated>2008-09-23T09:39:06.477-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tarot'/><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>Rider-Waite tarot card images</title><content type='html'>Hmm...just noticed that the images used on Wikipedia are from the original deck, which is in the public domain.  Which is useful, since I want to use them as part of a book cover, and now I don't have to pay royalties or seek permissions.&lt;br /&gt;&lt;br /&gt;Happy day.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-6936568307237263583?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/6936568307237263583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=6936568307237263583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6936568307237263583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/6936568307237263583'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/rider-waite-tarot-card-images.html' title='Rider-Waite tarot card images'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-5762009965243597756</id><published>2008-09-03T12:00:00.001-04:00</published><updated>2008-09-04T15:20:21.980-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone and the annoying ATAmazon...</title><content type='html'>So, I recently tried to make more use out of my Amazon Associate Id that I had gotten way back in 2001.  Since I run &lt;a href="http://www.plone.org"&gt;Plone&lt;/a&gt; on a few of my sites, I tried to to install the ATAmazon product.&lt;br /&gt;&lt;br /&gt;It didn't work.&lt;br /&gt;&lt;br /&gt;Not only didn't it work, but it didn't even give me very helpful error messages to try to fix the problem myself.  Other people seem to use it ... or at least know about it.  I enter in the proper ASIN number (I know this, because you can click on the "Buy" button that it shows and go to the proper item's page), but none of the details seem to either retrieved or parsed properly.&lt;br /&gt;&lt;br /&gt;Any tips or clues to help resolve this would be most welcome.&lt;br /&gt;&lt;br /&gt;(EDIT:  Silly amazon "deprecated" that version of their web services.  Unlike the usual method of deprecation, they simply turned it off!)&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-5762009965243597756?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/5762009965243597756/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=5762009965243597756' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5762009965243597756'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/5762009965243597756'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/plone-and-annoying-atamazon.html' title='Plone and the annoying ATAmazon...'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4303014289591575077.post-3957879100780522805</id><published>2008-09-01T15:00:00.008-04:00</published><updated>2008-09-30T08:18:05.448-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='twisted integration'/><category scheme='http://www.blogger.com/atom/ns#' term='stackless'/><category scheme='http://www.blogger.com/atom/ns#' term='twisted'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Stackless Python meets Twisted Matrix....</title><content type='html'>&lt;div style="float: right;"&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/gp/product/0596100329?ie=UTF8&amp;amp;tag=randomthoug08-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=0596100329"&gt;&lt;img src="http://www.tempestnetworks.net/images/51PY-oaLAsL._SL160_.jpg" border="0" /&gt;&lt;/a&gt;&lt;img alt="" style="border: medium none  ! important; margin: 0px ! important;" src="http://www.assoc-amazon.com/e/ir?t=randomthoug08-20&amp;amp;l=as2&amp;amp;o=1&amp;amp;a=0596100329" border="0" width="1" height="1" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Sometimes, you come across two programming toolkits that would go great together.  However, in the case of &lt;a href="http://www.twistedmatrix.com/"&gt;Twisted Matrix&lt;/a&gt; and &lt;a href="http://www.stackless.com/"&gt;Stackless python&lt;/a&gt;, there's some legwork required to get these two great systems to work together.&lt;br /&gt;Twisted requires that it's reactor runs in the main "tasklet", but if there is no network activity or other deferred code to execute, the reactor loop will stop the entire application and thus defeat the purpose behind using tasklets and Stackless.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There is some setup required to get this all working together.&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;import stackless&lt;br /&gt;from twisted.internet import reactor, task&lt;br /&gt;reactor_tasklet = None&lt;br /&gt;&lt;br /&gt;def reactor_run( ):&lt;br /&gt;   reactor_tasklet = stackless.getcurrent( )&lt;br /&gt;   #   repeatedly call stackless.schedule every 0.0001 seconds&lt;br /&gt;   schedulingTask = task.LoopingCall( stackless.schedule )&lt;br /&gt;   #   this prevents the reactor from blocking out the other tasklets&lt;br /&gt;   schedulingTask.start( 0.0001 )                     &lt;br /&gt;   reactor.run( )&lt;br /&gt;&lt;br /&gt;t = stackless.tasklet( reactor_run )&lt;br /&gt;t.run( )&lt;br /&gt;#   run the stackless scheduler.&lt;br /&gt;stackless.run( )                                       &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now, extending out this simple case to a more general solution involves the use of Python's function decorators.  (I use the great &lt;a class="generated" href="http://www.phyast.pitt.edu/%7Emicheles/python/documentation.html" target="_self"&gt;decorator.py&lt;/a&gt; module to make decorators a little easier to write.)&lt;br /&gt;&lt;pre&gt;def __filter( d ):&lt;br /&gt; if isinstance( d, failure.Failure ):&lt;br /&gt;     if isinstance( d.value, TaskletExit ):&lt;br /&gt;         print "ignore taskletexit"&lt;br /&gt;         return None&lt;br /&gt;     return d&lt;br /&gt; return d&lt;br /&gt;&lt;br /&gt;def __wrapper( d, f, *args, **kwargs ):&lt;br /&gt; try:&lt;br /&gt;    rv = defer.maybeDeferred( f, *args, **kwargs )&lt;br /&gt;    rv.addCallback( __filter )&lt;br /&gt;    rv.addCallback( d.callback )&lt;br /&gt;    rv.addErrback( __filter )&lt;br /&gt; except TaskletExit:&lt;br /&gt;    pass&lt;br /&gt; except Exception, e:&lt;br /&gt;    print e, dir( e )&lt;br /&gt;    d.errback( e )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Above is just some boiler-plate code.  &lt;b&gt;__filter&lt;/b&gt; screens out the &lt;b&gt;TaskletExit&lt;/b&gt; exception that gets sent to Tasklets; if this isn't done, the Twisted framework wraps it up in an instance of &lt;b&gt;twisted.python.failure.Failure&lt;/b&gt; and you get "Unhandled error in Deferred" exceptions at the calling point.  Since this is almost never what you want, it's easiest to just filter it out.  Of course, in real code you'll remove the line reading '&lt;span style="font-weight: bold;"&gt;print "ignore taskletexit"&lt;/span&gt;'.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;__wrapper&lt;/b&gt; does the actual heavy lifting of the function call.  It uses the &lt;b&gt;maybeDeferred&lt;/b&gt; function to ensure that after the function call we are only dealing with &lt;b&gt;Deferred&lt;/b&gt;'s.  &lt;b&gt;__wrapper &lt;/b&gt;uses Twisted's usual callback mechanism to ensure that the &lt;b&gt;Deferred&lt;/b&gt; that it received as a function paramater is called once the results of the actual function call is available.  This parameter &lt;b&gt;Deferred&lt;/b&gt; is essential for the function decorators described next to work.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;reactor_tasklet = None&lt;br /&gt;&lt;br /&gt;@decorator&lt;br /&gt;def deferred_tasklet( f, *args, **kwargs ):&lt;br /&gt;   d = defer.Deferred( )&lt;br /&gt;   t = stackless.tasklet( __wrapper )&lt;br /&gt;   t( d, f, *args, **kwargs )&lt;br /&gt;   t.run( )&lt;br /&gt;   return d&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@decorator&lt;br /&gt;def blocking_tasklet( f, *args, **kwargs ):&lt;br /&gt;   f2 = deferred_tasklet( f )&lt;br /&gt;   d = f2( *args, **kwargs )&lt;br /&gt;   if reactor_tasklet != stackless.getcurrent( )&lt;br /&gt;      and stackless.getcurrent( ) != stackless.getmain( ):&lt;br /&gt;         return block_on( d )&lt;br /&gt;   raise RuntimeError( "Cannot block in reactor task" )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def block_on( d ):&lt;br /&gt;   chan = stackless.channel( )&lt;br /&gt;   d.addBoth( lambda x,y=chan: y.send( x ) )&lt;br /&gt;   return chan.receive( )&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;Here we have the two main function decorators &lt;b&gt;deferred_tasklet &lt;/b&gt;and &lt;b&gt;blocking_tasklet&lt;/b&gt;, as well as the utiliity function &lt;b&gt;block_on&lt;/b&gt;.  The first of these simply returns a &lt;b&gt;Deferred&lt;/b&gt;, suspiciously the very same &lt;b&gt;Deferred&lt;/b&gt; that it passes as a parameter to the &lt;b&gt;__wrapper&lt;/b&gt; function; which, if you've been paying attention, will be triggered once the results of the wrapped-up function are available.  All we're really doing here is creating a &lt;b&gt;stackless.tasklet&lt;/b&gt; and running &lt;b&gt;__wrapper&lt;/b&gt; in that new microthread.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;blocking_tasklet&lt;/b&gt; goes one step beyond this, and takes the &lt;b&gt;Deferred&lt;/b&gt; that we were passed earlier and converts it into a blocking function call.  First, it does some sanity checks to ensure that it's not blocking in the same tasklet that Twisted's reactor is running in.  Somewhere you need to store the value of &lt;b&gt;stackless.getcurrent()&lt;/b&gt; when called from with the reactor's tasklet.  We also need to make sure that our current tasklet is not the "main" Stackless tasklet; this should never happen, but I like to be safe at times.&lt;br /&gt;&lt;br /&gt;The utility function &lt;b&gt;block_on&lt;/b&gt; sets up a &lt;a href="http://www.s31.org/2007/06/26/coolness/"&gt;Stackless &lt;b&gt;channel&lt;/b&gt;&lt;/a&gt;.  It then adds a simple little lambda closure.  This closure only &lt;b&gt;send&lt;/b&gt;'s it's parameter to the stackless channel.  This closure is added to both the callback and errback chain of the &lt;b&gt;Deferred&lt;/b&gt; that we're going to wait on.  After this is all set up, we then call &lt;b&gt;receive&lt;/b&gt;, which blocks this tasklet until the &lt;b&gt;Deferred&lt;/b&gt; is finished and the callbacks/errback is fired off.  At this point, we receive the return value of the original function through the &lt;b&gt;channel&lt;/b&gt; and can return it as the return value of our function.&lt;br /&gt;&lt;br /&gt;As long as we are not in the same tasklet as Twisted's reactor, we can use this &lt;b&gt;block_on &lt;/b&gt;function to turn our other wise asynchronous code into a sequentially execute synchronous code.  This can also be done using Twisted's &lt;b&gt;inlineCallbacks&lt;/b&gt; decorator, but that turns the decorated function into a generator, which isn't always what we want.&lt;div class="blogger-post-footer"&gt;&lt;script type="text/javascript"&gt;&lt;!--
google_ad_client = "pub-1556223355139109";
/* 120x240, created 9/4/08 */
google_ad_slot = "9436131579";
google_ad_width = 120;
google_ad_height = 240;
//--&gt;
&lt;/script&gt;
&lt;script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;
&lt;/script&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4303014289591575077-3957879100780522805?l=constantlyuntitled.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://constantlyuntitled.blogspot.com/feeds/3957879100780522805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4303014289591575077&amp;postID=3957879100780522805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3957879100780522805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4303014289591575077/posts/default/3957879100780522805'/><link rel='alternate' type='text/html' href='http://constantlyuntitled.blogspot.com/2008/09/stackless-python-meets-twisted-matrix.html' title='Stackless Python meets Twisted Matrix....'/><author><name>talon74</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_pXjEBbuLtFg/SNhQN_TTFpI/AAAAAAAAAAg/s-joUoDnbBM/S220/wilderness.jpeg'/></author><thr:total>0</thr:total></entry></feed>
