<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>The Imaginative Universal</title>
    <link>http://www.imaginativeuniversal.com/</link>
    <description>Studies in Virtual Phenomenology</description>
    <language>en-us</language>
    <copyright>James Ashley</copyright>
    <lastBuildDate>Sun, 20 Jul 2008 03:48:36 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.0.7226.0</generator>
    <managingEditor>james.ashley.magenic@gmail.com</managingEditor>
    <webMaster>james.ashley.magenic@gmail.com</webMaster>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/CommentView,guid,2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="samovar" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/ConcerningSamovars_14ED5/samovar_3.jpg" width="184" border="0" />
        </p>
        <p>
We have two in the house.  Passed down through the generations in my wife's family,
they currently sit in our living room as decorations, whispering to us of bygone times.
</p>
        <p>
          <br />
They once played a central role in the cultural life of the Russian emigre intelligentsia. 
Alexandra Kropotkin evokes images of this bygone world in her wonderful book on <a href="http://www.amazon.com/Russian-Hippocrene-International-Cookbook-Classics/dp/0781801311/ref=pd_bbs_sr_1?ie=UTF8&amp;s=books&amp;qid=1216522964&amp;sr=8-1" target="_blank">Russian</a> Cooking: 
</p>
        <blockquote>
          <p>
Among Russians who have gone away to dwell in other countries, it is easy enough to
arouse mild attacks of homesick longing for Russian life and Russian flavors. 
But to launch the expatriate Russian soul on a really unbridled jag of nostalgia,
try mentioning our <em>vechernyi t'chai</em>, our evening tea.
</p>
          <p>
There is the magic phrase that reawakens all out dearest memories of home!
</p>
          <p>
When the samovar goes on the dining-room table, usually about 10 o'clock in the evening,
the entire family gathers for the most intimate kind of get-together.  This is
the hour of comfortable relaxation, with old and young meeting as equals in talk,
drinking innumerable glasses and cups of tea while wandering conversationally into
all fields of anecdote and gossip, of thought and speculation.
</p>
          <p>
The babies and younger children are in bed.  The adolescents feel grown up. 
The oldsters are sure of an audience.  And guests always drop in.  It is
perfectly correct for friends to drop in, uninvited, for evening tea at any time between
10 P.M. and midnight.  The lady of the house is not expected to set out anything
special for company.  There is no fuss or formality.  The scene is cozy
and homelike.  When you come for evening tea, you take potluck with the family.
</p>
          <p>
The dining-room table is covered with an embroidered tablecloth.  Beside the
lady of the house, at her right hand, the steaming samovar stands on a little table
of its own.  Or if there is no side table, the samovar will be standing directly
on the dining-room table, with the hostess peeking around it to see and take part
in whatever is going on.
</p>
          <p>
A small china teapot fits into a metal fixture on top of the samovar.  The hostess
herself has measured tea leaves into the china teapot, has brewed the tea with boiling
water from the samovar, and has set the pot of tea on top of the samovar to keep on
brewing.
</p>
          <p>
The tea is made as strong as household supplies permit.  A few drops of this
strong tea from the small china pot will be poured into each cup or glass, which will
then be filled with hot water from the samovar.
</p>
          <p>
Tea glasses in metal or silver holders that have handles, like American ice-cream-soda
glasses, are set out for the men.  In Russia the men drink tea from glasses,
adn the women drink tea from cups.
</p>
          <p>
...
</p>
          <p>
On our evening tea table are plates of cold cuts and plates of sliced cheese. 
We don't serve fish at evening tea unless the season is Lent, or when times are particularly
hard.  The bread basket offers slices of black bread and slices of white. 
Unsalted butter is on the table in a pretty dish ... Plenty of sweet things will be
arrayed in front of us in any case.  There will be homemade preserves, crystallized
fruits, fruit confections known as <em>pastilla</em>, and the semi-jellied fruit candies
that Russians call <em>marmelade ...</em></p>
          <p>
At <em>vechernyi t'chai</em>, it seemed that the tea was consumed endlessly, most
Russians taking it with thin slices of lemon.  The hostess always sliced the
lemon herself with a special silver knife.  After cutting the lemon she always
held the knife for a moment in the steam from the samovar to prevent the knife from
tarnishing.
</p>
          <p>
Everyone at the tea table had a plate and a small saucer, usually of cut glass. 
The saucer was for preserves, which you either ate with a spoon or put into your tea. 
Many Russians like preserves better than sugar as a sweetening for their tea. 
After years in America it still irks me not to be able to find saucers of the right
size for preserves to go with Russian tea.  We call these saucers <em>blewdichki
dlia vareniya</em>.  They are about 3 inches across.  Very few Russians
take milk or cream in their evening tea.  They take it that way on for breakfast.
</p>
        </blockquote>
        <p>
The best breakfast in the world, of course, is a hot bowl of <a href="http://en.wikipedia.org/wiki/Ph%E1%BB%9F" target="_blank">pho</a>,
which is a part of <em>my</em> cultural heritage.  My mother makes it for us
whenever she visits, and I generally have it for lunch at least two or three times
a month.  Nevertheless, the best time of day for ph? is the morning.  It
includes a strong beef broth for protein, noodles for carbs, and spices to help you
wake up as well as a variety of herbs, bean sprouts and citrus.  
</p>
        <p>
Andrea Nguyen has written an excellent series of <a href="http://www.vietworldkitchen.com/bookshelf/articles/pho_SJM.htm" target="_blank">articles</a> about
pho for the Mercury News which covers the history and the rituals surrounding the
flavorful soup.  She even provides a recipe, though it is a bit of a lark since
few people will have the patience to actually try it out.  It requires some unusual
herbs as well as long hours of boiling bones and meat for the broth.  My mother
typically boils two chickens (either Vietnamese or Thai chickens, since she says American
chickens have no flavor) as well as a large beef bone for about 8 hours until the
meat has practically disintegrated into the broth.
</p>
        <blockquote>
          <p>
Garnishing pho is like putting together your own hamburger -- you can have it your
way. So, before putting any pho into your mouth, add your own finishing touches. Then
dive in with a two-handed approach: chopsticks in one hand to pick up the noodles,
the soup spoon in the other to scoop up broth and other goodies.
</p>
          <p>
Your pho ritual may include:
</p>
          <p>
            <b>Bean sprouts:</b> Add them raw for crunch or blanch them first.
</p>
          <p>
            <b>Chiles: </b>Dip and wiggle thin slices of hot chile in the hot broth to release
the oil. Leave them in if you dare. For best fragrance and taste, try Southeast Asian
chiles such as Thai bird or dragon rather than jalapeños. Serranos are better
than jalapeños.
</p>
          <p>
            <b>Herbs:</b> Strip fresh herb leaves from their stems, tear up the leaves and drop
them into your bowl. Available at Viet markets, pricey <i>ngo gai </i>(culantro, thorny
cilantro, saw-leaf herb) imparts heady cilantro notes. The ubiquitous purple-stemmed
Asian/Thai basil (<i>hung que</i>) contributes sweet anise-like flavors. Spearmint
(<i>hung lui</i>), popular in the north, adds zip. [For details, see <a href="http://www.vietworldkitchen.com/essentials/herbs.htm">Essential
Viet herb page</a> on this site.]
</p>
          <p>
            <b>Lime:</b> A squeeze of lime gives the broth a tart edge, especially nice if the
broth is too sweet or bland.
</p>
          <p>
            <b>Sauces: </b>Many people squirt hoisin (<i>tuong</i>) or Sriracha hot sauce directly
into the bowl. I don't favor this practice because it obliterates a well-prepared,
nuanced broth. But I do reach for the hoisin and Sriracha bottles to make a dipping
sauce for the beef meatballs (<i>bo vien</i>).
</p>
        </blockquote>
        <p>
I typically do put both hoisin and <a href="http://polyglotveg.blogspot.com/2007/03/rooster-sauce.html" target="_blank">Sriracha</a> in
my soup because this is the way my mother has always made it for me.  Additionally,
I squirt some of each into a dipping bowl, pick out thin slices of rare beef out of
my soup bowl with chopsticks and alternate between dipping the slices in the chile
sauce and the sweet hoisin.
</p>
        <p>
Unlike the Russian tea ritual, the Vietnamese pho ritual is no time to talk about
politics or religion.  Eating soup is a serious business, and involves the constant
motion of chewing on noodles and preparing carefully for the moment when one swallows
one's noodles by synchronized hand motions, with the chopstick hand picking out pieces
of meat from the bowl and dipping them in the sauce dish, while the soup spoon hand
gathers more noodles to chase the slices of beef.
</p>
        <p>
Talking generally resumes after the meal, as all participants look with satisfaction
at the empty soup bowls and the pieces of discarded herbs and sprouts strewn across
the table.
</p>
        <p>
The Vietnamese are a coffee rather than a tea people, having been colonized by the
French rather than the English.  For breakfast I like a strong cup of coffee
with my pho, and I like to sweeten it with condensed milk.  A meal like this
generally leaves me full well into the dinner hour.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Concerning Samovars</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/PermaLink,guid,2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a.aspx</guid>
      <link>http://www.imaginativeuniversal.com/ConcerningSamovars.aspx</link>
      <pubDate>Sun, 20 Jul 2008 03:48:36 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="244" alt="samovar" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/ConcerningSamovars_14ED5/samovar_3.jpg" width="184" border="0" /&gt; 
