<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Buu Nguyen's Blog</title>
	
	<link>http://www.buunguyen.net/blog</link>
	<description>Thoughts on Software Engineering</description>
	<lastBuildDate>Thu, 10 May 2012 03:38:46 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BuuNguyensBlog" /><feedburner:info uri="buunguyensblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>BuuNguyensBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Building a Custom Defect Submitter for qTrace</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/8KiaUpJtndU/building-a-custom-defect-submitter-for-qtrace.html</link>
		<comments>http://www.buunguyen.net/blog/building-a-custom-defect-submitter-for-qtrace.html#comments</comments>
		<pubDate>Thu, 10 May 2012 03:37:48 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[qtrace]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=673</guid>
		<description><![CDATA[Code for my new blog post in QASymphony&#8217;s Blog.
]]></description>
			<content:encoded><![CDATA[<p>Code for <a href="http://www.qasymphony.com/building-a-custom-defect-submitter-for-qtrace.html">my new blog post</a> in <a href="http://qasymphony.com/blog">QASymphony&#8217;s Blog</a>.</p>
<div id="gist-2647100" class="gist">

        <div class="gist-file">
          <div class="gist-data gist-syntax">
              <div class="highlight"><pre><div class='line' id='LC1'><span class="k">namespace</span> <span class="nn">FtpSubmitter</span></div><div class='line' id='LC2'><span class="p">{</span></div><div class='line' id='LC3'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System</span><span class="p">;</span></div><div class='line' id='LC4'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Collections.Generic</span><span class="p">;</span></div><div class='line' id='LC5'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.ComponentModel.Composition</span><span class="p">;</span></div><div class='line' id='LC6'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.IO</span><span class="p">;</span></div><div class='line' id='LC7'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Linq</span><span class="p">;</span></div><div class='line' id='LC8'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Net</span><span class="p">;</span></div><div class='line' id='LC9'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Threading.Tasks</span><span class="p">;</span></div><div class='line' id='LC10'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Windows</span><span class="p">;</span></div><div class='line' id='LC11'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">System.Windows.Input</span><span class="p">;</span></div><div class='line' id='LC12'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="nn">Iris.Trackers.Contracts</span><span class="p">;</span></div><div class='line' id='LC13'><br/></div><div class='line' id='LC14'><span class="na">    [Export(typeof(IBugTracker))]</span></div><div class='line' id='LC15'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="k">class</span> <span class="nc">Ftp</span> <span class="p">:</span> <span class="n">IBugTracker</span></div><div class='line' id='LC16'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC17'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">DisplayName</span></div><div class='line' id='LC18'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC19'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="s">&quot;FTP Submitter&quot;</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC20'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC21'><br/></div><div class='line' id='LC22'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="n">IconUri</span></div><div class='line' id='LC23'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC24'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">get</span> <span class="p">{</span> <span class="k">return</span> <span class="s">&quot;/FtpSubmitter;component/ftp.png&quot;</span><span class="p">;</span> <span class="p">}</span></div><div class='line' id='LC25'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC26'><br/></div><div class='line' id='LC27'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="kt">string</span> <span class="nf">Verify</span><span class="p">(</span><span class="n">BugTrackerAccount</span> <span class="n">bugTrackerAccount</span><span class="p">,</span></div><div class='line' id='LC28'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="n">timeoutInMillis</span><span class="p">,</span></div><div class='line' id='LC29'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">IDictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span> <span class="n">settings</span><span class="p">)</span></div><div class='line' id='LC30'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC31'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">var</span> <span class="n">ftpRequest</span> <span class="p">=</span> <span class="p">(</span><span class="n">FtpWebRequest</span><span class="p">)</span><span class="n">WebRequest</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span><span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">Url</span><span class="p">);</span></div><div class='line' id='LC32'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Credentials</span> <span class="p">=</span> <span class="k">new</span> <span class="n">NetworkCredential</span><span class="p">(</span><span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">UserName</span><span class="p">,</span></div><div class='line' id='LC33'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">Password</span><span class="p">);</span></div><div class='line' id='LC34'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Timeout</span> <span class="p">=</span> <span class="n">timeoutInMillis</span><span class="p">;</span></div><div class='line' id='LC35'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Method</span> <span class="p">=</span> <span class="n">WebRequestMethods</span><span class="p">.</span><span class="n">Ftp</span><span class="p">.</span><span class="n">ListDirectory</span><span class="p">;</span></div><div class='line' id='LC36'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="p">(</span><span class="n">ftpRequest</span><span class="p">.</span><span class="n">GetResponse</span><span class="p">())</span></div><div class='line' id='LC37'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC38'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="s">&quot;Connected to FTP server successfully!&quot;</span><span class="p">;</span></div><div class='line' id='LC39'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC40'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC41'><br/></div><div class='line' id='LC42'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">public</span> <span class="n">SubmittedDefect</span> <span class="nf">Submit</span><span class="p">(</span><span class="n">Window</span> <span class="n">owner</span><span class="p">,</span></div><div class='line' id='LC43'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">BugTrackerAccount</span> <span class="n">bugTrackerAccount</span><span class="p">,</span></div><div class='line' id='LC44'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="n">timeoutInMillis</span><span class="p">,</span></div><div class='line' id='LC45'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Defect</span> <span class="n">defect</span><span class="p">,</span></div><div class='line' id='LC46'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Func</span><span class="p">&lt;</span><span class="n">IDictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">byte</span><span class="p">[]&gt;&gt;</span> <span class="n">attachmentsFunc</span><span class="p">,</span></div><div class='line' id='LC47'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">IDictionary</span><span class="p">&lt;</span><span class="kt">string</span><span class="p">,</span> <span class="kt">string</span><span class="p">&gt;</span> <span class="n">settings</span><span class="p">)</span></div><div class='line' id='LC48'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC49'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Mouse</span><span class="p">.</span><span class="n">OverrideCursor</span> <span class="p">=</span> <span class="n">Cursors</span><span class="p">.</span><span class="n">Wait</span><span class="p">;</span></div><div class='line' id='LC50'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">try</span></div><div class='line' id='LC51'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC52'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">var</span> <span class="n">tasks</span> <span class="p">=</span> <span class="k">from</span> <span class="n">attachment</span> <span class="k">in</span> <span class="n">attachmentsFunc</span><span class="p">()</span></div><div class='line' id='LC53'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">select</span> <span class="n">Task</span><span class="p">.</span><span class="n">Factory</span><span class="p">.</span><span class="n">StartNew</span><span class="p">(</span></div><div class='line' id='LC54'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">()</span> <span class="p">=&gt;</span> <span class="n">Upload</span><span class="p">(</span><span class="n">bugTrackerAccount</span><span class="p">,</span> <span class="n">timeoutInMillis</span><span class="p">,</span></div><div class='line' id='LC55'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">attachment</span><span class="p">.</span><span class="n">Key</span><span class="p">,</span> <span class="n">attachment</span><span class="p">.</span><span class="n">Value</span><span class="p">));</span></div><div class='line' id='LC56'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Task</span><span class="p">.</span><span class="n">WaitAll</span><span class="p">(</span><span class="n">tasks</span><span class="p">.</span><span class="n">ToArray</span><span class="p">());</span></div><div class='line' id='LC57'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">return</span> <span class="k">null</span><span class="p">;</span></div><div class='line' id='LC58'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC59'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">finally</span></div><div class='line' id='LC60'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC61'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Mouse</span><span class="p">.</span><span class="n">OverrideCursor</span> <span class="p">=</span> <span class="k">null</span><span class="p">;</span></div><div class='line' id='LC62'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC63'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC64'><br/></div><div class='line' id='LC65'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">private</span> <span class="k">void</span> <span class="nf">Upload</span><span class="p">(</span><span class="n">BugTrackerAccount</span> <span class="n">bugTrackerAccount</span><span class="p">,</span></div><div class='line' id='LC66'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">int</span> <span class="n">timeoutInMillis</span><span class="p">,</span></div><div class='line' id='LC67'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">string</span> <span class="n">filePath</span><span class="p">,</span></div><div class='line' id='LC68'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">byte</span><span class="p">[]</span> <span class="n">fileContent</span><span class="p">)</span></div><div class='line' id='LC69'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC70'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">var</span> <span class="n">uri</span> <span class="p">=</span> <span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">Url</span> <span class="p">+</span></div><div class='line' id='LC71'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">(</span><span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">Url</span><span class="p">.</span><span class="n">EndsWith</span><span class="p">(</span><span class="s">&quot;/&quot;</span><span class="p">)</span> <span class="p">?</span> <span class="kt">string</span><span class="p">.</span><span class="n">Empty</span> <span class="p">:</span> <span class="s">&quot;/&quot;</span><span class="p">)</span> <span class="p">+</span></div><div class='line' id='LC72'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">Path</span><span class="p">.</span><span class="n">GetFileName</span><span class="p">(</span><span class="n">filePath</span><span class="p">);</span></div><div class='line' id='LC73'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="kt">var</span> <span class="n">ftpRequest</span> <span class="p">=</span> <span class="p">(</span><span class="n">FtpWebRequest</span><span class="p">)</span><span class="n">WebRequest</span><span class="p">.</span><span class="n">Create</span><span class="p">(</span><span class="n">uri</span><span class="p">);</span></div><div class='line' id='LC74'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Credentials</span> <span class="p">=</span> <span class="k">new</span> <span class="n">NetworkCredential</span><span class="p">(</span><span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">UserName</span><span class="p">,</span></div><div class='line' id='LC75'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">bugTrackerAccount</span><span class="p">.</span><span class="n">Password</span><span class="p">);</span></div><div class='line' id='LC76'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Timeout</span> <span class="p">=</span> <span class="n">timeoutInMillis</span><span class="p">;</span></div><div class='line' id='LC77'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">ftpRequest</span><span class="p">.</span><span class="n">Method</span> <span class="p">=</span> <span class="n">WebRequestMethods</span><span class="p">.</span><span class="n">Ftp</span><span class="p">.</span><span class="n">UploadFile</span><span class="p">;</span></div><div class='line' id='LC78'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="k">using</span> <span class="p">(</span><span class="n">Stream</span> <span class="n">writer</span> <span class="p">=</span> <span class="n">ftpRequest</span><span class="p">.</span><span class="n">GetRequestStream</span><span class="p">())</span></div><div class='line' id='LC79'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">{</span></div><div class='line' id='LC80'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="n">writer</span><span class="p">.</span><span class="n">Write</span><span class="p">(</span><span class="n">fileContent</span><span class="p">,</span> <span class="m">0</span><span class="p">,</span> <span class="n">fileContent</span><span class="p">.</span><span class="n">Length</span><span class="p">);</span></div><div class='line' id='LC81'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC82'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC83'>&nbsp;&nbsp;&nbsp;&nbsp;<span class="p">}</span></div><div class='line' id='LC84'><span class="p">}</span></div></pre></div>
          </div>

          <div class="gist-meta">
            <a href="https://gist.github.com/raw/2647100/80d482893ff90f6ba0e9e725111fd0cf1eca7fbf/ftpsubmitter.cs" style="float:right;">view raw</a>
            <a href="https://gist.github.com/2647100#file_ftpsubmitter.cs" style="float:right;margin-right:10px;color:#666">ftpsubmitter.cs</a>
            <a href="https://gist.github.com/2647100">This Gist</a> brought to you by <a href="http://github.com">GitHub</a>.
          </div>
        </div>
