﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" 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:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>ICode</title>
    <description>DotNet Technologies for the most part ;)</description>
    <link>http://redb.mine.nu/blogs/redb/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.NET 1.5.0.7</generator>
    <language>en-US</language>
    <blogChannel:blogRoll>http://redb.mine.nu/blogs/redb/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd</blogChannel:blink>
    <dc:creator>Ricardo Bartolomeu</dc:creator>
    <dc:title>ICode</dc:title>
    <geo:lat>3,712,582.000000</geo:lat>
    <geo:long>-7,649,692.000000</geo:long>
    <item>
      <title>First Web Application ever</title>
      <description>&lt;p&gt;I’m not a web guy, (&lt;font color="#0000ff"&gt;&lt;strong&gt;at all&lt;/strong&gt;&lt;/font&gt;) but some day even I had to build a Web Application.&lt;/p&gt;  &lt;p&gt;That day was today. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The first thing you’ll notice if you have cable tv and live in Portugal is that the logo resembles a lot like the one in FoxLife. (&lt;font color="#ff0000"&gt;What the hell?&lt;/font&gt;) That was just a coincidence. Belive me.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Logos" border="0" alt="Logos" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image.png" width="535" height="74" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So what’s the site about?&lt;/p&gt;  &lt;p&gt;Its all about realtors that want to sell properties and buyers, the exact same thing that &lt;a href="http://www.remax.com/" target="_blank"&gt;REMAX&lt;/a&gt; does.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=MainPage%20-%20en-US%20-%20Admin_2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="MainPage in enUS" border="0" alt="MainPage in enUS" align="right" src="http://redb.mine.nu/blogs/redb//image.axd?picture=MainPage%20-%20en-US%20-%20Admin_thumb_2.png" width="380" height="679" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;It’s main features are:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Url Routing. &lt;/li&gt;    &lt;li&gt;Multi-Language, (&lt;font color="#0000ff"&gt;English, Portuguese, Chinese, etc.&lt;/font&gt;) &lt;/li&gt;    &lt;li&gt;Multi-Culture, (&lt;font color="#0000ff"&gt;Automatic Currency Convertion and Parsing, same for areas, etc.&lt;/font&gt;) &lt;/li&gt;    &lt;li&gt;Can load/change/create new Languages/Cultures on the fly, without the need to recompile or restart the application through a custom XML file. &lt;/li&gt;    &lt;li&gt;Custom System Cache, (&lt;font color="#0000ff"&gt;you can cache your application from within without the need to configure IIS, and this includes any SQL Server database access you do or even single controls&lt;/font&gt;) &lt;/li&gt;    &lt;li&gt;Custom generated pictures, (&lt;font color="#0000ff"&gt;this includes, banners, resources, compression, etc.&lt;/font&gt;) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image_2.png" width="363" height="282" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you check the previous picture you’ll notice they are the same, the first is in English and the second is in Portuguese, (&lt;font color="#0000ff"&gt;Take a look at the prices and areas, they are relative to a specific culture&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;There’s also a lot of AJAX going on. &lt;/li&gt;    &lt;li&gt;A custom built jQuery carrousel. &lt;/li&gt;    &lt;li&gt;A Bing map editor, (&lt;font color="#0000ff"&gt;including drawing&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;Comments. &lt;/li&gt;    &lt;li&gt;Login. &lt;/li&gt;    &lt;li&gt;You can insert YouTube videos. &lt;/li&gt;    &lt;li&gt;All errors, (&lt;font color="#0000ff"&gt;even regular 404&lt;/font&gt;), are logged into the database. &lt;/li&gt;    &lt;li&gt;Quick Search. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=image_7.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Map" border="0" alt="Map" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image_thumb_4.png" width="336" height="130" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=image_8.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Popup" border="0" alt="Popup" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image_thumb_5.png" width="259" height="130" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=image_9.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Product" border="0" alt="Product" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image_thumb_6.png" width="150" height="130" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For those of you more interesed in the technical details, such as caching:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="Caching" border="0" alt="Caching" src="http://redb.mine.nu/blogs/redb//image.axd?picture=image_10.png" width="213" height="274" /&gt; &lt;/p&gt;  &lt;p&gt;You can take a look at the source code here:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/DAW.zip" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/DAW.zip"&gt;DAW.zip&lt;/a&gt;&lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Or you can check these videos.&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Products.wmv" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Products.wmv"&gt;Products.wmv&lt;/a&gt;&lt;/iframe&gt;    &lt;br /&gt;&lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Manage.wmv" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Manage.wmv"&gt;Manage.wmv&lt;/a&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Presentation.wmv" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/DAW%20Videos/Presentation.wmv"&gt;Presentation.wmv&lt;/a&gt;&lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Cheers.&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2010/03/05/First-Web-Application-ever.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2010/03/05/First-Web-Application-ever.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=68dd5b27-09cf-4d8a-ba15-2b7808a9b06a</guid>
      <pubDate>Fri, 05 Mar 2010 01:33:50 +0000</pubDate>
      <category>Asp.Net</category>
      <category>C#</category>
      <category>SQL Server</category>
      <category>jQuery</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=68dd5b27-09cf-4d8a-ba15-2b7808a9b06a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=68dd5b27-09cf-4d8a-ba15-2b7808a9b06a</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2010/03/05/First-Web-Application-ever.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=68dd5b27-09cf-4d8a-ba15-2b7808a9b06a</wfw:commentRss>
    </item>
    <item>
      <title>Serve Dynamic Javascript using Generic Handlers</title>
      <description>&lt;p&gt;Actually I want to serve other dynamic files too, such as Css for instance.&lt;/p&gt;  &lt;p&gt;How in hell am I gonna do that without embedding that &lt;strong&gt;dreadful&lt;/strong&gt; code in Asp.Net pages? &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’m glad you ask. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;If you’re anything like me you’ll want to keep your Css/Javascript files apart from your Html and serve them separately, (&lt;font color="#0000ff"&gt;maybe even offload them to another server&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First things first.&lt;/p&gt;  &lt;p&gt;You’ll need to be able to compile Asp.Net pages on the fly, if you want you can take a look at this &lt;a href="http://redb.mine.nu/blogs/redb//post/2010/01/10/Dynamically-RenderLoad-an-AspNet-Page.aspx"&gt;post&lt;/a&gt;. (&lt;font color="#0000ff"&gt;It explains how to Programatically Render/Load an Asp.Net Page in more detail&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Then you’ll a need a Generic Handler.&lt;/p&gt;  &lt;p&gt;Let’s go ahead an create one:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:ae9b4cc7-d2d7-4a26-9868-a909b4528587" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;public class DynamicFile : IHttpHandler&lt;br/&gt;{&lt;br/&gt;      public void ProcessRequest(HttpContext context)&lt;br/&gt;      {&lt;br/&gt;            ProcessJScriptRequest("~/Scripts/JS.aspx");&lt;br/&gt;      }&lt;br/&gt;&lt;br/&gt;      public bool IsReusable&lt;br/&gt;      {&lt;br/&gt;            get { return true; }&lt;br/&gt;      }&lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;You’ll need one of these Handlers for each dynamic file you have.&lt;/p&gt;

&lt;p&gt;As you can see this section is pretty easy to follow.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Next &lt;strong&gt;ProcessJScriptRequest()&lt;/strong&gt; handles all that pluming involved in serving a Javascript file.&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:a52aae07-8844-4ae9-9de3-bcb9efa08c57" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;public static void ProcessJScriptRequest(string path)&lt;br/&gt;{&lt;br/&gt;            try&lt;br/&gt;            {&lt;br/&gt;                var page = ((BasePage)(BuildManager.CreateInstanceFromVirtualPath(path, typeof(Page))));&lt;br/&gt;                var sb = new StringBuilder();&lt;br/&gt;                var tw = new HtmlTextWriter(new StringWriter(sb));&lt;br/&gt;&lt;br/&gt;                page.Server.Execute(path, tw, true);&lt;br/&gt;                page.RenderControl(tw);&lt;br/&gt;&lt;br/&gt;                tw.Flush();&lt;br/&gt;                &lt;br/&gt;                HttpContext.Current.Response.ContentType = "application/x-javascript";&lt;br/&gt;                HttpContext.Current.Response.Write(sb.ToString());&lt;br/&gt;            }&lt;br/&gt;            catch (Exception ex)&lt;br/&gt;            {&lt;br/&gt;                //Logger.Add(new PageException(HttpContext.Current, ex), ExceptionLevel.High);&lt;br/&gt;            }&lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If you’ve read my previous blog post then there isn’t anything specially interesting going on here.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;By now you may be wondering...&lt;/p&gt;

&lt;p&gt;If we’re just compiling Asp.Net pages on the fly what about Javascript/CSS intellisense, can we have it? (&lt;font color="#0000ff"&gt;If they are aspx files&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Yes... &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-laughing.gif" class="flag" alt="Laughing" /&gt;&lt;/p&gt;

&lt;p&gt;But you’ll need a hack.&lt;/p&gt;

&lt;p&gt;Let’s take a look at you dynamic file being requested by the generic handler:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:4a3b8b24-dfc8-49ca-b69c-39902fece476" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;&amp;lt;%@ Page   Language="C#" ... %&amp;gt;&lt;br/&gt;&amp;lt;%@ Import Namespace="System.Linq"%&amp;gt;&lt;br/&gt;&amp;lt;%@ Import Namespace="System.Xml"%&amp;gt;&lt;br/&gt;&amp;lt;%@ Import Namespace="System.Xml.Linq"%&amp;gt;&lt;br/&gt;&amp;lt;%@ Import Namespace="System.IO"%&amp;gt;&lt;br/&gt;&lt;br/&gt;&amp;lt;!--//&lt;br/&gt;&lt;br/&gt;&amp;lt;% var empty = string.Empty; %&amp;gt;&lt;br/&gt;&lt;br/&gt;function isNull(s) {&lt;br/&gt;	return (s == undefined || o == null);&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;//--&amp;gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This alone won’t provide any intellisense you must surround you’re code with the &amp;lt;script type=”text/javascript”&amp;gt; tag.&lt;/p&gt;

&lt;p&gt;Once you’ve done it you can remove&amp;#160; it from the release version.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;To call your dynamic Javascript file you only need to do something like this:&lt;/p&gt;

&lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:d9761a9e-f23e-44c5-aa26-f55f35d3daa4" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;&amp;lt;script&lt;br/&gt;    language="javascript"&lt;br/&gt;    type="text/javascript"&lt;br/&gt;    src_="Scripts/DynamicFile.ashx?YourQueryString=IfYouWant"&lt;br/&gt;&amp;gt;&amp;lt;/script&amp;gt; &lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Et voila!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2010/01/10/Serve-Dynamic-Javascript-using-Generic-Handlers.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2010/01/10/Serve-Dynamic-Javascript-using-Generic-Handlers.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=1937e509-9f04-4158-979d-13aa55336c4e</guid>
      <pubDate>Sun, 10 Jan 2010 22:04:53 +0000</pubDate>
      <category>C#</category>
      <category>Asp.Net</category>
      <category>Javascript</category>
      <category>Tutorial</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=1937e509-9f04-4158-979d-13aa55336c4e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=1937e509-9f04-4158-979d-13aa55336c4e</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2010/01/10/Serve-Dynamic-Javascript-using-Generic-Handlers.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=1937e509-9f04-4158-979d-13aa55336c4e</wfw:commentRss>
    </item>
    <item>
      <title>Programatically Render/Load an Asp.Net Page</title>
      <description>&lt;p&gt;How to &lt;strong&gt;programatically&lt;/strong&gt; render or load an Asp.Net page/control?&lt;/p&gt;  &lt;p&gt;First of all why would you wanna render/load your own pages/controls instead of letting Asp.Net do it?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Well you might wanna cache the results of that request and build your own custom cache system for example.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;If you want you can choose to cache selectively. &lt;/li&gt;    &lt;li&gt;You can use it for routing, (&lt;font color="#0000ff"&gt;Asp.Net MVC uses the technique described here&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;You can use it for UnitTesting, (&lt;font color="#0000ff"&gt;by calling pages with arguments as you do for your methods, although it won’t be very clean&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;Or better yet you can use this technique to serve dynamic javascript or css files, (or &lt;font color="#0000ff"&gt;any type of file for that matter&lt;/font&gt;). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The main core is the method &lt;strong&gt;BuildManager.CreateInstanceFromVirtualPath(...)&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Basically what this method does is to “render”, (&lt;font color="#ff0000"&gt;I’m using quotes because simply calling this method won’t render a thing&lt;/font&gt;), an Asp.Net page into a specific &lt;strong&gt;HtmlTextWriter&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After that you’ll need to provide the server context in which the page will be compiled by calling: &lt;strong&gt;Server.Execute(...)&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, depending how you created a new instance of &lt;strong&gt;HtmlTextWriter&lt;/strong&gt; you’ll have access to a &lt;strong&gt;StringBuilder&lt;/strong&gt; object that captures the page output based in the specified server context.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here’s the code:&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:f30de949-a2fe-4686-b890-2538865e20c2" class="wlWriterEditableSmartContent"&gt;&lt;pre name="code" class="c#"&gt;StringBuilder  sb = new StringBuilder();&lt;br/&gt;StringWriter   sw = new StringWriter(sb);&lt;br/&gt;HtmlTextWriter tw = new HtmlTextWriter(sw);&lt;br/&gt;&lt;br/&gt;var path = HttpContext.Current.Request.Url.ToString();&lt;br/&gt;var page = ((Page)(BuildManager.CreateInstanceFromVirtualPath(path, typeof(Page))));&lt;br/&gt;&lt;br/&gt;HttpContext.Current.Server.Execute(page, tw, true);&lt;br/&gt;&lt;br/&gt;tw.Flush();&lt;br/&gt;sw.Flush();&lt;br/&gt;return sb.ToString();&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;What about serving dynamic files with this technique?&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Well that’s the next post. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2010/01/10/Dynamically-RenderLoad-an-AspNet-Page.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2010/01/10/Dynamically-RenderLoad-an-AspNet-Page.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=1f42b32a-e93a-43be-bb63-8f715b1397e2</guid>
      <pubDate>Sun, 10 Jan 2010 21:59:03 +0000</pubDate>
      <category>C#</category>
      <category>Tutorial</category>
      <category>Asp.Net</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=1f42b32a-e93a-43be-bb63-8f715b1397e2</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=1f42b32a-e93a-43be-bb63-8f715b1397e2</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2010/01/10/Dynamically-RenderLoad-an-AspNet-Page.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=1f42b32a-e93a-43be-bb63-8f715b1397e2</wfw:commentRss>
    </item>
    <item>
      <title>C# Sudoku Solver, (WPF)</title>
      <description>&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/CSharpSudokuSolver(WPF)_3543/myPuzzle%20Interface.png" target="_blank"&gt;&lt;img title="myPuzzle Interface" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="375" alt="myPuzzle Interface" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/CSharpSudokuSolver(WPF)_3543/myPuzzle%20Interface_thumb_1.png" width="298" align="right" border="0" /&gt;&lt;/a&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt; I’m not a &lt;a href="http://en.wikipedia.org/wiki/Sudoku" target="_blank"&gt;Sudoku&lt;/a&gt; type of person, actually this is probably one of the puzzles that I most &lt;strong&gt;hate&lt;/strong&gt; to solve manually.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Too many variables, Sudoku is one of those problems that is perfect to be crunched by computers.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;And since I’m a computer guy… &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;There are several techniques to solve a puzzle either by logic or using brute force, I’m not going to discuss neither since you can already find &lt;strong&gt;lots&lt;/strong&gt; of good documentation all over the internet, (&lt;font color="#0000ff"&gt;I used “resources” from &lt;a href="http://www.palmsudoku.com/pages/techniques-overview.php" target="_blank"&gt;here&lt;/a&gt;&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The techniques that I’m using are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Single Position, (&lt;a href="http://www.palmsudoku.com/pages/techniques-1.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Single Candidate, (&lt;a href="http://www.palmsudoku.com/pages/techniques-2.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Candidate Line, (&lt;a href="http://www.palmsudoku.com/pages/techniques-3.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Brute Force.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These techniques are &lt;strong&gt;more than sufficient&lt;/strong&gt; to solve &lt;strong&gt;any&lt;/strong&gt; puzzle, (&lt;font color="#0000ff"&gt;I hope &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/CSharpSudokuSolver(WPF)_3543/myPuzzle%20Interface%203.png" target="_blank"&gt;&lt;img title="myPuzzle Interface 3" style="border-right: 0px; border-top: 0px; display: inline; margin: 0px 50px 0px 0px; border-left: 0px; border-bottom: 0px" height="480" alt="myPuzzle Interface 3" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/CSharpSudokuSolver(WPF)_3543/myPuzzle%20Interface%203_thumb_1.png" width="213" align="left" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Techniques &lt;strong&gt;not&lt;/strong&gt; used:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Double Pair, (&lt;a href="http://www.palmsudoku.com/pages/techniques-4.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Multi-Line, (&lt;a href="http://www.palmsudoku.com/pages/techniques-5.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Naked Pairs/Triples, (&lt;a href="http://www.palmsudoku.com/pages/techniques-6.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Hidden Pairs/Triples, (&lt;a href="http://www.palmsudoku.com/pages/techniques-7.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;X-Wing, (&lt;a href="http://www.palmsudoku.com/pages/techniques-8.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Swordfish, (&lt;a href="http://www.palmsudoku.com/pages/techniques-9.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt;Forcing Chains, (&lt;a href="http://www.palmsudoku.com/pages/techniques-10.php" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;I’m not going to bore anyone with the implementation details, I will just leave the source code in C#:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/Sudoku%20C%7C3%20WPF.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/Sudoku%20C%7C3%20WPF.zip"&gt;Sudoku%20C%7C3%20WPF...&lt;/a&gt;&lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The zip file contains:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A Library,&lt;/li&gt;    &lt;li&gt;A Command Prompt Demo,&lt;/li&gt;    &lt;li&gt;Unit Testing, (&lt;a href="http://www.nunit.com/index.php" target="_blank"&gt;NUnit&lt;/a&gt;),&lt;/li&gt;    &lt;li&gt;A rather slow WPF implementation. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Since I’m not a designer a used pictures from &lt;a href="http://www.deviantart.com/" target="_blank"&gt;deviantart.com&lt;/a&gt; to build the WPF application, the designers that I borrowed art from are:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt; ~Ginnyhaha-Stock, (&lt;a href="http://ginnyhaha-stock.deviantart.com/art/Lines-paper-50861981" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt; ~Divinity-bliss, (&lt;a href="http://divinity-bliss.deviantart.com/art/Coffee-Stains-Photoshop-Brush-67127671" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt;    &lt;li&gt; =aR-Ka, (&lt;a href="http://ar-ka.deviantart.com/art/Coffee-Geommetry-115141673" target="_blank"&gt;link&lt;/a&gt;).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Please note that due to time constraints the WPF app is just a front-end with lot’s of functionality still to implement.&lt;/p&gt;  &lt;p&gt;Cheers. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/07/23/C-Sudoku-Solver-(WPF).aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/07/23/C-Sudoku-Solver-(WPF).aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=9c00bf32-845c-4392-82d2-bae906c62d88</guid>
      <pubDate>Thu, 23 Jul 2009 12:55:40 +0000</pubDate>
      <category>C#</category>
      <category>WPF</category>
      <category>Algorithms</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=9c00bf32-845c-4392-82d2-bae906c62d88</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=9c00bf32-845c-4392-82d2-bae906c62d88</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/07/23/C-Sudoku-Solver-(WPF).aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=9c00bf32-845c-4392-82d2-bae906c62d88</wfw:commentRss>
    </item>
    <item>
      <title>Project Cambridge (CLR Mapper + Linq Provider) Part I</title>
      <description>&lt;p&gt;For those who follow my blog, (&lt;font color="#0000ff"&gt;if I don’t count with my mom I believe I have exactly one follower&lt;/font&gt;), &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt; I’ll start posting in English.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Why?&lt;/strong&gt; Well I think that English is a much more natural language when dealing with technical terms, and yes, I can reach a much broader audience, (&lt;font color="#0000ff"&gt;shame on you&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Anyway…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;This will be the &lt;strong&gt;first&lt;/strong&gt; in a serious of ongoing posts how to build a CLR, (&lt;font color="#0000ff"&gt;Common Language Runtime&lt;/font&gt;), Mapper + Custom Linq Provider.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;First things first, &lt;strong&gt;what is&lt;/strong&gt; a CLR Mapper?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProjectCambridgeCLRMapperLinqProviderPartI_35435/ClassDiagram1.png" target="_blank"&gt;&lt;img title="Data Model Class Diagram" style="border-top-width: 0px; display: block; border-left-width: 0px; float: none; border-bottom-width: 0px; margin-left: auto; margin-right: auto; border-right-width: 0px" height="474" alt="Data Model Class Diagram" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProjectCambridgeCLRMapperLinqProviderPartI_35435/ClassDiagram1_thumb.png" width="800" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="1"&gt;Figure 1&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Well instead of designing your data in the &lt;strong&gt;database&lt;/strong&gt; and then mapping it back into Visual Studio. You design your data model directly in a DotNet Language, e.g C#, and than we map it, either to &lt;a href="http://www.microsoft.com/sql/default.mspx" target="_blank"&gt;SQL Server 2008&lt;/a&gt;, &lt;a href="http://www.microsoft.com/sqlserver/2005/en/us/default.aspx" target="_blank"&gt;SQL Server 2005&lt;/a&gt;, &lt;a href="http://www.mysql.com/" target="_blank"&gt;MySQL&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/XML" target="_blank"&gt;XML&lt;/a&gt;, &lt;a href="http://www.json.org/" target="_blank"&gt;JSON&lt;/a&gt;, etc…&lt;/p&gt;  &lt;p&gt;Quite like &lt;a href="https://www.hibernate.org/343.html" target="_blank"&gt;NHibernate&lt;/a&gt; but without all those &lt;strong&gt;dreadful&lt;/strong&gt; configuration files scattered all over the place, data manipulation and modern programming languages have been diverging for too long.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That way we can keep all of those nice features that C# provides us but that are &lt;strong&gt;really hard&lt;/strong&gt; to implement in SQL Server, (&lt;font color="#0000ff"&gt;Object Orientation being the &lt;strong&gt;single most important&lt;/strong&gt; feature&lt;/font&gt;), map IEnumerable data, map Enums, etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;If we take a look at &lt;strong&gt;&lt;font size="1"&gt;figure 1&lt;/font&gt;&lt;/strong&gt; we’ll see that we have a class &lt;strong&gt;Client&lt;/strong&gt; that derives from &lt;strong&gt;User&lt;/strong&gt; that derives from &lt;strong&gt;Person&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Not only that but a &lt;strong&gt;Client&lt;/strong&gt; has a list of &lt;strong&gt;Orders&lt;/strong&gt; each one containing a list of &lt;strong&gt;Products&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Finally we have two enums: &lt;strong&gt;Country&lt;/strong&gt; and &lt;strong&gt;ProductCategory&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;How are we going to map this? (&lt;font color="#0000ff"&gt;Remember this is just a proof of concept from a guy that understands &lt;strong&gt;squat&lt;/strong&gt; about SQL Server&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;We take each class that we want to map, (&lt;font color="#0000ff"&gt;Person, User, Client, Country, ProductCategory, Order, Product&lt;/font&gt;), and adorn it with a TableAttribute, furthermore we gather these classes under a DataProvider class and feed it to our &lt;strong&gt;CLRMapper&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="wlWriterEditableSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:5a07e948-b12e-4fb8-ad57-3128290171cf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;namespace Cambridge&lt;br/&gt;{&lt;br/&gt;    public abstract class DataProvider&lt;br/&gt;    {&lt;br/&gt;        public      string       Name    { get; private set; }&lt;br/&gt;        protected   IList&amp;lt;Table&amp;gt; Tables  { get; private set; }&lt;br/&gt;&lt;br/&gt;        protected DataProvider(Type t)&lt;br/&gt;        {&lt;br/&gt;            CLRMapper mapper = new CLRMapper(t);&lt;br/&gt;            this.Name = mapper.Name;&lt;br/&gt;            this.Tables = mapper.Tables;&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;The CLRMapper “converts” &lt;strong&gt;by reflection&lt;/strong&gt; all classes adorned with TableAttribute into Table classes, each Table instance contains a collection of Column objects.&lt;/p&gt;

&lt;p&gt;With this information at hand we create a new class, (&lt;font color="#0000ff"&gt;SQLDataProvider&lt;/font&gt;), that derives from DataProvider.&lt;/p&gt;

&lt;p&gt;Now the only thing left to do is to transverse the tables and create the corresponding table definition.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="wlWriterEditableSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:17e69b1c-cd90-4c4e-86df-aa32bbcb1696" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public sealed class SQLDataProvider : DataProvider&lt;br/&gt;{&lt;br/&gt;    public SQLDataProvider(Type t) : base(t)&lt;br/&gt;    { }&lt;br/&gt;&lt;br/&gt;    // Map Tables&lt;br/&gt;    private string MapTable(Table t)&lt;br/&gt;    {&lt;br/&gt;        const string DbOwner = "dbo";&lt;br/&gt;        const int Identation = 1;&lt;br/&gt;&lt;br/&gt;        StringBuilder sb = new StringBuilder();&lt;br/&gt;&lt;br/&gt;        sb.AppendFormat("Create Table [{0}].[{1}].[{2}]{3}(",&lt;br/&gt;            base.Name, DbOwner, t.Name, Environment.NewLine&lt;br/&gt;        );&lt;br/&gt;&lt;br/&gt;        foreach (var item in t.Columns)&lt;br/&gt;        {&lt;br/&gt;            sb.Append(MapColumn(item, Identation, DbOwner));&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        sb.Append(");");&lt;br/&gt;&lt;br/&gt;        return sb.ToString();&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    // Map Columns&lt;br/&gt;    private string MapColumn(Column c, int identation, string owner)&lt;br/&gt;    {&lt;br/&gt;        string dataType = GetSQLDataType(c);&lt;br/&gt;        string nullable = c.AllowNulls ? string.Empty : "Not Null";&lt;br/&gt;        string isUnique = c.IsUnique == false ? string.Empty : "Unique";&lt;br/&gt;&lt;br/&gt;        // Todo: Remove&lt;br/&gt;        string CNS = new string(' ', 20 - c.Name.Length);&lt;br/&gt;        string DTS = new string(' ', 15 - dataType.Length);&lt;br/&gt;        string ISN = new string(' ', 10 - nullable.Length);&lt;br/&gt;        string IDT = new string('\t', identation);&lt;br/&gt;&lt;br/&gt;        if (c.IsPrimaryKey &amp;amp;&amp;amp; c.Base != null)&lt;br/&gt;        {&lt;br/&gt;            // This type inherits from another mapeable type.&lt;br/&gt;            return string.Format(&lt;br/&gt;                "{0}[{1}]{2}{3}{4}{5}{6}Primary Key Identity(1,1)" +&lt;br/&gt;                " References [{7}].[{8}].[{9}]([__PK]),{10}",&lt;br/&gt;                IDT, c.Name, CNS, dataType, DTS, nullable, ISN,&lt;br/&gt;                base.Name, owner, c.Base.Name, Environment.NewLine&lt;br/&gt;            );&lt;br/&gt;        }&lt;br/&gt;        if (c.IsPrimaryKey)&lt;br/&gt;        {&lt;br/&gt;            return string.Format("{0}[{1}]{2}{3}{4}{5}{6}Primary Key Identity(1,1),{7}",&lt;br/&gt;                IDT, c.Name, CNS, dataType, DTS, nullable, ISN, Environment.NewLine&lt;br/&gt;            );&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        return string.Format(&lt;br/&gt;                "{0}[{1}]{2}{3}{4}{5}{6}{7}{8},{9}",&lt;br/&gt;                IDT, c.Name, CNS, dataType, DTS, nullable, ISN,&lt;br/&gt;                isUnique, DefaultSqlCheck(c.Name, c.DataType), Environment.NewLine&lt;br/&gt;            );&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;br/&gt;    &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This will output the following SQL:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProjectCambridgeCLRMapperLinqProviderPartI_35435/image_1.png" target="_blank"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="542" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProjectCambridgeCLRMapperLinqProviderPartI_35435/image_thumb_1.png" width="817" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Although far from complete the generated SQL represents our data model indeed. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;

&lt;p&gt;It is really easy to derive from DataProvider and create an implementation that spits XML, XOML, XAML; JSON, or any other DSL (&lt;a href="http://en.wikipedia.org/wiki/Domain-specific_language" target="_blank"&gt;Domain Specific Language&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;In the next post I’ll try to create a Custom Linq Provider, (&lt;font color="#0000ff"&gt;a very simple one&lt;/font&gt;) to query the data model.&lt;/p&gt;

&lt;p&gt;(&lt;font color="#ff0000"&gt;Yacks!!! That’s not gone be easy&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/07/18/Project-Cambridge-(CLR-Mapper-2b-Linq-Provider)-Part-I.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/07/18/Project-Cambridge-(CLR-Mapper-2b-Linq-Provider)-Part-I.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=61cd684f-d9d5-49ed-a919-c193d970e31e</guid>
      <pubDate>Sat, 18 Jul 2009 06:40:08 +0000</pubDate>
      <category>C#</category>
      <category>SQL Server</category>
      <category>Linq</category>
      <category>Tutorial</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=61cd684f-d9d5-49ed-a919-c193d970e31e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=61cd684f-d9d5-49ed-a919-c193d970e31e</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/07/18/Project-Cambridge-(CLR-Mapper-2b-Linq-Provider)-Part-I.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=61cd684f-d9d5-49ed-a919-c193d970e31e</wfw:commentRss>
    </item>
    <item>
      <title>Multi-Wallpaper Manager (Version 0.1)</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Este deve ser sem &lt;strong&gt;qualquer sombra de dúvida&lt;/strong&gt; o pior código que já escrevi este ano. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sabem aquela “&lt;strong&gt;&lt;font color="#ff0000"&gt;coisa&lt;/font&gt;&lt;/strong&gt;” que o Windows tem para mudar o wallpaper? (&lt;font color="#0000ff"&gt;Sim! Essa coisa horrorosa!!!&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/E_1.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 4px 20px 4px 0px; display: inline; border-top: 0px; border-right: 0px" title="E" border="0" alt="E" align="left" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/E_thumb_1.png" width="336" height="284" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Que nem sequer dá para escolher os wallpapers individualmente.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Por exemplo, quem tem mais de um monitor talvez gostasse de ter um wallpaper diferente em cada monitor, melhor ainda se cada ecrã tivesse as suas “&lt;font color="#0000ff"&gt;settings&lt;/font&gt;”, &lt;strong&gt;Tile&lt;/strong&gt;, &lt;strong&gt;Stretch&lt;/strong&gt;, &lt;strong&gt;Center&lt;/strong&gt;, etc.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Isso é que era fixe!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Existem algumas aplicações no mercado, mas ao que parece nenhuma suporta mais de &lt;strong&gt;três&lt;/strong&gt; monitores em simultâneo, embora isso possa ser um defeito das minhas “&lt;font color="#0000ff"&gt;google skills&lt;/font&gt;”. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;De qualquer forma eu tenho uma certa aversão a pagar por software, (&lt;font color="#0000ff"&gt;Ricardo!!! Chama-se a isso ser português&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Assim sendo, e dando origem a algum do meu melhor “&lt;font color="#0000ff"&gt;código pedreiro&lt;/font&gt;”, apresento-vos o “&lt;font color="#0000ff"&gt;Wallpaper Manager&lt;/font&gt;”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sim… Eu sei…&lt;/p&gt;  &lt;p&gt;Eu e a minha enorme imaginação para nomes. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/A_1.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="A" border="0" alt="A" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/A_thumb_1.png" width="721" height="269" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="center"&gt;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/B_1.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="B" border="0" alt="B" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/B_thumb_1.png" width="717" height="366" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Então o que é que eu posso fazer com isto???&lt;/p&gt;  &lt;p&gt;Encher o teu desktop de imagens “&lt;strong&gt;&lt;font color="#ff0000"&gt;rafeiras&lt;/font&gt;&lt;/strong&gt;” que vão por os teus pais com os cabelos em pé!!!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/C_1.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="C" border="0" alt="C" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/C_thumb_1.png" width="796" height="418" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Não vos quero assustar, mas lembrem-se que este software, foi feito tão à pressa que cada linha de código tem &lt;strong&gt;32 bugs&lt;/strong&gt; ou mais.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/G_3.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="G" border="0" alt="G" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/G_thumb_3.png" width="397" height="206" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/f_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="f" border="0" alt="f" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MultiWallpaperManager(Version0.1)23487/f_thumb_2.png" width="229" height="289" /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/29/Multi-Wallpaper-Manager-(Version-01).aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/29/Multi-Wallpaper-Manager-(Version-01).aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=03cb9995-8e73-4f6c-b1ea-23209b1b51dc</guid>
      <pubDate>Mon, 29 Jun 2009 20:07:06 +0000</pubDate>
      <category>C#</category>
      <category>PInvoke</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=03cb9995-8e73-4f6c-b1ea-23209b1b51dc</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=03cb9995-8e73-4f6c-b1ea-23209b1b51dc</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/29/Multi-Wallpaper-Manager-(Version-01).aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=03cb9995-8e73-4f6c-b1ea-23209b1b51dc</wfw:commentRss>
    </item>
    <item>
      <title>Microsoft Web &amp; Gaming 2009 - Videos</title>
      <description>&lt;p&gt;&lt;strong&gt;Demorou&lt;/strong&gt; mas foi.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nunca me passou pela cabeça que a edição de video fosse tão pesada. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;Houve videos que demoraram quase &lt;strong&gt;6 horas&lt;/strong&gt; a serem editados. (&lt;font color="#0000ff"&gt;Yacks!!! Kill me now!!!&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O pobre computador quase que &lt;strong&gt;fritava&lt;/strong&gt; com o calor gerado, (&lt;font color="#0000ff"&gt;ainda para mais nestes dias quentes de Verão&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Anyway…&lt;/p&gt;  &lt;p&gt;Nada disso importa porque os videos já estão aí e podem dar-lhes uma vista de olhos &lt;a href="http://77.91.204.29/events/wg/Sessions.aspx" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Videos2345/image.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Video" border="0" alt="Video" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Videos2345/image_thumb.png" width="335" height="314" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Videos2345/image_1.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Videos2345/image_thumb_1.png" width="334" height="315" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Alguns videos, (&lt;font color="#0000ff"&gt;se não mesmo a maioria&lt;/font&gt;), encontram-se imcompletos ou com pequenos cortes ou então começam practicamente a meio. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;Isto deve-se ao facto de cada DVD suportar aproximadamente &lt;strong&gt;30 min&lt;/strong&gt; de video, mas cada sessão tem mais ou menos &lt;strong&gt;1 hora&lt;/strong&gt;, isto aliado ao facto de um dos DVDs ter ido “&lt;font color="#0000a0"&gt;à vida&lt;/font&gt;” originou o resultado final que podem ver. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cumprimentos pessoal. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/28/Microsoft-Web-Gaming-2009-Videos.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/28/Microsoft-Web-Gaming-2009-Videos.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=599e4865-cc26-4e14-b10d-a2c950f9a1ee</guid>
      <pubDate>Sun, 28 Jun 2009 07:06:03 +0000</pubDate>
      <category>Microsoft Student Partner</category>
      <category>Microsoft Web &amp; Gaming</category>
      <category>Personal</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=599e4865-cc26-4e14-b10d-a2c950f9a1ee</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=599e4865-cc26-4e14-b10d-a2c950f9a1ee</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/28/Microsoft-Web-Gaming-2009-Videos.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=599e4865-cc26-4e14-b10d-a2c950f9a1ee</wfw:commentRss>
    </item>
    <item>
      <title>Microsoft Student Partner 2010 - UAlg</title>
      <description>&lt;p&gt;Olá rapaziada e "&lt;font color="#0000ff"&gt;raparigada&lt;/font&gt;".&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Mais uma vez &lt;strong&gt;más&lt;/strong&gt; noticias. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt; &lt;p&gt;Voltei a &lt;strong&gt;falhar&lt;/strong&gt; na minha demanda para me tornar Miss &lt;a href="http://www.cabelopantene.com.pt/prueba.php?opcion=5" target="_blank"&gt;Cabelo Pantene&lt;/a&gt; 2009, (&lt;font color="#0000ff"&gt;não desistirei assim tão facilmente&lt;/font&gt;).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Mas em &lt;strong&gt;compensação&lt;/strong&gt; irei ser, (&lt;font color="#0000ff"&gt;pelo segundo ano consecutivo&lt;/font&gt;), Microsoft Student Partner pela &lt;a href="http://www.ualg.pt" target="_blank"&gt;Universidade do Algarve&lt;/a&gt;.&lt;/p&gt; &lt;p align="center"&gt;&amp;nbsp;&lt;/p&gt; &lt;p align="center"&gt;&lt;img border="0" alt="MSP Site" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftStudentPartner2010UAlg29387/image.png" width="640" height="398"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;No primeiro ano em que ingressei no programa e me falaram sobre o &lt;strong&gt;que é ser um MSP&lt;/strong&gt;, (&lt;a href="http://student-partners.com/Default.aspx" target="_blank"&gt;Microsoft Student Partner&lt;/a&gt;), confesso que fiquei um pouco céptico especialmente sobre aquela "parte" do crescimento pessoal e social...&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Não podia estar mais enganado. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt; &lt;p&gt;Agora, após um ano, posso &lt;strong&gt;sem qualquer sombra de dúvida&lt;/strong&gt; dizer que um dos maiores beneficios deste programa é &lt;strong&gt;definitivamente&lt;/strong&gt; o crescimento &lt;strong&gt;pessoal&lt;/strong&gt; e &lt;strong&gt;social&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;No ano anterior encontrava-me um pouco "&lt;font color="#0000ff"&gt;receoso&lt;/font&gt;", afinal de contas não sabia bem ao que vinha, este ano o sentimento não podia ser o mais possivel o oposto desse. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Estou completamente "&lt;font color="#0000ff"&gt;fired-up&lt;/font&gt;" para que o programa comece, para pôr as minhas ideias em práctica, para conhecer os novos MPS, rever os "&lt;font color="#0000ff"&gt;antigos&lt;/font&gt;".&lt;/p&gt; &lt;p&gt;I can't wait &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt; &lt;p&gt;Um abraço a todos, muito obrigado por me terem dado a oportunidade de continuar mais um ano no programa.&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/24/Microsoft-Student-Partner-2010-UAlg.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/24/Microsoft-Student-Partner-2010-UAlg.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=11d93f05-9da3-45a1-973e-6b0a233c6b42</guid>
      <pubDate>Wed, 24 Jun 2009 03:25:56 +0000</pubDate>
      <category>General</category>
      <category>Microsoft Student Partner</category>
      <category>Personal</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=11d93f05-9da3-45a1-973e-6b0a233c6b42</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=11d93f05-9da3-45a1-973e-6b0a233c6b42</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/24/Microsoft-Student-Partner-2010-UAlg.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=11d93f05-9da3-45a1-973e-6b0a233c6b42</wfw:commentRss>
    </item>
    <item>
      <title>Closest Pair Of Points in a 2D Plane</title>
      <description>&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ClosestPairOfPointsina2DPlaneC_23544/image.png" target="_blank"&gt;&lt;img border="0" alt="image" align="right" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ClosestPairOfPointsina2DPlaneC_23544/image_thumb.png" width="238" height="302" /&gt;&lt;/a&gt;   &lt;p&gt;Ora aqui est&amp;#225; um &lt;strong&gt;problema&lt;/strong&gt; que me ia tirando a vontade de viver. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt; &lt;/p&gt;  &lt;p&gt;Podem encontrar mais informa&amp;#231;&amp;#227;o sobre este problema &lt;a href="http://en.wikipedia.org/wiki/Closest_pair_problem" target="_blank"&gt;aqui&lt;/a&gt;, &lt;a href="http://www.cs.mcgill.ca/~cs251/ClosestPair/ClosestPairPS.html" target="_blank"&gt;aqui&lt;/a&gt;, &lt;a href="http://www.cs.ucsb.edu/~suri/cs235/ClosestPair.pdf" target="_blank"&gt;aqui&lt;/a&gt; e &lt;a href="http://people.csail.mit.edu/indyk/6.838-old/handouts/lec17.pdf" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Na sua ess&amp;#234;ncia o &amp;quot;&lt;font color="#0000ff"&gt;Closest Pair Of Points in a 2D Plane&lt;/font&gt;&amp;quot; &amp;#233; um algoritmo que procura o par de pontos com a &lt;strong&gt;menor dist&amp;#226;ncia&lt;/strong&gt; entre si num plano em 2D.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;E a maneira de o resolver n&amp;#227;o podia ser mais simples, &amp;quot;&lt;font color="#0000ff"&gt;basta&lt;/font&gt;&amp;quot; usar for&amp;#231;a &lt;strong&gt;bruta&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;O problema desta abordagem &amp;#233; a sua complexidade temporal. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;Que no &lt;strong&gt;minimo&lt;/strong&gt; se pode considerar como &lt;strong&gt;p&amp;#233;ssima&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Existem dois excelentes algoritmos que podem ser usados, um de &lt;strong&gt;divis&amp;#227;o e conquista&lt;/strong&gt; e outro denominado &lt;strong&gt;Plane Sweep&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Este &amp;#250;ltimo encontrei uma descri&amp;#231;&amp;#227;o num livro da &lt;a href="http://www.wrox.com" target="_blank"&gt;Wrox&lt;/a&gt;, (&lt;font color="#0000ff"&gt;Begining Algorithms&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Infelizmente n&amp;#227;o tenho muito tempo para descrever pormenorizadamente cada um dos &lt;strong&gt;3&lt;/strong&gt; algoritmos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Em compensa&amp;#231;&amp;#227;o deixo-vos um &lt;strong&gt;Pdf&lt;/strong&gt; que fiz que descreve com algum detalhe cada um dos algoritmos, respectivo c&amp;#243;digo, (&lt;font color="#0000ff"&gt;vers&amp;#227;o Java&lt;/font&gt;), performance e complexidade:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:e6494ade-4a5d-4ddc-9f0f-07b6c878127b" class="wlWriterSmartContent"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/ClosestPairOfPointsina2DPlaneC_23544/Report.pdf"&gt; 	&lt;span class="download_attachment"&gt; 		File Attachment:&lt;br /&gt; 		Report4.pdf&lt;br /&gt; 		(421,0029 kB) 	&lt;/span&gt;	 &lt;/a&gt; &lt;/div&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;E aqui, (&lt;font color="#0000ff"&gt;como vem sendo habitual&lt;/font&gt;), deixo o c&amp;#243;digo fonte:&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/ClosestPair%20Java.zip" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/ClosestPair%20Java.zip"&gt;ClosestPair%20Java.z...&lt;/a&gt; &lt;/iframe&gt;&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/ClosestPair%20C%7C3.zip" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/ClosestPair%20C%7C3.zip"&gt;ClosestPair%20C%7C3....&lt;/a&gt; &lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;&amp;quot;Aurevoir&amp;quot; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;    &lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/19/Closest-pair-of-points-in-a-2D-plane.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/19/Closest-pair-of-points-in-a-2D-plane.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=efd79b19-52e1-4795-84aa-ec48938e9b65</guid>
      <pubDate>Fri, 19 Jun 2009 08:23:39 +0000</pubDate>
      <category>Algorithms</category>
      <category>C#</category>
      <category>Java</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=efd79b19-52e1-4795-84aa-ec48938e9b65</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=efd79b19-52e1-4795-84aa-ec48938e9b65</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/19/Closest-pair-of-points-in-a-2D-plane.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=efd79b19-52e1-4795-84aa-ec48938e9b65</wfw:commentRss>
    </item>
    <item>
      <title>The Knapsack Problem</title>
      <description>&lt;p&gt;Ol&amp;#225; novamente. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;Para aqueles que n&amp;#227;o conhecem o &lt;a href="http://en.wikipedia.org/wiki/Knapsack_problem" target="_blank"&gt;Knapsack Problem&lt;/a&gt; deixo &lt;a href="http://en.wikipedia.org/wiki/Knapsack_problem" target="_blank"&gt;aqui&lt;/a&gt; um link da &lt;a href="http://www.wikipedia.org/" target="_blank"&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;img border="0" alt="knapsack-256x256" align="right" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/TheKnapsackProblem_D1BB/knapsack-256x256_3.png" width="256" height="256" /&gt;&lt;/p&gt;  &lt;p&gt;De um modo muito resumido o &lt;strong&gt;Knapsack&lt;/strong&gt; problem ou &lt;strong&gt;Rucksack&lt;/strong&gt; problem &amp;#233; um problema de optimiza&amp;#231;&amp;#227;o combinatorial.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O objectivo &amp;#233; &amp;quot;enfiar&amp;quot; na nossa mala a maior quantidade de objectos possivel, &lt;strong&gt;maximizando&lt;/strong&gt; sempre o &lt;strong&gt;lucro&lt;/strong&gt; e nunca a quantidade de objectos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ou seja, se fossemos ladr&amp;#245;es iriamos tentar levar a maior quantidade possivel de objectos que nos dessem o maior lucro possivel, tendo sempre em conta que cada objecto tem um valor e peso pr&amp;#233;-definidos, a nossa mala tem capacidade finita em termos de peso.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Existem v&amp;#225;rias maneiras de resolver o problema, este post vai explorar 3 vias diferentes.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A primeira via, (&lt;font color="#0000ff"&gt;a mais simples&lt;/font&gt;), e tamb&amp;#233;m a mais ineficiente em termos computacionais &amp;#233; a abordagem &lt;strong&gt;na&amp;#239;ve&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ou seja, vamos gerar todas as hip&amp;#243;teses possiveis, (&lt;font color="#0000ff"&gt;aka Combina&amp;#231;&amp;#245;es&lt;/font&gt;), seguidamente corremos todas as hip&amp;#243;teses geradas anteriormente e &lt;strong&gt;das que cabem dentro do saco&lt;/strong&gt;, (&lt;font color="#0000ff"&gt;ou seja, n&amp;#227;o excedem o limite de peso imposto&lt;/font&gt;), verificamos qual a que cont&amp;#233;m o cont&amp;#233;udo &lt;strong&gt;mais valioso&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#201; &lt;strong&gt;quase&lt;/strong&gt; como determinar o Max/Min de uma lista de n&amp;#250;meros, mas um &amp;quot;&lt;font color="#0000ff"&gt;bocadinho&lt;/font&gt;&amp;quot; de nada mais complexo. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;Este algoritmo na melhor das hip&amp;#243;teses pode ser usado como refer&amp;#234;ncia para &lt;a href="http://en.wikipedia.org/wiki/Unit_Testing" target="_blank"&gt;Unit Testing&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A segunda via &amp;#233; um bocadinho mais inteligente.&lt;/p&gt;  &lt;p&gt;A abordagem &amp;#233; a seguinte: Um objecto tem duas hip&amp;#243;teses &lt;strong&gt;ou se&lt;/strong&gt; encontra na solu&amp;#231;&amp;#227;o &amp;#243;ptima &lt;strong&gt;ou n&amp;#227;o se&lt;/strong&gt; encontra na solu&amp;#231;&amp;#227;o &amp;#243;ptima.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Com base nesta premissa podemos usar divis&amp;#227;o e conquista, dividimos o problema em v&amp;#225;rios sub problemas &amp;#243;ptimos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/TheKnapsackProblem_D1BB/image_4.png" target="_blank"&gt;&lt;img border="0" alt="Knapsack Tree" align="left" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/TheKnapsackProblem_D1BB/image_thumb_1.png" width="397" height="467" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Em portugu&amp;#234;s sff.&lt;/p&gt;  &lt;p&gt;Ok. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se olharmos para a figura seguinte temos &lt;strong&gt;inicialmente&lt;/strong&gt; os objectos &lt;strong&gt;{A, B, C, D, E}&lt;/strong&gt;, como &amp;#233; tipico na abordagem de divis&amp;#227;o e conquista vamos subdividir o problema, (&lt;font color="#0000ff"&gt;neste caso 2 sub-problemas&lt;/font&gt;), uma das ramifica&amp;#231;&amp;#245;es considera que o objecto &amp;quot;E&amp;quot; pertence a uma solu&amp;#231;&amp;#227;o &amp;#243;ptima, a outra ramifica&amp;#231;&amp;#227;o considera que o objecto &amp;quot;E&amp;quot; &lt;strong&gt;n&amp;#227;o&lt;/strong&gt; faz parte de uma solu&amp;#231;&amp;#227;o &amp;#243;ptima.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O problema vai sendo constanemente &amp;quot;ramificado&amp;quot; at&amp;#233; que chegamos aos casos base, &lt;strong&gt;{A}&lt;/strong&gt;, sempre que estamos a ramificar a &amp;#225;rvore e esta ultrapassar a capacidade da mochila, a ramifica&amp;#231;&amp;#227;o &amp;#233; interrompida/descartada.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A grande vantagem desta abordagem &amp;#233; que tem uma menor complexidade que a primeira via.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Finalmente a terceira via usa exactamente a mesma t&amp;#233;cnica da segunda, mas &amp;quot;memoriza&amp;quot; os resultados.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Esta t&amp;#233;cnica &amp;#233; denominada de &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank"&gt;Programa&amp;#231;&amp;#227;o Din&amp;#226;mica&lt;/a&gt;, como se pode ver pela figura anterior existem imenso c&amp;#225;lculos repetidos vezes sem conta, quando isto acontece, o emprego de divis&amp;#227;o e conquista tem muitas poucas vantagens.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nestes casos devemos complementar o problema com &lt;a href="http://en.wikipedia.org/wiki/Dynamic_programming" target="_blank"&gt;Programa&amp;#231;&amp;#227;o Din&amp;#226;mica&lt;/a&gt;, que no fundo &amp;#233; um nome muito fino para: &amp;quot;&lt;font color="#0000ff"&gt;Memoriza todas as chamadas que j&amp;#225; fizeste para n&amp;#227;o teres que as fazer novamente&lt;/font&gt;&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;T&amp;#237;picamente &amp;#233; usada uma matriz bi-dimensional para guardar os resultados, mas como o autor deste post &amp;#233; muito &amp;quot;&lt;font color="#0000ff"&gt;fino&lt;/font&gt;&amp;quot; e forreta em termos de mem&amp;#243;ria, vamos usar um dicion&amp;#225;rio de chave dupla.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O C&amp;#243;digo fonte encontra-se disponivel em dois &amp;quot;sabores&amp;quot; C# e Java. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/Knapsack%20C%7C3.zip" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/Knapsack%20C%7C3.zip"&gt;Knapsack%20C%7C3.zip&lt;/a&gt;&lt;/iframe&gt;    &lt;br /&gt;&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/Knapsack%20Java.zip" frameborder="0" marginwidth="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/Knapsack%20Java.zip"&gt;Knapsack%20Java.zip&lt;/a&gt;&lt;/iframe&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/15/The-Knapsack-Problem.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/15/The-Knapsack-Problem.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=3028b484-c6c3-42eb-b48b-447856223daf</guid>
      <pubDate>Mon, 15 Jun 2009 14:54:52 +0000</pubDate>
      <category>Algorithms</category>
      <category>C#</category>
      <category>Java</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=3028b484-c6c3-42eb-b48b-447856223daf</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=3028b484-c6c3-42eb-b48b-447856223daf</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/15/The-Knapsack-Problem.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=3028b484-c6c3-42eb-b48b-447856223daf</wfw:commentRss>
    </item>
    <item>
      <title>Microsoft Web &amp; Gaming 2009 - Photos</title>
      <description>&lt;p&gt;J&amp;#225; se encontram online as fotos do evento que decorreu nos dias 9 e 10 de Maio de 2009 na universidade do Algarve.&lt;/p&gt;  &lt;p&gt;Um grande abra&amp;#231;o ao &lt;a href="http://gozoomin.com/blogs/antao/default.aspx" target="_blank"&gt;Jo&amp;#227;o Ant&amp;#227;o&lt;/a&gt; por ter ajudado com as fotos e a todos os participantes que tornaram este evento possivel, (&lt;font color="#0000ff"&gt;com sorte pode ser que se venha a repetir para o ano&lt;/font&gt;). &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para acederem &amp;#224;s fotos: dirijam-se a este &lt;a href="http://wg.gozoomin.com/Photos.aspx" target="_blank"&gt;site&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/SS_2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/SS_thumb.png" width="342" height="228" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/04_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/04_thumb.jpg" width="342" height="228" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/23_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/23_thumb.jpg" width="160" height="107" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/3w80rue_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/3w80rue_thumb.jpg" width="160" height="107" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/87yhu_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/87yhu_thumb.jpg" width="160" height="107" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/19_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/19_thumb.jpg" width="160" height="107" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/349rwipofj_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/349rwipofj_thumb.jpg" width="342" height="227" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/pwfdsodf_2.jpg" target="_blank"&gt;&lt;img border="0" alt="Microsoft Web &amp;amp; Gaming Photo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009Photos_10597/pwfdsodf_thumb.jpg" width="342" height="227" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Assim que pudermos iremos disponibilizar os videos. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/12/Microsoft-Web-Gaming-2009-Photos.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/12/Microsoft-Web-Gaming-2009-Photos.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=54e62233-1dac-4468-b711-2bb8fbea6d05</guid>
      <pubDate>Fri, 12 Jun 2009 18:41:27 +0000</pubDate>
      <category>Microsoft Student Partner</category>
      <category>Microsoft Web &amp; Gaming</category>
      <category>Personal</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=54e62233-1dac-4468-b711-2bb8fbea6d05</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=54e62233-1dac-4468-b711-2bb8fbea6d05</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/12/Microsoft-Web-Gaming-2009-Photos.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=54e62233-1dac-4468-b711-2bb8fbea6d05</wfw:commentRss>
    </item>
    <item>
      <title>(x64 + Java) Disassembler Library in C#</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Olá novamente. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;Este post é a continuação deste &lt;a href="http://redb.mine.nu/blogs/redb//post/2009/06/01/x64-Disassembler-Library-in-C.aspx" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Apesar de me encontrar com &lt;strong&gt;muito pouco tempo&lt;/strong&gt; e com os trabalhos &lt;strong&gt;acumularem-se&lt;/strong&gt; não consegui &lt;strong&gt;&lt;font color="#0000ff"&gt;resistir&lt;/font&gt;&lt;/strong&gt; a adicionar suporte para Java.&lt;/p&gt;  &lt;p&gt;Como podem ver pela imagem ainda existe &lt;strong&gt;imensa&lt;/strong&gt; coisa por fazer, (&lt;font color="#ff0000"&gt;leia-se: &lt;strong&gt;tudo&lt;/strong&gt;&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff"&gt;É mais o que se encontra por fazer do que aquilo que está feito.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64JavaDisassemblerLibraryinC_13507/image_2.png" target="_blank"&gt;&lt;img title="Java Disassembler" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="348" alt="Java Disassembler" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64JavaDisassemblerLibraryinC_13507/image_thumb.png" width="689" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;(&lt;font color="#0000ff"&gt;Estas coisas são tão giras de se fazer&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;Ignorando este momento idiota.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Se&lt;/strong&gt; estiverem interessados em compreender o formato *.&lt;strong&gt;class&lt;/strong&gt; a minha principal recomendação é este &lt;strong&gt;&lt;a href="http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html" target="_blank"&gt;site&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se o vosso interesse forem somente os opcodes então &lt;a href="http://www.murrayc.com/learning/java/java_classfileformat.shtml" target="_blank"&gt;&lt;strong&gt;este&lt;/strong&gt;&lt;/a&gt; é o vosso site.&lt;/p&gt;  &lt;p&gt;Ambos os sites são mantidos pela Sun, ou seja é a especificação oficial.&lt;/p&gt;  &lt;p&gt;Ou então, &lt;strong&gt;melhor&lt;/strong&gt; ainda, podem usar o livro: &lt;/p&gt;  &lt;p&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;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img style="display: inline; margin-left: 0px; margin-right: 0px" src="http://ecx.images-amazon.com/images/I/518MKW1FNKL._SL500_AA240_.jpg" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://de77.easyurl.net/" target="_blank"&gt;&lt;img height="234" alt="Covert Java: Techniques for Decompiling, Patching, and Reverse Engineering" src="http://ecx.images-amazon.com/images/I/51wuKFwnDdL._SL500_AA240_.jpg" width="234" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O download do 1º livro pode ser feito &lt;a href="http://java.sun.com/docs/books/jvms/" target="_blank"&gt;aqui&lt;/a&gt;. (&lt;strong&gt;&lt;font color="#ff0000"&gt;Pena que não exista uma versão em Pdf.&lt;/font&gt;&lt;/strong&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O segundo livro nunca o vi, mas o preço é &lt;strong&gt;brutalmente aliciante&lt;/strong&gt;, $1,99!!!! Uau!!!! Acho que vou encomendar um para mim!&lt;/p&gt;  &lt;p&gt;(&lt;font color="#0000ff"&gt;Nem que seja para matar a curiosidade&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/04/(x64-2b-Java)-Disassembler-Library-in-C.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/04/(x64-2b-Java)-Disassembler-Library-in-C.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=e7035795-53a8-4f53-b705-4cc47b5c4d7e</guid>
      <pubDate>Thu, 04 Jun 2009 21:58:32 +0000</pubDate>
      <category>C#</category>
      <category>Java</category>
      <category>x64</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=e7035795-53a8-4f53-b705-4cc47b5c4d7e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=e7035795-53a8-4f53-b705-4cc47b5c4d7e</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/04/(x64-2b-Java)-Disassembler-Library-in-C.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=e7035795-53a8-4f53-b705-4cc47b5c4d7e</wfw:commentRss>
    </item>
    <item>
      <title>x64 Disassembler Library in C#</title>
      <description>&lt;p&gt;Finalmente!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-laughing.gif" class="flag" alt="Laughing" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Há &lt;strong&gt;imenso&lt;/strong&gt; tempo que queria escrever uma biblioteca para fazer “&lt;font color="#0000ff"&gt;disassembling&lt;/font&gt;” de &lt;strong&gt;unmanaged&lt;/strong&gt; code x64, mas o tempo era sempre escasso.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Decidi aproveitar esta semana de férias para fazer isso mesmo, dar os primeiros passos neste mundo assustador, (&lt;font color="#0000ff"&gt;Unmanaged Code&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A primeira coisa a fazer é localizar o código dentro de um ficheiro executável; em Windows um *.exe típico (&lt;font color="#0000ff"&gt;PECOFF&lt;/font&gt;), contém uma secção denominada “&lt;strong&gt;.text&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="189" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/image_3.png" width="705" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Com base nessa secção, &lt;strong&gt;VirtualSize&lt;/strong&gt; informa sobre a quantidade de bytes que o código ocupa e &lt;strong&gt;VirtualAddress&lt;/strong&gt; indica a sua localização.&lt;/p&gt;  &lt;p&gt;Com essa informação extraímos os bytes que sabemos serem código executável.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Depois para efecuar o “parse” recomendo vivamente irem ao site da &lt;a href="http://www.intel.com/products/processor/manuals/" target="_blank"&gt;Intel&lt;/a&gt;, da &lt;a href="http://www.amd.com/us-en/Processors/DevelopWithAMD/0,,30_2252_739_7044,00.html" target="_blank"&gt;AMD&lt;/a&gt; e &lt;a href="http://www.sandpile.org/" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Especialmente&lt;/strong&gt; estes dois manuais da Intel.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="Intel 64 and IA-32" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="129" alt="Intel 64 and IA-32" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/image_6.png" width="413" border="0" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="123" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/image_9.png" width="400" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se lerem os manuais atentamente verão que não é muito dificil, (&lt;font color="#0000ff"&gt;têm é que ler bem&lt;/font&gt;). &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/struct_2.png" target="_blank"&gt;&lt;img title="PECOFF Structure" style="border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; border-left: 0px; margin-right: 0px; border-bottom: 0px" height="235" alt="PECOFF Structure" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/struct_thumb.png" width="402" align="left" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/code_2.png" target="_blank"&gt;&lt;img title="x64 Intel 64 Code" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="234" alt="x64 Intel 64 Code" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/x64DisassemblerLibraryinC_DCE1/code_thumb.png" width="403" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ainda falta escrever &lt;strong&gt;muitissimo&lt;/strong&gt; código, (&lt;font color="#0000ff"&gt;como pode ver pelas images&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;Seria muito giro agarrar neste código e transformá-lo, (&lt;font color="#0000ff"&gt;quando possivel&lt;/font&gt;), em Managed Code, (&lt;font color="#0000ff"&gt;seja ele Java bytecode ou MSIL&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/06/01/x64-Disassembler-Library-in-C.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/06/01/x64-Disassembler-Library-in-C.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=a53d06c9-d366-48e6-99b2-f780e24d18ae</guid>
      <pubDate>Mon, 01 Jun 2009 15:42:26 +0000</pubDate>
      <category>C#</category>
      <category>x64</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=a53d06c9-d366-48e6-99b2-f780e24d18ae</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=a53d06c9-d366-48e6-99b2-f780e24d18ae</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/06/01/x64-Disassembler-Library-in-C.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=a53d06c9-d366-48e6-99b2-f780e24d18ae</wfw:commentRss>
    </item>
    <item>
      <title>Microsoft Web &amp; Gaming 2009</title>
      <description>&lt;p&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009UAlg_13AEE/clip_image001_3.jpg" width="315" height="106" /&gt;&lt;/p&gt;  &lt;p&gt;O grupo de &lt;a href="http://student-partners.com/Msp/Country/Home.aspx"&gt;Microsoft Student Partners&lt;/a&gt; da UAlg deseja convidar todos os interessados em novas tecnologias a participarem no nosso próximo evento:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009UAlg_13AEE/Wallpaper_2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Poster" border="0" alt="Poster" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftWebGaming2009UAlg_13AEE/Wallpaper_thumb.png" width="742" height="524" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A entrada é completamente livre de quaisquer encargos e não existe necessidade de pré-reserva, o evento terá lugar nos dias &lt;b&gt;9 e 10 de Maio&lt;/b&gt;, (Sexta e Sábado), no &lt;b&gt;Anfiteatro B&lt;/b&gt; do &lt;b&gt;Complexo Pedagógico&lt;/b&gt;, (&lt;font color="#0000ff"&gt;aquele que fica no primeiro andar&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Vamos ter revistas &lt;a href="http://www.pcguia.xl.pt/"&gt;PCGuia&lt;/a&gt; para distribuir, (&lt;font color="#0000ff"&gt;revista + DVD&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;Sorteio de livros Microsoft Press e outras surpresas.&lt;/p&gt;  &lt;p&gt;Terás também a possibilidade de privar directamente com os oradores.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O registo no evento &lt;b&gt;não é obrigatório&lt;/b&gt;, embora gostássemos de saber a tua opinião de modo a podermos melhorar de ano para ano.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para te registares, (&lt;font color="#0000ff"&gt;caso o desejes fazer&lt;/font&gt;), podes dirigir-te:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wg.gozoomin.com/Register.aspx"&gt;http://wg.gozoomin.com/Register.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para acederes à agenda:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wg.gozoomin.com/Agenda.aspx"&gt;http://wg.gozoomin.com/Agenda.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;No final da sessão e/ou evento ficarão disponíveis os &lt;b&gt;vídeos&lt;/b&gt; de cada orador, também terás acesso às &lt;b&gt;demos&lt;/b&gt; e &lt;b&gt;PowerPoints&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Vai consultando aqui:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://wg.gozoomin.com/Sessions.aspx"&gt;http://wg.gozoomin.com/Sessions.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;PS: Se quiserem podem levar o portátil.&lt;/p&gt;  &lt;p&gt;Ficaremos à vossa espera. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/04/30/Microsoft-Web-Gaming-2009.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/04/30/Microsoft-Web-Gaming-2009.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=6d818a8b-772b-4229-b3a9-755feb23d115</guid>
      <pubDate>Thu, 30 Apr 2009 22:23:44 +0000</pubDate>
      <category>General</category>
      <category>Microsoft Student Partner</category>
      <category>Microsoft Web &amp; Gaming</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=6d818a8b-772b-4229-b3a9-755feb23d115</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=6d818a8b-772b-4229-b3a9-755feb23d115</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/04/30/Microsoft-Web-Gaming-2009.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=6d818a8b-772b-4229-b3a9-755feb23d115</wfw:commentRss>
    </item>
    <item>
      <title>Microsoft Certified Technology Specialist</title>
      <description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A Microsoft está a oferecer a todos os estudantes universitários vouchers de certificação &lt;a href="https://www.microsoft.com/learning/educator/exams/default.mspx#E4CAC"&gt;MCTS, Technology Specialists&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.dreamspark.com/Products/Product.aspx?productid=24" target="_blank"&gt;&lt;img title="Microsoft Certified Technology Specialist" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="230" alt="Microsoft Certified Technology Specialist" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/MicrosoftCertifiedTechnologySpecialist_A09A/clip_image002_1187f379-94f2-4247-89fe-341aebdd44f3.jpg" width="697" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Apenas tens que te dirigir a este site:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.dreamspark.com/Products/Product.aspx?productid=24" target="_blank"&gt;https://www.dreamspark.com/Products/Product.aspx?productid=24&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Caso não tenhas o software necessário a Microsoft disponibiliza-te tudo o que precisares, basta aceder a:&lt;/p&gt;  &lt;p&gt;&lt;a href="https://www.dreamspark.com/" target="_blank"&gt;https://www.dreamspark.com/&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/04/19/Microsoft-Certified-Technology-Specialist.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/04/19/Microsoft-Certified-Technology-Specialist.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=f57921ae-9baa-45a0-bbfc-d3e46cffc2fd</guid>
      <pubDate>Sun, 19 Apr 2009 11:25:15 +0000</pubDate>
      <category>General</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=f57921ae-9baa-45a0-bbfc-d3e46cffc2fd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=f57921ae-9baa-45a0-bbfc-d3e46cffc2fd</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/04/19/Microsoft-Certified-Technology-Specialist.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=f57921ae-9baa-45a0-bbfc-d3e46cffc2fd</wfw:commentRss>
    </item>
    <item>
      <title>Messenger.API + Messenger.WebServices Part 1</title>
      <description>&lt;p&gt;Isto não é &lt;strong&gt;bem&lt;/strong&gt; um post…&lt;/p&gt;  &lt;p&gt;Então é o quê???&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;É aquilo que se pode chamar de Source Control Management, (&lt;font color="#0000ff"&gt;SCM&lt;/font&gt;), dos pobres, uma espécie de Subversion para os projectos do Ricardo, mas… Bem… Sem o SCM propriamente dito.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ou seja, estou de certa forma a usar este blog e o &lt;a href="http://cid-88920095614ac415.skydrive.live.com/browse.aspx/Public"&gt;SkyDrive&lt;/a&gt; como repositório de código.&lt;/p&gt;  &lt;p&gt;Em que vou publicando as várias etapas do processo, &lt;strong&gt;muito&lt;/strong&gt; antes ainda de o código se encontrar sequer em fase alpha.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Assim com &lt;strong&gt;sorte&lt;/strong&gt; talvez encontre algum “colaborador” que me queira ajudar/contribuir/opinar/etc…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Este post é de certa forma o sucessor &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/28/Windows-Live-Messenger-Clone.aspx"&gt;deste&lt;/a&gt;, não é obrigatório mas aconselho a darem uma olhadela. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;Ok! Então vamos lá por as mãos na massa:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_2.png" target="_blank"&gt;&lt;img title="Visual Studio Solution" style="border-right: 0px; border-top: 0px; display: block; float: none; margin-left: auto; border-left: 0px; margin-right: auto; border-bottom: 0px" height="465" alt="Visual Studio Solution" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_thumb.png" width="717" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O projecto encontra-se dividido essencialmente em &lt;strong&gt;&lt;font size="4"&gt;3&lt;/font&gt;&lt;/strong&gt; grupos.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Uma Stream Assyncrona de Leitura, (&lt;font color="#0000ff"&gt;que se encontra “relativamente” estável&lt;/font&gt;), Messenger.IO.&lt;/li&gt;    &lt;li&gt;Web Services que o Windows Live Messenger usa, (&lt;font color="#0000ff"&gt;login no serviço “Live”, lista de Contactos, Membership, Storage, etc&lt;/font&gt;).&lt;/li&gt;    &lt;li&gt;A API propriamente dita, onde é efectuado o parse das mensagens, buffer e desfragmentação das streams, modelação de pacotes, essa &lt;strong&gt;sucata&lt;/strong&gt; toda.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Este útimo ponto não só é o &lt;strong&gt;mais importante&lt;/strong&gt; como também é aquele que se encontra na sua fase mais precoce.&lt;/p&gt;  &lt;p&gt;Cabe-me a mim criar esta criança sozinha. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Os restantes projectos ou são de &lt;a href="http://www.nunit.org/"&gt;Unit Testing&lt;/a&gt;, (&lt;font color="#0000ff"&gt;tenho que adicionar MUITO mais testes&lt;/font&gt;) ou são meros interfaces, na generalidade não são de grande importancia, servem apenas de apoio.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_4.png" target="_blank"&gt;&lt;img title="Messenger.App" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="348" alt="Messenger.App" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_thumb_1.png" width="184" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_6.png" target="_blank"&gt;&lt;img title="Messenger.App" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="348" alt="Messenger.App" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_thumb_2.png" width="181" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;No que diz respeito ao interface uma pessoa bem tenta, mas…&lt;/p&gt;  &lt;p&gt;Não há nada a fazer. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Aqui &lt;strong&gt;SIM&lt;/strong&gt;!!!&lt;/p&gt;  &lt;p&gt;Aqui é onde acontece toda a magia, esta é a parte que interessa. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&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;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_8.png" target="_blank"&gt;&lt;img title="Messager.CommandLine" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="580" alt="Messager.CommandLine" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_thumb_3.png" width="265" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_10.png" target="_blank"&gt;&lt;img title="Messager.CommandLine" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="581" alt="Messager.CommandLine" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/Messenger.APIMessenger.WebServicesPart1_63B2/image_thumb_4.png" width="326" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para terminar deixo aqui o código fonte em C#&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/Messenger%20Source%20Control/Messenger.Services%20Part%201.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/Messenger%20Source%20Control/Messenger.Services%20Part%201.zip"&gt;Messenger.Services%2...&lt;/a&gt;&lt;/iframe&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/04/17/MessengerAPI-2b-MessengerWebServices-Part-1.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/04/17/MessengerAPI-2b-MessengerWebServices-Part-1.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=253141a2-47c5-432b-a3d0-a2293da63c7d</guid>
      <pubDate>Fri, 17 Apr 2009 07:05:23 +0000</pubDate>
      <category>C#</category>
      <category>Windows Live Messenger</category>
      <category>WPF</category>
      <category>XAML</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=253141a2-47c5-432b-a3d0-a2293da63c7d</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=253141a2-47c5-432b-a3d0-a2293da63c7d</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/04/17/MessengerAPI-2b-MessengerWebServices-Part-1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=253141a2-47c5-432b-a3d0-a2293da63c7d</wfw:commentRss>
    </item>
    <item>
      <title>Red Blanc Puzzle, (State Search A* e IDA*)</title>
      <description>&lt;p&gt;Este post é de certa forma uma continuação do &lt;a href="http://redb.mine.nu/blogs/redb//post/2009/03/31/8Puzzle-Solver-(State-Search-Classics-A*-e-IDA*).aspx"&gt;anterior&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Não sei se já ouviram falar do Red Blanc Puzzle, (&lt;font color="#0000ff"&gt;na internet não existe realmente muita informação sobre o “assunto”&lt;/font&gt;). &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O Red Blanc Puzzle, (&lt;font color="#0000ff"&gt;RBPUzzle&lt;/font&gt;), parece-se com duas instâncias do 8Puzzle sobrepostas:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_2.png" target="_blank"&gt;&lt;img title="Red Blanc Puzzle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="351" alt="Red Blanc Puzzle" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_thumb.png" width="351" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_6.png" target="_blank"&gt;&lt;img title="Red Blanc Puzzle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="348" alt="Red Blanc Puzzle" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_thumb_2.png" width="347" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ahhhhh! Uma imagem vale mil palavras!&lt;/p&gt;  &lt;p&gt;Parece uma espécie de jogo de damas com regras “&lt;font color="#0000ff"&gt;esquisitas&lt;/font&gt;”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;As peças brancas apenas se podem mover para a direita ou para baixo, desde que a posição adjacente se encontre vazia. &lt;/li&gt;    &lt;li&gt;Peças brancas podem saltar sobre uma peça vermelha para uma posição vazia, (&lt;font color="#0000ff"&gt;respeitando as regras anteriores&lt;/font&gt;). &lt;/li&gt;    &lt;li&gt;As peças vermelhas podem mover-se para cima ou para a esquerda com as mesmas restrições das peças brancas. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Digam lá!!! Já tive interfaces muito mais feios que este! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Neste momento sinto que é impossivel criar uma aplicação em WinForms sem que me cheire logo a bolor! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;Comparado com as capacidades de WPF, WinForms já está com &lt;strong&gt;olhos de carneiro&lt;/strong&gt; mal morto. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt; (&lt;font color="#0000ff"&gt;Just kidding&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para não “destoar”, a típica versão em linha de comandos: &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="Command Prompt" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="179" alt="Command Prompt" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_9.png" width="198" border="0" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img title="Command Prompt" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="189" alt="Command Prompt" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/RedBlancPuzzleStateSearchAeIDA_2758/image_14.png" width="199" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Vou tentar manter este post curto!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Código Fonte em &lt;strong&gt;C#&lt;/strong&gt;:&lt;/p&gt;  &lt;br /&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/redb%20Blog%20Assets/RBPUzzleStateSearch%20C%7C3%20Source%20Code.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/redb%20Blog%20Assets/RBPUzzleStateSearch%20C%7C3%20Source%20Code.zip"&gt;RBPUzzleStateSearch%...&lt;/a&gt;&lt;/iframe&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/04/11/Red-Blanc-Puzzle-(State-Search-AStar-e-IDAStar).aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/04/11/Red-Blanc-Puzzle-(State-Search-AStar-e-IDAStar).aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=658e4de1-3497-459a-8d7d-bb5efc24f533</guid>
      <pubDate>Sat, 11 Apr 2009 02:47:53 +0000</pubDate>
      <category>C#</category>
      <category>Java</category>
      <category>Silverlight</category>
      <category>Tutorial</category>
      <category>VB.NET</category>
      <category>WPF</category>
      <category>XAML</category>
      <category>Algorithms</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=658e4de1-3497-459a-8d7d-bb5efc24f533</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=658e4de1-3497-459a-8d7d-bb5efc24f533</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/04/11/Red-Blanc-Puzzle-(State-Search-AStar-e-IDAStar).aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=658e4de1-3497-459a-8d7d-bb5efc24f533</wfw:commentRss>
    </item>
    <item>
      <title>8Puzzle Solver, (State Search Classics A* e IDA*)</title>
      <description>&lt;p&gt;Chega um momento na vida de um homem em que ele tem que implementar os clássicos de procura em espaço de estados. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Não se deixem enganar rapaziada!&lt;/p&gt;  &lt;p&gt;Um homem tem que fazer três coisas durante a vida, (&lt;font color="#0000ff"&gt;não necessáriamente por esta ordem&lt;/font&gt;):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Plantar uma árvore. &lt;/li&gt;    &lt;li&gt;Escrever um livro. &lt;/li&gt;    &lt;li&gt;Ter um filho. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Um programador deve fazer tudo isso e &lt;strong&gt;mais&lt;/strong&gt;. Deve implementar os mais famosos algoritmos de procura em espaço de estados, (&lt;font color="#0000ff"&gt;AStar e IDAStar&lt;/font&gt;). &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Chega de blá, blá, blá…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&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;#160;&amp;#160; &lt;img title="8Puzzle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="231" alt="8Puzzle" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_140E6/Untitled_3.png" width="236" border="0" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img title="8Puzzle" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; margin-left: 0px; margin-right: 0px; border-right-width: 0px" height="242" alt="8Puzzle" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_140E6/Untitled2_3.png" width="361" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Esta talvez seja a minha primeira aplicação WPF/XAML &lt;strong&gt;digna&lt;/strong&gt; desse nome:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Faz uso de styles. &lt;/li&gt;    &lt;li&gt;Tem animações. &lt;/li&gt;    &lt;li&gt;Skin da “Janela”. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Ok certo!! São só três “coisinhas”, mas por algum lado temos que começar não é?!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Estou a tentar tornar-me um programador prolífico e isso inclui programar “&lt;strong&gt;selvaticamente&lt;/strong&gt;” este algoritmo em várias linguagens, Java, C#, VB.NET, Spec# e eventualmente quem sabe &lt;strong&gt;C++/CLI&lt;/strong&gt;, &lt;strong&gt;F#&lt;/strong&gt; e &lt;strong&gt;C++&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Enquanto alguns ports são triviais, (&lt;font color="#0000ff"&gt;a tal palavra usada pelos nossos professores de análise matemática&lt;/font&gt;), (&lt;font color="#0000ff"&gt;Java, VB.NET, Spec#&lt;/font&gt;), outros são capazes de dar luta, (&lt;font color="#ff0000"&gt;&lt;strong&gt;C++/CLI, C++&lt;/strong&gt;,&lt;strong&gt; F#&lt;/strong&gt;&lt;/font&gt;)… &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;Pelo menos para mim que&amp;#160; não as costumo usar…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Quem sabe não escrevo uma versão em Silverlight e meto aqui no Blog??? &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt; (&lt;font color="#0000ff"&gt;Bem pensado!!!&lt;/font&gt;) Hi5 para mim mesmo!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;font color="#0000ff"&gt;Sim vocês adivinharam, tive uma infância conturbada &lt;/font&gt;&lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mais disso adiante.&lt;/p&gt;  &lt;p&gt;Para já ficam com as imagens “sofridas” da versão linha de comando. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="Command Prompt" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="109" alt="Command Prompt" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_140E6/image_5.png" width="117" border="0" /&gt;&amp;#160;&amp;#160; &lt;img title="Command Prompt" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="110" alt="Command Prompt" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_140E6/image_6.png" width="202" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;E voilá!!! (&lt;font color="#0000ff"&gt;Como é óbvio este post durou mais de um dia a escrever&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div align="center"&gt;&lt;object data="data:application/x-silverlight," type="application/x-silverlight-2" width="400px" height="400px"&gt;&lt;param name="source" value="file.axd?file=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_140E6/8Puzzle.SilverlightApp.xap" /&gt;&lt;param name="background" value="white" /&gt;&lt;param name="minRuntimeVersion" value="2.0.31005.0" /&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"&gt;&lt;img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none" /&gt;&lt;/a&gt;&lt;/object&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Não está tão giro como a versão WPF, mas também não anda muito longe.&lt;/p&gt;  &lt;p&gt;Uma coisa que me surpreendeu e &lt;strong&gt;bastante&lt;/strong&gt; foi que programar em Silverlight e WPF não é exactamente a mesma coisa!!&lt;/p&gt;  &lt;p&gt;Na verdade para uma tecnologia que é um subset de outra existem demasiadas diferenças. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Anyway aqui fica:&lt;/p&gt;  &lt;p&gt;Código Fonte em &lt;strong&gt;C#&lt;/strong&gt;:&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/8PuzzleStateSearch%20C%7C3%20Source%20Code.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/8PuzzleStateSearch%20C%7C3%20Source%20Code.zip"&gt;8PuzzleStateSearch%2...&lt;/a&gt;&lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;Código Fonte em &lt;strong&gt;VB.NET&lt;/strong&gt;: (&lt;font color="#0000ff"&gt;Não contém projecto Silverlight por preguiça do autor&lt;/font&gt;)&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/8PuzzleStateSearch%20VB.Net.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/8PuzzleStateSearch%20VB.Net.zip"&gt;8PuzzleStateSearch%2...&lt;/a&gt;&lt;/iframe&gt;  &lt;p&gt;Código Fonte em &lt;strong&gt;Java&lt;/strong&gt;: (&lt;font color="#0000ff"&gt;Não contém GUI por preguiça do autor&lt;/font&gt;)&lt;/p&gt; &lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/8PuzzleStateSearch%20Java.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/8PuzzleStateSearch%20Java.zip"&gt;8PuzzleStateSearch%2...&lt;/a&gt;&lt;/iframe&gt;  &lt;br /&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As outras versões, (Spec#, C++/CLI), ficam para quando tiver mais tempo disponivel, (&lt;font color="#0000ff"&gt;se alguma vez um milagre desses acontecer&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se por alguma motivo não conseguirem compilar, (&lt;font color="#0000ff"&gt;em C# por exemplo&lt;/font&gt;), devido ao seguinte erro:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="ErrorImage" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="83" alt="ErrorImage" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_87A1/image_3.png" width="428" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;basta mudar isto:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="SourceCode1" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="102" alt="SourceCode1" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_87A1/image_9.png" width="487" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;para isto:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="SourceCodeTwo" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="100" alt="SourceCodeTwo" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/8PuzzleSolverStateSearchClassicsAeIDA_87A1/image_8.png" width="455" border="0" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/03/31/8Puzzle-Solver-(State-Search-Classics-AStar-e-IDAStar).aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/03/31/8Puzzle-Solver-(State-Search-Classics-AStar-e-IDAStar).aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=5f571da7-3e2a-4def-8e0b-abdc8f741990</guid>
      <pubDate>Tue, 31 Mar 2009 22:49:11 +0000</pubDate>
      <category>C#</category>
      <category>XAML</category>
      <category>WPF</category>
      <category>VB.NET</category>
      <category>Tutorial</category>
      <category>C++/CLI</category>
      <category>Java</category>
      <category>Silverlight</category>
      <category>Algorithms</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=5f571da7-3e2a-4def-8e0b-abdc8f741990</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=5f571da7-3e2a-4def-8e0b-abdc8f741990</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/03/31/8Puzzle-Solver-(State-Search-Classics-AStar-e-IDAStar).aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=5f571da7-3e2a-4def-8e0b-abdc8f741990</wfw:commentRss>
    </item>
    <item>
      <title>Proxy Changer v0.3</title>
      <description>&lt;p&gt;Ninguém diria que o meu browser favorito havia de ser o &lt;a href="http://www.google.com/chrome" target="_blank"&gt;Google Chrome&lt;/a&gt;, (&lt;font color="#0000ff"&gt;sendo eu um MSP&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;font color="#0000ff"&gt;A Microsoft dá cabo de mim, &lt;strong&gt;não&lt;/strong&gt; dão nada, eles são altamente&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;Contudo existe um pequeno senão!!!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_2.png" target="_blank"&gt;&lt;img title="Google Browser" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="421" alt="Google Browser" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_thumb.png" width="516" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Acontece que este browser tem um “defeito” horrível!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;Para mudarmos as definições do Proxy somos reencaminhados para as definições do Internet Explorer. ??&lt;/p&gt;  &lt;p&gt;(&lt;font color="#0000ff"&gt;Não compreendo lá muito bem porque carga de agua fizeram isto, mas ok&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_6.png" target="_blank"&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="421" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_thumb_2.png" width="390" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se forem como eu, sempre que mudam de local têm de estabelecer um proxy diferente, ao fim de apenas um par de dias o mais certo é passarem-se completamente da carola! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;E então se forem programadores vão querer resolver vocês próprios o problema! Certo? &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Dito e feito!&lt;/p&gt;  &lt;p&gt;Como nunca programei nada em WPF e para mim XAML era quase Chinês.&lt;/p&gt;  &lt;p&gt;Decidi juntar o útil ao agradável, (&lt;font color="#0000ff"&gt;ou pelo menos tentar&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Porque não escrever o programa em XAML?&lt;/p&gt;  &lt;p&gt;Por onde começar?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tenho que admitir que tirei algumas ideias &lt;a href="http://www.codeplex.com/babysmash" target="_blank"&gt;daqui&lt;/a&gt;. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;  &lt;p&gt;Se querem começar aprender XAML/WPF sobre a perspectiva de um programador WinForms, então &lt;a href="http://www.codeplex.com/babysmash" target="_blank"&gt;este&lt;/a&gt; é o lugar certo.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="82" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_9.png" width="399" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-top-width: 0px; display: inline; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="79" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/ProxyChangerXAML_4BF4/image_12.png" width="398" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Oh Ricardo!!! Como é que conseguiste fazer uma aplicação em WPF tão feia???&lt;/p&gt;  &lt;p&gt;É um dom que eu tenho.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Brincadeiras à parte WPF é extremamente interessante, infelizmente ainda tem alguns drawbacks.&lt;/p&gt;  &lt;p&gt;Especialmente no que diz respeito à aceleração por hardware.&lt;/p&gt;  &lt;p&gt;Experimentem fazer o resize de uma janela e até vos dá uma coisa!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Tirando isso recomendo vivamente.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Download aqui:&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/ChangeProxy.zip" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/ChangeProxy.zip"&gt;ChangeProxy.zip&lt;/a&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nota:&lt;/p&gt;  &lt;p&gt;O programa é tão básico que nem tem botão para encerrar, (&lt;font color="#0000ff"&gt;façam Alt + F4&lt;/font&gt;)    &lt;br /&gt;Clicar em qualquer zona da janela para a arrastar. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2009/03/23/Proxy-Changer-(XAML).aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2009/03/23/Proxy-Changer-(XAML).aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=fe7e28e9-a0de-40e4-b7d0-749ed1ef6c2e</guid>
      <pubDate>Mon, 23 Mar 2009 05:33:32 +0000</pubDate>
      <category>C#</category>
      <category>XAML</category>
      <category>Google Chrome</category>
      <category>WPF</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=fe7e28e9-a0de-40e4-b7d0-749ed1ef6c2e</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=fe7e28e9-a0de-40e4-b7d0-749ed1ef6c2e</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2009/03/23/Proxy-Changer-(XAML).aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=fe7e28e9-a0de-40e4-b7d0-749ed1ef6c2e</wfw:commentRss>
    </item>
    <item>
      <title>Vector Designer</title>
      <description>&lt;p&gt;Com base num programa anterior, &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/29/Designer-2b-OpenGL-20-3d-XGL-Designer.aspx"&gt;aqui&lt;/a&gt;, comecei a desenvolver um editor vectorial, (&lt;font color="#ff0000"&gt;ainda est&amp;#225; numa fase muito &amp;quot;fanhosa&amp;quot;, fase alpha, ainda nem sequer tem direito a ser beta &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para quem leu o post sobre o &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/29/Designer-2b-OpenGL-20-3d-XGL-Designer.aspx"&gt;XGL Designer&lt;/a&gt; e viu o ScreenCast, deve ter reparado, (&lt;font color="#0000ff"&gt;ou melhor! Horrorizado&lt;/font&gt;), em como o editor n&amp;#227;o era assim grande coisa! E se houve algum LOUCO que decidiu correr o c&amp;#243;digo, ent&amp;#227;o deve ter reparado que funcionalidade n&amp;#227;o &amp;#233; o forte &amp;quot;coisa&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Assim sendo, decidi/tentei fazer um fork daquilo, e foi assim que nasceu o meu Frankenstein a &amp;quot;quem&amp;quot; decidi chamar: Vector Designer:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_2.png" target="_blank"&gt;&lt;img height="347" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_thumb.png" width="324" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_4.png" target="_blank"&gt;&lt;img height="347" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_thumb_1.png" width="324" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#201; uma tentativa ainda muito fraquinha, (&lt;font color="#0000ff"&gt;admito&lt;/font&gt;), de escrever um editor vectorial, com:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1. &lt;/strong&gt;Layers&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. &lt;/strong&gt;Grouping&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3. &lt;/strong&gt;Transforma&amp;#231;&amp;#245;es, (Move/Translate, Rotate, Matrix, etc...)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Algumas funcionalidades ainda n&amp;#227;o existentes, (&lt;font color="#ff0000"&gt;mas desejadas&lt;/font&gt;):&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 1. &lt;/strong&gt;Suporte para Managed DirectX.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (&lt;font color="#0000ff"&gt;Oh YES!!! Quando o editor tiver 1milh&amp;#227;o de figuras, fazer as transforma&amp;#231;&amp;#245;es por software ia ser uma p&amp;#233;ssima ideia&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 2. &lt;/strong&gt;Menu Context&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 3.&lt;/strong&gt; Que o editor seja capaz de limpar a minha casa enquanto eu n&amp;#227;o estou c&amp;#225;, (&lt;font color="#0000ff"&gt;Just kidding&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_6.png" target="_blank"&gt;&lt;img height="347" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_thumb_2.png" width="321" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_8.png" target="_blank"&gt;&lt;img height="347" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/VectorDesigner_7D5A/image_thumb_3.png" width="324" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Desta vez n&amp;#227;o deixo c&amp;#243;digo, porque ainda est&amp;#225; numa fase muito horr&amp;#237;vel! (&lt;font color="#0000ff"&gt;Admitindo que vou alguma vez vou ter tempo para continuar e melhorar isto&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;MAS... Deixo o ScreenCast, (&lt;font color="#0000ff"&gt;que na minha modesta opini&amp;#227;o at&amp;#233; est&amp;#225; muito catita &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;Tenham &amp;#233; em aten&amp;#231;&amp;#227;o que o ScreenCast foi filmado a uns 3 a 5fps, (&lt;font color="#0000ff"&gt;para poupar espa&amp;#231;o&lt;/font&gt;), por isso algumas anima&amp;#231;&amp;#245;es n&amp;#227;o s&amp;#227;o assim t&amp;#227;o fluidas &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-frown.gif" class="flag" alt="Frown" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/Vector%20Designer.wmv" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que não suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/Vector%20Designer.wmv"&gt;Vector%20Designer.wm...&lt;/a&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nota: O ScreenCast e as imagens presentes neste post foram tiradas do mesmo programa, mas em vers&amp;#245;es ligeiramente diferentes!    &lt;br /&gt;As imagens s&amp;#227;o de uma vers&amp;#227;o ligeiramente mais recente.     &lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/30/Vector-Designer.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/30/Vector-Designer.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=38ebe8e8-63bb-418b-89d5-7ca013486363</guid>
      <pubDate>Sat, 30 Aug 2008 08:57:23 +0000</pubDate>
      <category>C#</category>
      <category>ScreenCast</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=38ebe8e8-63bb-418b-89d5-7ca013486363</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=38ebe8e8-63bb-418b-89d5-7ca013486363</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/30/Vector-Designer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=38ebe8e8-63bb-418b-89d5-7ca013486363</wfw:commentRss>
    </item>
    <item>
      <title>Designer + OpenGL 2.0 = XGL Designer</title>
      <description>&lt;p&gt;XGL?! Mas o que vem a ser isto do XGL? &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-embarassed.gif" class="flag" alt="Embarassed" /&gt;&lt;/p&gt;  &lt;p&gt;Bem... H&amp;#225; n&amp;#227;o muito tempo atr&amp;#225;s numa cadeira de Computa&amp;#231;&amp;#227;o Gr&amp;#225;fica o professor queria que desenvolv&amp;#234;ssemos um projecto &amp;#224; nossa escolha em &lt;a href="http://www.opengl.org/" target="_blank"&gt;OpenGL&lt;/a&gt; numa linguagem tamb&amp;#233;m ela &amp;#224; nossa escolha.&lt;/p&gt;  &lt;p&gt;(&lt;font color="#ff0000"&gt;Decis&amp;#227;o arrojada, se pensarmos que aqui na universidade Linux = Bom, Microsoft = Mau&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Havia uma &amp;quot;contrapartida&amp;quot; interessante nesta cadeira, n&amp;#227;o haveria aulas te&amp;#243;ricas, apenas aulas pr&amp;#225;ticas e dois livros de &lt;a href="http://www.opengl.org/" target="_blank"&gt;OpenGL&lt;/a&gt; na sala de aula para os alunos consultarem.&lt;/p&gt;  &lt;p&gt;A presen&amp;#231;a do professor pautava-se mais pela aus&amp;#234;ncia do que pela presen&amp;#231;a, (&lt;font color="#0000ff"&gt;Andava pelo gabinete acho eu! Apesar desta descri&amp;#231;&amp;#227;o foi uma das cadeiras mais interessantes que j&amp;#225; tive&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ora bem... O que fazer?!&lt;/p&gt;  &lt;p&gt;Eu j&amp;#225; tinha &amp;quot;tocado&amp;quot; apenas como hobby/curiosidade em Managed DirectX, (&lt;font color="#ff0000"&gt;mais info, &lt;/font&gt;&lt;a href="http://www.mdxinfo.com/" target="_blank"&gt;&lt;font color="#ff0000"&gt;aqui&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;, &lt;/font&gt;&lt;a href="http://www.chadvernon.com/blog/tutorials/managed-directx-2/" target="_blank"&gt;&lt;font color="#ff0000"&gt;aqui&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; e &lt;/font&gt;&lt;a href="http://msdn.microsoft.com/en-us/magazine/cc164112.aspx" target="_blank"&gt;&lt;font color="#ff0000"&gt;aqui&lt;/font&gt;&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Mas OpenGL?! Cruzes Credo!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Assim sendo comecei a &amp;quot;&lt;font color="#0000ff"&gt;chafurdar&lt;/font&gt;&amp;quot; nas bibliotecas nativas &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt; (&lt;font color="#ff0000"&gt;Sempre com pensamento positivo, podia ser pior Ricardo, podia ser COM, pior ainda!!! Podia ser Linux, Just Kidding&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;E aos poucos e poucos foi surgindo um wrapper muito fininho &amp;#224; volta disto, (&lt;font color="#0000ff"&gt;que n&amp;#227;o era propriamente veloz ou eficiente&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;Foi ent&amp;#227;o que encontrei a &lt;a href="http://www.taoframework.com/" target="_blank"&gt;The Tao Framework&lt;/a&gt;, que era basicamente tudo o que eu estava a fazer, mas MELHOR, (&lt;font color="#ff0000"&gt;espero eu&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se eu tivesse que descrever a &lt;a href="http://www.taoframework.com/" target="_blank"&gt;The Tao Framework&lt;/a&gt; diria que &amp;#233; um wrapper sem qualquer orienta&amp;#231;&amp;#227;o a objectos, era C# estruturado.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;O que eu fiz foi construir novo wrapper muito b&amp;#225;sico &amp;#224; volta da &amp;quot;Tao&amp;quot;, (gest&amp;#227;o de recursos, disposing, etc...).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.opengl.org/" target="_blank"&gt;OpenGL&lt;/a&gt; pode e deve ser considerada como uma m&amp;#225;quina de estados, (ver &lt;a href="http://www.opengl.org/documentation/red_book/" target="_blank"&gt;The Redbook&lt;/a&gt;), (&lt;font color="#ff0000"&gt;&lt;strong&gt;quase&lt;/strong&gt; ao n&amp;#237;vel de Assembly na minha opini&amp;#227;o.&lt;/font&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;)&lt;/p&gt;  &lt;p&gt;por exemplo, definir uma luz do tipo Specular em C com OpenGL:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:ae1ee917-09bd-4794-b563-fd7042144203" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c"&gt;/* &lt;br/&gt;  Este "simples" método é usado para definir uma luz, ou seja, &lt;br/&gt;  O tipo de luz, (Specular, Diffuse), qual a luz a modificar ou criar... &lt;br/&gt;  Local para onde aponta, onde se encontra a cor, etc... &lt;br/&gt; &lt;br/&gt;  Mas reparem, só temos 3 argumentos, 2 inteiros e um ponteiro para float &lt;br/&gt;*/  &lt;br/&gt;void glLightfv(GLenum light, GLenum pname, const GLfloat * params); &lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Para criar uma simples luz teria que escrever toda esta tralha:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:dfca4f86-369c-4a26-8b95-81a0b165acb6" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c"&gt;int light = 2;  &lt;br/&gt;  &lt;br/&gt;float  color[] = float {0.5f, 0f, 0f, 0f};  &lt;br/&gt;float vertex[] = float { x, y, z, isInfinite ? 0.0f : 1.0f };  &lt;br/&gt;  &lt;br/&gt;glLightfv(light, GL_SPECULAR, color);  &lt;br/&gt;glLightfv(light, GL_POSITION, vertex);  &lt;br/&gt;glEnable(light); &lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O mesmo m&amp;#233;todo serve para fazer v&amp;#225;rias coisas, (&lt;font color="#ff0000"&gt;confuso e muito pouco produtivo&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;O que XGL faz &amp;#233; simplificar as coisas, (&lt;font color="#ff0000"&gt;ou melhor, simplificar a minha vida&lt;/font&gt;).&lt;/p&gt;

&lt;p&gt;Para definir a mesma luz bastaria usar um destes m&amp;#233;todos.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:19b2c435-bb12-49df-8c37-9aaf5e2447a3" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public static void Specular(Light light, Color color)  &lt;br/&gt;{  &lt;br/&gt;    Gl.glLightfv((int)light, Gl.GL_SPECULAR, XglCore.ColorToFloat(color));  &lt;br/&gt;}  &lt;br/&gt;  &lt;br/&gt;//Como todas estas chamadas são a métodos estáticos estou apostar que a CLR esta a fazer  &lt;br/&gt;//inlining onde é possivel, não prejudicando muito a performance  &lt;br/&gt;public static void Specular(Light light, Vertex position, bool isInfinite, Color color)  &lt;br/&gt;{  &lt;br/&gt;    Gl.glLightfv((int)light, Gl.GL_SPECULAR, XglCore.ColorToFloat(color));  &lt;br/&gt;    float[] vertex = new float[] { position.X, position.Y, position.Z, isInfinite ? 0.0f : 1.0f };  &lt;br/&gt;    Gl.glLightfv((int)light, Gl.GL_POSITION, vertex);  &lt;br/&gt;    Gl.glEnable((int)light);  &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;O mesmo &amp;#233; v&amp;#225;lido para texturas, para carregar uma Mesh para mem&amp;#243;ria, anima&amp;#231;&amp;#245;es, etc...&lt;/p&gt;

&lt;p&gt;Como n&amp;#227;o tinha nome para esta &amp;quot;Framework&amp;quot; at&amp;#233; que tivesse alguma ideia chamei-lhe, XGL, (&lt;font color="#0000ff"&gt;X de inc&amp;#243;gnita e GL de OpenGL&lt;/font&gt;).&lt;/p&gt;

&lt;p&gt;Acabou por pegar entre os colegas do meu grupo e deixei ficar assim.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Esta cangalhada de 800 linhas apenas para explicar o nome?! JESUSSSS!!! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Ent&amp;#227;o vamos para a parte que eu espero ser mais interessante &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Depois de ter a &amp;quot;Framework&amp;quot; semi encaminhada, (&lt;font color="#0000ff"&gt;famoso c&amp;#243;digo &amp;#224; pedreiro&lt;/font&gt;), n&amp;#227;o podia apresentar a &amp;quot;coisa&amp;quot; assim ao professor e pronto.&lt;/p&gt;

&lt;p&gt;&amp;quot;&lt;font color="#808080"&gt;Olhe! Tome esta dll em C# professor, &amp;#233; s&amp;#243; experimentar quando chegar a casa&lt;/font&gt;&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Faltava-me ainda arranjar alguma coisa para exercitar todo o c&amp;#243;digo que tinha escrito, foi ent&amp;#227;o que me ocorreu!&lt;/p&gt;

&lt;p&gt;&amp;quot;&lt;font color="#808080"&gt;Ent&amp;#227;o e se eu escrevesse um editor vectorial aqui &amp;#224; pressa e os meus colegas fizessem os desenhos?!&lt;/font&gt;&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Dito e feito! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;E assim surgiu &lt;strong&gt;Drawing Board&lt;/strong&gt;, (&lt;font color="#ff0000"&gt;ou como eu gosto de lhe chamar, o programa do copo&lt;/font&gt;).&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/image_2_2.png" target="_blank"&gt;&lt;img height="292" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/image_2_thumb.png" width="277" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/image_4_2.png" target="_blank"&gt;&lt;img height="292" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/image_4_thumb.png" width="277" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;O &amp;quot;programa do copo&amp;quot; &amp;#233; um editor vectorial MUITO primitivo com capacidades de desenho muito rudimentares, que permite gerar objectos 3D a partir de perfis de s&amp;#243;lidos de revolu&amp;#231;&amp;#227;o.&lt;/p&gt;

&lt;p&gt;Como por ex:&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Copo_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Copo_2_thumb.png" width="155" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Copo%20Sala_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Copo%20Sala_2_thumb.png" width="210" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/copo_bottom_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/copo_bottom_2_thumb.png" width="228" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/lata_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/lata_2_thumb.png" width="198" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Donut_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Donut_2_thumb.png" width="545" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Wheel_2_2.png" target="_blank"&gt;&lt;img height="304" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/DesignerOpenGL2.0XGLDesigner_5181/Wheel_2_thumb.png" width="443" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isto &amp;#233; s&amp;#243; um pequeno exemplo.&lt;/p&gt;

&lt;p&gt;Apesar de n&amp;#227;o ter inserido aqui nenhum exemplo &amp;#233; poss&amp;#237;vel usar texturas.&lt;/p&gt;

&lt;p&gt;Um colega meu desenhou uma lapiseira, uma garrafa de &amp;#225;gua e uma de vinho que t&amp;#227;o o m&amp;#225;ximo! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;A minha funcionalidade favorita de &lt;strong&gt;&lt;font size="4"&gt;TODOS&lt;/font&gt;&lt;/strong&gt; os tempo &amp;#233; converter um objecto noutro, (&lt;font color="#ff0000"&gt;Morphing, por exemplo uma garrafa de &amp;#225;gua numa de vinho!&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Se estiverem interessados em ver o programa a funcionar, (&lt;font color="#ff0000"&gt;morphing incluindo&lt;/font&gt;), tenho aqui um ScreenCast, (&lt;font color="#0000ff"&gt;Notem &amp;#233; que isto foi filmado a umas 2 ou 5 frames por segundo, assim sendo n&amp;#227;o &amp;#233; l&amp;#225; muito fluido&lt;/font&gt;).&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/Platform.Xgl.wmv" frameborder="0" scrolling="no"&gt;
	&lt;!--Browsers que n&amp;#227;o suportam iframes--&gt;
	&lt;div&gt;File Attachment:&lt;/div&gt;
	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/Platform.Xgl.wmv"&gt;Platform.Xgl.wmv&lt;/a&gt;&lt;/iframe&gt;

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;E se forem ainda mais loucos/desvairados do que eu pensava t&amp;#234;m aqui o c&amp;#243;digo fonte!&lt;/p&gt;

&lt;p&gt;Aten&amp;#231;&amp;#227;o que existe um requisito especial, t&amp;#234;m que copiar Platform.Xgl\bin\freeglut.dll para C:\Windows\, (&lt;font color="#0000ff"&gt;unmanaged API&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;Ao fazer o download deste c&amp;#243;digo recomendo especial aten&amp;#231;&amp;#227;o a este &lt;a href="http://redb.mine.nu/blogs/redb//page/Works-On-My-Machine.aspx" target="_blank"&gt;post&lt;/a&gt;.&lt;/p&gt;
&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/Platform.Xgl%20Source%20Code.zip" frameborder="0" scrolling="no"&gt;
	&lt;!--Browsers que n&amp;#227;o suportam iframes--&gt;
	&lt;div&gt;File Attachment:&lt;/div&gt;
	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/Platform.Xgl%20Source%20Code.zip"&gt;Platform.Xgl%20Sourc...&lt;/a&gt;&lt;/iframe&gt;

&lt;br /&gt;V&amp;#227;o encontrar na pasta Platform.Xgl\Vertexes ficheiros de extens&amp;#227;o *.vertex, (&lt;font color="#ff0000"&gt;podem e devem abrir esses ficheiros com o programa&lt;/font&gt;)</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/29/Designer-2b-OpenGL-20-3d-XGL-Designer.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/29/Designer-2b-OpenGL-20-3d-XGL-Designer.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=fb49c123-f165-4cd8-98e0-6aa9bf47c6e3</guid>
      <pubDate>Fri, 29 Aug 2008 05:54:39 +0000</pubDate>
      <category>C#</category>
      <category>OpenGL</category>
      <category>ScreenCast</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=fb49c123-f165-4cd8-98e0-6aa9bf47c6e3</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=fb49c123-f165-4cd8-98e0-6aa9bf47c6e3</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/29/Designer-2b-OpenGL-20-3d-XGL-Designer.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=fb49c123-f165-4cd8-98e0-6aa9bf47c6e3</wfw:commentRss>
    </item>
    <item>
      <title>Windows Vista Sidebar Look-Alike Transparency</title>
      <description>&lt;p&gt;Ol&amp;#225; novamente! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;Hoje venho mostrar uma coisa assim mais do g&amp;#233;nero &amp;quot;eyecandy&amp;quot;. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Se derem uma olhadela &amp;#224; Sidebar do &lt;a href="http://windowsvistablog.com/" target="_blank"&gt;Windows Vista&lt;/a&gt; v&amp;#227;o certamente reparar que tem umas transpar&amp;#234;ncias todas &amp;quot;&lt;font color="#ff0000"&gt;catitas&lt;/font&gt;&amp;quot; e n&amp;#227;o s&amp;#243;, tem ali um &lt;font color="#808080"&gt;LinearGradientBrush&lt;/font&gt; de certeza.&lt;/p&gt;  &lt;p&gt;Como &amp;#233; que eles fazem aquilo?&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Quer dizer... &amp;#201; perfeitamente poss&amp;#237;vel ter janelas transparentes com Windows Forms, (&lt;font color="#ff0000"&gt;trivial at&amp;#233;&lt;/font&gt;), (&lt;font color="#ff0000"&gt;sempre desejei dizer esta palavra, os meus professores de An&amp;#225;lise Matem&amp;#225;tica n&amp;#227;o conseguiam dizer duas palavras sem espetar trivial pelo meio&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Agora o resultado &amp;#233; que n&amp;#227;o era l&amp;#225; muito agrad&amp;#225;vel:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; A janela ao ser &amp;quot;clicada&amp;quot; n&amp;#227;o recebia focus, (&lt;font color="#ff0000"&gt;&amp;#224;s vezes esta &amp;#233; a inten&amp;#231;&amp;#227;o&lt;/font&gt;), quem o recebe &amp;#233; a janela que se encontra por tr&amp;#225;s.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Os gr&amp;#225;ficos desenhados com GDI/GDI+ sa&amp;#237;am HORR&amp;#205;VEIS sem qualquer anti-aliasing, (&lt;font color="#ff0000"&gt;S&amp;#243; usando mesmo pngs&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Conclus&amp;#227;o n&amp;#227;o fa&amp;#231;o a ideia como &amp;#233; que o pessoal que programou a Sidebar do Windows resolveu esse problema, &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;, MAS encontrei um conjunto de solu&amp;#231;&amp;#245;es atrav&amp;#233;s de PInvoke e Windows Vista, (&lt;font color="#ff0000"&gt;&amp;#233; obrigat&amp;#243;rio o Windows Vista, n&amp;#227;o funciona com o XP, mais &amp;#224; frente vais compreender porqu&amp;#234;&lt;/font&gt;), que produzem resultados muito semelhantes&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img height="811" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image7_5930aa56-df78-4aaf-b926-d7a9938f1645.png" width="344" border="0" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;Ok! Para come&amp;#231;ar, vamos ter que sujar as m&amp;#227;os em c&amp;#243;digo compilado para X86, (&lt;font color="#ff0000"&gt;Espera!!! N&amp;#227;o fujas eu prometo que isto n&amp;#227;o vai doer nada!!!&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;Onde &amp;#233; que eu j&amp;#225; ouvi esta frase? N&amp;#227;o teria sido um famoso ped&amp;#243;filo portugu&amp;#234;s?! Adiante...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Eis o que vamos precisar:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:c76d8f53-c20a-4b07-95b1-09e41fb815c9" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;  &lt;br/&gt;using System.Windows.Forms;  &lt;br/&gt;using System.Runtime.InteropServices;  &lt;br/&gt;  &lt;br/&gt;[DllImport("dwmapi.dll", PreserveSig = false, EntryPoint = "DwmEnableComposition")]  &lt;br/&gt;private static extern int EnableComposition(int value);  &lt;br/&gt;  &lt;br/&gt;[DllImport("dwmapi.dll", PreserveSig = false, EntryPoint = "DwmIsCompositionEnabled")]  &lt;br/&gt;private static extern int IsCompositionEnabled(out bool value);  &lt;br/&gt;  &lt;br/&gt;[StructLayout(LayoutKind.Sequential)]  &lt;br/&gt;public struct Margin  &lt;br/&gt;{  &lt;br/&gt;    public int Left     { get; set; }  &lt;br/&gt;    public int Right    { get; set; }  &lt;br/&gt;    public int Top      { get; set; }  &lt;br/&gt;    public int Bottom   { get; set; }  &lt;br/&gt;}  &lt;br/&gt;  &lt;br/&gt;[DllImport("dwmapi.dll", PreserveSig = false, EntryPoint = "DwmExtendFrameIntoClientArea")]  &lt;br/&gt;private static extern int ExtendFrameIntoClientArea(IntPtr hWnd, [In] ref Margin margins);  &lt;br/&gt;  &lt;br/&gt;[StructLayout(LayoutKind.Sequential)]  &lt;br/&gt;private struct BlurBehind  &lt;br/&gt;{  &lt;br/&gt;    public Settings Flags               { get; set; }  &lt;br/&gt;    public bool Enable                  { get; set; }  &lt;br/&gt;    public IntPtr Region                { get; set; }  &lt;br/&gt;    public bool TransitionOnMaximized   { get; set; }  &lt;br/&gt;  &lt;br/&gt;    [Flags]  &lt;br/&gt;    public enum Settings  &lt;br/&gt;    {  &lt;br/&gt;        Enable              = 0x00000001,  &lt;br/&gt;        Region              = 0x00000002,  &lt;br/&gt;        TransitionMaximized = 0x00000004  &lt;br/&gt;    }  &lt;br/&gt;  &lt;br/&gt;}  &lt;br/&gt;  &lt;br/&gt;[DllImport("dwmapi.dll", PreserveSig = false, EntryPoint="DwmEnableBlurBehindWindow")]  &lt;br/&gt;private static extern int EnableBlurBehindWindow(IntPtr hWnd, [In] ref BlurBehind pBlurBehind);  &lt;br/&gt;  &lt;br/&gt;public static void EnableTransparentForm(Control control, bool enable)  &lt;br/&gt;{  &lt;br/&gt;    EnableBlurBehindWindow(control, new Region(new Rectangle(-1,-1, 1, 1)), enable);  &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(&lt;font color="#ff0000"&gt;Afinal n&amp;#227;o foi assim t&amp;#227;o mau pois n&amp;#227;o&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;EnableComposition&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; - Liga e desliga compositon, (&lt;font color="#ff0000"&gt;Basicamente liga e desliga o theme Aero&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;IsCompositionEnabled&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Verifica se &amp;#233; poss&amp;#237;vel efectuar composition, (&lt;font color="#ff0000"&gt;pode estar desligada, ou n&amp;#227;o ser suportada&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;ExtendFrameIntoClientArea&amp;#160;&amp;#160;&amp;#160; - Estende as frames para a &amp;#225;rea cliente, (&lt;font color="#ff0000"&gt;As frames tem &amp;quot;Glass Effect&amp;quot;&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;EnableBlurBehindWindow&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; - Define um rect&amp;#226;ngulo ou Region para aplicar &amp;quot;&lt;font color="#ff0000"&gt;Glass Effect&lt;/font&gt;&amp;quot;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Glass Effect, Glass Effect, Glass Effect, Glass Effect, &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt; Mas o que &amp;#233; que isso tem a ver com transpar&amp;#234;ncia?! (&lt;font color="#ff0000"&gt;J&amp;#225; l&amp;#225; vamos&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Para que uma janela apresente &amp;quot;Glass Effect&amp;quot; usamos EnableBlurBehindWindow e especificamos a regi&amp;#227;o que queremos aplicar o efeito, se indicarmos uma regi&amp;#227;o inv&amp;#225;lida, (&lt;font color="#0000ff"&gt;algo que se encontre fora da janela como por exemplo new Rectangle(-10, -10, 1, 1)&lt;/font&gt;) o Windows, (&lt;font color="#ff0000"&gt;mais concretamente dwmapi.dll&lt;/font&gt;), em vez de delegar o &amp;quot;trabalho de pintura&amp;quot; a n&amp;#243;s, pinta-o ele mesmo, (&lt;font color="#ff0000"&gt;numa zona &amp;#224; nossa escolha&lt;/font&gt;), ou seja, fica tudo &amp;quot;transparente&amp;quot;, porque a &amp;quot;pintura&amp;quot; se encontra numa zona &amp;quot;al&amp;#233;m fronteiras&amp;quot;.&lt;/p&gt;

&lt;p&gt;Mas continuamos a receber o focus como normalmente, o que pode ou n&amp;#227;o ser um b&amp;#243;nus.&lt;/p&gt;

&lt;p&gt;&lt;img height="484" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image11_6acaf042-d4d2-48d8-a247-77c264536198.png" width="442" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;Ex:&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:e253da7b-37d4-4736-a4f0-c7fb20bba306" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;&lt;br/&gt;using System.Windows.Forms;  &lt;br/&gt;  &lt;br/&gt;public class Transparent : Form  &lt;br/&gt;{  &lt;br/&gt;    public Transparent()  &lt;br/&gt;    {  &lt;br/&gt;        //Há que ter em atenção ao "eventos" Composition Enabled/Disabled  &lt;br/&gt;        if (VistaApi.IsCompositionEnabled())  &lt;br/&gt;        {  &lt;br/&gt;            VistaApi.EnableTransparentForm(this, true);  &lt;br/&gt;        }  &lt;br/&gt;    }  &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ent&amp;#227;o e para obtermos o &amp;quot;Efeito Sidebar&amp;quot;?&lt;/p&gt;

&lt;p&gt;Basta efectuarmos um override ao m&amp;#233;todo &lt;font color="#ff0000"&gt;OnPaint(PaintEventArgs e)&lt;/font&gt;&lt;font color="#000000"&gt; com o seguinte c&amp;#243;digo:&lt;/font&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:ca4ecf3a-636d-40c7-a6fa-b79407e095dd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;  &lt;br/&gt;using System.Drawing;&lt;br/&gt;using System.Windows.Forms;  &lt;br/&gt;  &lt;br/&gt;public class Transparent : Form  &lt;br/&gt;{  &lt;br/&gt;    public Transparent()  &lt;br/&gt;    {  &lt;br/&gt;        //Há que ter em atenção ao "eventos" Composition Enabled/Disabled   &lt;br/&gt;        if (VistaApi.IsCompositionEnabled())  &lt;br/&gt;        {  &lt;br/&gt;            VistaApi.EnableTransparentForm(this, true);  &lt;br/&gt;        }  &lt;br/&gt;    }  &lt;br/&gt;  &lt;br/&gt;    protected override void OnPaint(PaintEventArgs e)  &lt;br/&gt;    {  &lt;br/&gt;        base.OnPaint(e);  &lt;br/&gt;  &lt;br/&gt;        Graphics g = e.Graphics;  &lt;br/&gt;  &lt;br/&gt;        this.DoubleBuffered = true;  &lt;br/&gt;  &lt;br/&gt;        g.FillRectangle(  &lt;br/&gt;            new LinearGradientBrush(  &lt;br/&gt;             this.DisplayRectangle,  &lt;br/&gt;             Color.FromArgb(0x00, Color.Black),  &lt;br/&gt;             Color.FromArgb(0xff, Color.Black),  &lt;br/&gt;             90f),  &lt;br/&gt;        this.ClientRectangle);  &lt;br/&gt;    }  &lt;br/&gt;} &lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;img height="501" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image15_ae22a2c0-f137-4ae3-bc63-a3e87549b616.png" width="448" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;A quantidade de &amp;quot;efeitos&amp;quot; que se podem fazer &amp;#233; quase ilimitada &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_6_4.png" target="_blank"&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_6_thumb_1.png" width="112" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_8_2.png" target="_blank"&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_8_thumb.png" width="105" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_10_2.png" target="_blank"&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_10_thumb.png" width="107" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_14_2.png" target="_blank"&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_14_thumb.png" width="126" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;a href="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_16_2.png" target="_blank"&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/image_16_thumb.png" width="130" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Por fim deixo aqui o c&amp;#243;digo e o ScreenCast para voc&amp;#234;s brincarem um bocadinho &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/WindowsVistaGlass.wmv" frameborder="0" scrolling="no"&gt;
	&lt;!--Browsers que n&amp;#227;o suportam iframes--&gt;
	&lt;div&gt;File Attachment:&lt;/div&gt;
	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/WindowsVistaGlass.wmv"&gt;WindowsVistaGlass.wm...&lt;/a&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:53053be9-8386-4238-b772-2d94c93fc10d" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/WindowsVistaSidebarLookAlikeTransparency_3BD1/Windows%20Glass%20Effect.zip"&gt;
	&lt;span class="download_attachment"&gt;
		File Attachment:&lt;br /&gt;
		Windows Glass Effect.zip&lt;br /&gt;
		(68,91016 kB)
	&lt;/span&gt;	
&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/29/Windows-Vista-Sidebar-Look-Alike-Transparency.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/29/Windows-Vista-Sidebar-Look-Alike-Transparency.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=654129f1-5fdf-448a-8e5c-9eb4d80f609b</guid>
      <pubDate>Fri, 29 Aug 2008 04:21:31 +0000</pubDate>
      <category>C#</category>
      <category>PInvoke</category>
      <category>ScreenCast</category>
      <category>Tutorial</category>
      <category>Windows Vista</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=654129f1-5fdf-448a-8e5c-9eb4d80f609b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=654129f1-5fdf-448a-8e5c-9eb4d80f609b</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/29/Windows-Vista-Sidebar-Look-Alike-Transparency.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=654129f1-5fdf-448a-8e5c-9eb4d80f609b</wfw:commentRss>
    </item>
    <item>
      <title>Windows Live Messenger Clone</title>
      <description>&lt;p&gt;J&amp;#225; toda a gente, (&lt;font color="#ff0000"&gt;ou quase toda a gente&lt;/font&gt;), deve ter visto/escrito a sua pr&amp;#243;pria vers&amp;#227;o do &lt;a href="http://get.live.com/messenger/overview" target="_blank"&gt;Windows Live Messenger&lt;/a&gt;. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sim eu confesso &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt;, eu tamb&amp;#233;m n&amp;#227;o resisti e h&amp;#225; uns tempos atr&amp;#225;s tamb&amp;#233;m escrevi a minha pr&amp;#243;pria implementa&amp;#231;&amp;#227;o do protocolo, (&lt;font color="#ff0000"&gt;MSNP15&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;Para quem estiver interessado em obter mais informa&amp;#231;&amp;#245;es sobre o protocolo pode dirigir-se &lt;a href="http://msnpiki.msnfanatic.com/index.php/MSN_Protocol_Version_15" target="_blank"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ent&amp;#227;o e o que &amp;#233; que esta vers&amp;#227;o tem de especial - Perguntam voc&amp;#234;s.&lt;/p&gt;  &lt;p&gt;Para al&amp;#233;m da carga habitual de bugs, da interface horr&amp;#237;vel, do famoso c&amp;#243;digo &amp;#224; pedreiro, etc...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Bem...espante-se, a interface encontra-se implementada em Linha de Comandos. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-undecided.gif" class="flag" alt="Undecided" /&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-tongue-out.gif" class="flag" alt="Tong" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;font color="#ff0000"&gt;Um tipo n&amp;#227;o pode fazer tudo, c&amp;#243;digo e interface.&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;De qualquer modo &lt;strong&gt;QUALQUER&lt;/strong&gt; interface criado por mim &lt;strong&gt;JAMAIS&lt;/strong&gt; teria melhor apar&amp;#234;ncia do que a linha de comandos, (&lt;font color="#ff0000"&gt;falo do fundo do cora&amp;#231;&amp;#227;o&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font size="5"&gt;&lt;strong&gt;Funcionalidades &lt;/strong&gt;&lt;font size="2"&gt;(Nada demais)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Autentica&amp;#231;&amp;#227;o&lt;/p&gt;  &lt;p&gt;Contactos&lt;/p&gt;  &lt;p&gt;Grupos&lt;/p&gt;  &lt;p&gt;Mensagem Pessoal&lt;/p&gt;  &lt;p&gt;Estado&lt;/p&gt;  &lt;p&gt;PSM, (&lt;font color="#ff0000"&gt;Onde vem a vossa mensagem e m&amp;#250;sica que est&amp;#227;o a ouvir&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;Chat, (&lt;font color="#ff0000"&gt;Sim porque conversar numa janela DOS &amp;#233; o sonho que qualquer utilizador&lt;/font&gt;), etc...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img height="524" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveMessengerClone_9290/image34_02bfe5ec-ef74-4bc2-a98d-8213066b5e8d.png" width="594" border="0" /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;img height="524" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveMessengerClone_9290/image38_5ad5fc7b-76e6-41af-99b8-9b0cc171c47b.png" width="594" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Depois de verem estes screenshots horrendos &amp;#233; bastante poss&amp;#237;vel que alguns de voc&amp;#234;s tenham ficado a pensar que eu sou um fan de Telnet e que o Windows devia ser &lt;strong&gt;TODO&lt;/strong&gt; acedido atrav&amp;#233;s de Telnet! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt; Nada disso! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;Foi s&amp;#243; mesmo para &amp;quot;despachar&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;ScreenCast se estiverem interessados &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;iframe class="download_attachment_skydrive" marginwidth="0" marginheight="0" src="http://cid-88920095614ac415.skydrive.live.com/embedrowdetail.aspx/Public/CommandPrompt.WindowsLiveMessengerClone.wmv" frameborder="0" scrolling="no"&gt; 	&lt;!--Browsers que n&amp;#227;o suportam iframes--&gt; 	&lt;div&gt;File Attachment:&lt;/div&gt; 	&lt;a href="http://cid-88920095614ac415.skydrive.live.com/self.aspx/Public/CommandPrompt.WindowsLiveMessengerClone.wmv"&gt;CommandPrompt.Window...&lt;/a&gt;&lt;/iframe&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Desta vez n&amp;#227;o deixo c&amp;#243;digo para voc&amp;#234;s darem uma olhadela por dois simples motivos:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; O c&amp;#243;digo est&amp;#225; uma desgra&amp;#231;ada!!!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; O protocolo n&amp;#227;o &amp;#233; p&amp;#250;blico, &amp;#233; um&amp;#160; protocolo propriet&amp;#225;rio.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Como tal &amp;#233; normal que a sua implementa&amp;#231;&amp;#227;o mude sem qualquer aviso pr&amp;#233;vio, (&lt;font color="#ff0000"&gt;como j&amp;#225; tem acontecido&lt;/font&gt;), e o c&amp;#243;digo deixa de funcionar por &lt;strong&gt;COMPLETO&lt;/strong&gt;!!!&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Messenger-Clone.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Messenger-Clone.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=f1362047-3ae6-41a0-8a07-0afd6cbdad2f</guid>
      <pubDate>Thu, 28 Aug 2008 10:25:21 +0000</pubDate>
      <category>C#</category>
      <category>ScreenCast</category>
      <category>Windows Live Messenger</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=f1362047-3ae6-41a0-8a07-0afd6cbdad2f</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=f1362047-3ae6-41a0-8a07-0afd6cbdad2f</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Messenger-Clone.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=f1362047-3ae6-41a0-8a07-0afd6cbdad2f</wfw:commentRss>
    </item>
    <item>
      <title>Windows Live Writer Add-in - Attachment</title>
      <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;Este post assume que j&amp;#225; leste outros posts pertencentes a esta mesma categoria.&lt;/p&gt;  &lt;p&gt;Se ainda n&amp;#227;o o fizeste aconselho-te vivamente a come&amp;#231;ares &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/27/Windows-Live-Writer-Add-in-SkyDrive-Part-1.aspx"&gt;aqui&lt;/a&gt; ou &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/27/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx"&gt;aqui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Vamos continuar a partir do ponto onde ficamos anteriormente.&lt;/p&gt;  &lt;p&gt;O objectivo desta vez &amp;#233; inserir conte&amp;#250;do, (&lt;font color="#ff0000"&gt;attachments&lt;/font&gt;) directamente no blog em vez de usar um servi&amp;#231;o externo como o &lt;a href="http://skydrive.live.com/" target="_blank"&gt;SkyDrive&lt;/a&gt; por exemplo, como fizemos na &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/27/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx"&gt;&amp;#250;ltima vez&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Que no final ficar&amp;#225; com este aspecto:&lt;/p&gt;  &lt;p&gt;&lt;img height="110" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinAttachment_8B94/image83_246198da-2dbe-490e-a40f-a96e7f249785.png" width="313" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;O processo &amp;#233; em tudo id&amp;#234;ntico ao anterior, mas em vez de herdarmos de &lt;font color="#808080"&gt;ContentSource&lt;/font&gt;, herdamos de &lt;font color="#808080"&gt;SmartContentSource&lt;/font&gt;, que &amp;#233; muito mais flex&amp;#237;vel e poderoso.&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:7a7cd11c-5a50-4b2d-91b5-07e8c9a87c41" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;[WriterPlugin("97c76bc7-0030-4e33-960f-b4356277aaac", "Attachment",  &lt;br/&gt;Description = "Uploads Attachments into your blog and providing a link")]  &lt;br/&gt;[InsertableContentSource("Attachment")]  &lt;br/&gt;public class InsertAttachmentAddin : SmartContentSource  &lt;br/&gt;{  &lt;br/&gt;    //Painel que vai aparecer à direita!!!  &lt;br/&gt;    public override SmartContentEditor CreateEditor(ISmartContentEditorSite editorSite)  &lt;br/&gt;    {  &lt;br/&gt;        //ContextEditor herda de SmartContentEditor que por sua vez herda de UserControl  &lt;br/&gt;        //Ou seja, não passa de um simples controlo como aqueles usados nos Windows Forms  &lt;br/&gt;        return new ContextEditor();  &lt;br/&gt;    }  &lt;br/&gt;  &lt;br/&gt;    public override DialogResult CreateContent(IWin32Window dialogOwner, ISmartContent content)  &lt;br/&gt;    {  &lt;br/&gt;        //O Equivalente de ContentSource.CreateContent mas para SmartContentSource.CreateContent  &lt;br/&gt;        //Em vez do segundo argumento ser uma string é do tipo ISmartContent.  &lt;br/&gt;    }  &lt;br/&gt;  &lt;br/&gt;    //Aqui é onde vão gerar o vosso HTML que pode muito bem ser simplesmente JavaScript  &lt;br/&gt;    //Ou seja sem conteúdo visível  &lt;br/&gt;    public override string GeneratePublishHtml(ISmartContent content, IPublishingContext publishingContext)  &lt;br/&gt;    {  &lt;br/&gt;    }  &lt;br/&gt;  &lt;br/&gt;}  &lt;br/&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;font color="#ff0000"&gt;CreateEditor()&lt;/font&gt; - Respons&amp;#225;vel pela cria&amp;#231;&amp;#227;o do painel que se encontra &amp;#224; direita, (&lt;font color="#ff0000"&gt;n&amp;#227;o ser&amp;#225; abordado aqui&lt;/font&gt;)&lt;/p&gt;

&lt;p&gt;&lt;img height="419" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinAttachment_8B94/image73_fdb34efd-c169-4983-adb0-15f858606b3e.png" width="252" border="0" /&gt;&amp;#160; &lt;img height="282" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinAttachment_8B94/image123_e26b5fea-22da-4c99-8fef-6e3d21c74a38.png" width="257" border="0" /&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; &lt;font color="#ff0000"&gt;CreateContent()&lt;/font&gt; - &amp;#201; este o m&amp;#233;todo chamado sempre que clicam num &amp;quot;&lt;font color="#808080"&gt;Insert Picture |Table | etc...&lt;/font&gt;&amp;quot;, ou seja, o equivalente de main() em C.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; &lt;font color="#ff0000"&gt;GeneratePublishHtml()&lt;/font&gt; - Aqui &amp;#233; onde geram todo o vosso HTML se assim o entenderem.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Ent&amp;#227;o e como fazer o upload de um ficheiro para o servidor?&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:6c05c540-ce29-411a-a5db-b3b26f91250f" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public override string GeneratePublishHtml(ISmartContent content, IPublishingContext publishingContext)  &lt;br/&gt;{  &lt;br/&gt;    string fakeFilePath = @"C:\AttachThis.zip";  &lt;br/&gt;    //Adiciona um ficheiro!  &lt;br/&gt;    string fileName = Path.GetFileName(fakeFilePath)  &lt;br/&gt;    content.Files.Add(fileName, Path.GetFullPath(fakeFilePath));  &lt;br/&gt;    return string.Format(Properties.Resources.AttachmentHtml, fileName, "15kb");    &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Simples basta usar &lt;font color="#ff0000"&gt;content.Files.Add(string fileName, string filePath)&lt;/font&gt;;&lt;/p&gt;

&lt;p&gt;O c&amp;#243;digo encontra-se &lt;strong&gt;BASTANTE&lt;/strong&gt; reduzido para efeitos de simplifica&amp;#231;&amp;#227;o.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Podem fazer o download da solu&amp;#231;&amp;#227;o que cont&amp;#233;m a vers&amp;#227;o original e explorar &lt;font color="#ff0000"&gt;Properties.Resources.AttachmentHtml&lt;/font&gt; e verificar exactamente o HTML que est&amp;#225; a ser emitido.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:87d4b4ef-3d55-4c1e-83f3-09cd69b54536" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/WindowsLiveWriterAddinAttachment_8B94/Attachment.zip"&gt;
	&lt;span class="download_attachment"&gt;
		File Attachment:&lt;br /&gt;
		Attachment.zip&lt;br /&gt;
		(34,7627 kB)
	&lt;/span&gt;	
&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;V&amp;#227;o tamb&amp;#233;m precisar de uma folhas de estilos para meterem no vosso blog.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:679f3488-9f77-4ce1-9131-38709cddd3fd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/WindowsLiveWriterAddinAttachment_8B94/Download.css"&gt;
	&lt;span class="download_attachment"&gt;
		File Attachment:&lt;br /&gt;
		Download.css&lt;br /&gt;
		(636 bytes)
	&lt;/span&gt;	
&lt;/a&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:840e9e08-cd2a-4fb2-a979-eda0337158bd" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;/div&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-Attachment.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-Attachment.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=266f1db1-7180-4e55-9070-d4bf284896a7</guid>
      <pubDate>Thu, 28 Aug 2008 09:55:50 +0000</pubDate>
      <category>Add-in</category>
      <category>C#</category>
      <category>Tutorial</category>
      <category>Windows Live Writer</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=266f1db1-7180-4e55-9070-d4bf284896a7</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=266f1db1-7180-4e55-9070-d4bf284896a7</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-Attachment.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=266f1db1-7180-4e55-9070-d4bf284896a7</wfw:commentRss>
    </item>
    <item>
      <title>Windows Live Writer Add-in - SkyDrive - Part 2</title>
      <description>&lt;p&gt;Este post faz parte de uma s&amp;#233;rie de posts. &lt;/p&gt;  &lt;p&gt;Se ainda n&amp;#227;o leste nenhum dos post que ficaram para tr&amp;#225;s aconselho-te vivamente a come&amp;#231;ares &lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/27/Windows-Live-Writer-Add-in-SkyDrive-Part-1.aspx"&gt;aqui&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Existem duas op&amp;#231;&amp;#245;es ao criar uma classe ou herdam de &lt;span style="color: gray"&gt;ContentSource&lt;/span&gt; ou de &lt;span style="color: gray"&gt;SmartContentSource&lt;/span&gt;. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;span style="color: gray"&gt;ContentSource&lt;/span&gt; &amp;#233; extremamente b&amp;#225;sico, (&lt;span style="color: red"&gt;e &amp;#233; por aqui que vamos come&amp;#231;ar&lt;/span&gt;), permite-vos modificar o texto seleccionado ou caso nada se encontre seleccionado inserir texto. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;span style="color: gray"&gt;SmartContentSource &lt;/span&gt;&amp;#233; bem mais sofisticado e permite-vos ter maior controlo sobre o conte&amp;#250;do presente na janela, o vosso conte&amp;#250;do passa a ser &amp;quot;seleccion&amp;#225;vel&amp;quot; e ainda t&amp;#234;m direito a um painel &amp;#224; vossa direita. &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;  &lt;p&gt;Vamos meter as m&amp;#227;os na &amp;quot;massa&amp;quot; e programar o Add-in mais simples que conseguirmos. &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:0a3d63bd-a0a9-40ab-930b-2b7b499facc4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;  &lt;br/&gt;using WindowsLive.Writer.Api;  &lt;br/&gt;  &lt;br/&gt;public class InsertSkyDriveAttachmentAddin : ContentSource   &lt;br/&gt;{  &lt;br/&gt;    &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Podem obter mais informa&amp;#231;&amp;#245;es sobre esta API &lt;a href="http://msdn.microsoft.com/en-us/library/aa738906.aspx" target="_blank"&gt;aqui&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;Precisamos tamb&amp;#233;m de dois atributos: &lt;span style="color: gray"&gt;WriterPlugin&lt;/span&gt; e &lt;span style="color: gray"&gt;InsertableContentSource&lt;/span&gt;. &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;span style="color: gray"&gt;WriterPlugin&lt;/span&gt; descreve o vosso Add-in, (&lt;span style="color: red"&gt;nome, url, descri&amp;#231;&amp;#227;o, bl&amp;#225;, bl&amp;#225;, bl&amp;#225;&lt;/span&gt;). &lt;/p&gt;

&lt;p&gt;&lt;span style="color: gray"&gt;InsertableContentSource&lt;/span&gt; indica quais os nomes que devem aparecer neste menu, (&lt;span style="color: blue"&gt;ver imagem abaixo&lt;/span&gt;), e na sidebar. &lt;/p&gt;

&lt;p&gt;&lt;img height="104" alt="image_35" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart2_8888/image_35_ef2f9052-56b9-4b10-8891-05ea3e64da1c.png" width="156" border="0" /&gt;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;Assim sendo:&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:71c0763b-b106-4548-b80e-3b6337aa55c5" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;using System;  &lt;br/&gt;using WindowsLive.Writer.Api;  &lt;br/&gt;[WriterPlugin("97c76bc7-0030-4e33-960f-b4356277aaaa",          //GUID - tem que ser único!  &lt;br/&gt;"SkyDrive Link",                                               //Nome  &lt;br/&gt;Description = "Inserts a link into SkyDrive content",          //Descrição  &lt;br/&gt;HasEditableOptions = false,                                    //Opções no menu ferramentas  &lt;br/&gt;PublisherUrl = "http://localhost"  &lt;br/&gt;//ImagePath = "code.ico"                                       //Ainda não consegui fazer funcionar  &lt;br/&gt;)]   &lt;br/&gt;[InsertableContentSource("SkyDrive Link")]                     //Insert --&amp;gt;SkyDrive Link&amp;lt;--...  &lt;br/&gt;public class InsertSkyDriveAttachmentAddin : ContentSource  &lt;br/&gt;{  &lt;br/&gt;    public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)  &lt;br/&gt;    {  &lt;br/&gt;  &lt;br/&gt;    }  &lt;br/&gt;}&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Apenas nos falta um passo, (&lt;span style="color: red"&gt;t&amp;#225; quase&lt;/span&gt;), fazer a sobrecarga de um destes membros. &lt;/p&gt;

&lt;p&gt;&lt;span style="color: red"&gt;CreateContent&lt;/span&gt; (Do Menu Inserir). &lt;/p&gt;

&lt;p&gt;CreateContentFromUrl (Colar URL). &lt;/p&gt;

&lt;p&gt;CreateContentFromLiveClipboard(usando o LiveClipboard). &lt;/p&gt;

&lt;p&gt;&amp;#160;&amp;#160; &lt;/p&gt;

&lt;p&gt;Vamos usar o primeiro, (&lt;span style="color: red"&gt;CreateContent&lt;/span&gt;). &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaab:06d4279d-b256-43cd-854f-5a4faf5ceee4" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre name="code" class="c#"&gt;public override DialogResult CreateContent(IWin32Window dialogOwner, ref string content)  &lt;br/&gt;{  &lt;br/&gt;    //dialogOwner - janela mãe  &lt;br/&gt;    //content     - conteúdo selecionado que vocês vão modificar!  &lt;br/&gt;                 &lt;br/&gt;    //Código trivial que abre uma janela onde inserem o link que é validado.  &lt;br/&gt;    using (AddLink form = new AddLink())  &lt;br/&gt;    {  &lt;br/&gt;        //Não é obrigatório usarem dialogOwner, mas fica sempre bem!  &lt;br/&gt;        form.ShowDialog(dialogOwner);  &lt;br/&gt;        if (form.CanInsert == false)  &lt;br/&gt;        {  &lt;br/&gt;            return DialogResult.Cancel;  &lt;br/&gt;        }  &lt;br/&gt;        if(form.IsValidLink() == false)  &lt;br/&gt;        {  &lt;br/&gt;            MessageBox.Show("Invalid Hyperlink");  &lt;br/&gt;            return DialogResult.Abort;  &lt;br/&gt;        }  &lt;br/&gt;        string embed = form.EmbedLink;  &lt;br/&gt;        //E por fim o vosso HTML.  &lt;br/&gt;        content = embed;  &lt;br/&gt;        return DialogResult.OK;  &lt;br/&gt;    }  &lt;br/&gt;}  &lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;N&amp;#227;o me querendo alongar muito para n&amp;#227;o por ningu&amp;#233;m a dormir, deixo aqui o zip da solu&amp;#231;&amp;#227;o para os curiosos poderem explorar. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;

&lt;p&gt;
  &lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:c2763f06-24e1-49d2-9fc2-b7fe725f28db" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart2_8888/SkyDrive.zip"&gt;
	&lt;span class="download_attachment"&gt;
		File Attachment:&lt;br /&gt;
		SkyDrive.zip&lt;br /&gt;
		(15,42871 kB)
	&lt;/span&gt;	
&lt;/a&gt;
&lt;/div&gt;
&lt;/p&gt;

&lt;p&gt;V&amp;#227;o precisar tamb&amp;#233;m de uma folha de estilos para meterem no vosso blog.&lt;/p&gt;

&lt;div class="wlWriterSmartContent" id="scid:97c76bc7-0030-4e33-960f-b4356277aaac:9c47d135-b4a6-4fe3-859d-ad92d8064a52" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;a href="http://redb.mine.nu/blogs/redb//file.axd?file=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart2_8888/Download.css"&gt;
	&lt;span class="download_attachment"&gt;
		File Attachment:&lt;br /&gt;
		Download.css&lt;br /&gt;
		(636 bytes)
	&lt;/span&gt;	
&lt;/a&gt;
&lt;/div&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=0c8ebb2c-156a-4601-876e-d2509584fc58</guid>
      <pubDate>Thu, 28 Aug 2008 09:42:32 +0000</pubDate>
      <category>Add-in</category>
      <category>C#</category>
      <category>Tutorial</category>
      <category>Windows Live Writer</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=0c8ebb2c-156a-4601-876e-d2509584fc58</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=0c8ebb2c-156a-4601-876e-d2509584fc58</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=0c8ebb2c-156a-4601-876e-d2509584fc58</wfw:commentRss>
    </item>
    <item>
      <title>Windows Live Writer Add-in - SkyDrive - Part 1</title>
      <description>&lt;p&gt;Isto de ter um blog tem muito que se diga &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;N&amp;#227;o fa&amp;#231;o a m&amp;#237;nima ideia de como &amp;#233; que a maioria das pessoas &amp;quot;bloga&amp;quot;, (&lt;font color="#ff0000"&gt;este palavr&amp;#227;o existe?!&lt;/font&gt;) &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-embarassed.gif" class="flag" alt="Embarassed" /&gt;&lt;/p&gt;  &lt;p&gt;Mas eu c&amp;#225; gosto de faze-lo com o menor atrito poss&amp;#237;vel, (&lt;font color="#ff0000"&gt;Rei da pregui&amp;#231;a&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Gosto do &lt;a href="http://get.live.com/writer/overview" target="_blank"&gt;Windows Live Writer&lt;/a&gt;, mas ainda assim acho que lhe faltam ali algumas umas funcionalidades que dariam imenso jeito!&lt;/p&gt;  &lt;p&gt;Como por exemplo inserir conte&amp;#250;dos directamente do &lt;a href="http://skydrive.live.com/" target="_blank"&gt;SkyDrive&lt;/a&gt; para o vosso blog.&lt;/p&gt;  &lt;p&gt;Fazendo aparecer algo deste g&amp;#233;nero no vosso blog:&lt;/p&gt;  &lt;p&gt;&lt;img height="120" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart1_86DB/image223_ca343ae3-077a-486c-8e5f-ac014caffdce.png" width="278" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#201; exactamente isso que vamos fazer. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;Antes de meter as&amp;#160; m&amp;#227;os no c&amp;#243;digo vamos criar um projecto com o &lt;a href="http://www.microsoft.com/brasil/msdn/visualstudio/Default.mspx" target="_blank"&gt;Visual Studio&lt;/a&gt; e configur&amp;#225;-lo correctamente para podermos depurar o c&amp;#243;digo enquanto o Add-in corre, (&lt;font color="#ff0000"&gt;Assim n&amp;#227;o ficamos &amp;#224;s cegas&lt;/font&gt;).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Criar um novo projecto do tipo: &lt;font color="#ff0000"&gt;Class Library&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Definir &lt;font color="#ff0000"&gt;Post-build event command line&lt;/font&gt; como: &lt;font color="#0000ff" size="1"&gt;XCOPY /D /Y /R &amp;quot;$(TargetPath)&amp;quot; &amp;quot;C:\Program Files\Windows Live\Writer\Plugins\&amp;quot;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;img height="290" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart1_86DB/image263_bf55c324-0ab6-4ab3-979b-11c3d8e89010.png" width="561" border="0" /&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; &lt;font color="#ff0000"&gt;Start External Program&lt;/font&gt;: &lt;font color="#0000ff" size="1"&gt;C:\Program Files\Windows Live\Writer\WindowsLiveWriter.exe&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img height="117" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart1_86DB/image343_8fbe58ba-a2bc-4785-abde-2da1be12c28c.png" width="657" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Claro que podem e devem mudar os caminhos consoante o local onde instalaram a vossa aplica&amp;#231;&amp;#227;o.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Finalmente adicionar esta Assembly: &lt;font size="1"&gt;&amp;quot;&lt;font color="#0000ff"&gt;C:\Program Files\Windows Live\Writer\WindowsLive.Writer.Api.dll&lt;/font&gt;&amp;quot;&lt;/font&gt; e marcar &lt;font color="#0000ff"&gt;Copy Local&lt;/font&gt; como false, (&lt;font color="#0000ff"&gt;preferencialmente&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;img height="216" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/WindowsLiveWriterAddinSkyDrivePart1_86DB/image333_8a90d3f7-6a81-4b63-b719-3d783d59acff.png" width="230" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Com isto em m&amp;#227;os j&amp;#225; podem programar e correr o vosso Add-in no &lt;a href="http://get.live.com/writer/overview" target="_blank"&gt;Live Writer&lt;/a&gt; e efectuar o respectivo Debug. &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://redb.mine.nu/blogs/redb//post/2008/08/27/Windows-Live-Writer-Add-in-SkyDrive-Part-2.aspx"&gt;Continuar&lt;/a&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-1.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-1.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=c8bfda53-03e5-4701-9cfe-478d962f6074</guid>
      <pubDate>Thu, 28 Aug 2008 09:38:44 +0000</pubDate>
      <category>Add-in</category>
      <category>C#</category>
      <category>Tutorial</category>
      <category>Windows Live Writer</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=c8bfda53-03e5-4701-9cfe-478d962f6074</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=c8bfda53-03e5-4701-9cfe-478d962f6074</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/28/Windows-Live-Writer-Add-in-SkyDrive-Part-1.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=c8bfda53-03e5-4701-9cfe-478d962f6074</wfw:commentRss>
    </item>
    <item>
      <title>About Moi</title>
      <description>&lt;p&gt;Ol&amp;#225; Pessoal! &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;O meu nome &amp;#233; &lt;font color="#0000ff"&gt;Ricardo Bartolomeu&lt;/font&gt; e muito recentemente, (&lt;font color="#0000ff"&gt;um grande &amp;#234;nfase no &amp;#8220;&lt;font color="#ff0000"&gt;muito recentemente&lt;/font&gt;&amp;#8221;&lt;/font&gt;), fui eleito MSP, (&lt;a href="http://student-partners.com/Default.aspx" target="_blank"&gt;Microsoft Student Partner&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;O que &amp;#233; que isto significa?&lt;/p&gt;  &lt;p&gt;Boa pergunta! Eu tamb&amp;#233;m &lt;strong&gt;ainda&lt;/strong&gt; n&amp;#227;o sei muito bem...&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para dizer a verdade o que eu queria mesmo era ser vencedor do concurso &lt;a href="http://www.cabelopantene.com.pt/prueba.php?opcion=5" target="_blank"&gt;Miss Pantene&lt;/a&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;(&lt;font color="#ff0000"&gt;Mas n&amp;#227;o pensem que eu vou desistir s&amp;#243; porque n&amp;#227;o ganhei este ano!!!&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;Assim sendo, enquanto o meu &amp;quot;verdadeiro&amp;quot; sonho n&amp;#227;o se concretiza vou come&amp;#231;ando a dar os meus primeiros passos nesta coisa de ser MSP!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Para j&amp;#225; vou aproveitar a oportunidade para fazer algo que &lt;strong&gt;&lt;font color="#0000ff"&gt;desejava&lt;/font&gt;&lt;/strong&gt; H&amp;#193; MUITO tempo! Ter um blog todo &amp;#224; maneira &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ok! Vamos l&amp;#225; &amp;#224; parede dos horrores!&lt;/p&gt;  &lt;p&gt;&lt;img height="434" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/AboutMoi_850A/image115_784226d8-e1e9-485b-9518-f9565ac3e728.png" width="609" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;A t&amp;#237;pica foto junto &amp;#224; subsidi&amp;#225;ria portuguesa da &lt;a href="http://www.microsoft.com" target="_blank"&gt;Microsoft&lt;/a&gt; que &lt;strong&gt;todos&lt;/strong&gt; os MSPs devem ter tirado pelo menos uma d&amp;#250;zia de vezes &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt;&lt;/p&gt;  &lt;p&gt;&amp;quot;Mug Shot&amp;quot;, (&lt;font color="#0000ff"&gt;Nem estava a olhar devidamente para a c&amp;#226;mara, que grande &amp;quot;&lt;font color="#ff0000"&gt;bezana&lt;/font&gt;&amp;quot; meu Deus! Se esta foto n&amp;#227;o vos d&amp;#225; vontade de rir ent&amp;#227;o NADA vos far&amp;#225; rir!!! NADA!!!&lt;/font&gt;)&lt;/p&gt;  &lt;p&gt;&lt;img height="322" alt="image" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/AboutMoi_850A/image154_02211e75-832f-4d80-b299-bffd975d817e.png" width="299" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;E finalmente a minha vers&amp;#227;o &lt;a href="http://simpsonizeme.com/" target="_blank"&gt;Simpson&lt;/a&gt; &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-wink.gif" class="flag" alt="Wink" /&gt; Ou pelo menos uma tentativa!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;img height="492" alt="image205" src="http://redb.mine.nu/blogs/redb//image.axd?picture=WindowsLiveWriter/AboutMoi_850A/image205_5da55f80-51df-4ed7-81ee-d4885c51a5b5.png" width="486" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Espero que se divirtam por aqui e acima de tudo que os meus conte&amp;#250;dos vos cativem. Fiquem bem &lt;img src="http://redb.mine.nu/blogs/redb/editors/tiny_mce3/plugins/emotions/img/smiley-smile.gif" class="flag" alt="Smile" /&gt;&lt;/p&gt;</description>
      <link>http://redb.mine.nu/blogs/redb/post/2008/08/28/About-Moi.aspx</link>
      <author>redb@student-partners.com</author>
      <comments>http://redb.mine.nu/blogs/redb/post/2008/08/28/About-Moi.aspx#comment</comments>
      <guid>http://redb.mine.nu/blogs/redb/post.aspx?id=84913e0a-26db-45c8-aded-eca919a2d4da</guid>
      <pubDate>Thu, 28 Aug 2008 09:33:12 +0000</pubDate>
      <category>General</category>
      <category>Microsoft Student Partner</category>
      <category>Personal</category>
      <dc:publisher>redb@student-partners.com</dc:publisher>
      <pingback:server>http://redb.mine.nu/blogs/redb/pingback.axd</pingback:server>
      <pingback:target>http://redb.mine.nu/blogs/redb/post.aspx?id=84913e0a-26db-45c8-aded-eca919a2d4da</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://redb.mine.nu/blogs/redb/trackback.axd?id=84913e0a-26db-45c8-aded-eca919a2d4da</trackback:ping>
      <wfw:comment>http://redb.mine.nu/blogs/redb/post/2008/08/28/About-Moi.aspx#comment</wfw:comment>
      <wfw:commentRss>http://redb.mine.nu/blogs/redb/syndication.axd?post=84913e0a-26db-45c8-aded-eca919a2d4da</wfw:commentRss>
    </item>
  </channel>
</rss>