&lt;/p&gt;
&lt;p&gt;
We have two in the house.&amp;#160; Passed down through the generations in my wife's family,
they currently sit in our living room as decorations, whispering to us of bygone times.
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
They once played a central role in the cultural life of the Russian emigre intelligentsia.&amp;#160;
Alexandra Kropotkin evokes images of this bygone world in her wonderful book on &lt;a href="http://www.amazon.com/Russian-Hippocrene-International-Cookbook-Classics/dp/0781801311/ref=pd_bbs_sr_1?ie=UTF8&amp;amp;s=books&amp;amp;qid=1216522964&amp;amp;sr=8-1" target="_blank"&gt;Russian&lt;/a&gt; Cooking: 
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Among Russians who have gone away to dwell in other countries, it is easy enough to
arouse mild attacks of homesick longing for Russian life and Russian flavors.&amp;#160;
But to launch the expatriate Russian soul on a really unbridled jag of nostalgia,
try mentioning our &lt;em&gt;vechernyi t'chai&lt;/em&gt;, our evening tea.
&lt;/p&gt;
&lt;p&gt;
There is the magic phrase that reawakens all out dearest memories of home!
&lt;/p&gt;
&lt;p&gt;
When the samovar goes on the dining-room table, usually about 10 o'clock in the evening,
the entire family gathers for the most intimate kind of get-together.&amp;#160; This is
the hour of comfortable relaxation, with old and young meeting as equals in talk,
drinking innumerable glasses and cups of tea while wandering conversationally into
all fields of anecdote and gossip, of thought and speculation.
&lt;/p&gt;
&lt;p&gt;
The babies and younger children are in bed.&amp;#160; The adolescents feel grown up.&amp;#160;
The oldsters are sure of an audience.&amp;#160; And guests always drop in.&amp;#160; It is
perfectly correct for friends to drop in, uninvited, for evening tea at any time between
10 P.M. and midnight.&amp;#160; The lady of the house is not expected to set out anything
special for company.&amp;#160; There is no fuss or formality.&amp;#160; The scene is cozy
and homelike.&amp;#160; When you come for evening tea, you take potluck with the family.
&lt;/p&gt;
&lt;p&gt;
The dining-room table is covered with an embroidered tablecloth.&amp;#160; Beside the
lady of the house, at her right hand, the steaming samovar stands on a little table
of its own.&amp;#160; Or if there is no side table, the samovar will be standing directly
on the dining-room table, with the hostess peeking around it to see and take part
in whatever is going on.
&lt;/p&gt;
&lt;p&gt;
A small china teapot fits into a metal fixture on top of the samovar.&amp;#160; The hostess
herself has measured tea leaves into the china teapot, has brewed the tea with boiling
water from the samovar, and has set the pot of tea on top of the samovar to keep on
brewing.
&lt;/p&gt;
&lt;p&gt;
The tea is made as strong as household supplies permit.&amp;#160; A few drops of this
strong tea from the small china pot will be poured into each cup or glass, which will
then be filled with hot water from the samovar.
&lt;/p&gt;
&lt;p&gt;
Tea glasses in metal or silver holders that have handles, like American ice-cream-soda
glasses, are set out for the men.&amp;#160; In Russia the men drink tea from glasses,
adn the women drink tea from cups.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
On our evening tea table are plates of cold cuts and plates of sliced cheese.&amp;#160;
We don't serve fish at evening tea unless the season is Lent, or when times are particularly
hard.&amp;#160; The bread basket offers slices of black bread and slices of white.&amp;#160;
Unsalted butter is on the table in a pretty dish ... Plenty of sweet things will be
arrayed in front of us in any case.&amp;#160; There will be homemade preserves, crystallized
fruits, fruit confections known as &lt;em&gt;pastilla&lt;/em&gt;, and the semi-jellied fruit candies
that Russians call &lt;em&gt;marmelade ...&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
At &lt;em&gt;vechernyi t'chai&lt;/em&gt;, it seemed that the tea was consumed endlessly, most
Russians taking it with thin slices of lemon.&amp;#160; The hostess always sliced the
lemon herself with a special silver knife.&amp;#160; After cutting the lemon she always
held the knife for a moment in the steam from the samovar to prevent the knife from
tarnishing.
&lt;/p&gt;
&lt;p&gt;
Everyone at the tea table had a plate and a small saucer, usually of cut glass.&amp;#160;
The saucer was for preserves, which you either ate with a spoon or put into your tea.&amp;#160;
Many Russians like preserves better than sugar as a sweetening for their tea.&amp;#160;
After years in America it still irks me not to be able to find saucers of the right
size for preserves to go with Russian tea.&amp;#160; We call these saucers &lt;em&gt;blewdichki
dlia vareniya&lt;/em&gt;.&amp;#160; They are about 3 inches across.&amp;#160; Very few Russians
take milk or cream in their evening tea.&amp;#160; They take it that way on for breakfast.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
The best breakfast in the world, of course, is a hot bowl of &lt;a href="http://en.wikipedia.org/wiki/Ph%E1%BB%9F" target="_blank"&gt;pho&lt;/a&gt;,
which is a part of &lt;em&gt;my&lt;/em&gt; cultural heritage.&amp;#160; My mother makes it for us
whenever she visits, and I generally have it for lunch at least two or three times
a month.&amp;#160; Nevertheless, the best time of day for ph? is the morning.&amp;#160; It
includes a strong beef broth for protein, noodles for carbs, and spices to help you
wake up as well as a variety of herbs, bean sprouts and citrus.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Andrea Nguyen has written an excellent series of &lt;a href="http://www.vietworldkitchen.com/bookshelf/articles/pho_SJM.htm" target="_blank"&gt;articles&lt;/a&gt; about
pho for the Mercury News which covers the history and the rituals surrounding the
flavorful soup.&amp;#160; She even provides a recipe, though it is a bit of a lark since
few people will have the patience to actually try it out.&amp;#160; It requires some unusual
herbs as well as long hours of boiling bones and meat for the broth.&amp;#160; My mother
typically boils two chickens (either Vietnamese or Thai chickens, since she says American
chickens have no flavor) as well as a large beef bone for about 8 hours until the
meat has practically disintegrated into the broth.
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Garnishing pho is like putting together your own hamburger -- you can have it your
way. So, before putting any pho into your mouth, add your own finishing touches. Then
dive in with a two-handed approach: chopsticks in one hand to pick up the noodles,
the soup spoon in the other to scoop up broth and other goodies.
&lt;/p&gt;
&lt;p&gt;
Your pho ritual may include:
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Bean sprouts:&lt;/b&gt; Add them raw for crunch or blanch them first.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Chiles: &lt;/b&gt;Dip and wiggle thin slices of hot chile in the hot broth to release
the oil. Leave them in if you dare. For best fragrance and taste, try Southeast Asian
chiles such as Thai bird or dragon rather than jalape&amp;#241;os. Serranos are better
than jalape&amp;#241;os.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Herbs:&lt;/b&gt; Strip fresh herb leaves from their stems, tear up the leaves and drop
them into your bowl. Available at Viet markets, pricey &lt;i&gt;ngo gai &lt;/i&gt;(culantro, thorny
cilantro, saw-leaf herb) imparts heady cilantro notes. The ubiquitous purple-stemmed
Asian/Thai basil (&lt;i&gt;hung que&lt;/i&gt;) contributes sweet anise-like flavors. Spearmint
(&lt;i&gt;hung lui&lt;/i&gt;), popular in the north, adds zip. [For details, see &lt;a href="http://www.vietworldkitchen.com/essentials/herbs.htm"&gt;Essential
Viet herb page&lt;/a&gt; on this site.]
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Lime:&lt;/b&gt; A squeeze of lime gives the broth a tart edge, especially nice if the
broth is too sweet or bland.
&lt;/p&gt;
&lt;p&gt;
&lt;b&gt;Sauces: &lt;/b&gt;Many people squirt hoisin (&lt;i&gt;tuong&lt;/i&gt;) or Sriracha hot sauce directly
into the bowl. I don't favor this practice because it obliterates a well-prepared,
nuanced broth. But I do reach for the hoisin and Sriracha bottles to make a dipping
sauce for the beef meatballs (&lt;i&gt;bo vien&lt;/i&gt;).
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
I typically do put both hoisin and &lt;a href="http://polyglotveg.blogspot.com/2007/03/rooster-sauce.html" target="_blank"&gt;Sriracha&lt;/a&gt; in
my soup because this is the way my mother has always made it for me.&amp;#160; Additionally,
I squirt some of each into a dipping bowl, pick out thin slices of rare beef out of
my soup bowl with chopsticks and alternate between dipping the slices in the chile
sauce and the sweet hoisin.
&lt;/p&gt;
&lt;p&gt;
Unlike the Russian tea ritual, the Vietnamese pho ritual is no time to talk about
politics or religion.&amp;#160; Eating soup is a serious business, and involves the constant
motion of chewing on noodles and preparing carefully for the moment when one swallows
one's noodles by synchronized hand motions, with the chopstick hand picking out pieces
of meat from the bowl and dipping them in the sauce dish, while the soup spoon hand
gathers more noodles to chase the slices of beef.
&lt;/p&gt;
&lt;p&gt;
Talking generally resumes after the meal, as all participants look with satisfaction
at the empty soup bowls and the pieces of discarded herbs and sprouts strewn across
the table.
&lt;/p&gt;
&lt;p&gt;
The Vietnamese are a coffee rather than a tea people, having been colonized by the
French rather than the English.&amp;#160; For breakfast I like a strong cup of coffee
with my pho, and I like to sweeten it with condensed milk.&amp;#160; A meal like this
generally leaves me full well into the dinner hour.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/CommentView,guid,2bec1b7c-a1f5-42b2-a6f8-ec41ea2e6c9a.aspx</comments>
      <category>Notes from Terra</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=52537aa8-e9c0-49f6-824c-56c563e79df6</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,52537aa8-e9c0-49f6-824c-56c563e79df6.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/CommentView,guid,52537aa8-e9c0-49f6-824c-56c563e79df6.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=52537aa8-e9c0-49f6-824c-56c563e79df6</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="hellboy" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/Hellboy2WhenElvesGoBad_E8D9/hellboy_3.jpg" width="182" border="0" />
        </p>
        <p>
          <a href="http://www.amazon.com/Hellboy-Seed-Destruction-Graphic-Novels/dp/1593070942/ref=pd_bbs_sr_3?ie=UTF8&amp;s=books&amp;qid=1215980239&amp;sr=8-3" target="_blank">Hellboy</a> is,
at its heart, a conceit that allows Mike Mignola, the comic book author,  to
riff on various horror and fantasy motifs by inserting a gun-toting, cigar-smoking
modern action hero (albeit one with a tail) into genres where he does not belong. 
The payoff in the comic books, sometimes successful and sometimes not, is simply in
seeing how events unwrap.
</p>
        <p>
There is a naturalness to adapting Hellboy for the big screen, since this is where
this type of action hero was originally born.  In Guillermo del Toro's hands,
what occurs is a reversal of the transposition Mike Mignola accomplishes in his graphic
novels.  We import into the action movie genre elements that do not natively
belong to it and see what happens.  As with the comic books, this is sometimes
successful and sometimes not.
</p>
        <p>
The original movie played with themes from H.P. Lovecraft's Cthulu stories. 
The monsters were beautifully realized using CGI effects, but the incomprehensible
horror that typically drove Lovecraft's stories were displaced.  They simply
cannot exist in a world that revolves around an indefatigable hero.
</p>
        <p>
The Hellboy sequel in turn plays, more than anything else, with Tolkien's elves. 
The elves in <a href="http://www.imdb.com/title/tt0411477/" target="_blank">The Golden
Army</a> are tall and filled with martial virtue.  They are also masters of magic,
and preservers of nature.  Part of the high concept behind Peter Jackson's production
of Lord of the Rings was to bring out the nature loving motifs in every elven design,
while highlight the industrial aspects of orc culture.  As <a href="http://www.nationalgeographic.com/ngbeyond/rings/influences.html" target="_blank">National
Geographic</a> (among others) points out:
</p>
        <blockquote>
          <p>
Tolkien's concern for nature echoes throughout <i>The Lord of the Rings.</i> Evil
beings of Middle-earth dominate nature and abuse it to bolster their own power. For
example, Saruman, the corrupt wizard, devastates an ancient forest as he builds his
army. 
</p>
          <p>
The Elves, in contrast, live in harmony with nature, appreciating its beauty and power,
and reflecting a sense of enchantment and wonder in their artful songs.
</p>
        </blockquote>
        <p>
Orcs, however, always exist in some sense as placeholders for modern men.  In <em>The
Golden Army</em>, del Toro asks what would happen if Tolkien's elves ever saw what
we have now become.  Del Toro's answer is that they would go to war with us in
order to preserve what remained of their world.
</p>
        <p>
Visually, we once again see the <a href="http://www.artcyclopedia.com/artists/bosch_hieronymus.html" target="_blank">Hieronomous
Bosch</a> inspired monsters we first glimpsed in <a href="http://www.panslabyrinth.com/" target="_blank">Pan's
Labyrinth</a>.  They are beautiful and horrible at the same time -- horrible
enough to justify Hellboy as a hero as he battles them, but so beautiful at times
that it seems a shame.  It is this second aspect of the film, and Del Toro's
constant affection for outsiders, that undercuts the film as a participant in the
action genre.  Instead, the battles become exhausting over time, and we wish
they would go away so we can enjoy the gentle details of Del Toro's exotic world which
have always been his specialty.
</p>
        <p>
          <a href="http://en.wikipedia.org/wiki/Hayao_Miyazaki" target="_blank">Hayao Miyazaki's</a> films