</div>

<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=8KiaUpJtndU:tPehz1LbqqI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=8KiaUpJtndU:tPehz1LbqqI:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=8KiaUpJtndU:tPehz1LbqqI:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=8KiaUpJtndU:tPehz1LbqqI:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=8KiaUpJtndU:tPehz1LbqqI:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/8KiaUpJtndU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/building-a-custom-defect-submitter-for-qtrace.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/building-a-custom-defect-submitter-for-qtrace.html</feedburner:origLink></item>
		<item>
		<title>Bike has a homepage!</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/Ftg_YtiP2-Y/bike-has-a-homepage.html</link>
		<comments>http://www.buunguyen.net/blog/bike-has-a-homepage.html#comments</comments>
		<pubDate>Thu, 03 May 2012 15:29:48 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[bike]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=660</guid>
		<description><![CDATA[Bike has a new shiny homepage, thanks to GitHub Pages.

]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/buunguyen/Bike">Bike</a> has a <a href="http://buunguyen.github.com/Bike/">new shiny homepage</a>, thanks to <a href="http://pages.github.com/">GitHub Pages</a>.</p>
<p><img src="http://grab.by/ds6Q" alt="http://grab.by/ds6Q" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Ftg_YtiP2-Y:AOH-uzkqbzU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Ftg_YtiP2-Y:AOH-uzkqbzU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Ftg_YtiP2-Y:AOH-uzkqbzU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Ftg_YtiP2-Y:AOH-uzkqbzU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Ftg_YtiP2-Y:AOH-uzkqbzU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/Ftg_YtiP2-Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/bike-has-a-homepage.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/bike-has-a-homepage.html</feedburner:origLink></item>
		<item>
		<title>Had some fun with Python</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/LNfwfRAVz7k/had-some-fun-with-python.html</link>
		<comments>http://www.buunguyen.net/blog/had-some-fun-with-python.html#comments</comments>
		<pubDate>Tue, 01 May 2012 06:16:12 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[Programming Languages]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=653</guid>
		<description><![CDATA[By now, you should have already known I love programming languages, to the extent that I even created one myself. One of the languages I want to learn this year is Python.  My first Python program is a port for the Semicolon language. The code is also available in github with examples.  
# [...]]]></description>
			<content:encoded><![CDATA[<p>By now, you should have already known I love programming languages, to the extent that I even <a href="http://www.buunguyen.net/blog/the-bike-programming-language.html">created one myself</a>. One of the languages I want to learn this year is Python.  My first Python program is a port for the <a href="http://pksunkara.github.com/semicolon/">Semicolon language</a>. The code is also available in <a href="https://github.com/buunguyen/semicolon">github</a> with <a href="https://github.com/buunguyen/semicolon/tree/master/examples">examples</a>.  </p>
<pre class="brush:python"># coding: utf-8

def tokenize(code):
	import re
	ops = {
	  ';;;':  { 'code': 'push', 'arg': 'signed'},
	  ';;⁏':  { 'code': 'dup' },
	  ';⁏;':  { 'code': 'swap' },
	  ';⁏⁏':  { 'code': 'discard' },
	  '⁏;;':  { 'code': 'add' },
	  '⁏;⁏':  { 'code': 'sub' },
	  '⁏⁏;':  { 'code': 'mul' },
	  '⁏⁏⁏':  { 'code': 'div' },
	  '⁏  ':  { 'code': 'mod' },
	  '; ;':  { 'code': 'store' },
	  '; ⁏':  { 'code': 'retrieve' },
	  ' ;;':  { 'code': 'label', 'arg': 'unsigned' },
	  ' ;⁏':  { 'code': 'call', 'arg': 'unsigned' },
	  ' ; ':  { 'code': 'ret' },
	  ' ⁏ ':  { 'code': 'jump', 'arg': 'unsigned' },
	  ' ⁏;':  { 'code': 'jz', 'arg': 'unsigned' },
	  ' ⁏⁏':  { 'code': 'jn', 'arg': 'unsigned' },
	  '  ;':  { 'code': 'exit' },
	  '⁏ ;;': { 'code': 'outchar' },
	  '⁏ ;⁏': { 'code': 'outnum' },
	  '⁏ ⁏;': { 'code': 'readchar' },
	  '⁏ ⁏⁏': { 'code': 'readnum' },
	}

	make_int = lambda str:int(''.join('0' if c == ';' else '1' for c in str), 2)
	while code and code != '\n':
		has_match = False
		for key in ops:
			pattern = (key + (r'([;⁏]*)\n' if 'arg' in ops[key] else '()') + r'(.*)$').decode('utf8')
			match = re.match(pattern, code, re.S)
			if match:
				has_match = True
				code = match.group(2)
				if 'arg' in ops[key]:
					if ops[key]['arg'] == 'unsigned':
						tokens.append([ops[key]['code'], make_int(match.group(1))])
					elif ops[key]['arg'] == 'signed':
						tokens.append([ops[key]['code'],
									   (1 if match.group(1)[0] == ';' else -1) * make_int(match.group(1)[1:])])
				else: tokens.append([ops[key]['code']])
		if not has_match:
			raise Exception('Unknown command')

def step():
	global pc
	op = tokens[pc][0]
	arg = None if len(tokens[pc]) == 1 else tokens[pc][1]
	pc += 1
	if op == 'push':
		stack.append(arg)
		step()
	elif op == 'dup':
		stack.append(stack[-1])
		step()
	elif op == 'swap':
		stack[-1], stack[-2] = stack[-2], stack[-1]
		step()
	elif op == 'discard':
		stack.pop()
		step()
	elif op == 'add' or op == 'sub' or op == 'mul' or op == 'div' or op == 'mod':
		bin_ops = { 'add': '+', 'sub': '-', 'mul': '*', 'div': '/', 'mod': '%' }
		stack.append(eval(str(stack.pop()) + bin_ops[op] + str(stack.pop())))
		step()
	elif op == 'store':
		heap[stack[-2]] = stack[-1]
		stack.pop(); stack.pop()
		step()
	elif op == 'retrieve':
		stack.append(heap[stack.pop()])
		step()
	elif op == 'label':
		step()
	elif op == 'call':
		call_stack.append(pc)
		jump(arg)
	elif op == 'ret':
		pc = call_stack.pop()
		step()
	elif op == 'jump':
		jump(arg)
	elif op == 'jz':
		if stack.pop() == 0: jump(arg)
	elif op == 'jn':
		if stack.pop() &lt; 0: jump(arg)
	elif op == 'exit':
		sys.exit()
	elif op == 'outchar':
		print chr(stack.pop())
		step()
	elif op == 'outnum':
		print str(stack.pop())
		step()
	elif op == 'readchar':
		stack.append(ord(sys.stdin.read(1)))
		step()
	elif op == 'readnum':
		stack.append(int(sys.stdin.readline()))
		step()
	else: raise Exception('Unknown opcode')

def jump(label):
	global pc
	for index, token in enumerate(tokens):
		if token[0] == 'label' and token[1] == label:
			pc = index
			break
	step()

import sys
if len(sys.argv) == 2:
	tokens = []; pc = 0; heap = {}; stack = []; call_stack = []
	tokenize(open(sys.argv[1], 'r').read().decode('utf8'))
	step()
else: print 'Usage: python semicolon.py [file.sc]'</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LNfwfRAVz7k:XCDqEpdSiNw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LNfwfRAVz7k:XCDqEpdSiNw:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=LNfwfRAVz7k:XCDqEpdSiNw:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LNfwfRAVz7k:XCDqEpdSiNw:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=LNfwfRAVz7k:XCDqEpdSiNw:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/LNfwfRAVz7k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/had-some-fun-with-python.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/had-some-fun-with-python.html</feedburner:origLink></item>
		<item>
		<title>Posts on software testing</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/Cfsrp82cjJs/posts-on-software-testing.html</link>
		<comments>http://www.buunguyen.net/blog/posts-on-software-testing.html#comments</comments>
		<pubDate>Fri, 02 Mar 2012 18:05:20 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Software Testing]]></category>
		<category><![CDATA[QASymphony]]></category>
		<category><![CDATA[qtrace]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=640</guid>
		<description><![CDATA[I&#8217;ve written a series of blog posts in my company&#8217;s blog.  Links here for references:

http://www.qasymphony.com/big-design-up-front-and-exploratory-test.html
http://www.qasymphony.com/agile-testing-in-qtrace.html
http://www.qasymphony.com/on-qtraces-output-file-size.html
http://www.qasymphony.com/how-is-testing-like-snorkeling.html

Any plugin to automatically synchronize posts between 2 blogs by same author?
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written a series of blog posts in my company&#8217;s blog.  Links here for references:</p>
<ul>
<li><a href="http://www.qasymphony.com/big-design-up-front-and-exploratory-test.html">http://www.qasymphony.com/big-design-up-front-and-exploratory-test.html</a></li>
<li><a href="http://www.qasymphony.com/agile-testing-in-qtrace.html">http://www.qasymphony.com/agile-testing-in-qtrace.html</a></li>
<li><a href="http://www.qasymphony.com/on-qtraces-output-file-size.html">http://www.qasymphony.com/on-qtraces-output-file-size.html</a></li>
<li><a href="http://www.qasymphony.com/how-is-testing-like-snorkeling.html">http://www.qasymphony.com/how-is-testing-like-snorkeling.html</a></li>
</ul>
<p>Any plugin to automatically synchronize posts between 2 blogs by same author?</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Cfsrp82cjJs:TQcJal6c3H0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Cfsrp82cjJs:TQcJal6c3H0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Cfsrp82cjJs:TQcJal6c3H0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Cfsrp82cjJs:TQcJal6c3H0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Cfsrp82cjJs:TQcJal6c3H0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/Cfsrp82cjJs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/posts-on-software-testing.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/posts-on-software-testing.html</feedburner:origLink></item>
		<item>
		<title>The Bike Programming Language</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/FIOYE1_84x8/the-bike-programming-language.html</link>
		<comments>http://www.buunguyen.net/blog/the-bike-programming-language.html#comments</comments>
		<pubDate>Sun, 19 Feb 2012 00:18:07 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Programming Languages]]></category>
		<category><![CDATA[bike]]></category>
		<category><![CDATA[dynamic]]></category>
		<category><![CDATA[functional]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=630</guid>
		<description><![CDATA[Bike is a programming language that I develop.  I worked on this interesting toy project a while ago.  I was hoping to have had time to improve it further (plenty of things I want in a language) before announcing it in my blog.  However, work at my new startup has been so hectic (surprise, surprise&#8230;) [...]]]></description>
			<content:encoded><![CDATA[<p><a href="https://github.com/buunguyen/Bike">Bike</a> is a programming language that I develop.  I worked on this interesting toy project a while ago.  I was hoping to have had time to improve it further (plenty of things I want in a language) before announcing it in my blog.  However, work at my new startup has been so hectic (surprise, surprise&#8230;) that I can hardly find time to continue, so I guess I just put it out to the public and get everyone&#8217;s opinions.</p>
<p>In a nutshell, Bike is an interpreted language running on Windows and Mac/Linux (via Mono).  I developed Bike with the intention of building a language feel most natural by me so that I can use for daily programming tasks.  And since the existing languages that already feel natural to me are Ruby, JavaScript and C#, no surprise that these languages influenced Bike a great deal.  From the language perspective these are the important characteristics of Bike:</p>
<ul>
<li>Dynamic and strong typing</li>
<li>Everything is an object</li>
<li>Prototypal inheritance</li>
<li>First-class function</li>
<li>CLR interoperability</li>
</ul>
<p>No further ado, here&#8217;s some Bike.  First, hello world.</p>
<pre class="brush:javascript">print 'Hello, world!'</pre>
<p><strong>Everything is object </strong>(note that the print function is passed as argument)</p>
<pre class="brush:javascript">10.times( print );
0.upto( 10, print );</pre>
<p><strong>Calculating Fibonacci </strong>(<code>return</code> keyword is optional, semicolon is optional in the last statement of a block)</p>
<pre class="brush:javascript">func fib( n ) {
    n &lt;= 2 ? n : fib( n - 1 ) + fib( n - 2 )
}
print( "n: " );
var n = readln();
println( fib( n.to_number() ) );</pre>
<p><strong>Self-executing function</strong></p>
<pre class="brush:javascript">( func() {
    println( 'executed' );
} )();</pre>
<p><strong>Closure</strong></p>
<pre class="brush:javascript">var f = ( func( a, b ) {
     var c = 1;
     return func() { a + b + c };
} )( 2, 5 );
println( f() );</pre>
<p><strong>Currying</strong></p>
<pre class="brush:javascript">Bike.Function.curry = func( *args ) {
	if ( args == null || args.size() == 0 ) return this;
	var me = this;
	return func( *more ) {
		if ( more != null )
			args.add_all( more );
		me.call( this, *args );
	};
};

func add( a, b ) { a + b }
var addTo2 = add.curry( 2 );
println( addTo2( 3 ) );

add = add.curry( 2, 3 );
println( add() );</pre>
<p><strong>Var-args and array expansion</strong></p>
<pre class="brush:javascript">func add_all( *numbers ) {
    numbers.reduce( 0, func( current, ele ) { current + ele; } );
}
println( add_all( 1, 2, 3 ) );
println( add_all( 1, 2, 3, 4 ) );

var arr = [ 1-&gt;10 ];
println( add_all( *arr ) );</pre>
<p><strong>Inheritance</strong></p>
<pre class="brush:javascript">var Person = {
    initialize: func( name ) {
        this.name = name;
    },
    to_string: func() {
        this.name;
    }
};

# clone person and invoke initialize on the new obj
var buu = Person.create( 'Buu' );
buu.fav_language = "Bike";
buu.to_string = func() {
    this.super( 'to_string' ) + "'s favorite language is " + this.fav_language;
};
println( buu );</pre>
<p><strong>.NET Interoperability</strong></p>
<pre class="brush:javascript">var list = System.Collections.ArrayList();
[ 0-&gt;9 ].each( func( i ) { list.Add( i ); } );

for ( var e in list ) print( e + ', ' );

0.upto( list.Count, func( i ){println( list[ i ] );} );</pre>
<p><strong>Dynamic code evaluation</strong></p>
<pre class="brush:javascript">var code = 'println( "This is cool!" );';
exec( code );
code = '2 * 3;';
println( exec code );
code = 'var person = {name: "John"};';
println( ( exec code ).name );
println( person.name );</pre>
<p>There are more interesting features, but I guess that&#8217;s enough for you to get a feel of Bike.  <code>if/else/while/for/switch/rescue</code> are all available but they are probably not needed much.  Bike also comes with a minimal base class library to work with file system, multithreading, HTTP, JSON, regex, unit test etc.  All these are written in Bike itself (mostly .NET wrapper since it&#8217;s fast to implement although pure native implementation would be interesting).</p>
<p>Go to <a href="https://github.com/buunguyen/Bike">https://github.com/buunguyen/Bike</a> and check out the samples folder for more.  Interested?  Fork and contribute to the language and/or base class library.  Questions, ideas and feedback, please comment or email (see About).  Thanks and happy biking!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=FIOYE1_84x8:-uBF5Z-HWq4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=FIOYE1_84x8:-uBF5Z-HWq4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=FIOYE1_84x8:-uBF5Z-HWq4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=FIOYE1_84x8:-uBF5Z-HWq4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=FIOYE1_84x8:-uBF5Z-HWq4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/FIOYE1_84x8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/the-bike-programming-language.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/the-bike-programming-language.html</feedburner:origLink></item>
		<item>
		<title>Paint War is released!!</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/Rn8MOz0psis/paint-war-is-released.html</link>
		<comments>http://www.buunguyen.net/blog/paint-war-is-released.html#comments</comments>
		<pubDate>Thu, 22 Dec 2011 12:30:49 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[games]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[mobiles]]></category>
		<category><![CDATA[paint war]]></category>
		<category><![CDATA[releases]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=620</guid>
		<description><![CDATA[This is the release month!  After qTrace, another product I spent much mind and heart on for many months has just been released: Paint War, the super fun and addicted (shamelessly biased!) iPad game.  Visit Paint War&#8217;s website or iTunes App Store to learn more about Paint War.  And don&#8217;t forget to give it [...]]]></description>
			<content:encoded><![CDATA[<p>This is the release month!  After <a href="http://www.buunguyen.net/blog/qtrace-is-released.html">qTrace</a>, another product I spent much mind and heart on for many months has just been released: <a href="http://itunes.apple.com/us/app/paint-war/id489396284?ls=1&amp;mt=8">Paint War</a>, the super fun and addicted (shamelessly biased!) iPad game.  Visit <a href="http://apps.kms-technology.com/paintwar/">Paint War&#8217;s website</a> or <a href="http://itunes.apple.com/us/app/paint-war/id489396284?ls=1&amp;mt=8">iTunes App Store</a> to learn more about Paint War.  And don&#8217;t forget to give it a try!</p>
<p><img src="http://apps.kms-technology.com/paintwar/images/screenshot_1.png" alt="Paint War" /></p>
<p><img src="http://apps.kms-technology.com/paintwar/images/screenshot_2.png" alt="PaintWar" /></p>
<p><img src="http://apps.kms-technology.com/paintwar/images/screenshot_3.png" alt="PaintWar" /></p>
<p><img src="http://apps.kms-technology.com/paintwar/images/screenshot_4.png" alt="PaintWar" /></p>
<p><img src="http://apps.kms-technology.com/paintwar/images/screenshot_5.png" alt="PaintWar" /></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Rn8MOz0psis:cr1l0EAxnh0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Rn8MOz0psis:cr1l0EAxnh0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Rn8MOz0psis:cr1l0EAxnh0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=Rn8MOz0psis:cr1l0EAxnh0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=Rn8MOz0psis:cr1l0EAxnh0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/Rn8MOz0psis" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/paint-war-is-released.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/paint-war-is-released.html</feedburner:origLink></item>
		<item>
		<title>qTrace is released!</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/C8eTaQCltZU/qtrace-is-released.html</link>
		<comments>http://www.buunguyen.net/blog/qtrace-is-released.html#comments</comments>
		<pubDate>Mon, 05 Dec 2011 03:57:10 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[QASymphony]]></category>
		<category><![CDATA[defect reporting]]></category>
		<category><![CDATA[qas]]></category>
		<category><![CDATA[sdlc]]></category>
		<category><![CDATA[software engineering]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=612</guid>
		<description><![CDATA[After quite some time working on it, we finally released qTrace 1.0, the defect reporting tool you want to have  .

To find out more and download the trial version, please visit http://www.qasymphony.com.
]]></description>
			<content:encoded><![CDATA[<p>After quite some time working on it, we finally released qTrace 1.0, the defect reporting tool you want to have <img src='http://www.buunguyen.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/P43ZJhSdZGI" frameborder="0" allowfullscreen></iframe></p>
<p>To find out more and download the trial version, please visit <a href="http://www.qasymphony.com/">http://www.qasymphony.com</a>.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=C8eTaQCltZU:glan1iWEyZ8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=C8eTaQCltZU:glan1iWEyZ8:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=C8eTaQCltZU:glan1iWEyZ8:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=C8eTaQCltZU:glan1iWEyZ8:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=C8eTaQCltZU:glan1iWEyZ8:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/C8eTaQCltZU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/qtrace-is-released.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/qtrace-is-released.html</feedburner:origLink></item>
		<item>
		<title>Pro iOS Apps Performance Optimization</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/LC5zCHaEus4/pro-ios-apps-performance-optimization.html</link>
		<comments>http://www.buunguyen.net/blog/pro-ios-apps-performance-optimization.html#comments</comments>
		<pubDate>Sat, 03 Dec 2011 03:59:00 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Mobile]]></category>
		<category><![CDATA[books]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=610</guid>
		<description><![CDATA[My former student and colleague, Khang Vo, has just published a book on iOS performance optimization.  Congratulations to him!

]]></description>
			<content:encoded><![CDATA[<p>My former student and colleague, <a href="http://vodkhang.com/">Khang Vo</a>, has just published a book on iOS performance optimization.  Congratulations to him!</p>
<p><a href="http://www.amazon.com/Apps-Performance-Optimization-Professional-Apress/dp/1430237171"><img src="http://ecx.images-amazon.com/images/I/41Dpn9KKwRL._BO2,204,203,200_PIsitb-sticker-arrow-click,TopRight,35,-76_AA300_SH20_OU01_.jpg" alt="" /></a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LC5zCHaEus4:-qskOnprv54:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LC5zCHaEus4:-qskOnprv54:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=LC5zCHaEus4:-qskOnprv54:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=LC5zCHaEus4:-qskOnprv54:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=LC5zCHaEus4:-qskOnprv54:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/LC5zCHaEus4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/pro-ios-apps-performance-optimization.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/pro-ios-apps-performance-optimization.html</feedburner:origLink></item>
		<item>
		<title>Fun with HTML5 canvas</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/7SGF56JXdOQ/fun-with-html5-canvas.html</link>
		<comments>http://www.buunguyen.net/blog/fun-with-html5-canvas.html#comments</comments>
		<pubDate>Mon, 14 Nov 2011 16:01:51 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[canvas]]></category>
		<category><![CDATA[html5]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=663</guid>
		<description><![CDATA[Demonstrating Canvas API&#8230;
var Point = function(x, y) {
	this.x = x;
	this.y = y;
}

var Circle = function(pos, dir, color, radius) {
	this.pos = pos;
	this.dir = dir;
	this.color = color;
	this.radius = radius;
};

Circle.prototype.move = function(speed, w, h) {
	this.pos.x += this.dir.x * speed;
	if (this.pos.x &#60; 0) {
		this.pos.x = 0;
		this.dir.x = -this.dir.x;
	} else if ((this.pos.x + this.radius*2) &#62; w) {
		this.pos.x = w - [...]]]></description>
			<content:encoded><![CDATA[<p>Demonstrating Canvas API&#8230;</p>
<pre class="brush:javascript">var Point = function(x, y) {
	this.x = x;
	this.y = y;
}

var Circle = function(pos, dir, color, radius) {
	this.pos = pos;
	this.dir = dir;
	this.color = color;
	this.radius = radius;
};

Circle.prototype.move = function(speed, w, h) {
	this.pos.x += this.dir.x * speed;
	if (this.pos.x &lt; 0) {
		this.pos.x = 0;
		this.dir.x = -this.dir.x;
	} else if ((this.pos.x + this.radius*2) &gt; w) {
		this.pos.x = w - this.radius*2;
		this.dir.x = -this.dir.x;
	}

	this.pos.y += this.dir.y * speed;
	if (this.pos.y &lt; 0) {
		this.pos.y = 0;
		this.dir.y = -this.dir.y;
	} else if ((this.pos.y + this.radius*2) &gt; h) {
		this.pos.y = h - this.radius*2;
		this.dir.y = -this.dir.y;
	}
};

Circle.prototype.draw = function(context) {
	context.beginPath();
	context.arc(this.pos.x + this.radius, this.pos.y + this.radius, this.radius, 0, Utils.degreesToRadians(360), true);
	context.fillStyle = this.color;
	context.fill();
};

var Frame = function(canvasId, numberOfCircles) {
	this.canvas = document.getElementById(canvasId);
	this.speed = 1;
	this.numberOfCircles ||= 5;
	this.circles = [];
};

Frame.prototype.start = function() {
	for (var i = 0; i &lt; this.numberOfCircles; i++) {
		this.addBall();
	}
	var self = this;
	setInterval(function() { self.update(); }, 25);
};

Frame.prototype.speedUp = function() {
	this.speed++;
};

Frame.prototype.addBall = function() {
	var circle = new Circle(Utils.randPos(this.canvas.width, this.canvas.height), Utils.randDir(), Utils.randColor(), Utils.randRadius());
	this.circles.push(circle);
};

Frame.prototype.update = function() {
	var canvas = this.canvas;
	var context = canvas.getContext("2d");

	context.clearRect(0, 0, canvas.width, canvas.height);
	context.strokeStyle = '#000000';
	context.strokeRect(0, 0, canvas.width, canvas.height);

	for (var i = 0; this.circles[i]; i++) {
		var circle = this.circles[i];
		circle.move(this.speed, canvas.width, canvas.height);
		circle.draw(context);
	}
};

var Utils = {
	degreesToRadians: function(degrees) {
		return (degrees * Math.PI) / 180;
	},

	randDir: function() {
		return new Point((Math.random() &gt; 0.5 ? 1 : -1) * Math.random(),
						 (Math.random() &gt; 0.5 ? 1 : -1) * Math.random());
	},

	randPos: function(w, h) {
		return new Point(Utils.rand(w), Utils.rand(h));
	},

	randColor: function() {
		var letters = '0123456789ABCDEF'.split('');
	    var color = '#';
	    for (var i = 0; i &lt; 6; i++ ) {
	        color += letters[Utils.rand(15)];
	    }
	    return color;
	},

	randRadius: function() {
		return Utils.rand(5) + 5;
	},

	rand: function(max) {
		return Math.round(Math.random() * max);
	}
};

Array.prototype.each = function(f) {
	for (var i = 0; this[i]; i++) f(this[i]);
};

window.onload = function() {
	var frames = [new Frame("canvas1"), new Frame("canvas2")];
	frames.each(function(f) { f.start(); });

	document.getElementById("btnAddSpeed").onclick = function() {
		frames.each(function(f) { f.speedUp(); });
	};

	document.getElementById("btnAddBall").onclick = function() {
		frames.each(function(f) { f.addBall(); });
	};
};</pre>
<p>Place that script in a page with these elements</p>
<pre class="brush:html">&lt;canvas id="canvas1"&gt;&lt;/canvas&gt;
&lt;canvas id="canvas2"&gt;&lt;/canvas&gt;
&lt;br/&gt;
&lt;input type="button" id="btnAddSpeed" value="Add Speed"&gt;
&lt;input type="button" id="btnAddBall" value="Add Balls"&gt;</pre>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=7SGF56JXdOQ:POJ2ufacpOs:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=7SGF56JXdOQ:POJ2ufacpOs:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=7SGF56JXdOQ:POJ2ufacpOs:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=7SGF56JXdOQ:POJ2ufacpOs:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=7SGF56JXdOQ:POJ2ufacpOs:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/7SGF56JXdOQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/fun-with-html5-canvas.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/fun-with-html5-canvas.html</feedburner:origLink></item>
		<item>
		<title>Training screen casts (in Vietnamese) about C#, ASP.NET MVC, LINQ and Combres</title>
		<link>http://feedproxy.google.com/~r/BuuNguyensBlog/~3/iJk-8VdHvY4/training-screen-casts-in-vietnamese-about-c-asp-net-mvc-linq-and-combres.html</link>
		<comments>http://www.buunguyen.net/blog/training-screen-casts-in-vietnamese-about-c-asp-net-mvc-linq-and-combres.html#comments</comments>
		<pubDate>Mon, 15 Aug 2011 06:00:33 +0000</pubDate>
		<dc:creator>Buu Nguyen</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Technologies]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[asp.net mvc]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[screen-casts]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.buunguyen.net/blog/?p=597</guid>
		<description><![CDATA[The series of MVC/C#/LINQ/Combres screen-casts (in Vietnamese) I produced for Microsoft Vietnam a while a go. Microsoft Vietnam recently allowed CiOne to distribute on their website so that everyone can access for free.

C# 3.0: http://cione.com.vn/Courses/172-1-90
C# 4.0: http://cione.com.vn/Courses/172-1-91
LINQ: http://cione.com.vn/Courses/172-1-92
ASP.NET MVC 2: http://cione.com.vn/Courses/171-1-0
Combres: http://cione.com.vn/Courses/172-1-93

]]></description>
			<content:encoded><![CDATA[<p>The series of MVC/C#/LINQ/Combres screen-casts (in Vietnamese) I produced for Microsoft Vietnam a while a go. Microsoft Vietnam recently allowed CiOne to distribute on their website so that everyone can access for free.</p>
<ul>
<li>C# 3.0: <a href="http://cione.com.vn/Courses/172-1-90">http://cione.com.vn/Courses/172-1-90</a></li>
<li>C# 4.0: <a href="http://cione.com.vn/Courses/172-1-91">http://cione.com.vn/Courses/172-1-91</a></li>
<li>LINQ: <a href="http://cione.com.vn/Courses/172-1-92">http://cione.com.vn/Courses/172-1-92</a></li>
<li>ASP.NET MVC 2: <a href="http://cione.com.vn/Courses/171-1-0">http://cione.com.vn/Courses/171-1-0</a></li>
<li>Combres: <a href="http://cione.com.vn/Courses/172-1-93">http://cione.com.vn/Courses/172-1-93</a></li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=iJk-8VdHvY4:d-lGYMJEh-A:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=iJk-8VdHvY4:d-lGYMJEh-A:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=iJk-8VdHvY4:d-lGYMJEh-A:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/BuuNguyensBlog?a=iJk-8VdHvY4:d-lGYMJEh-A:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/BuuNguyensBlog?i=iJk-8VdHvY4:d-lGYMJEh-A:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/BuuNguyensBlog/~4/iJk-8VdHvY4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.buunguyen.net/blog/training-screen-casts-in-vietnamese-about-c-asp-net-mvc-linq-and-combres.html/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.buunguyen.net/blog/training-screen-casts-in-vietnamese-about-c-asp-net-mvc-linq-and-combres.html</feedburner:origLink></item>
	</channel>
</rss>

