<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Bitter Coder</title>
    <link>http://blog.bittercoder.com/</link>
    <description>sour code and astringent experiences</description>
    <language>en-us</language>
    <copyright>Alex Henderson</copyright>
    <lastBuildDate>Sun, 12 Oct 2008 20:14:33 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>bittercoder@gmail.com</managingEditor>
    <webMaster>bittercoder@gmail.com</webMaster>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/BitterCoder" type="application/rss+xml" /><item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=bf913299-57b7-41af-80f1-94cb87e2a105</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=bf913299-57b7-41af-80f1-94cb87e2a105</wfw:commentRss>
      
      <title>Architecture Chat #35</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/418852766/PermaLink,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</link>
      <pubDate>Sun, 12 Oct 2008 20:14:33 GMT</pubDate>
      <description>After a general catch-up on what everyone's&#xD;
doing and introductions from a graduate new comer (Nick Irvine) - we launched in talking&#xD;
about robotics including:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.massey.ac.nz/massey/about-us/news/article.cfm?mnarticle=leader-of-the-pick-30-04-2008"&gt;Automated&#xD;
Kiwifruit picking&lt;/a&gt; robots. &#xD;
&lt;/li&gt;&lt;li&gt;&#xD;
Fruit laser bar coding and it's lack of uptake so far.&lt;/li&gt;&lt;li&gt;&#xD;
The possibility of per-ordered fruit i.e. you identify how you want your fruit, and&#xD;
it's picked at the precise moment when it fits the consumers needs.&lt;/li&gt;&lt;li&gt;&#xD;
The user of heuristic markings for fingerprinting of individual fruit (ie. the Idea&#xD;
that nature, by design, provides unique identifier for each piece of fruit, or that&#xD;
we could mark a fruit for identification that wasn't detectable/displeasing to the&#xD;
human eye.&lt;/li&gt;&lt;li&gt;&#xD;
Smart cars, self navigating cars, convoy or drafting applications for self-navigating&#xD;
cars and how these systems would deal with disconnections or extraordinary circumstances.&lt;/li&gt;&lt;/ul&gt;&#xD;
As an offshoot of self driving cars peter talked a little bit about Scribe (or &lt;a temp_href="http://www.livescribe.com/smartpen/index.html I believe it's called" href="http://www.livescribe.com/smartpen/index.html%20I%20believe%20it%27s%20called"&gt;livescribe&lt;/a&gt; -&#xD;
pens that record what you write and say - in unison - and allow playback or online&#xD;
publishing ) - and the future of pen based capture devices and note taking ie. &lt;a href="http://www.evernote.com/?gclid=CLbKipfDopYCFRX5egodOzaCvA"&gt;evernote&lt;/a&gt; etc.&lt;br&gt;&lt;br&gt;&#xD;
We talked around &lt;a href="http://hammett.castleproject.org/?p=323"&gt;Multi-dimensional&#xD;
separation of concerns&lt;/a&gt;, and the idea of having both distinct dimensions (that&#xD;
may not be based on a single physical AOP approach) and modules of concerns, and the&#xD;
challenges/opportunities/solutions these "hypermodules" could provide to every day&#xD;
business problems - this also hi lighted the pitfalls of existing AOP approaches which&#xD;
often let you assemble incompatible/incorrect sets of concerns, which modules could&#xD;
help prevent...&lt;br&gt;&lt;br&gt;&#xD;
I talked briefly around REST and the concept of a generic RESTful application development&#xD;
platform that I've been prototyping lately (like dream, but far more resource and&#xD;
query oriented) rather then re-purposing an MVC framework or using WCF (which also&#xD;
feels like a bad fit) or ADO.Net Data Services.&lt;br&gt;&lt;br&gt;&#xD;
Last of all we talked about &lt;a href="http://code.google.com/p/masstransit/"&gt;Mass Transit&lt;/a&gt; just&#xD;
as we were breaking up - &lt;a href="http://www.jamiepenney.co.nz/"&gt;Jamie&lt;/a&gt; noted he'd&#xD;
been working on a similar project (but for java?) while at Auckland Uni.  Perhaps&#xD;
I'll have a more in-depth report on it next time as I'm currently experimenting with&#xD;
it at the moment when I get time.&lt;br&gt;&lt;br&gt;&#xD;
Thanks all for coming - write-up's of the previous chats can be found on the &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;wiki&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=bf913299-57b7-41af-80f1-94cb87e2a105"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=7en4M"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=7en4M" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=7hpFm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=7hpFm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=MyG1m"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=MyG1m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=pp8Um"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=pp8Um" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=Wc8VM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=Wc8VM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</comments>
      <category>architecture chat</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,bf913299-57b7-41af-80f1-94cb87e2a105.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=d7288656-9c4b-424a-b418-ae88b768a97e</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d7288656-9c4b-424a-b418-ae88b768a97e</wfw:commentRss>
      
      <title>Upcoming Architecture Chat</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/414646200/PermaLink,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</link>
      <pubDate>Wed, 08 Oct 2008 08:44:12 GMT</pubDate>
      <description>Hi All, &#xD;
&lt;br&gt;&lt;br&gt;&#xD;
The Architecture Chat is Tomorrow - or probably "today" by the time your read this&#xD;
- Thursday 9&lt;sup&gt;th&lt;/sup&gt; October, 11:30am, Garrisons, Sylvia Park.&lt;br&gt;&lt;br&gt;&#xD;
Some topics that have caught my eye since last time include:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&#xD;
VS 2010 previews/announcments and it's &lt;a href="http://channel9.msdn.com/posts/VisualStudio/Top-down-design-with-Visual-Studio-Team-System-2010/"&gt;modelling&#xD;
focus&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/posts/VisualStudio/Manual-Testing-with-Visual-Studio-Team-System-2010/"&gt;manual&#xD;
testing&lt;/a&gt;, &lt;a href="http://channel9.msdn.com/posts/VisualStudio/Historical-Debugger-and-Test-Impact-Analysis-in-Visual-Studio-Team-System-2010/"&gt;test&#xD;
impact analysis&lt;/a&gt; etc. - I wonder what opportunities this opens up for 3rd party&#xD;
visual studio tool developers.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2008/09/28/jquery-and-microsoft.aspx"&gt;JQuery&#xD;
shipping with Visual Studio .Net&lt;/a&gt; (only interesting because of the political implications&#xD;
- at least for those of us doing Monorail development - but a very positive sign none&#xD;
the less).&lt;/li&gt;&lt;li&gt;&#xD;
Mono &lt;a href="http://www.nhforge.org/blogs/nhibernate/archive/2008/10/07/nhibernate-proxygenerators-1-0-0-beta-released.aspx"&gt;gets&#xD;
a spot at PDC 2008&lt;/a&gt; -about time I say too, it's good to see Mono getting the respect&#xD;
it deserves :)&lt;/li&gt;&lt;li&gt;&#xD;
NHibernate ProxyGenerators 1.0.0 &lt;a href="http://www.nhforge.org/wikis/proxygenerators10/introduction.aspx"&gt;Beta&#xD;
Released&lt;/a&gt; - great for those dealing with medium trust (see the &lt;a href="http://masstransit.googlecode.com/"&gt;intro&lt;/a&gt; for&#xD;
details).&lt;/li&gt;&lt;li&gt;&lt;a temp_href="now at " href="now%20at%20"&gt;Mass transit&lt;/a&gt; - definitely a "watch this&#xD;
space" project - they just hit &lt;a href="http://blog.phatboyg.com/2008/10/07/masstransit-04-released/"&gt;milestone&#xD;
0.4&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&#xD;
This post from hammet I found very interesting - &lt;a href="http://hammett.castleproject.org/?p=323"&gt;Multi-dimensional&#xD;
separation of conerns&lt;/a&gt; - not something I've come across before , also check out &lt;a href="http://www.research.ibm.com/hyperspace/index.htm"&gt;HyperJ&lt;/a&gt; which&#xD;
hammet linked in his post.  Food for thought.&lt;/li&gt;&lt;/ul&gt;&#xD;
If anyone else has some additional topics they'd like to discuss (or raise in absence)&#xD;
then just leave a comment on this post or send me an email.&lt;br&gt;&lt;br&gt;&#xD;
See you all tomorrow.  And remember newcomers are always welcome - see the &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;Wiki&lt;/a&gt; for&#xD;
details on location and write-ups from previous sessions.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=d7288656-9c4b-424a-b418-ae88b768a97e"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=ohQHM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=ohQHM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=P8mEm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=P8mEm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=fpNHm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=fpNHm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=v1dgm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=v1dgm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=vzC7M"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=vzC7M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</comments>
      <category>architecture chat</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,d7288656-9c4b-424a-b418-ae88b768a97e.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=73e94c4e-ef7a-4dc0-9031-00763cd7b36b</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=73e94c4e-ef7a-4dc0-9031-00763cd7b36b</wfw:commentRss>
      <slash:comments>4</slash:comments>
      
      <title>Moving to Orcon LLU - bumpy ride so far</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/413264105/PermaLink,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</link>
      <pubDate>Mon, 06 Oct 2008 23:27:33 GMT</pubDate>
      <description>As some may have noticed, this blog has&#xD;