can be identified as another influence on the visuals and mood of this film. 
One of the monsters from <em>Hellboy II</em> seems to be pulled right out of <a href="http://www.amazon.com/Princess-Mononoke-Hisaya-Morishige/dp/B00003CXBK/ref=pd_bbs_2?ie=UTF8&amp;s=dvd&amp;qid=1215979115&amp;sr=8-2" target="_blank">Princess
Mononoke</a>.  The bestiary we encounter in the Goblin Market, likewise, recalls
the parade of grotesques from <a href="http://www.amazon.com/Princess-Mononoke-Hisaya-Morishige/dp/B00003CXBK/ref=pd_bbs_2?ie=UTF8&amp;s=dvd&amp;qid=1215979115&amp;sr=8-2" target="_blank">Spirited
Away</a>.  More than anything else, however, what is borrowed from Miyazaki is
the device of placing a child in the middle of the battle between good and evil. 
We are forced to see the world through the eyes of a child who finds both good and
evil to be ambiguous, which is the emotional location of all fairy tales.  In
Del Toro's film, Anna Walton performs this role as Princess Nuala, the sister to the
elf protagonist of the story who, with her big yellow eyes and zombie-like complexion,
is strangely affecting and sympathetic.
</p>
        <p>
All in all, the film is not successful -- not because it does not know what it wants
to be, whether action movie or heroic fantasy, but because there is nothing for it
to be.  These genres do not combine easily, and what we are left with instead
is a plotline and a set of overlapping genres that provide Del Toro with a canvas
upon which he paints detailed images that could not make an appearance in any other
way.  Those details were, for me, well worth the price of admission.
</p>
        <p>
The big question is what Del Toro will do when he gets his hands on a real fantasy
property.  He is slated to direct the highly anticipated Hobbit movie, with Peter
Jackson producing.  There is, of course, what the movie ought to be -- a continuation
of the epic fantasy genre, done with the same accomplishment that Jackson achieved
with <em>The Lord of the Rings</em>.  If <em>The Golden Army</em> is any indication,
however, this is unlikely to be what we will get.  Del Toro's recent interviews
point to the same <a href="http://www.salon.com/ent/audiofile/2006/10/12/conversations_toro/" target="_blank">conclusion</a>:
</p>
        <blockquote>
          <p>
I was never into heroic fantasy. At all. I don't like little guys and dragons, hairy
feet, hobbits -- I've never been into that at all. I don't like sword and sorcery,
I hate all that stuff.
</p>
        </blockquote>
        <p>
This is fine with me.  I've always been a fan of the <a href="http://www.imdb.com/title/tt0077687/" target="_blank">Rankin</a>/ <a href="http://www.youtube.com/watch?v=XSHLGnexe-w" target="_blank">Bass</a> cartoon
(with music by Glen Yarborough), and don't see any reason to try to improve upon it. 
Seeing Del Toro take another stab at twisting the genre to his own ends is well worth
waiting for.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=52537aa8-e9c0-49f6-824c-56c563e79df6" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Hellboy 2: When Elves Go Bad</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/PermaLink,guid,52537aa8-e9c0-49f6-824c-56c563e79df6.aspx</guid>
      <link>http://www.imaginativeuniversal.com/Hellboy2WhenElvesGoBad.aspx</link>
      <pubDate>Sun, 13 Jul 2008 20:33:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="244" alt="hellboy" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/Hellboy2WhenElvesGoBad_E8D9/hellboy_3.jpg" width="182" border="0" /&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.amazon.com/Hellboy-Seed-Destruction-Graphic-Novels/dp/1593070942/ref=pd_bbs_sr_3?ie=UTF8&amp;amp;s=books&amp;amp;qid=1215980239&amp;amp;sr=8-3" target="_blank"&gt;Hellboy&lt;/a&gt; is,
at its heart, a conceit that allows Mike Mignola, the comic book author,&amp;#160; to
riff on various horror and fantasy motifs by inserting a gun-toting, cigar-smoking
modern action hero (albeit one with a tail) into genres where he does not belong.&amp;#160;
The payoff in the comic books, sometimes successful and sometimes not, is simply in
seeing how events unwrap.
&lt;/p&gt;
&lt;p&gt;
There is a naturalness to adapting Hellboy for the big screen, since this is where
this type of action hero was originally born.&amp;#160; In Guillermo del Toro's hands,
what occurs is a reversal of the transposition Mike Mignola accomplishes in his graphic
novels.&amp;#160; We import into the action movie genre elements that do not natively
belong to it and see what happens.&amp;#160; As with the comic books, this is sometimes
successful and sometimes not.
&lt;/p&gt;
&lt;p&gt;
The original movie played with themes from H.P. Lovecraft's Cthulu stories.&amp;#160;
The monsters were beautifully realized using CGI effects, but the incomprehensible
horror that typically drove Lovecraft's stories were displaced.&amp;#160; They simply
cannot exist in a world that revolves around an indefatigable hero.
&lt;/p&gt;
&lt;p&gt;
The Hellboy sequel in turn plays, more than anything else, with Tolkien's elves.&amp;#160;
The elves in &lt;a href="http://www.imdb.com/title/tt0411477/" target="_blank"&gt;The Golden
Army&lt;/a&gt; are tall and filled with martial virtue.&amp;#160; They are also masters of magic,
and preservers of nature.&amp;#160; Part of the high concept behind Peter Jackson's production
of Lord of the Rings was to bring out the nature loving motifs in every elven design,
while highlight the industrial aspects of orc culture.&amp;#160; As &lt;a href="http://www.nationalgeographic.com/ngbeyond/rings/influences.html" target="_blank"&gt;National
Geographic&lt;/a&gt; (among others) points out:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Tolkien's concern for nature echoes throughout &lt;i&gt;The Lord of the Rings.&lt;/i&gt; Evil
beings of Middle-earth dominate nature and abuse it to bolster their own power. For
example, Saruman, the corrupt wizard, devastates an ancient forest as he builds his
army. 
&lt;/p&gt;
&lt;p&gt;
The Elves, in contrast, live in harmony with nature, appreciating its beauty and power,
and reflecting a sense of enchantment and wonder in their artful songs.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
Orcs, however, always exist in some sense as placeholders for modern men.&amp;#160; In &lt;em&gt;The
Golden Army&lt;/em&gt;, del Toro asks what would happen if Tolkien's elves ever saw what
we have now become.&amp;#160; Del Toro's answer is that they would go to war with us in
order to preserve what remained of their world.
&lt;/p&gt;
&lt;p&gt;
Visually, we once again see the &lt;a href="http://www.artcyclopedia.com/artists/bosch_hieronymus.html" target="_blank"&gt;Hieronomous
Bosch&lt;/a&gt; inspired monsters we first glimpsed in &lt;a href="http://www.panslabyrinth.com/" target="_blank"&gt;Pan's
Labyrinth&lt;/a&gt;.&amp;#160; They are beautiful and horrible at the same time -- horrible
enough to justify Hellboy as a hero as he battles them, but so beautiful at times
that it seems a shame.&amp;#160; It is this second aspect of the film, and Del Toro's
constant affection for outsiders, that undercuts the film as a participant in the
action genre.&amp;#160; Instead, the battles become exhausting over time, and we wish
they would go away so we can enjoy the gentle details of Del Toro's exotic world which
have always been his specialty.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://en.wikipedia.org/wiki/Hayao_Miyazaki" target="_blank"&gt;Hayao Miyazaki's&lt;/a&gt; films
can be identified as another influence on the visuals and mood of this film.&amp;#160;
One of the monsters from &lt;em&gt;Hellboy II&lt;/em&gt; seems to be pulled right out of &lt;a href="http://www.amazon.com/Princess-Mononoke-Hisaya-Morishige/dp/B00003CXBK/ref=pd_bbs_2?ie=UTF8&amp;amp;s=dvd&amp;amp;qid=1215979115&amp;amp;sr=8-2" target="_blank"&gt;Princess
Mononoke&lt;/a&gt;.&amp;#160; The bestiary we encounter in the Goblin Market, likewise, recalls
the parade of grotesques from &lt;a href="http://www.amazon.com/Princess-Mononoke-Hisaya-Morishige/dp/B00003CXBK/ref=pd_bbs_2?ie=UTF8&amp;amp;s=dvd&amp;amp;qid=1215979115&amp;amp;sr=8-2" target="_blank"&gt;Spirited
Away&lt;/a&gt;.&amp;#160; More than anything else, however, what is borrowed from Miyazaki is
the device of placing a child in the middle of the battle between good and evil.&amp;#160;
We are forced to see the world through the eyes of a child who finds both good and
evil to be ambiguous, which is the emotional location of all fairy tales.&amp;#160; In
Del Toro's film, Anna Walton performs this role as Princess Nuala, the sister to the
elf protagonist of the story who, with her big yellow eyes and zombie-like complexion,
is strangely affecting and sympathetic.
&lt;/p&gt;
&lt;p&gt;
All in all, the film is not successful -- not because it does not know what it wants
to be, whether action movie or heroic fantasy, but because there is nothing for it
to be.&amp;#160; These genres do not combine easily, and what we are left with instead
is a plotline and a set of overlapping genres that provide Del Toro with a canvas
upon which he paints detailed images that could not make an appearance in any other
way.&amp;#160; Those details were, for me, well worth the price of admission.
&lt;/p&gt;
&lt;p&gt;
The big question is what Del Toro will do when he gets his hands on a real fantasy
property.&amp;#160; He is slated to direct the highly anticipated Hobbit movie, with Peter
Jackson producing.&amp;#160; There is, of course, what the movie ought to be -- a continuation
of the epic fantasy genre, done with the same accomplishment that Jackson achieved
with &lt;em&gt;The Lord of the Rings&lt;/em&gt;.&amp;#160; If &lt;em&gt;The Golden Army&lt;/em&gt; is any indication,
however, this is unlikely to be what we will get.&amp;#160; Del Toro's recent interviews
point to the same &lt;a href="http://www.salon.com/ent/audiofile/2006/10/12/conversations_toro/" target="_blank"&gt;conclusion&lt;/a&gt;:
&lt;/p&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I was never into heroic fantasy. At all. I don't like little guys and dragons, hairy
feet, hobbits -- I've never been into that at all. I don't like sword and sorcery,
I hate all that stuff.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;p&gt;
This is fine with me.&amp;#160; I've always been a fan of the &lt;a href="http://www.imdb.com/title/tt0077687/" target="_blank"&gt;Rankin&lt;/a&gt;/ &lt;a href="http://www.youtube.com/watch?v=XSHLGnexe-w" target="_blank"&gt;Bass&lt;/a&gt; cartoon
(with music by Glen Yarborough), and don't see any reason to try to improve upon it.&amp;#160;
Seeing Del Toro take another stab at twisting the genre to his own ends is well worth
waiting for.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=52537aa8-e9c0-49f6-824c-56c563e79df6" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/CommentView,guid,52537aa8-e9c0-49f6-824c-56c563e79df6.aspx</comments>
      <category>Recommended</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=9ff22913-04f2-41ce-919b-5adb5d6299ba</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,9ff22913-04f2-41ce-919b-5adb5d6299ba.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/CommentView,guid,9ff22913-04f2-41ce-919b-5adb5d6299ba.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=9ff22913-04f2-41ce-919b-5adb5d6299ba</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="162" alt="brokenkeys" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/TheDevilsTriad_C955/brokenkeys_3.jpg" width="244" border="0" />
        </p>
        <p>
According to tradition, the tritone was called the Devil's Chord or the <em>Diabolis
in Musica</em>, a sound so dissonant and so <em>puissant</em> it was believed to be
capable of raising the Lord of Hell himself.  For this reason, in it's irrationality,
the Roman Catholic Church banned the Devil's Triad, on pain of excommunication. 
Today, of course, bands such as <em>Metallica</em> and <em>Black Sabbath</em> 
use the tritone on a regular basis with no adverse effects.
</p>
        <p>
The irrational is a powerful force that may be harnessed, dear reader, by those willing
play on the fringes of reality.  Three magical phrases, irrational yet powerful
and well known to the practitioners of the dark arts, can be invoked by anyone who
desires to kill a technical project they dislike.  Today, dear reader, I will
teach you these three phrases.
</p>
        <p>
But first, a word about motivations.  According to Nietzsche, the driving force
behind modern man's desire for power is, <em>tout court</em>, resentment.  We
all resent the guy who comes in the middle of a software project and starts making
suggestions about how to improve it.  As the new guy, in turn, we resent the
old and crusty way things are done, as if the way things are done is the <em>only</em> way. 
Resentment, in other words, is the mother of invention when it comes to technology,
and we each, in our own way, embrace it as we strive toward a new tomorrow. 
In a perfect world, we may all act as the angels, but in the real world, we may occasionally
be forced to make deals <em>ex inferis</em>.  Which is not to recommend what
I am about to teach you.  I ask you, moreover, to use these techniques judiciously. 
One should not call upon the powers of the underworld lightly.  But should you
find yourself in a situation where rational discourse is no longer possible, and rhetorical
brute force is required, then these phrases may be of use to you.
</p>
        <p>
          <strong>1. It's too complex.  It's not maintainable.</strong>
        </p>
        <p>
This is a wonderful phrase.  It is universally applicable since any useful piece
of code will end up being complex, and one can never overemphasize the incompetence
of one's peers when discussing maintainability.  And with luminaries like <a href="http://www.joelonsoftware.com/items/2008/05/01.html" target="_blank">Joel
Spolsky</a> and <a href="http://www.codinghorror.com/blog/archives/001137.html" target="_blank">Jeff
Atwood</a> backing you, how can you go wrong?  If you want to kill any technology
-- WCF, WPF, .NET Remoting, 3-tier architecture -- just invoke this magic phrase and
it will wither away.
</p>
        <p>
          <strong>2. It's not scalable. </strong>
        </p>
        <p>
Amazingly enough, this diabolical mantra can be called upon without any evidence. 
No one will ever turn around and ask you to justify your claim -- be it with a load
tester or anything.  Simply say these magic words and your enemies will cower
before you.  Anything cool -- like reflection, say -- will cause a certain amount
of performance degradation.  This is normal of course.  In software there
are always tradeoffs, and exchanging performance for other advantages such as robustness
and decoupling are the norm.  Unless, of course, you make trade offs impossible. 
The magic phrase "It's not scalable" instantly makes any trade off seem
impossible.  It's very well, after all, to lose 5 milliseconds on a transaction,
but what happens when you have a gazillion transactions?!!!  That's 5 milli-gazillion
units of time that you have cost the company, and time is money!  That's 5 milli-gazillion
dollars you've cost the company!   By golly, this solution is not scalable!
</p>
        <p>
          <strong>3. It will push us beyond our deadline.</strong>
        </p>
        <p>
"The solution you have provided is all well and good, and I mean neither to question
your integrity nor your intelligence, but given the fact that it is not maintainable
and not scalable, I fear that trying to implement it will push us beyond our deadline." 
I've never worked on a project that wasn't "time sensitive" and rarely on
one that wasn't needed "yesterday".  There's no better way to kill
an idea, even when it comes out of  the mouth of someone who refuses to say definitively
when a project will in fact be completed, than to say that it will push <strong>us</strong> past <strong>our</strong> deadline. 
I've seen this used when determining which architecture to use.  I've even seen
it used in determining which textbox control to use.  If you ever find yourself
in a position where you have an idea that is competing with someone else's idea, you
can quickly sweep your adversary's idea aside by invoking this occult phrase: <em>It
will push us beyond our deadline</em>.
</p>
        <p>
Why are these magic phrases never tested?  Why are they impervious to standards
of verifiability traditionally expected in other fields?  The reason is simple. 
Software development is always seen, from the outside, as a kind of magic, and any
successful project has at its heart some secret sauce, some magic code, that makes
it all possible.
</p>
        <p>
This is the magic unicorn principle.  At the heart of any successful application
stands a magic unicorn.  You feed it data, no matter how disorganized or moldy,
and it comes out the other end a rainbow.  Data in.  Rainbows out. 
It's beautiful in its simplicity.
</p>
        <p>
In my next post, I will demonstrate how to build a DIRO magic assembly.  Stay
tuned ...
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=9ff22913-04f2-41ce-919b-5adb5d6299ba" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>The Devil's Triad</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/PermaLink,guid,9ff22913-04f2-41ce-919b-5adb5d6299ba.aspx</guid>
      <link>http://www.imaginativeuniversal.com/TheDevilsTriad.aspx</link>
      <pubDate>Wed, 09 Jul 2008 23:51:59 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="162" alt="brokenkeys" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/TheDevilsTriad_C955/brokenkeys_3.jpg" width="244" border="0" /&gt; 
&lt;/p&gt;
&lt;p&gt;
According to tradition, the tritone was called the Devil's Chord or the &lt;em&gt;Diabolis
in Musica&lt;/em&gt;, a sound so dissonant and so &lt;em&gt;puissant&lt;/em&gt; it was believed to be
capable of raising the Lord of Hell himself.&amp;#160; For this reason, in it's irrationality,
the Roman Catholic Church banned the Devil's Triad, on pain of excommunication.&amp;#160;
Today, of course, bands such as &lt;em&gt;Metallica&lt;/em&gt; and &lt;em&gt;Black Sabbath&lt;/em&gt;&amp;#160;
use the tritone on a regular basis with no adverse effects.
&lt;/p&gt;
&lt;p&gt;
The irrational is a powerful force that may be harnessed, dear reader, by those willing
play on the fringes of reality.&amp;#160; Three magical phrases, irrational yet powerful
and well known to the practitioners of the dark arts, can be invoked by anyone who
desires to kill a technical project they dislike.&amp;#160; Today, dear reader, I will
teach you these three phrases.
&lt;/p&gt;
&lt;p&gt;
But first, a word about motivations.&amp;#160; According to Nietzsche, the driving force
behind modern man's desire for power is, &lt;em&gt;tout court&lt;/em&gt;, resentment.&amp;#160; We
all resent the guy who comes in the middle of a software project and starts making
suggestions about how to improve it.&amp;#160; As the new guy, in turn, we resent the
old and crusty way things are done, as if the way things are done is the &lt;em&gt;only&lt;/em&gt; way.&amp;#160;
Resentment, in other words, is the mother of invention when it comes to technology,
and we each, in our own way, embrace it as we strive toward a new tomorrow.&amp;#160;
In a perfect world, we may all act as the angels, but in the real world, we may occasionally
be forced to make deals &lt;em&gt;ex inferis&lt;/em&gt;.&amp;#160; Which is not to recommend what
I am about to teach you.&amp;#160; I ask you, moreover, to use these techniques judiciously.&amp;#160;
One should not call upon the powers of the underworld lightly.&amp;#160; But should you
find yourself in a situation where rational discourse is no longer possible, and rhetorical
brute force is required, then these phrases may be of use to you.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;1. It's too complex.&amp;#160; It's not maintainable.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
This is a wonderful phrase.&amp;#160; It is universally applicable since any useful piece
of code will end up being complex, and one can never overemphasize the incompetence
of one's peers when discussing maintainability.&amp;#160; And with luminaries like &lt;a href="http://www.joelonsoftware.com/items/2008/05/01.html" target="_blank"&gt;Joel
Spolsky&lt;/a&gt; and &lt;a href="http://www.codinghorror.com/blog/archives/001137.html" target="_blank"&gt;Jeff
Atwood&lt;/a&gt; backing you, how can you go wrong?&amp;#160; If you want to kill any technology
-- WCF, WPF, .NET Remoting, 3-tier architecture -- just invoke this magic phrase and
it will wither away.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;2. It's not scalable. &lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Amazingly enough, this diabolical mantra can be called upon without any evidence.&amp;#160;
No one will ever turn around and ask you to justify your claim -- be it with a load
tester or anything.&amp;#160; Simply say these magic words and your enemies will cower
before you.&amp;#160; Anything cool -- like reflection, say -- will cause a certain amount
of performance degradation.&amp;#160; This is normal of course.&amp;#160; In software there
are always tradeoffs, and exchanging performance for other advantages such as robustness
and decoupling are the norm.&amp;#160; Unless, of course, you make trade offs impossible.&amp;#160;
The magic phrase &amp;quot;It's not scalable&amp;quot; instantly makes any trade off seem
impossible.&amp;#160; It's very well, after all, to lose 5 milliseconds on a transaction,
but what happens when you have a gazillion transactions?!!!&amp;#160; That's 5 milli-gazillion
units of time that you have cost the company, and time is money!&amp;#160; That's 5 milli-gazillion
dollars you've cost the company!&amp;#160;&amp;#160; By golly, this solution is not scalable!
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;3. It will push us beyond our deadline.&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;quot;The solution you have provided is all well and good, and I mean neither to question
your integrity nor your intelligence, but given the fact that it is not maintainable
and not scalable, I fear that trying to implement it will push us beyond our deadline.&amp;quot;&amp;#160;
I've never worked on a project that wasn't &amp;quot;time sensitive&amp;quot; and rarely on
one that wasn't needed &amp;quot;yesterday&amp;quot;.&amp;#160; There's no better way to kill
an idea, even when it comes out of&amp;#160; the mouth of someone who refuses to say definitively
when a project will in fact be completed, than to say that it will push &lt;strong&gt;us&lt;/strong&gt; past &lt;strong&gt;our&lt;/strong&gt; deadline.&amp;#160;
I've seen this used when determining which architecture to use.&amp;#160; I've even seen
it used in determining which textbox control to use.&amp;#160; If you ever find yourself
in a position where you have an idea that is competing with someone else's idea, you
can quickly sweep your adversary's idea aside by invoking this occult phrase: &lt;em&gt;It
will push us beyond our deadline&lt;/em&gt;.
&lt;/p&gt;
&lt;p&gt;
Why are these magic phrases never tested?&amp;#160; Why are they impervious to standards
of verifiability traditionally expected in other fields?&amp;#160; The reason is simple.&amp;#160;
Software development is always seen, from the outside, as a kind of magic, and any
successful project has at its heart some secret sauce, some magic code, that makes
it all possible.
&lt;/p&gt;
&lt;p&gt;
This is the magic unicorn principle.&amp;#160; At the heart of any successful application
stands a magic unicorn.&amp;#160; You feed it data, no matter how disorganized or moldy,
and it comes out the other end a rainbow.&amp;#160; Data in.&amp;#160; Rainbows out.&amp;#160;
It's beautiful in its simplicity.
&lt;/p&gt;
&lt;p&gt;
In my next post, I will demonstrate how to build a DIRO magic assembly.&amp;#160; Stay
tuned ...
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=9ff22913-04f2-41ce-919b-5adb5d6299ba" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/CommentView,guid,9ff22913-04f2-41ce-919b-5adb5d6299ba.aspx</comments>
      <category>Memes</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=c2585fdf-a1af-411e-9985-e5f6761af9a8</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,c2585fdf-a1af-411e-9985-e5f6761af9a8.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/CommentView,guid,c2585fdf-a1af-411e-9985-e5f6761af9a8.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=c2585fdf-a1af-411e-9985-e5f6761af9a8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="blackstone" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/AjaxAutoCompleteExtenderwithWCF_11C1B/blackstone_3.jpg" width="244" border="0" />
        </p>
        <p>