been up and down like a yo-yo for the last two weeks.&lt;br&gt;&lt;br&gt;&#xD;
The issues are caused by the fact that I host it off the home office connection -&#xD;
which by and large has been solid as a rock for the last 2 years, considering the&#xD;
amount of traffic the site gets is fairly minimal.&lt;br&gt;&lt;br&gt;&#xD;
I opted to be one of the first guinea pigs to try the LLU (Local Loop Unbundled) offering&#xD;
from &lt;a href="http://www.orcon.net.nz/"&gt;Orcon&lt;/a&gt; on the home office - alas it has&#xD;
not been a pain-free experience.  I think google analytics tells the story best:&lt;br&gt;&lt;br&gt;&lt;img src="http://blog.bittercoder.com/images/LLU_Problems.PNG" alt="LLU_Problems.PNG" border="0" height="228" width="575"&gt;&lt;/img&gt;&lt;br&gt;&lt;br&gt;&#xD;
The connection got switched to LLU on around the 21st / 22nd of September - at which&#xD;
point my connection became a bit erratic - then it started working well enough - before&#xD;
going wonky again, and then completely falling over altogether on the following Saturday&#xD;
- at that point there was no sync.&lt;br&gt;&lt;br&gt;&#xD;
Around Wednesday sync was restored, then Auth as well on thursday (so 5 days without&#xD;
any access) - the connection was looking ok at that point, but then a day or so later&#xD;
I started noticing that it was disconnecting every 5 to 10 minutes, then taking another&#xD;
20 or so seconds to re-establish the connection, that's still happening as we speak&#xD;
- though they helpdesk has now raised the priority of the ticket to urgent in the&#xD;
hope that it might be resolved soon.&lt;br&gt;&lt;br&gt;&#xD;
So far I've been a pretty disappointed with the alacrity of Orcons resolution process&#xD;
and the lack of direct contact that can be made with the LLU team.  Normally&#xD;
with Orcon issues get logged with the help desk, a ticket is raised, and after a couple&#xD;
of days you end up dealing directly with corporate support (i.e. people who know what's&#xD;
wrong) - this process works well, and seems to filter out those people who actually&#xD;
have problems related to their own hardware or lack of knowledge.&lt;br&gt;&lt;br&gt;&#xD;
Not so with LLU, you raise a ticket, but the LLU team can't be contacted directly,&#xD;
and as happened with me - I had no connectivity for 5 days, and also nothing done&#xD;
about the issue, it just sat in the queue - and the helpdesk did not seem to know&#xD;
any more about the issue then I did - I end up feeling bad having to pester the helpdesk&#xD;
every day to find out the progress on the issue - and they keep feeding me the same&#xD;
line of "the LLU tech will call you once the issue has started being worked on / resolved,&#xD;
I'm sure they'll do a card reset 1am tomorrow" - So far nobody from Orcon has ever&#xD;
called me (and I'm not actually sure they ever did do a card reset, but I suspect&#xD;
that's probably not the issue either).&lt;br&gt;&lt;br&gt;&#xD;
Now I'm not blogging this out of Venom - I mean all said 'n done I am guinea pigging&#xD;
the service to some extent and I know if I'd just stuck with my previous telecom/Orcon&#xD;
mix none of this would have happened - and the @Orcon folks on twitter have offered&#xD;
to help push the ticket through quicker which was nice (incidentally ISP available&#xD;
on twitter == good) - but still I just hope the issue resolution process becomes a&#xD;
little more robust, and I thought this might be interesting to anyone else out there&#xD;
considering jumping on the LLU band wagon.&lt;br&gt;&lt;br&gt;&#xD;
So my peeves so far are:&lt;br&gt;&lt;ol&gt;&lt;li&gt;&#xD;
Orcon don't actually seem to be doing any follow-up - I had to do all the calling&#xD;
(and sitting in the queue) incidentally, 3pm is the perfect time to call their helpdesk,&#xD;
it's never busy.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The LLU team can't be contacted - that bugs me - pestering the help desk is counter-productive&#xD;
for days on end, when the issue is sitting with the LLU team.  Being able to&#xD;
check the ticket status (with notes etc.) on-line would be have been nice as well&#xD;
(and saved some phone calls).&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The helpdesk doesn't seem to even know when the LLU team will look at an issue. &#xD;
I got the distinct feeling the help desk guys knew as little as I did.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
No weekend support - I lost connectivity early Saturday, but the LLU team doesn't&#xD;
work on the weekend (or so the helpdesk told me) - this sucks - telecom have engineers&#xD;
working weekends, especially as Orcon are responsible for phone issues as well, I&#xD;
could end up with no internet or voice for an entire weekend - something I've always&#xD;
found Telecom very quick to respond to.  I would hope this only applies to home&#xD;
customers!&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&#xD;
Hopefully these (and the technical issues I'm having) are all just teething problems&#xD;
and will go away as the LLU roll out continues - in the mean time forgive this blog&#xD;
for being partially unavailable, and my apathy in not bothering to move the site to&#xD;
dedicated hosting (which I do plan to do sometime this year, probably along with a&#xD;
change in blogging software - but I'm too busy with other things at the moment).&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=73e94c4e-ef7a-4dc0-9031-00763cd7b36b"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=Tx2PM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=Tx2PM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=2Ju0m"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=2Ju0m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=I3Lim"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=I3Lim" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=8Su4m"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=8Su4m" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=joesM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=joesM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</comments>
      <category>blog;orcon;LLU</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6</wfw:commentRss>
      
      <title>Arhictecture Chat #34</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/413265613/PermaLink,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</link>
      <pubDate>Mon, 06 Oct 2008 23:21:14 GMT</pubDate>
      <description>We talked about a couple of announcments,&#xD;
including the Prism V2 Drop 1, and it's multi-targeting support for Silverlight/WPF&#xD;
(Something we've talked about for a while since WPF &amp;amp; WPF/E first emerged) - we&#xD;
did cover some of the other announcments in this &lt;a href="http://blog.bittercoder.com/PermaLink,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx"&gt;post&lt;/a&gt; as&#xD;
well.&lt;br&gt;&lt;br&gt;&#xD;
After that we ended up with quite a general discussion on what makes adopting unit&#xD;
testing (and test driven) practices difficult and how mocking/stubbing/AAA etc. fits&#xD;
in.  Interesting side-topics included the idea of teaching test driven development&#xD;
as the very first part of a first-year programming paper at university, behaviour&#xD;
driven development / specs etc.&lt;br&gt;&lt;br&gt;&#xD;
We had another new comer this week - Guy - who gave us some perspective on how shops&#xD;
still focusing on C/C++ work - as always it's great to have newcomers coming along&#xD;
and contributing to the conversation.&lt;br&gt;&lt;br&gt;&#xD;
Guy was Albany based, which raised the question again of if we need to have the odd&#xD;
Architecture chat over on the shore - my only concern is that we'd probably loose&#xD;
half of our existing attendees, so unless I got interest for a good 4 or 5 people&#xD;
on the shore It's probably not worth bothering with - and we'd need a location that's&#xD;
not too noisy (we abandoned our original location in Ellerslie for that very reason).&lt;br&gt;&lt;br&gt;&#xD;
Apologies for the late post - I have been experiencing a lot of issues since &lt;a href="http://blog.bittercoder.com/PermaLink,guid,73e94c4e-ef7a-4dc0-9031-00763cd7b36b.aspx"&gt;moving&#xD;
to Orcons LLU&lt;/a&gt; (that'll teach me for hosting this blog and wiki on-site :)&lt;br&gt;&lt;br&gt;&#xD;
Write-ups of previous Architecture Chats can be found on the &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;wiki&lt;/a&gt; here.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=bi0aM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=bi0aM" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=xSZqm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=xSZqm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=OiTKm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=OiTKm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=fEOLm"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=fEOLm" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=mkHGM"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=mkHGM" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</comments>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,cd4f76fa-20ac-4973-90ff-a04e7e9f8ab6.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=37d596b9-6aa0-4744-acba-fc6b402a4465</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=37d596b9-6aa0-4744-acba-fc6b402a4465</wfw:commentRss>
      <slash:comments>2</slash:comments>
      
      <title>Upcoming Architecture Chat - Thursday 25th September 2008 @ 11:30am</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/401615289/PermaLink,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</link>
      <pubDate>Wed, 24 Sep 2008 08:48:56 GMT</pubDate>
      <description>Architecture Chat Tomorrow (Thursday) 25&lt;sup&gt;th&lt;/sup&gt; September&#xD;
2008 at 11:30am, Garrisons, Sylvia Park, Auckland, New Zealand.&lt;br&gt;&lt;br&gt;&#xD;
Some ideas for topics:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.gallio.org/"&gt;Gallio&lt;/a&gt; - interoperable testing tools.&lt;/li&gt;&lt;li&gt;&#xD;
What are the barriers to unit testing - why is still "so hard" for so many?&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://stackoverflow.com/"&gt;Stack overflow&lt;/a&gt; public beta and impressions&#xD;
after having used it for 3 or so weeks.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Prism V2 &lt;a href="http://www.codeplex.com/CompositeWPF/Release/ProjectReleases.aspx?ReleaseId=17399"&gt;Drop&#xD;
1&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codethinked.com/post/2008/09/13/It-is-BDUF-not-DUF.aspx"&gt;BDUF&#xD;
&amp;amp; DUF&lt;/a&gt; (&lt;b&gt;Big&lt;/b&gt; Design Up Front and Design Up Front)&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lists.ironpython.com/pipermail/users-ironpython.com/2008-September/008424.html"&gt;Iron&#xD;
Python Beta 5&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeplex.com/aspnet/Wiki/View.aspx?title=Dynamic%20Language%20Support"&gt;ASP.Net&#xD;
Dynamic Language support&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx"&gt;Arrays&#xD;
considered somewhat harmful&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://android-developers.blogspot.com/2008/09/announcing-android-10-sdk-release-1.html"&gt;Android&#xD;
1.0 SDK&lt;/a&gt; Released.&lt;/li&gt;&lt;li&gt;&#xD;
C# Eval in Mono (see Miguel's posts &lt;a href="http://tirania.org/blog/archive/2008/Sep-08.html"&gt;here&lt;/a&gt; as&#xD;
well as the &lt;a href="http://www.mono-project.com/CsharpRepl"&gt;CharpRepl page&lt;/a&gt; here.&lt;/li&gt;&lt;/ul&gt;&#xD;
All are welcome - and for new comers directions can be found on the &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;wiki&lt;/a&gt;. &#xD;
&lt;br&gt;&lt;br&gt;&#xD;
If anyone has any other topics please leave a comment on this post or flick me an&#xD;
email, or of course just bring along your questions/topics on the day - otherwise&#xD;
I'll see you all there tomorrow.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=37d596b9-6aa0-4744-acba-fc6b402a4465"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=TkUBL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=TkUBL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=jHdVl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=jHdVl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=rUMvl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=rUMvl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=uYWbl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=uYWbl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=P9AiL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=P9AiL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</comments>
      <category>architecture chat</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,37d596b9-6aa0-4744-acba-fc6b402a4465.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=d92bd032-5ad2-4870-8383-2bf9473864a4</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=d92bd032-5ad2-4870-8383-2bf9473864a4</wfw:commentRss>
      <slash:comments>2</slash:comments>
      
      <title>Architecture Chat #33</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/400686518/PermaLink,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</link>
      <pubDate>Tue, 23 Sep 2008 10:36:27 GMT</pubDate>
      <description>Short writeup for the last architecture&#xD;
chat - we had 7 (or was it 8) attending the 11th September 2008 chat - including a&#xD;
couple of intergenites who made the arduous journey over the bridge (always nice to&#xD;
see some new faces!).&lt;br&gt;&lt;br&gt;&#xD;
Topics of discussion included:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&#xD;
Teched 2008 NZ&lt;/li&gt;&lt;li&gt;&#xD;
Lack of developers in New Zealand, and problems/opportunities with current graduates&#xD;
emerging from various institutes.&lt;/li&gt;&lt;li&gt;&#xD;
Working for Microsoft, the buy-up of blogging talent.&lt;/li&gt;&lt;li&gt;&#xD;
The push to improve the profile of bloggers in NZ.&lt;/li&gt;&lt;li&gt;&#xD;
Bloggers Dinner, Scott Hanselman etc.&lt;/li&gt;&lt;li&gt;&#xD;
Google chrome.&lt;/li&gt;&lt;li&gt;&#xD;
PDC 2008.&lt;/li&gt;&lt;li&gt;&#xD;
Managed Extensibility Framework, what it is/is not - though I don't think of any us&#xD;
are quite sure yet - perhaps Hammet needs to do some videos? ;o)&lt;/li&gt;&lt;li&gt;&#xD;
Generic Natural Language DSL's and interesting ideas like Intellisense for a Natural&#xD;
Language DSL's (I found this interesting, not sure anyone else did...)&lt;/li&gt;&lt;/ul&gt;&#xD;
It was a bit rambling so by the end of it I think most of us were not really sure&#xD;
just what we'd talked about.&lt;br&gt;&lt;br&gt;&#xD;
As per usual previous write-ups can be found here on the &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;wiki&lt;/a&gt;. &#xD;
There's also a &lt;a href="http://www.linkedin.com/groups?home=&amp;amp;gid=899297"&gt;group&#xD;
on LinkedIn&lt;/a&gt; for those who have attended in the past (or plan to attend in the&#xD;
future? perhaps) so you can connect with other participants.&lt;br&gt;&lt;br&gt;&#xD;
The next chat is this Thursday - 25th September - I'll post a reminder tomorrow -&#xD;
and if anyone has any topic suggestions please email or leave a comment on this post.&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=d92bd032-5ad2-4870-8383-2bf9473864a4"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=MGzKL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=MGzKL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=UoL9l"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=UoL9l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=W9ECl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=W9ECl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=rZlul"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=rZlul" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=KzaCL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=KzaCL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</comments>
      <category>architecture chat</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,d92bd032-5ad2-4870-8383-2bf9473864a4.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=4f387bde-7ed6-480b-952b-bbc0ead9ebfb</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=4f387bde-7ed6-480b-952b-bbc0ead9ebfb</wfw:commentRss>
      <title>Writing OpenSocial applications in ASP.Net</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/399270650/PermaLink,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</link>
      <pubDate>Sun, 21 Sep 2008 22:33:18 GMT</pubDate>
      <description>I've had some requests from different ASP.Net developers writing applications for the &lt;a href="http://code.google.com/apis/opensocial/"&gt;OpenSocial&lt;/a&gt; platform
lately wanting to use &lt;a href="http://code.google.com/p/devdefined-tools/wiki/OAuth"&gt;DevDefined.OAuth&lt;/a&gt; to
validate signed requests with a public certificate - so I've put together a little
example to help get people started.&lt;br&gt;
&lt;h2&gt;What are we trying to do?
&lt;/h2&gt;
&lt;br&gt;
So first of let's review how the process works and what we're trying to achieve.&lt;br&gt;
&lt;br&gt;
&lt;img src="http://blog.bittercoder.com/images/OAuthOpenSocialRequestFlow.PNG" alt="OAuthOpenSocialRequestFlow.PNG" border="1" height="112" width="692"&gt;
&lt;br&gt;
&lt;br&gt;
Basically as a developer for the OpenSocial platform you will be writing gadgets -
these gadgets are generally defined in an XML document providing information about
your application and a chunk of html content which will be rendered into an IFrame
to kick the application off (including javascript functions etc. to fetch remote content)
- to work around spoofing issues and to avoid cross-scripting issues your gadget can
use pre-canned functions in the open-social java-script library to make requests to
your own services, which to the developer appear to be a direct request to their site.&lt;br&gt;
&lt;br&gt;
Under the hood the the requests are instead made to the opensocial host platform,
which acts as a proxy passing the request onto your application - at this point the
platform employes OAuth (though without any 3-pronged delegate authority being established)
to sign the request using a x509 Certificate (i.e. the RSA-SHA1 signature method)
at which point it calls your application with the signed request and passed on response
back to the calling gadget.&lt;br&gt;
&lt;br&gt;
The main goals in signing the request (in so far as I can tell) are to ensure it hasn't
been tampered with, spoofed and provide a Nonce and timestamp so you can void replay
attacks - something that using SSL alone would not prevent.&lt;br&gt;
&lt;br&gt;
Because a lot of the mechanics of OAuth itself is being circumnavigated, it's much
simpler to verify the signature is valid.&lt;br&gt;
&lt;br&gt;
&lt;h2&gt;Gadget XML
&lt;/h2&gt;
&lt;br&gt;
Right - onto the code - Let's take a look at the Gadget XML first:&lt;br&gt;
&lt;br&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red163\green21\blue21;\red255\green0\blue0;\red0\green0\blue0;\red128\green128\blue128;}??\fs20 \cf1 &amp;lt;?\cf3 xml\cf1  \cf4 version\cf1 =\cf0 "\cf1 1.0\cf0 "\cf1  \cf4 encoding\cf1 =\cf0 "\cf1 UTF-8\cf0 "\cf1  ?&amp;gt;\par ??&amp;lt;\cf3 Module\cf1 &amp;gt;\par ??  &amp;lt;\cf3 ModulePrefs\cf1  \cf4 title\cf1 =\cf0 "\cf1 OAuth TestBed\cf0 "\cf1  \cf4 description\cf1 =\cf0 "\cf1 Testbed to test the OAuth library\cf0 "\cf1  \cf4 title_url\cf1 =\cf0 "\cf1 http://www.devdefined.com/\cf0 "\cf1  \cf4 author\cf1 =\cf0 "\cf1 Alex Henderson\cf0 "\cf1  \cf4 author_email\cf1 =\cf0 "\cf1 bittercoder@gmail.com\cf0 "\cf1  \cf4 author_affiliation\cf1 =\cf0 "\cf1 friendster\cf0 "\cf1  \cf4 author_location\cf1 =\cf0 "\cf1 Auckland, New Zealand\cf0 "\cf1  \cf4 thumbnail\cf1 =\cf0 ""\cf1  \cf4 icon\cf1 =\cf0 ""\cf1 &amp;gt;\par ??    &amp;lt;\cf3 Icon\cf1 &amp;gt;&amp;lt;/\cf3 Icon\cf1 &amp;gt;\par ??    &amp;lt;\cf3 Locale\cf1  \cf4 lang\cf1 =\cf0 "\cf1 en\cf0 "\cf1  /&amp;gt;\par ??    &amp;lt;\cf3 Require\cf1  \cf4 feature\cf1 =\cf0 "\cf1 opensocial-0.7\cf0 "\cf1  /&amp;gt;\par ??    &amp;lt;\cf3 Require\cf1  \cf4 feature\cf1 =\cf0 "\cf1 dynamic-height\cf0 "\cf1 /&amp;gt;\par ??    &amp;lt;\cf3 Require\cf1  \cf4 feature\cf1 =\cf0 "\cf1 views\cf0 "\cf1 /&amp;gt;\par ??  &amp;lt;/\cf3 ModulePrefs\cf1 &amp;gt;\par ??  &amp;lt;\cf3 Content\cf1  \cf4 type\cf1 =\cf0 "\cf1 html\cf0 "\cf1 &amp;gt;\par ??    &amp;lt;![CDATA[\par ??\cf6     &amp;lt;script&amp;gt;\par ??      function makeRequest(server_url,fn)\{\par ??          var params = \{\};\par ??          params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;\par ??          params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;\par ??          params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;\par ??          gadgets.io.makeRequest(server_url, fn, params);\par ??      \}\par ??\par ??      function renderPage()\{\par ??        var url = 'http://demo.devdefined.com/Friendster/OpenSocial.aspx';\par ??        makeRequest(url, pageload_Callback);\par ??      \}\par ??\par ??      function pageload_Callback(data) \{ \par ??        var response;\par ??        if(data.text)\{response = data.text;\}else if(data.body)\{response = data.body;\}else\{response = data;\}\par ??        if(response.indexOf)\{\par ??           document.getElementById('container').innerHTML = response;\par ??        \}\par ??      \}\par ??\par ??      gadgets.util.registerOnLoadHandler(function() \{        \par ??          renderPage();  \par ??      \});\par ??    &amp;lt;/script&amp;gt;\par ??    &amp;lt;div id="container"&amp;gt;\par ??    &amp;lt;/div&amp;gt;\par ??  \cf1 ]]&amp;gt;\par ??  &amp;lt;/\cf3 Content\cf1 &amp;gt;\par ??&amp;lt;/\cf3 Module\cf1 &amp;gt;}
--&gt;
&lt;div style="border: 1px dashed ; background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;xml&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;UTF-8&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;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Module&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;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ModulePrefs&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;OAuth
TestBed&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;description&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Testbed
to test the OAuth library&lt;/span&gt;"&lt;span style="color: blue;"&gt; 
&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;title_url&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://www.devdefined.com/&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;author&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Alex
Henderson&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;author_email&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;bittercoder@gmail.com&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;author_affiliation&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;friendster&lt;/span&gt;"&lt;span style="color: blue;"&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: red;"&gt;author_location&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Auckland,
New Zealand&lt;/span&gt;"&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;thumbnail&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;""&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;icon&lt;/span&gt;&lt;span style="color: blue;"&gt;=&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;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Icon&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Icon&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;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Locale&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;lang&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;en&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;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Require&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;feature&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;opensocial-0.7&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;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Require&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;feature&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;dynamic-height&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;nbsp; &amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Require&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;feature&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;views&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;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;ModulePrefs&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;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Content&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;html&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;nbsp; &amp;nbsp; &amp;lt;![CDATA[&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;script&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; function makeRequest(server_url,fn){&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var params = {};&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[gadgets.io.RequestParameters.METHOD]
= gadgets.io.MethodType.GET;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[gadgets.io.RequestParameters.CONTENT_TYPE]
= gadgets.io.ContentType.TEXT;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; params[gadgets.io.RequestParameters.AUTHORIZATION]
= gadgets.io.AuthorizationType.SIGNED;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; gadgets.io.makeRequest(server_url,
fn, params);&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; function renderPage(){&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var url = 'http://demo.devdefined.com/Friendster/SocialService.aspx';&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; makeRequest(url, pageload_Callback);&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; function pageload_Callback(data) { &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var response;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(data.text){response = data.text;}else
if(data.body){response = data.body;}else{response = data;}&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(response.indexOf){&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.getElementById('container').innerHTML
= response;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; gadgets.util.registerOnLoadHandler(function()
{&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; renderPage();&amp;nbsp; &lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;div id="container"&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: gray;"&gt;&amp;nbsp; &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;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Content&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;lt;/&lt;/span&gt;&lt;span style="color: rgb(163, 21, 21);"&gt;Module&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;br&gt;
Basically the XML for the gadget is a chunk of metadata and finally some actual content
for the gadget itself - notice that it regsters a handler to run on load of the gadget,
and that it's then making a request to the url &lt;b&gt;http://demo.devdefined.com/Friendster/SocialService.aspx&lt;/b&gt; and
render the response in the inner HTML of the container div DOM element.&lt;br&gt;
&lt;br&gt;
The key to this being an OAuth signed request is the 5&lt;sup&gt;th&lt;/sup&gt; line of the makeRequest
function:&lt;br&gt;
&lt;br&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; params[gadgets.io.RequestParameters.AUTHORIZATION]
= gadgets.io.AuthorizationType.&lt;u&gt;SIGNED&lt;/u&gt;;&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;So far so good - uploading your application is pretty easy -
but is generally platform specific - if you wanted to try this out on Friendster then
just head to &lt;a href="http://www.friendster.com/developer/"&gt;http://www.friendster.com/developer/&lt;/a&gt; click
on the OpenSocial tab and follow the instructions - the approach is to save your gadget
definition as an XML file somewhere, then publish that XML document on the web and
then create an application in your open social host of choice and direct th it to
the XML files location.&amp;nbsp; It takes all of a minute to do.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 style="margin: 0px;"&gt;ASP.Net Application (Provider)&lt;br&gt;
&lt;/h2&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;Now for the application itself - first off you need to locate
and download the provided public key (certificate) for the social platform host and
either store it on the filesystem or in the case of this demo we'll just store it
as a string, like so:&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;\red163\green21\blue21;}??\fs20 \cf1 public\cf0  \cf1 class\cf0  \cf4 OpenSocialCertificates\par ??\cf0 \{\par ??    \cf1 private\cf0  \cf1 const\cf0  \cf1 string\cf0  _friendsterCertificate =\par ??\cf5 @"-----BEGIN CERTIFICATE-----\par ??MIIB2TCCAYOgAwIBAgIBADANBgkqhkiG9w0BAQUFADAvMQswCQYDVQQGEwJVUzEL\par ??MAkGA1UECBMCQ0ExEzARBgNVBAoTCkZyaWVuZHN0ZXIwHhcNMDgwODEzMTgwMzQ5\par ??WhcNMTQwMjAzMTgwMzQ5WjAvMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzAR\par ??BgNVBAoTCkZyaWVuZHN0ZXIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAyVjnX2Hr\par ??SLTyAuh2f2/OSRWkLFo3+q+l0Czb48v24Me6CsoexkPgwLOjXmPn/Pt8WtwlisQP\par ??tZ9RX30iymg0owIDAQABo4GJMIGGMB0GA1UdDgQWBBQlDiW+HfExpSnvWqM5a1JD\par ??C+IMyTBXBgNVHSMEUDBOgBQlDiW+HfExpSnvWqM5a1JDC+IMyaEzpDEwLzELMAkG\par ??A1UEBhMCVVMxCzAJBgNVBAgTAkNBMRMwEQYDVQQKEwpGcmllbmRzdGVyggEAMAwG\par ??A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQCXFtEZswNcPcOTT78oeTuslgmu\par ??0shaZB0PAjA3I89OJZBI7SknIwDxj56kNZpEo6Rhf3uilpj44gkJFecSYnG2\par ??-----END CERTIFICATE-----"\cf0 ;\par ??\par ??    \cf1 public\cf0  \cf1 static\cf0  \cf4 X509Certificate2\cf0  FriendsterCertificate\par ??    \{\par ??      \cf1 get\cf0  \{ \cf1 return\cf0  \cf1 new\cf0  \cf4 X509Certificate2\cf0 (\cf4 Encoding\cf0 .ASCII.GetBytes(_friendsterCertificate)); \}\par ??    \}\par ??\}}
--&gt;
&lt;/p&gt;
&lt;div style="border: 1px dashed ; background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;OpenSocialCertificates&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;const&lt;/span&gt; &lt;span style="color: blue;"&gt;string&lt;/span&gt; _friendsterCertificate
=
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;@"-----BEGIN CERTIFICATE-----&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;MIIB2TCCAYOgAwIBAgIBADANBgkqhkiG9w0BAQUFADAvMQswCQYDVQQGEwJVUzEL&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;MAkGA1UECBMCQ0ExEzARBgNVBAoTCkZyaWVuZHN0ZXIwHhcNMDgwODEzMTgwMzQ5&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;WhcNMTQwMjAzMTgwMzQ5WjAvMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExEzAR&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;BgNVBAoTCkZyaWVuZHN0ZXIwXDANBgkqhkiG9w0BAQEFAANLADBIAkEAyVjnX2Hr&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;SLTyAuh2f2/OSRWkLFo3+q+l0Czb48v24Me6CsoexkPgwLOjXmPn/Pt8WtwlisQP&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;tZ9RX30iymg0owIDAQABo4GJMIGGMB0GA1UdDgQWBBQlDiW+HfExpSnvWqM5a1JD&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;C+IMyTBXBgNVHSMEUDBOgBQlDiW+HfExpSnvWqM5a1JDC+IMyaEzpDEwLzELMAkG&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;A1UEBhMCVVMxCzAJBgNVBAgTAkNBMRMwEQYDVQQKEwpGcmllbmRzdGVyggEAMAwG&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADQQCXFtEZswNcPcOTT78oeTuslgmu&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;0shaZB0PAjA3I89OJZBI7SknIwDxj56kNZpEo6Rhf3uilpj44gkJFecSYnG2&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: rgb(163, 21, 21);"&gt;-----END CERTIFICATE-----"&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;static&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;X509Certificate2&lt;/span&gt; FriendsterCertificate
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;get&lt;/span&gt; { &lt;span style="color: blue;"&gt;return&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;X509Certificate2&lt;/span&gt;(&lt;span style="color: rgb(43, 145, 175);"&gt;Encoding&lt;/span&gt;.ASCII.GetBytes(_friendsterCertificate));
}
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;
&lt;br&gt;
It's worth noting that the certificates can be changed at any time - but fair warning
will be given (according to the document) - and that the location (url) of the certificate
is actually included as a parameter in the requests the host makes to your application
(&lt;b&gt;xoauth_signature_publickey&lt;/b&gt;) - so it's fairly trivial to implement a caching
scheme to automatically pull down and update the certificate if it has changed.&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;Now that we have the certificate we just need to validate the
request, in this cause I'm just going to check it's been signed - I've left validating
timestamps and nonces out of the example, as these tend to be propritary to the app
your building, but both are easy to implement.&lt;br&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;!--
{\rtf1\ansi\ansicpg\lang1024\noproof65001\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Courier New;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;\red43\green145\blue175;\red0\green128\blue0;\red163\green21\blue21;}??\fs20 \cf1 public\cf0  \cf1 partial\cf0  \cf1 class\cf0  \cf4 SocialService\cf0  : \cf4 Page\par ??\cf0 \{\par ??    \cf1 protected\cf0  \cf1 void\cf0  Page_Load(\cf1 object\cf0  sender, \cf4 EventArgs\cf0  e)\par ??    \{\par ??        ValidateWithDevDefinedOAuth();\par ??\par ??        \cf5 // now handle the request...\par ??\cf0     \}\par ??\par ??    \cf1 private\cf0  \cf1 void\cf0  ValidateWithDevDefinedOAuth()\par ??    \{\par ??        \cf1 try\par ??\cf0         \{\par ??            \cf4 OAuthContext\cf0  context = \cf1 new\cf0  \cf4 OAuthContextBuilder\cf0 ().FromHttpRequest(Request);\par ??            \cf1 var\cf0  signer = \cf1 new\cf0  \cf4 OAuthContextSigner\cf0 ();\par ??            \cf1 var\cf0  signingContext = \cf1 new\cf0  \cf4 SigningContext\cf0  \{Algorithm = \cf4 OpenSocialCertificates\cf0 .FriendsterCertificate.PublicKey.Key\};\par ??\par ??            \cf1 if\cf0  (!signer.ValidateSignature(context, signingContext))\par ??            \{\par ??                \cf1 throw\cf0  \cf1 new\cf0  \cf4 OAuthException\cf0 (context, \cf4 OAuthProblems\cf0 .SignatureInvalid, \cf6 "check certificate is still valid"\cf0 );\par ??            \}\par ??        \}\par ??        \cf1 catch\cf0  (\cf4 OAuthException\cf0  authEx)\par ??        \{\par ??            Response.Clear();\par ??            Response.Write(authEx.Report.ToString());\par ??            Response.End();\par ??        \}\par ??    \}\par ??\}}
--&gt;
&lt;/p&gt;
&lt;div style="border: 1px dashed ; background: white none repeat scroll 0% 50%; font-family: Courier New; font-size: 10pt; color: black; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;
&lt;p style="margin: 0px;"&gt;
&lt;span style="color: blue;"&gt;public&lt;/span&gt; &lt;span style="color: blue;"&gt;partial&lt;/span&gt; &lt;span style="color: blue;"&gt;class&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SocialService&lt;/span&gt; : &lt;span style="color: rgb(43, 145, 175);"&gt;Page&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;protected&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color: blue;"&gt;object&lt;/span&gt; sender, &lt;span style="color: rgb(43, 145, 175);"&gt;EventArgs&lt;/span&gt; e)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ValidateWithDevDefinedOAuth();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: green;"&gt;// now handle the
request...&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;private&lt;/span&gt; &lt;span style="color: blue;"&gt;void&lt;/span&gt; ValidateWithDevDefinedOAuth()
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;try&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(43, 145, 175);"&gt;OAuthContext&lt;/span&gt; context
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;OAuthContextBuilder&lt;/span&gt;().FromHttpRequest(Request);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; signer
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;OAuthContextSigner&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;var&lt;/span&gt; signingContext
= &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;SigningContext&lt;/span&gt; {Algorithm
= &lt;span style="color: rgb(43, 145, 175);"&gt;OpenSocialCertificates&lt;/span&gt;.FriendsterCertificate.PublicKey.Key};
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;if&lt;/span&gt; (!signer.ValidateSignature(context,
signingContext))
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;throw&lt;/span&gt; &lt;span style="color: blue;"&gt;new&lt;/span&gt; &lt;span style="color: rgb(43, 145, 175);"&gt;OAuthException&lt;/span&gt;(context, &lt;span style="color: rgb(43, 145, 175);"&gt;OAuthProblems&lt;/span&gt;.SignatureInvalid, &lt;span style="color: rgb(163, 21, 21);"&gt;"check
certificate is still valid"&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;catch&lt;/span&gt; (&lt;span style="color: rgb(43, 145, 175);"&gt;OAuthException&lt;/span&gt; authEx)
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Clear();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.Write(authEx.Report.ToString());
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Response.End();
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; }
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin: 0px;"&gt;
&lt;font color="#000000"&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
The process is basically using the &lt;b&gt;OAuthContextBuilder&lt;/b&gt; class to construct a
context (which is used to calculate a signature base) from the current pages request.&amp;nbsp;
It then constructs a signer (used for signing requests and checking their signatures
i.e. validation) and a signing context, which is used to provide additional information
to the signer, such as the public key of the friendster certificate.
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
We then invoke &lt;b&gt;ValidateSignature&lt;/b&gt; to ensure the signature is valid - if not
we throw an exception.&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
Finally if an OAuthException is thrown we catch it and render it's report to response
stream and close it - this provides diagnostic information as per the &lt;a href="http://oauth.pbwiki.com/ProblemReporting"&gt;OAuth
problem reporting extension&lt;/a&gt;.
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
Hope this has been useful to some people out there - BTW I'm no OpenSocial expert,
so please direct general OpenSocial questions to the apropriate google groups, I can
only help with OAuth library questions.&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;h2 style="margin: 0px;"&gt;Problems with Friendster Requests&lt;br&gt;
&lt;/h2&gt;
&lt;p style="margin: 0px;"&gt;
&lt;br&gt;
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
As a side note - for anyone who's tried writing an OpenSocial application using DevDefined.OAuth
to validate request signatures they may have found it didn't work! This was a result
of Friendster appending an ampersand (&amp;amp;) to the end of the query string on the
Url, which was causing the signature base to be incorrect (I'm not sure if this is
an issue for other OpenSocial implementations) - The code now checks for this and
removes it if discovered - and signature validation works as expected.
&lt;/p&gt;
&lt;p style="margin: 0px;"&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=4f387bde-7ed6-480b-952b-bbc0ead9ebfb" /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=PopCL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=PopCL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=NvFpl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=NvFpl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=yrFXl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=yrFXl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=5SWYl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=5SWYl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=GuBBL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=GuBBL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</comments>
      <category>.Net;DevDefined Ltd.;OAuth;OpenSocial;Friendster</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,4f387bde-7ed6-480b-952b-bbc0ead9ebfb.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=5e67d338-2516-49e2-a894-98568415a2e7</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=5e67d338-2516-49e2-a894-98568415a2e7</wfw:commentRss>
      
      <title>Architecture chat tomorrow (Thursday)</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/388007607/PermaLink,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</link>
      <pubDate>Tue, 09 Sep 2008 20:50:20 GMT</pubDate>
      <description>Architecture chat tomorrow, Thursday -&#xD;
11&lt;sup&gt;th&lt;/sup&gt; September @ 11:30am onwards.&lt;br&gt;&lt;br&gt;&#xD;
Some possible topics / things that have caught my eye lately:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="www.google.com/chrome"&gt;Google Chrome&lt;/a&gt; - V8's great, flash works but our&#xD;
"anywhere" platform silverlight wont, and apparently not until chrome gains market&#xD;
share... hmmm.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
TechEd Roundup - including the infamous keynote.&lt;/li&gt;&lt;li&gt;&#xD;
Teched Bloggers Dinner report and related "NZ blogging push" for the next year.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1673"&gt;C#&#xD;
Library&lt;/a&gt; for controlling EC2 Instances (via &lt;a href="http://www.geekzone.co.nz/dmw"&gt;David&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&#xD;
Generic Natural Language DSL (via &lt;a href="http://www.ayende.com/Blog/archive/2008/09/08/Implementing-generic-natural-language-DSL.aspx"&gt;ayende&lt;/a&gt;)&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Managed Extensibility Framework (&lt;a href="http://www.codeplex.com/MEF"&gt;MEF&lt;/a&gt;) Preview&#xD;
2 vs. &lt;a href="http://www.mono-project.com/Mono.Addins"&gt;Mono.Addins&lt;/a&gt;.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jetbrains.com/resharper/releaseNotes41.html"&gt;Resharper 4.1&lt;/a&gt; released.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Spec/BDD frameworks (&lt;a href="http://codebetter.com/blogs/aaron.jensen/archive/2008/05/08/introducing-machine-specifications-or-mspec-for-short.aspx"&gt;MSpec&lt;/a&gt;, &lt;a href="http://www.robfe.com/2008/07/storyq-bdd-acceptance-testing-with-a-little-help-from-linq/"&gt;StoryQ&lt;/a&gt; etc.)&lt;/li&gt;&lt;li&gt;&lt;a href="http://endurotracker.blogspot.com/2008/08/cloud-computing-mono-setup-on-amazon.html"&gt;Monorail&#xD;
in the Cloud&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&#xD;
See you all there!&lt;br&gt;&lt;br&gt;&#xD;
P.S. Information regarding the location and previous chat write-ups can be found &lt;a href="http://wiki.bittercoder.com/SylviaParkArchitectureChats.ashx"&gt;here&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=5e67d338-2516-49e2-a894-98568415a2e7"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=5FvrL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=5FvrL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=00xcl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=00xcl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=CZf3l"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=CZf3l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=BtLzl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=BtLzl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=9FXrL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=9FXrL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</comments>
      <category>architecture chat</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,5e67d338-2516-49e2-a894-98568415a2e7.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=6fb179ae-22f6-495d-ac51-22537e3770d1</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=6fb179ae-22f6-495d-ac51-22537e3770d1</wfw:commentRss>
      
      <title>ADVANCED-DOTNET is being retired...</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/387003392/PermaLink,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</link>
      <pubDate>Mon, 08 Sep 2008 20:20:04 GMT</pubDate>
      <description>&#xD;
        &lt;p&gt;&#xD;
Unfortunately the old &lt;a href="http://discuss.develop.com/advanced-dotnet.html"&gt;ADVANCED-DOTNET&lt;/a&gt; mailing&#xD;
list at &lt;a href="http://www.develop.com/"&gt;DevelopMentor&lt;/a&gt; is being put down, like&#xD;
an old but still on the odd occasion faithful dog. This would be one of the first&#xD;
.Net mailing lists I ever really latched onto (about 6 years ago...) and there have&#xD;
been some pretty bright sparks on their since day one. &#xD;
&lt;/p&gt;&#xD;
        &lt;blockquote&gt;&#xD;
          &lt;pre&gt;Hi all&#xD;
&#xD;
We are currently undertaking an infrastructure review at DevelopMentor and&#xD;
have realised that apart from this one list the listserv is not really used&#xD;
any more. Unfortunately we cannot really justify maintaining the server for&#xD;
this one list and so we have decided to retire the listserv.&#xD;
&#xD;
I created this list as a moderated list six and a half years ago and so feel&#xD;
a bit sad to see its passing, but the world has moved on from mail&#xD;
reflectors to blogs, web forums and other discussion mediums.&#xD;
&#xD;
We will be taking the server offline on the 30th September so you have a bit&#xD;
of time to get anything you need from the archives&#xD;
&#xD;
Thanks for your involvement over the last few years&#xD;
&#xD;
Richard Blewett&#xD;
CTO&#xD;
DevelopMentor&#xD;
  &lt;/pre&gt;&#xD;
        &lt;/blockquote&gt;&#xD;
        &lt;p&gt;&#xD;
I think what's more disappointing is that in turning it off they certainly haven't&#xD;
spent much time thinking about an exit plan, because there's no archive availability&#xD;
(the listserv is getting turned off completely) or alternative place identified for&#xD;
list participants to move to... I often think this is something that needs to be thought&#xD;
about up front (and budgeted for,  almost in some separate trust fund) especially&#xD;
as communities and social platforms proliferate - it's a shame to see information&#xD;
evaporate. &#xD;
&lt;br&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
That said it looks like some of the long time readers of the group are working to&#xD;
migrate the server away from develop mentor, or to move onto &lt;a href="http://groups.google.com/group/advanced-dotnet"&gt;this&#xD;
google group&lt;/a&gt; - be interesting to see where this goes.&lt;br&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
On a side note I wonder how much sites like &lt;a href="http://beta.stackoverflow.com/"&gt;stack&#xD;
overflow&lt;/a&gt; will errode the last remnants of mail-only technical mailing lists...&#xD;
personally (while I've been beta testing it) I've found the stack overflow concept&#xD;
doesn't really gel with me - but I can see it's appeal to others - personally I prefer&#xD;
discussion over problem "resolution" and the ability for a group to collectively choose&#xD;
not to answer a problem (because it's but 2 clicks away on a simple google search)&#xD;
- where as with the reputation system in Stack overflow the simple/dumb/obvious questions&#xD;
are like crack for the reputation kidies.  &#xD;
&lt;br&gt;&lt;/p&gt;&#xD;
        &lt;p&gt;&#xD;
On the same note, how much will stack overflow and similar concepts errode organic&#xD;
blog discovery (which is normally while someone is trying to find an answer to a question)....&#xD;
hmmm&lt;br&gt;&lt;/p&gt;&#xD;
        &lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=6fb179ae-22f6-495d-ac51-22537e3770d1"&gt;&lt;/img&gt;&#xD;
      &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=HsvmL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=HsvmL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=PJ4Jl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=PJ4Jl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=RCo3l"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=RCo3l" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=t3uhl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=t3uhl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=KwLtL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=KwLtL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</comments>
      <category>.Net</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,6fb179ae-22f6-495d-ac51-22537e3770d1.aspx</feedburner:origLink></item>
    <item>
      <trackback:ping>http://blog.bittercoder.com/Trackback.aspx?guid=012836d0-b98f-450d-8bf3-3328d1cdf6d4</trackback:ping>
      <pingback:server>http://blog.bittercoder.com/pingback.aspx</pingback:server>
      <pingback:target>http://blog.bittercoder.com/PermaLink,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</pingback:target>
      <dc:creator>Alex Henderson</dc:creator>
      <wfw:comment>http://blog.bittercoder.com/CommentView,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</wfw:comment>
      <wfw:commentRss>http://blog.bittercoder.com/SyndicationService.asmx/GetEntryCommentsRss?guid=012836d0-b98f-450d-8bf3-3328d1cdf6d4</wfw:commentRss>
      <slash:comments>2</slash:comments>
      
      <title>Choice is good - another OAuth library for .Net emerges</title>
      <guid isPermaLink="false">http://blog.bittercoder.com/PermaLink,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</guid>
      <link>http://feeds.feedburner.com/~r/BitterCoder/~3/386574529/PermaLink,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</link>
      <pubDate>Mon, 08 Sep 2008 10:11:11 GMT</pubDate>
      <description>You may recall a few months back I released&#xD;
an &lt;a href="http://blog.bittercoder.com/PermaLink,guid,a7ec7a4d-1d33-418a-8649-21fe8aa420fe.aspx"&gt;OAuth&#xD;
library for .Net&lt;/a&gt; (which can be found &lt;a href="http://code.google.com/p/devdefined-tools/wiki/OAuth"&gt;here&#xD;
on google code&lt;/a&gt;) - at the time of writing that library the only other OAuth "solution"&#xD;
for .Net developers was a C# file containing some simple helper functions, that didn't&#xD;
even produce valid results in many cases, and the rather basic implementation as part&#xD;
of the restful chess/myspace example.&lt;br&gt;&lt;br&gt;&#xD;
Well the guys at &lt;a href="http://www.madgex.com/"&gt;Madgex&lt;/a&gt; in the UK have now released&#xD;
their own OAuth.Net library.. for more details you can:&lt;br&gt;&lt;ul&gt;&lt;li&gt;&#xD;
Check out &lt;a href="http://siliconbea.ch/technology/dot-net/2008-09-05/bringing-oauth-to-dot-net-developers/"&gt;Bruce&#xD;
Boughton's post&lt;/a&gt; on their initial release.&lt;/li&gt;&lt;li&gt;&#xD;
Get some more details on the &lt;a href="http://lab.madgex.com/oauth-net/"&gt;Madgex lab&#xD;
page&lt;/a&gt; here.&lt;/li&gt;&lt;li&gt;&#xD;
And of course &lt;a href="http://code.google.com/p/oauth-dot-net/"&gt;grab the code&lt;/a&gt; from&#xD;
here.&lt;/li&gt;&lt;/ul&gt;&#xD;
As for differences between the two implementations... from a 50K foot glance.&lt;br&gt;&lt;ul&gt;&lt;li&gt;&#xD;
There's a dependency on the Windsor container when using the Madgex library (if you&#xD;
want to use it's out the box implementation / configuration examples etc.)&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The Madgex library includes a http module for making a provider implementation easier&#xD;
when building web apps.&lt;/li&gt;&lt;li&gt;&#xD;
The madgex library appears to take a harder dependency on HttpRequest then the DevDefined&#xD;
library (but that's just a hunch, saw it in a few interface definitions, rather then&#xD;
some wrapper equivalent).&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
The madgex library looks a little more polished (i.e. xml docs) and has a configuration&#xD;
section.&lt;/li&gt;&lt;li&gt;&#xD;
The Madgex library features some niceities like Sliding window validation support&#xD;
(i.e. they only allow messages to be supplied where the timestamp falls within a certain&#xD;
time window of the server, and keep the list of previous nonces only for the period&#xD;
of that window - flushing nonces that are not longer required via a background thread&#xD;
- saving on the volume of nonces to record i.e. for replay attacks).  Of course&#xD;
it's an in-memory solution, so not suited to farms, but still cool.&lt;br&gt;&lt;/li&gt;&lt;li&gt;&#xD;
Slightly less fluent consumer implementation, I prefer my libraries consumer implementation,&#xD;
but of course that's just me :P&lt;/li&gt;&lt;li&gt;&#xD;
Both libraries are under the MIT license.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&#xD;
All said and done it's a very sound effort, great work guys! And it's awesome to have&#xD;
some choice emerging in this space.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;p&gt;&lt;/p&gt;&lt;img width="0" height="0" src="http://blog.bittercoder.com/aggbug.ashx?id=012836d0-b98f-450d-8bf3-3328d1cdf6d4"&gt;&lt;/img&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=xMARL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=xMARL" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=WwZLl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=WwZLl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=oJVXl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=oJVXl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=dMOyl"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=dMOyl" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~f/BitterCoder?a=1l9eL"&gt;&lt;img src="http://feeds.feedburner.com/~f/BitterCoder?i=1l9eL" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;</description>
      <comments>http://blog.bittercoder.com/CommentView,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</comments>
      <category>.Net;DevDefined Ltd.;OAuth</category>
    <feedburner:origLink>http://blog.bittercoder.com/PermaLink,guid,012836d0-b98f-450d-8bf3-3328d1cdf6d4.aspx</feedburner:origLink></item>
  <feedburner:awareness>http://api.feedburner.com/awareness/1.0/GetFeedData?uri=BitterCoder</feedburner:awareness></channel>
</rss>