The problem with conjuring tricks is that they lose practically all their glamour
once you find out how they are done.  It's very cool to see David Blaine walk
down the street, do a few passes over his hand, and resurrect a fly which proceeds
to flee.  It's rather disappointing to do a google search and discover that in
order to prepare for this trick, the first requirement is that you freeze a fly.
</p>
        <p>
My trick is to make an <a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx" target="_blank">autocomplete</a> extender
from the Ajax Control Toolkit call a WCF service instead of an asmx service. 
For this recipe, I assume that you are already familiar with the autocomplete extender,
and that you are using Visual Studio 2008.  I warn you in advance -- my trick
disappoints.  It is so trivially easy that, once the technique spreads, it is
very unlikely to impress your colleagues at work, much less get you a date with a <a href="http://search.live.com/images/results.aspx?q=david+copperfield+claudia+schiffer&amp;form=QBIR" target="_blank">supermodel</a>.
</p>
        <p>
Start by creating a new web project called AutocompleteWCF.  Add a reference
to the <em>AjaxControlToolkit.dll</em>.  Open up the default aspx page that is
generated with your project, and add the following code to:
</p>
        <p>
          <span class="kwrd">
          </span>
        </p>
        <!-- code formatted by http://manoli.net/csharpformat/ -->
        <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }</style>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">form</span>
          <span class="attr">id</span>
          <span class="kwrd">="form1"</span>
          <span class="attr">runat</span>
          <span class="kwrd">="server"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">asp:ScriptManager</span>
          <span class="attr">ID</span>
          <span class="kwrd">="ScriptManager1"</span>
          <span class="attr">runat</span>
          <span class="kwrd">="server"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">asp:ScriptManager</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">div</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">asp:TextBox</span>
          <span class="attr">runat</span>
          <span class="kwrd">="server"</span>
          <span class="attr">ID</span>
          <span class="kwrd">="myTextBox"</span>
          <span class="attr">Width</span>
          <span class="kwrd">="300"</span>
          <span class="attr">autocomplete</span>
          <span class="kwrd">="off"</span>
          <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">ajaxToolkit:AutoCompleteExtender</span>
          <span class="attr">runat</span>
          <span class="kwrd">="server"</span>
          <span class="attr">BehaviorID</span>
          <span class="kwrd">="AutoCompleteEx"</span>
          <span class="attr">ID</span>
          <span class="kwrd">="autoComplete1"</span>
          <span class="attr">TargetControlID</span>
          <span class="kwrd">="myTextBox"</span>
          <span class="attr">ServicePath</span>
          <span class="kwrd">="Autocomplete.svc"</span>
          <span class="attr">ServiceMethod</span>
          <span class="kwrd">="GetCompletionList"</span>
          <span class="attr">MinimumPrefixLength</span>
          <span class="kwrd">="0"</span>
          <span class="attr">CompletionInterval</span>
          <span class="kwrd">="1000"</span>
          <span class="attr">EnableCaching</span>
          <span class="kwrd">="true"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">ajaxToolkit:AutoCompleteExtender</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">div</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;/</span>
          <span class="html">form</span>
          <span class="kwrd">&gt;</span>
        </pre>
        <p>
 
</p>
        <p>
This is the standard demo code that is shipped with the Ajax Control Toolkit Sample
Website.  I've simplified it a bit by removing the animations.  The only
significant change I've made is to change the ServicePath from <em>Autocomplete.asmx</em> to <em>Autocomplete.svc</em>,
the latter being the extension for a WCF service.
</p>
        <p>
The next step is to create our service and add a GetCompletionList operation to it. 
The easiest way to do this is to go to Add | New Item and just select the <em>Ajax-enabled
WCF Service</em> item template, but this would be so easy that it is hardly worth
doing.
</p>
        <p>
Instead, create a new WCF Service using the <em>WCF Service </em>Item Template and
call it Autocomplete.svc.  Visual Studio will automatically generate a service
interface for you.  Delete the interface.  We don't need it.  (To be
more specific, I don't know how to get this to work with an interface, so I'm just
going to ignore that it is possible.)
</p>
        <p>
Again, I am going to rip off the ACT sample app and just borrow the code from their
webservice and place it in our WCF service.  The WCF service class (<em>Autocomplete.svc.cs</em>)
will look like this:
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; color: black; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <p style="margin: 0px">
    [<span style="color: #2b91af">ServiceContract</span>(Namespace
= <span style="color: #a31515">""</span>)]
</p>
          <p style="margin: 0px">
    [<span style="color: #2b91af">AspNetCompatibilityRequirements</span>(RequirementsMode
= <span style="color: #2b91af">AspNetCompatibilityRequirementsMode</span>.Allowed)]
</p>
          <p style="margin: 0px">
    <span style="color: blue">public</span><span style="color: blue">class</span><span style="color: #2b91af">Autocomplete</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        [<span style="color: #2b91af">OperationContract</span>]
</p>
          <p style="margin: 0px">
        <span style="color: blue">public</span><span style="color: blue">string</span>[]
GetCompletionList(<span style="color: blue">string</span> prefixText, <span style="color: blue">int</span> count)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: blue">if</span> (count
== 0)
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
               
count = 10;
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">if</span> (prefixText.Equals(<span style="color: #a31515">"xyz"</span>))
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: blue">return</span><span style="color: blue">new</span><span style="color: blue">string</span>[0];
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">Random</span> random
= <span style="color: blue">new</span><span style="color: #2b91af">Random</span>();
</p>
          <p style="margin: 0px">
            <span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;
items = <span style="color: blue">new</span><span style="color: #2b91af">List</span>&lt;<span style="color: blue">string</span>&gt;(count);
</p>
          <p style="margin: 0px">
            <span style="color: blue">for</span> (<span style="color: blue">int</span> i
= 0; i &lt; count; i++)
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: blue">char</span> c1
= (<span style="color: blue">char</span>)random.Next(65, 90);
</p>
          <p style="margin: 0px">
                <span style="color: blue">char</span> c2
= (<span style="color: blue">char</span>)random.Next(97, 122);
</p>
          <p style="margin: 0px">
                <span style="color: blue">char</span> c3
= (<span style="color: blue">char</span>)random.Next(97, 122);
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
               
items.Add(prefixText + c1 + c2 + c3);
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: blue">return</span> items.ToArray();
</p>
          <p style="margin: 0px">
        }
</p>
        </div>
        <p>
 
</p>
        <p>
A few things worth noting:
</p>
        <p>
1. Autocomplete does not implement the IAutocomplete Interface.  Even though
this is generated automatically, with the WCF Service item template, you should remove
it.
</p>
        <p>
2. The service contract has a blank Namespace explicitly declared.  
</p>
        <p>
3. The <em>ASPNetCompatibilityRequirements</em> attribute must be added to our class.
</p>
        <p>
 
</p>
        <p>
This takes care of the code that calls the WCF service, as well as the service itself. 
We now have rig up the web.config file.  If you've been working with WCF for
any length of time, then you know that this is where the problems usually occur. 
Fortunately, the configuration is fairly simple.  You need to set up an endpoint
behavior for your service that enables web scripting (much the way asmx web services
must be decorated with the <em>ScriptService</em> attribute in order to be called
from client-script).  You also will need to turn AspNetCompatibilityEanbled on
for the hosting environment.
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; color: black; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <p style="margin: 0px">
            <span style="color: blue">    &lt;</span>
            <span style="color: #a31515">system.serviceModel</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">        &lt;</span>
            <span style="color: #a31515">behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">           
&lt;</span>
            <span style="color: #a31515">endpointBehaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">               
&lt;</span>
            <span style="color: #a31515">behavior</span>
            <span style="color: blue">
            </span>
            <span style="color: red">name</span>
            <span style="color: blue">=</span>"<span style="color: blue">AjaxBehavior</span>"<span style="color: blue">&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: blue">                   
&lt;</span>
            <span style="color: #a31515">enableWebScript</span>
            <span style="color: blue">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">               
&lt;/</span>
            <span style="color: #a31515">behavior</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">           
&lt;/</span>
            <span style="color: #a31515">endpointBehaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">        &lt;/</span>
            <span style="color: #a31515">behaviors</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">        &lt;</span>
            <span style="color: #a31515">serviceHostingEnvironment</span>
            <span style="color: blue">
            </span>
            <span style="color: red">aspNetCompatibilityEnabled</span>
            <span style="color: blue">=</span>"<span style="color: blue">true</span>"<span style="color: blue">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: blue">        &lt;</span>
            <span style="color: #a31515">services</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">           
&lt;</span>
            <span style="color: #a31515">service</span>
            <span style="color: blue">
            </span>
            <span style="color: red">name</span>
            <span style="color: blue">=</span>"<span style="color: blue">AutocompleteWCF.Autocomplete</span>"<span style="color: blue">&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: blue">               
&lt;</span>
            <span style="color: #a31515">endpoint</span>
            <span style="color: blue">
            </span>
            <span style="color: red">address</span>
            <span style="color: blue">=</span>""<span style="color: blue"></span><span style="color: red">behaviorConfiguration</span><span style="color: blue">=</span>"<span style="color: blue">AjaxBehavior</span>"<span style="color: blue"></span><span style="color: red">binding</span><span style="color: blue">=</span>"<span style="color: blue">webHttpBinding</span>"<span style="color: blue"></span><span style="color: red">contract</span><span style="color: blue">=</span>"<span style="color: blue">AutocompleteWCF.Autocomplete</span>"<span style="color: blue">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: blue">           
&lt;/</span>
            <span style="color: #a31515">service</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">        &lt;/</span>
            <span style="color: #a31515">services</span>
            <span style="color: blue">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: blue">    &lt;/</span>
            <span style="color: #a31515">system.serviceModel</span>
            <span style="color: blue">&gt;</span>
          </p>
        </div>
        <p>
 
</p>
        <p>
And that is all you need to do make the AutoComplete Extender work with a WCF service
instead of an asmx web service.  I told you it would be unimpressive.
</p>
        <p>
Of course, using a WCF service for Ajax has all the limitations that using an asmx
file for Ajax did.  First of all, you can't call a service that is in a different
domain than the page which hosts your client-code.  This is a security feature,
to prevent malicious code from redirecting your harmless javascript to something nasty
on the world wide web.
</p>
        <p>
Second, you can't call just any service from your client-side code.  The service
must be explicitly marked as something that can be called from client code. 
In asmx web services, we used ScriptService for this.  In WCF services, we similarly
use EnableWebScript binding property. 
</p>
        <p>
Now I feel like I've wasted your time, so here's a YouTube <a href="http://www.youtube.com/watch?v=s7Wvk-CVN-Y" target="_blank">video</a> of
David Blaine to make up for it.  And remember, David Blaine is to Chris Angel
what Daisy Duke was to Alexis Carrington.  It's an existential thing, and at
some point, you've just got to pick sides and stay put in a way that will determine
who you are for the rest of your life.
</p>
        <p>
Are you a David Blaine/Daisy Duke kind of person or are you a Chris Angel/Alexis Carrington
sort?  Do some soul searching and please let me know what you learn about yourself.
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=c2585fdf-a1af-411e-9985-e5f6761af9a8" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>Ajax AutoComplete Extender with WCF</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/PermaLink,guid,c2585fdf-a1af-411e-9985-e5f6761af9a8.aspx</guid>
      <link>http://www.imaginativeuniversal.com/AjaxAutoCompleteExtenderWithWCF.aspx</link>
      <pubDate>Mon, 07 Jul 2008 07:23:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="blackstone" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/AjaxAutoCompleteExtenderwithWCF_11C1B/blackstone_3.jpg" width="244" border="0" /&gt; 
&lt;/p&gt;
&lt;p&gt;
The problem with conjuring tricks is that they lose practically all their glamour
once you find out how they are done.&amp;#160; It's very cool to see David Blaine walk
down the street, do a few passes over his hand, and resurrect a fly which proceeds
to flee.&amp;#160; It's rather disappointing to do a google search and discover that in
order to prepare for this trick, the first requirement is that you freeze a fly.
&lt;/p&gt;
&lt;p&gt;
My trick is to make an &lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx" target="_blank"&gt;autocomplete&lt;/a&gt; extender
from the Ajax Control Toolkit call a WCF service instead of an asmx service.&amp;#160;
For this recipe, I assume that you are already familiar with the autocomplete extender,
and that you are using Visual Studio 2008.&amp;#160; I warn you in advance -- my trick
disappoints.&amp;#160; It is so trivially easy that, once the technique spreads, it is
very unlikely to impress your colleagues at work, much less get you a date with a &lt;a href="http://search.live.com/images/results.aspx?q=david+copperfield+claudia+schiffer&amp;amp;form=QBIR" target="_blank"&gt;supermodel&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Start by creating a new web project called AutocompleteWCF.&amp;#160; Add a reference
to the &lt;em&gt;AjaxControlToolkit.dll&lt;/em&gt;.&amp;#160; Open up the default aspx page that is
generated with your project, and add the following code to:
&lt;/p&gt;
&lt;p&gt;
&lt;span class="kwrd"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}

.csharpcode pre { margin: 0em; }

.csharpcode .rem { color: #008000; }

.csharpcode .kwrd { color: #0000ff; }

.csharpcode .str { color: #006080; }

.csharpcode .op { color: #0000c0; }

.csharpcode .preproc { color: #cc6633; }

.csharpcode .asp { background-color: #ffff00; }

.csharpcode .html { color: #800000; }

.csharpcode .attr { color: #ff0000; }

.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}

.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;pre class="csharpcode"&gt;    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ScriptManager1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:ScriptManager&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:TextBox&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;myTextBox&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Width&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;300&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;autocomplete&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;off&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AutoCompleteExtender&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;BehaviorID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;AutoCompleteEx&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;autoComplete1&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;TargetControlID&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;myTextBox&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ServicePath&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Autocomplete.svc&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;ServiceMethod&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;GetCompletionList&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;MinimumPrefixLength&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;CompletionInterval&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1000&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;EnableCaching&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ajaxToolkit:AutoCompleteExtender&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
This is the standard demo code that is shipped with the Ajax Control Toolkit Sample
Website.&amp;#160; I've simplified it a bit by removing the animations.&amp;#160; The only
significant change I've made is to change the ServicePath from &lt;em&gt;Autocomplete.asmx&lt;/em&gt; to &lt;em&gt;Autocomplete.svc&lt;/em&gt;,
the latter being the extension for a WCF service.
&lt;/p&gt;
&lt;p&gt;
The next step is to create our service and add a GetCompletionList operation to it.&amp;#160;
The easiest way to do this is to go to Add | New Item and just select the &lt;em&gt;Ajax-enabled
WCF Service&lt;/em&gt; item template, but this would be so easy that it is hardly worth
doing.
&lt;/p&gt;
&lt;p&gt;
Instead, create a new WCF Service using the &lt;em&gt;WCF Service &lt;/em&gt;Item Template and
call it Autocomplete.svc.&amp;#160; Visual Studio will automatically generate a service
interface for you.&amp;#160; Delete the interface.&amp;#160; We don't need it.&amp;#160; (To be
more specific, I don't know how to get this to work with an interface, so I'm just
going to ignore that it is possible.)
&lt;/p&gt;
&lt;p&gt;
Again, I am going to rip off the ACT sample app and just borrow the code from their
webservice and place it in our WCF service.&amp;#160; The WCF service class (&lt;em&gt;Autocomplete.svc.cs&lt;/em&gt;)
will look like this:
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; color: black; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;ServiceContract&lt;/span&gt;(Namespace
= &lt;span style="color: #a31515"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;AspNetCompatibilityRequirements&lt;/span&gt;(RequirementsMode
= &lt;span style="color: #2b91af"&gt;AspNetCompatibilityRequirementsMode&lt;/span&gt;.Allowed)]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Autocomplete&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;OperationContract&lt;/span&gt;]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;[]
GetCompletionList(&lt;span style="color: blue"&gt;string&lt;/span&gt; prefixText, &lt;span style="color: blue"&gt;int&lt;/span&gt; count)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (count
== 0)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
count = 10;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (prefixText.Equals(&lt;span style="color: #a31515"&gt;&amp;quot;xyz&amp;quot;&lt;/span&gt;))
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: blue"&gt;string&lt;/span&gt;[0];
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Random&lt;/span&gt; random
= &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;Random&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;
items = &lt;span style="color: blue"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;(count);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;for&lt;/span&gt; (&lt;span style="color: blue"&gt;int&lt;/span&gt; i
= 0; i &amp;lt; count; i++)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;char&lt;/span&gt; c1
= (&lt;span style="color: blue"&gt;char&lt;/span&gt;)random.Next(65, 90);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;char&lt;/span&gt; c2
= (&lt;span style="color: blue"&gt;char&lt;/span&gt;)random.Next(97, 122);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;char&lt;/span&gt; c3
= (&lt;span style="color: blue"&gt;char&lt;/span&gt;)random.Next(97, 122);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
items.Add(prefixText + c1 + c2 + c3);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; items.ToArray();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
A few things worth noting:
&lt;/p&gt;
&lt;p&gt;
1. Autocomplete does not implement the IAutocomplete Interface.&amp;#160; Even though
this is generated automatically, with the WCF Service item template, you should remove
it.
&lt;/p&gt;
&lt;p&gt;
2. The service contract has a blank Namespace explicitly declared.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
3. The &lt;em&gt;ASPNetCompatibilityRequirements&lt;/em&gt; attribute must be added to our class.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
This takes care of the code that calls the WCF service, as well as the service itself.&amp;#160;
We now have rig up the web.config file.&amp;#160; If you've been working with WCF for
any length of time, then you know that this is where the problems usually occur.&amp;#160;
Fortunately, the configuration is fairly simple.&amp;#160; You need to set up an endpoint
behavior for your service that enables web scripting (much the way asmx web services
must be decorated with the &lt;em&gt;ScriptService&lt;/em&gt; attribute in order to be called
from client-script).&amp;#160; You also will need to turn AspNetCompatibilityEanbled on
for the hosting environment.
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; color: black; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AjaxBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;enableWebScript&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behavior&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpointBehaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;behaviors&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;serviceHostingEnvironment&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;aspNetCompatibilityEnabled&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;true&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutocompleteWCF.Autocomplete&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;endpoint&lt;/span&gt;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;address&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AjaxBehavior&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;binding&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;webHttpBinding&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;contract&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;AutocompleteWCF.Autocomplete&lt;/span&gt;&amp;quot;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;service&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;services&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;system.serviceModel&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
And that is all you need to do make the AutoComplete Extender work with a WCF service
instead of an asmx web service.&amp;#160; I told you it would be unimpressive.
&lt;/p&gt;
&lt;p&gt;
Of course, using a WCF service for Ajax has all the limitations that using an asmx
file for Ajax did.&amp;#160; First of all, you can't call a service that is in a different
domain than the page which hosts your client-code.&amp;#160; This is a security feature,
to prevent malicious code from redirecting your harmless javascript to something nasty
on the world wide web.
&lt;/p&gt;
&lt;p&gt;
Second, you can't call just any service from your client-side code.&amp;#160; The service
must be explicitly marked as something that can be called from client code.&amp;#160;
In asmx web services, we used ScriptService for this.&amp;#160; In WCF services, we similarly
use EnableWebScript binding property. 
&lt;/p&gt;
&lt;p&gt;
Now I feel like I've wasted your time, so here's a YouTube &lt;a href="http://www.youtube.com/watch?v=s7Wvk-CVN-Y" target="_blank"&gt;video&lt;/a&gt; of
David Blaine to make up for it.&amp;#160; And remember, David Blaine is to Chris Angel
what Daisy Duke was to Alexis Carrington.&amp;#160; It's an existential thing, and at
some point, you've just got to pick sides and stay put in a way that will determine
who you are for the rest of your life.
&lt;/p&gt;
&lt;p&gt;
Are you a David Blaine/Daisy Duke kind of person or are you a Chris Angel/Alexis Carrington
sort?&amp;#160; Do some soul searching and please let me know what you learn about yourself.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=c2585fdf-a1af-411e-9985-e5f6761af9a8" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/CommentView,guid,c2585fdf-a1af-411e-9985-e5f6761af9a8.aspx</comments>
      <category>Ajax</category>
      <category>Recipe</category>
      <category>WCF</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=4a7d6cd8-7e8a-4a25-8f51-faed44222b9e</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,4a7d6cd8-7e8a-4a25-8f51-faed44222b9e.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:comment>http://www.imaginativeuniversal.com/CommentView,guid,4a7d6cd8-7e8a-4a25-8f51-faed44222b9e.aspx</wfw:comment>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4a7d6cd8-7e8a-4a25-8f51-faed44222b9e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="177" alt="carnival" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/TheSelfCorrectingProcess_F0F1/carnival_3.jpg" width="244" border="0" />
        </p>
        <p>
Science is all about making proposals that can be tested (especially after Karl Popper's
formulation of the <a href="http://plato.stanford.edu/entries/popper/" target="_blank">Falsifiability</a> Criterion),
and then undergoing the experience of having that proposal rejected.  This is
the essence of any successful process -- not that it eliminates errors altogether,
but rather that it is able to make corrections despite these errors so that the target
need never shift.
</p>
        <p>
Professor Alain Connes recently gave his opinion of Xin-Jing Li's proof for the <a href="http://primes.utm.edu/notes/rh.html" target="_blank">Riemann
Hypothesis</a> -- a proof which relies in part on Professor Connes' work -- 
in a blog <a href="http://noncommutativegeometry.blogspot.com/2008/06/fun-day-two.html?showComment=1215071400000#c8876982000013974667" target="_blank">comment</a> to
his own blog (by way of Slashdot):
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
I dont like to be too negative in my comments. Li's paper is an attempt to prove a
variant of the global trace formula of my paper in Selecta. The "proof"
is that of Theorem 7.3 page 29 in Li's paper, but I stopped reading it when I saw
that he is extending the test function h from ideles to adeles by 0 outside ideles
and then using Fourier transform (see page 31). This cannot work and ideles form a
set of measure 0 inside adeles (unlike what happens when one only deals with finitely
many places).
</p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
Self-correcting extends to other professions, as well.  Scott Hanselman recently <a href="http://www.hanselman.com/blog/BackToBasicsDoNamespaceUsingDirectivesAffectAssemblyLoading.aspx" target="_blank">posted</a> to
correct an opinion he discovered <a href="http://blogs.msdn.com/sourceanalysis/pages/sa1200-usingdirectivesmustbeplacedwithinnamespace.aspx" target="_blank">here</a> which
he felt required some testing.  Through his own tests, he discovered that nesting
a using directive inside a  namespace declaration provides no apparent performance
benefit over placing it outside the namespace.
</p>
        <p>
This leads him to draw these important lesson:
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <ul>
            <li>
Don't believe everything you read, even on a Microsoft Blog. 
</li>
            <li>
Don't believe this blog, either! 
</li>
            <li>
Decide for yourself with experiments if you need a tiebreaker! 
</li>
          </ul>
        </div>
        <p>
 
</p>
        <p>
The sentiment recalls Ralph Waldo Emerson's memorable words:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
There is a time in every man's education when he arrives at the conviction that envy
is ignorance; that imitation is suicide; that he must take himself for better, for
worse, as his portion; that though the wide universe is full of good, no kernel of
nourishing corn can come to him but through his toil bestowed on that plot of ground
which is given to him to till. The power which resides in him is new in nature, and
none but he knows what that is which he can do, nor does he know until he has tried.
</p>
            <p>
...
</p>
            <p>
Trust thyself: every heart vibrates to that iron string. Accept the place the divine
providence has found for you, the society of your contemporaries, the connection of
events.
</p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
A similar sentiment is expressed in Hobbes' Leviathan, though with a wicked edge:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
And as to the faculties of the mind, setting aside the arts grounded upon words, and
especially that skill of proceeding upon general and infallible rules, called science,
which very few have and but in few things, as being not a native faculty born with
us, nor attained, as prudence, while we look after somewhat else, I find yet a greater
equality amongst men than that of strength. For prudence is but experience, which
equal time equally bestows on all men in those things they equally apply themselves
unto. That which may perhaps make such equality incredible is but a vain conceit of
one's own wisdom, which almost all men think they have in a greater degree than the
vulgar; that is, than all men but themselves, and a few others, whom by fame, or for
concurring with themselves, they approve. <em><font color="#004080"><strong>For such
is the nature of men that howsoever they may acknowledge many others to be more witty,
or more eloquent or more learned, yet they will hardly believe there be many so wise
as themselves</strong>;</font></em> for they see their own wit at hand, and other
men's at a distance. <em><strong><font color="#004080">But this proveth rather that
men are in that point equal, than unequal. For there is not ordinarily a greater sign
of the equal distribution of anything than that every man is contented with his share.</font></strong> [emphasis
mine]</em></p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
We find it again expressed in Descartes' <i>Discours de la mÃ©thode</i>.
Descartes, it might be remembered, occasionally exchanged letters with Hobbes:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
              <em>Le bon sens est la chose du monde la mieux partagée; car chacun pense en
être si bien pourvu, que ceux même qui sont les plus difficiles à contenter
en toute autre chose n'ont point coutume d'en désirer plus qu'ils en ont.</em>
            </p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
Both Hobbes and Descartes formulate their defense of common sense somewhat ironically. 
In a recent post, Steve Yegge takes out the irony (or perhaps takes out the kernel
of truth and leaves nothing but the irony) in his argument against Joel Spolsky's
widely aknowledged <a href="http://www.joelonsoftware.com/articles/fog0000000073.html" target="_blank">criteria</a> for
a desirable employee: "smart, and gets things done."
</p>
        <p>
According to <a href="http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html" target="_blank">Yegge</a>,
the crux of the problem is this:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
Unfortunately, <em>smart</em> is a generic enough concept that pretty much everyone
in the world thinks [he's] smart.
</p>
            <p>
...
</p>
            <p>
So looking for <b>Smart</b> is a bit problematic, since we aren't smart enough to
distinguish it from B.S. The best we can do is find people who we <em>think</em> are
smart because they're a bit like us.
</p>
            <p>
...
</p>
            <p>
So, like, what kind of people is this <b>Smart, and Gets Things Done</b> adage actually
hiring?
</p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
And yet the self-correcting process continues, on the principle that we are all smart
enough, collectively, to solve our problems in the aggregate, even if we can't solve
them as individuals.
</p>
        <p>
Presidential candidate Barack Obama recently held a news conference to correct a misunderstanding
he had made a few hours earlier about his stance on the Iraq War.  According
to <a href="http://www.cnn.com/2008/POLITICS/07/04/campaign.wrap/" target="_blank">CNN</a>:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
Obama on Thursday denied that he's shying away from his proposed 16-month phased withdrawal
of all combat troops from Iraq, calling it "pure speculation" and adding
that his "position has not changed." 
</p>
            <p>
However, he told reporters questioning his stance that he will "continue to refine"
his policies as warranted.
</p>
            <p>
His comments prompted the Republican National Committee to put out an e-mail saying
the presumed Democratic nominee was backing away from his position on withdrawal.
</p>
            <p>
Obama called a second news conference later Thursday to reiterate that he is not changing
his position.
</p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
This is, of course, merely a blip in the history of self-correction.  A more
significant one can be found in <a href="http://www.iep.utm.edu/b/bakhtin.htm" target="_blank">Bakhtin's</a><a href="http://en.wikipedia.org/wiki/Bakhtin" target="_blank">attempt</a> to <a href="http://www.amazon.com/Rabelais-His-World-Mikhail-Bakhtin/dp/0253203414" target="_blank">interpret</a> the <a href="http://artemis.austincollege.edu/acad/english/bbarrie/shakespeare/bakhtin_rab.html" target="_blank">works</a> of <a href="http://www.gutenberg.org/files/1200/1200.txt" target="_blank">Rabelais</a>,
and to demonstrate (convincingly) that everyone before him misunderstood the father
of Gargantua.  
</p>
        <p>
Bakhtin's analysis of Rabelais in turn brought to light one of the great discoveries
of his career: The Carnival -- though a colleague once found an earlier reference
to the concept in one of Ernst Cassirer's works.  Against the notion of a careful
and steady self-correcting mechanism in history, Bakhtin introduced the metaphor of
the Medieval Carnival:
</p>
        <p>
 
</p>
        <div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new">
          <blockquote>
            <p>
The essential principle of grotesque realism is degradation, that is, the lowering
of all that is high, spiritual, ideal, abstract; it is a transfer to the material
level, to the sphere of earth and body in their indissoluble unity.
</p>
            <p>
...
</p>
            <p>
Degradation and debasement of the higher do not have a formal and relative character
in grotesque realism. "Upward" and "downward" have here an absolute
and strictly topographical meaning....Earth is an element that devours, swallows up
(the grave, the womb) and at the same time an element of birth, of renascence (the
maternal breasts)....Degradation digs a bodily grave for a new birth....To degrade
an object does not imply merely hurling it into the void of nonexistence, into absolute
destruction, but to hurl it down to the reproductive lower stratum, the zone in which
conception and a new birth take place.
</p>
          </blockquote>
        </div>
        <p>
 
</p>
        <p>
The Carnival serves to correct inequalities and resentments in society and its subcultures
not by setting it upon a surer footing, but rather by affording us an opportunity
to air our grievances publicly in a controlled ceremony which allows society and its
hierarchical institutions to continue as they are.  It is a release, rather than
an adjustment.  A pot party at a <a href="http://www.woodstock69.com/wsrprnt1.htm" target="_blank">rock
festival</a> rather than a <a href="http://www.cooper.edu/humanities/classes/coreclasses/hss3/g_sorel.html" target="_blank">general
strike</a>.
</p>
        <p>
As for the Internet, it is sometimes hard to say what is actually occurring in the
back-and-forth that occurs between various blogs.  Have we actually harnessed
the wisdom of crowds and created a self-correcting process that responds more rapidly
to intellectual propositions, nudging them over a very short time to the correct solution,
or have we in fact recreated the Medieval <a href="http://www.earlymodernweb.org.uk/emn/index.php/archives/2004/08/carnival-and-the-carnivalesque/" target="_blank">Carnival</a>,
a massive gathering of people in one location which breaks down the normal distinctions
between wisdom and folly, knowledge and error, competence and foolhardiness?  
</p>
        <img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=4a7d6cd8-7e8a-4a25-8f51-faed44222b9e" />
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.newtelligence.com">newtelligence AG</a>. 
</body>
      <title>The Self-Correcting Process</title>
      <guid isPermaLink="false">http://www.imaginativeuniversal.com/PermaLink,guid,4a7d6cd8-7e8a-4a25-8f51-faed44222b9e.aspx</guid>
      <link>http://www.imaginativeuniversal.com/TheSelfCorrectingProcess.aspx</link>
      <pubDate>Sun, 06 Jul 2008 05:26:15 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="177" alt="carnival" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/TheSelfCorrectingProcess_F0F1/carnival_3.jpg" width="244" border="0" /&gt; 
&lt;/p&gt;
&lt;p&gt;
Science is all about making proposals that can be tested (especially after Karl Popper's
formulation of the &lt;a href="http://plato.stanford.edu/entries/popper/" target="_blank"&gt;Falsifiability&lt;/a&gt; Criterion),
and then undergoing the experience of having that proposal rejected.&amp;#160; This is
the essence of any successful process -- not that it eliminates errors altogether,
but rather that it is able to make corrections despite these errors so that the target
need never shift.
&lt;/p&gt;
&lt;p&gt;
Professor Alain Connes recently gave his opinion of Xin-Jing Li's proof for the &lt;a href="http://primes.utm.edu/notes/rh.html" target="_blank"&gt;Riemann
Hypothesis&lt;/a&gt; -- a proof which relies in part on Professor Connes' work --&amp;#160;
in a blog &lt;a href="http://noncommutativegeometry.blogspot.com/2008/06/fun-day-two.html?showComment=1215071400000#c8876982000013974667" target="_blank"&gt;comment&lt;/a&gt; to
his own blog (by way of Slashdot):
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
I dont like to be too negative in my comments. Li's paper is an attempt to prove a
variant of the global trace formula of my paper in Selecta. The &amp;quot;proof&amp;quot;
is that of Theorem 7.3 page 29 in Li's paper, but I stopped reading it when I saw
that he is extending the test function h from ideles to adeles by 0 outside ideles
and then using Fourier transform (see page 31). This cannot work and ideles form a
set of measure 0 inside adeles (unlike what happens when one only deals with finitely
many places).
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Self-correcting extends to other professions, as well.&amp;#160; Scott Hanselman recently &lt;a href="http://www.hanselman.com/blog/BackToBasicsDoNamespaceUsingDirectivesAffectAssemblyLoading.aspx" target="_blank"&gt;posted&lt;/a&gt; to
correct an opinion he discovered &lt;a href="http://blogs.msdn.com/sourceanalysis/pages/sa1200-usingdirectivesmustbeplacedwithinnamespace.aspx" target="_blank"&gt;here&lt;/a&gt; which
he felt required some testing.&amp;#160; Through his own tests, he discovered that nesting
a using directive inside a&amp;#160; namespace declaration provides no apparent performance
benefit over placing it outside the namespace.
&lt;/p&gt;
&lt;p&gt;
This leads him to draw these important lesson:
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;ul&gt;
&lt;li&gt;
Don't believe everything you read, even on a Microsoft Blog. 
&lt;/li&gt;
&lt;li&gt;
Don't believe this blog, either! 
&lt;/li&gt;
&lt;li&gt;
Decide for yourself with experiments if you need a tiebreaker! 
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
The sentiment recalls Ralph Waldo Emerson's memorable words:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
There is a time in every man's education when he arrives at the conviction that envy
is ignorance; that imitation is suicide; that he must take himself for better, for
worse, as his portion; that though the wide universe is full of good, no kernel of
nourishing corn can come to him but through his toil bestowed on that plot of ground
which is given to him to till. The power which resides in him is new in nature, and
none but he knows what that is which he can do, nor does he know until he has tried.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
Trust thyself: every heart vibrates to that iron string. Accept the place the divine
providence has found for you, the society of your contemporaries, the connection of
events.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
A similar sentiment is expressed in Hobbes' Leviathan, though with a wicked edge:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
And as to the faculties of the mind, setting aside the arts grounded upon words, and
especially that skill of proceeding upon general and infallible rules, called science,
which very few have and but in few things, as being not a native faculty born with
us, nor attained, as prudence, while we look after somewhat else, I find yet a greater
equality amongst men than that of strength. For prudence is but experience, which
equal time equally bestows on all men in those things they equally apply themselves
unto. That which may perhaps make such equality incredible is but a vain conceit of
one's own wisdom, which almost all men think they have in a greater degree than the
vulgar; that is, than all men but themselves, and a few others, whom by fame, or for
concurring with themselves, they approve. &lt;em&gt;&lt;font color="#004080"&gt;&lt;strong&gt;For such
is the nature of men that howsoever they may acknowledge many others to be more witty,
or more eloquent or more learned, yet they will hardly believe there be many so wise
as themselves&lt;/strong&gt;;&lt;/font&gt;&lt;/em&gt; for they see their own wit at hand, and other
men's at a distance. &lt;em&gt;&lt;strong&gt;&lt;font color="#004080"&gt;But this proveth rather that
men are in that point equal, than unequal. For there is not ordinarily a greater sign
of the equal distribution of anything than that every man is contented with his share.&lt;/font&gt;&lt;/strong&gt; [emphasis
mine]&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
We find it again expressed in Descartes' &lt;i&gt;Discours de la m&amp;#195;&amp;#169;thode&lt;/i&gt;.
Descartes, it might be remembered, occasionally exchanged letters with Hobbes:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
&lt;em&gt;Le bon sens est la chose du monde la mieux partag&amp;#233;e; car chacun pense en
&amp;#234;tre si bien pourvu, que ceux m&amp;#234;me qui sont les plus difficiles &amp;#224; contenter
en toute autre chose n'ont point coutume d'en d&amp;#233;sirer plus qu'ils en ont.&lt;/em&gt;
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Both Hobbes and Descartes formulate their defense of common sense somewhat ironically.&amp;#160;
In a recent post, Steve Yegge takes out the irony (or perhaps takes out the kernel
of truth and leaves nothing but the irony) in his argument against Joel Spolsky's
widely aknowledged &lt;a href="http://www.joelonsoftware.com/articles/fog0000000073.html" target="_blank"&gt;criteria&lt;/a&gt; for
a desirable employee: &amp;quot;smart, and gets things done.&amp;quot;
&lt;/p&gt;
&lt;p&gt;
According to &lt;a href="http://steve-yegge.blogspot.com/2008/06/done-and-gets-things-smart.html" target="_blank"&gt;Yegge&lt;/a&gt;,
the crux of the problem is this:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Unfortunately, &lt;em&gt;smart&lt;/em&gt; is a generic enough concept that pretty much everyone
in the world thinks [he's] smart.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
So looking for &lt;b&gt;Smart&lt;/b&gt; is a bit problematic, since we aren't smart enough to
distinguish it from B.S. The best we can do is find people who we &lt;em&gt;think&lt;/em&gt; are
smart because they're a bit like us.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
So, like, what kind of people is this &lt;b&gt;Smart, and Gets Things Done&lt;/b&gt; adage actually
hiring?
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
And yet the self-correcting process continues, on the principle that we are all smart
enough, collectively, to solve our problems in the aggregate, even if we can't solve
them as individuals.
&lt;/p&gt;
&lt;p&gt;
Presidential candidate Barack Obama recently held a news conference to correct a misunderstanding
he had made a few hours earlier about his stance on the Iraq War.&amp;#160; According
to &lt;a href="http://www.cnn.com/2008/POLITICS/07/04/campaign.wrap/" target="_blank"&gt;CNN&lt;/a&gt;:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
Obama on Thursday denied that he's shying away from his proposed 16-month phased withdrawal
of all combat troops from Iraq, calling it &amp;quot;pure speculation&amp;quot; and adding
that his &amp;quot;position has not changed.&amp;quot; 
&lt;/p&gt;
&lt;p&gt;
However, he told reporters questioning his stance that he will &amp;quot;continue to refine&amp;quot;
his policies as warranted.
&lt;/p&gt;
&lt;p&gt;
His comments prompted the Republican National Committee to put out an e-mail saying
the presumed Democratic nominee was backing away from his position on withdrawal.
&lt;/p&gt;
&lt;p&gt;
Obama called a second news conference later Thursday to reiterate that he is not changing
his position.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
This is, of course, merely a blip in the history of self-correction.&amp;#160; A more
significant one can be found in &lt;a href="http://www.iep.utm.edu/b/bakhtin.htm" target="_blank"&gt;Bakhtin's&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Bakhtin" target="_blank"&gt;attempt&lt;/a&gt; to &lt;a href="http://www.amazon.com/Rabelais-His-World-Mikhail-Bakhtin/dp/0253203414" target="_blank"&gt;interpret&lt;/a&gt; the &lt;a href="http://artemis.austincollege.edu/acad/english/bbarrie/shakespeare/bakhtin_rab.html" target="_blank"&gt;works&lt;/a&gt; of &lt;a href="http://www.gutenberg.org/files/1200/1200.txt" target="_blank"&gt;Rabelais&lt;/a&gt;,
and to demonstrate (convincingly) that everyone before him misunderstood the father
of Gargantua.&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
Bakhtin's analysis of Rabelais in turn brought to light one of the great discoveries
of his career: The Carnival -- though a colleague once found an earlier reference
to the concept in one of Ernst Cassirer's works.&amp;#160; Against the notion of a careful
and steady self-correcting mechanism in history, Bakhtin introduced the metaphor of
the Medieval Carnival:
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;div style="border-right: #000000 1px groove; padding-right: 4px; border-top: #000000 1px groove; padding-left: 4px; font-size: 10pt; background: #f5f5f5; padding-bottom: 4px; border-left: #000000 1px groove; padding-top: 4px; border-bottom: #000000 1px groove; font-family: courier new"&gt;
&lt;blockquote&gt; 
&lt;p&gt;
The essential principle of grotesque realism is degradation, that is, the lowering
of all that is high, spiritual, ideal, abstract; it is a transfer to the material
level, to the sphere of earth and body in their indissoluble unity.
&lt;/p&gt;
&lt;p&gt;
...
&lt;/p&gt;
&lt;p&gt;
Degradation and debasement of the higher do not have a formal and relative character
in grotesque realism. &amp;quot;Upward&amp;quot; and &amp;quot;downward&amp;quot; have here an absolute
and strictly topographical meaning....Earth is an element that devours, swallows up
(the grave, the womb) and at the same time an element of birth, of renascence (the
maternal breasts)....Degradation digs a bodily grave for a new birth....To degrade
an object does not imply merely hurling it into the void of nonexistence, into absolute
destruction, but to hurl it down to the reproductive lower stratum, the zone in which
conception and a new birth take place.
&lt;/p&gt;
&lt;/blockquote&gt; 
&lt;/div&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
The Carnival serves to correct inequalities and resentments in society and its subcultures
not by setting it upon a surer footing, but rather by affording us an opportunity
to air our grievances publicly in a controlled ceremony which allows society and its
hierarchical institutions to continue as they are.&amp;#160; It is a release, rather than
an adjustment.&amp;#160; A pot party at a &lt;a href="http://www.woodstock69.com/wsrprnt1.htm" target="_blank"&gt;rock
festival&lt;/a&gt; rather than a &lt;a href="http://www.cooper.edu/humanities/classes/coreclasses/hss3/g_sorel.html" target="_blank"&gt;general
strike&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
As for the Internet, it is sometimes hard to say what is actually occurring in the
back-and-forth that occurs between various blogs.&amp;#160; Have we actually harnessed
the wisdom of crowds and created a self-correcting process that responds more rapidly
to intellectual propositions, nudging them over a very short time to the correct solution,
or have we in fact recreated the Medieval &lt;a href="http://www.earlymodernweb.org.uk/emn/index.php/archives/2004/08/carnival-and-the-carnivalesque/" target="_blank"&gt;Carnival&lt;/a&gt;,
a massive gathering of people in one location which breaks down the normal distinctions
between wisdom and folly, knowledge and error, competence and foolhardiness?&amp;#160; 
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.imaginativeuniversal.com/aggbug.ashx?id=4a7d6cd8-7e8a-4a25-8f51-faed44222b9e" /&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.newtelligence.com"&gt;newtelligence AG&lt;/a&gt;. </description>
      <comments>http://www.imaginativeuniversal.com/CommentView,guid,4a7d6cd8-7e8a-4a25-8f51-faed44222b9e.aspx</comments>
      <category>Internet</category>
      <category>Methodology</category>
      <category>Technical Zeitgeist</category>
    </item>
    <item>
      <trackback:ping>http://www.imaginativeuniversal.com/Trackback.aspx?guid=091e2c91-fe9b-4f09-a06d-a9c5a92fc4f5</trackback:ping>
      <pingback:server>http://www.imaginativeuniversal.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.imaginativeuniversal.com/PermaLink,guid,091e2c91-fe9b-4f09-a06d-a9c5a92fc4f5.aspx</pingback:target>
      <dc:creator>J Ashley</dc:creator>
      <wfw:commentRss>http://www.imaginativeuniversal.com/SyndicationService.asmx/GetEntryCommentsRss?guid=091e2c91-fe9b-4f09-a06d-a9c5a92fc4f5</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="221" alt="nancy" src="http://www.imaginativeuniversal.com/content/binary/WindowsLiveWriter/TheApocryphalEmployeeandsomeApocryphalBo_B1BA/nancy_3.jpg" width="192" border="0" />
        </p>
        <p>
Nancy Davolio was a fictitious employee in the Microsoft Access 97 Northwind sample
database.  Many office workers became smitten with her furtive smile and stylish
hair, and while she continued to exist as an employee in later releases of the Northwind
database, her employee photo changed, leading many to suspect that something untoward
had happened to the <em>real</em> Nancy.
</p>
        <p>
As most people know, "Nancy Davolio" is an anagram for "A Navy Cod
Loin", which provides a hint about her origins and eventual fate.  For a
list of further Nancy Davolio anagrams, I recommend the Internet Anagram Generator <a href="http://wordsmith.org/anagram/anagram.cgi?anagram=nancy+davolio&amp;t=1000" target="_blank">here</a>,
where may find more of the 1394 or so anagrams derived from Nancy's name, for instance:
</p>
        <blockquote>
          <p>
Cavil Noonday 
<br />
A Viand Colony 
<br />
A Divan Colony 
<br />
A Vainly Condo 
<br />
Canal Void Yon 
<br />
Canola Nod Iv