<?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>Emad Ibrahim</title>
	
	<link>http://www.emadibrahim.com</link>
	<description>web development, tech reviews, tips, tricks, blogging</description>
	<lastBuildDate>Thu, 12 Aug 2010 16:32:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/EmadIbrahim" /><feedburner:info uri="emadibrahim" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>EmadIbrahim</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Blackjack Simulator</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/O6JDUq5hR0k/</link>
		<comments>http://www.emadibrahim.com/2010/08/12/blackjack-simulator-2/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 16:24:35 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Interesting]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[blackjack]]></category>
		<category><![CDATA[gambling]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2010/08/12/blackjack-simulator-2/</guid>
		<description>What’s a better way to get ready for a gambling trip other than write a blackjack simulator?  I am no blackjack expert but one of the strategies I heard off is to double your bet every time you lose.  So, if I start with a $100 bankroll and play $10 hands then I lost the [...]</description>
			<content:encoded><![CDATA[<p>What’s a better way to get ready for a gambling trip other than write a blackjack simulator?  I am no blackjack expert but one of the strategies I heard off is to double your bet every time you lose.  So, if I start with a $100 bankroll and play $10 hands then I lost the first hand, I am down to $90 and now should bet $20.  If I lose then I am down to $70 and should bet $40 and so on.  If I win then I have $110 and should bet $10.  That is the basic premise of my blackjack simulator.</p>
<h2>Results</h2>
<p>Here is an output of the results after 40 hands for:</p>
<p>player 1 &#8211; <a href="http://pastey.net/139513">http://pastey.net/139513</a></p>
<p>player 2 &#8211; <a href="http://pastey.net/139514">http://pastey.net/139514</a></p>
<p>dealer &#8211; <a href="http://pastey.net/139515">http://pastey.net/139515</a></p>
<p>Here is another run:</p>
<p>player 1 &#8211; <a href="http://pastey.net/139516">http://pastey.net/139516</a></p>
<p>player 2 &#8211; <a href="http://pastey.net/139517">http://pastey.net/139517</a></p>
<p>dealer &#8211; <a href="http://pastey.net/139518">http://pastey.net/139518</a></p>
<h2>Screenshot</h2>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/08/image2.png"><img style="display: inline; border: 0px;" title="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/08/image_thumb2.png" border="0" alt="image" width="424" height="326" /></a></p>
<h2>Disclaimer</h2>
<p>you WILL EVENTUALLY LOSE.  I ran the simulator for a long time and I was <strong><span style="color: #ff0000;">down over $90k</span></strong>.</p>
<h2>Source Code</h2>
<p>You can get the source code for the application here &#8211; <a href="http://github.com/eibrahim/BlackJackSimulator">http://github.com/eibrahim/BlackJackSimulator</a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title">No related posts</span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/CNlI5ghVTDARgLrgzFA6N6fHp74/0/da"><img src="http://feedads.g.doubleclick.net/~a/CNlI5ghVTDARgLrgzFA6N6fHp74/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CNlI5ghVTDARgLrgzFA6N6fHp74/1/da"><img src="http://feedads.g.doubleclick.net/~a/CNlI5ghVTDARgLrgzFA6N6fHp74/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/O6JDUq5hR0k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2010/08/12/blackjack-simulator-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2010/08/12/blackjack-simulator-2/</feedburner:origLink></item>
		<item>
		<title>Display a Dictionary/KeyValuePair as Grid in WPF</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/rNzY-KB7BeM/</link>
		<comments>http://www.emadibrahim.com/2010/07/30/display-a-dictionarykeyvaluepair-as-grid-in-wpf/#comments</comments>
		<pubDate>Fri, 30 Jul 2010 15:38:23 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2010/07/30/display-a-dictionarykeyvaluepair-as-grid-in-wpf/</guid>
		<description>Every time I work with WPF, I constantly think “I hate this shit” and “why is everything so damn hard”, but once I figure it out, I realize how powerful it really is and what I can really do with it.&amp;#160; I remember starting out with WPF and trying to figure out how to bind [...]</description>
			<content:encoded><![CDATA[<p>Every time I work with WPF, I constantly think “I hate this shit” and “why is everything so damn hard”, but once I figure it out, I realize how powerful it really is and what I can really do with it.&#160; I remember starting out with WPF and trying to figure out how to bind data to a control took me 2 days of reading several articles and a book.</p>
<p>Anyway, I am currently working on a <a href="http://www.mongodb.org" target="_blank">MongoDb</a> GUI &#8211; there are none out there &#8211; and I decided to build it in WPF.&#160; I am using the MongoDb driver by samus (<a href="http://github.com/samus/mongodb-csharp" target="_blank">link</a>).&#160; Displaying the data returned from a query as a table proved to be a lot harder than I thought.</p>
<p>Remember that the application doesn’t know anything about the domain model, so I can’t use strongly-typed objects.&#160; This is the code to retrieve the list of user objects stored in MongoDb:</p>
</p>
<pre class="csharpcode">var collection = db.GetCollection&lt;Document&gt;(User);
var results = collection.FindAll();</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>This will return the results as ICursor&lt;Document&gt;.&#160; Think of Document as the base type for all objects stored in MongoDb.&#160; The actual collection of documents/objects/users is in results.Documents.&#160; A Document implements the ICollection&lt;KeyValuePair&lt;string,object&gt;&gt;, this means that each document is basically a key/value list of all the object properties.&#160; So a user object will be stored like this:</p>
<table border="1" cellspacing="0" cellpadding="2" width="391">
<tbody>
<tr>
<td valign="top" width="170"><strong>Key</strong></td>
<td valign="top" width="219"><strong>Value</strong></td>
</tr>
<tr>
<td valign="top" width="170">FirstName</td>
<td valign="top" width="219">John</td>
</tr>
<tr>
<td valign="top" width="170">LastName</td>
<td valign="top" width="219">Smith</td>
</tr>
<tr>
<td valign="top" width="170">CreatedOn</td>
<td valign="top" width="219">2010-07-20T05:39:35.5220000Z</td>
</tr>
<tr>
<td valign="top" width="170">Account</td>
<td valign="top" width="219">{ &quot;SubscriptionType&quot;: &quot;paid&quot;, &quot;CreatedOn&quot;: &quot;2010-07-20T05:39:35.5220000Z&quot;, &quot;ModifiedOn&quot;: &quot;2010-07-20T05:39:35.5220000Z&quot; }</td>
</tr>
</tbody>
</table>
<p>What I want to do is to take this list of documents and display as a grid.&#160; I want it to look something like this:</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/07/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/07/image_thumb1.png" width="481" height="167" /></a> </p>
<p>I am no WPF expert but after Googling and reading tons of articles for hours, here is the solution I came up with.&#160; If you know a better one, please let me know.</p>
<p>Here is the XAML for the ListView</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">ListView</span> <span class="attr">Name</span><span class="kwrd">=&quot;lvItems&quot;</span>  <span class="attr">Margin</span><span class="kwrd">=&quot;12,12,9,12&quot;</span>        <span class="attr">IsSynchronizedWithCurrentItem</span><span class="kwrd">=&quot;True&quot;</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">=&quot;1&quot;</span>        <span class="attr">ItemsSource</span><span class="kwrd">=&quot;{Binding}&quot;</span> <span class="kwrd">&gt;</span></pre>
<p><span class="kwrd">&lt;/</span><span class="html">ListView</span><span class="kwrd">&gt;</span><br />
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>The first thing I need to do is define the grid columns:</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">static</span> GridView CreateGridViewColumns(Document doc)
{
    <span class="rem">// Create the GridView</span>
    GridView gv = <span class="kwrd">new</span> GridView();
    gv.AllowsColumnReorder = <span class="kwrd">true</span>;

    <span class="kwrd">if</span>(doc ==<span class="kwrd">null</span>) <span class="kwrd">return</span> gv; <span class="rem">//return empty grid if null</span>

    <span class="rem">// Create the GridView Columns)</span>
    <span class="kwrd">foreach</span> (var item <span class="kwrd">in</span> doc.Keys)
    {
        var gvc = <span class="kwrd">new</span> GridViewColumn();
        gvc.Header = item;
        gvc.Width = Double.NaN;
        gvc.CellTemplateSelector = <span class="kwrd">new</span> CustomRowDataTemplateSelector();
        gv.Columns.Add(gvc);
    }

    <span class="kwrd">return</span> gv;
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div>
  </div>
<p>I use the returned GridView to set the ListView’s Grid </p>
</p>
<pre class="csharpcode">var gridView = CreateGridViewColumns(results.Documents.FirstOrDefault());
lvItems.View = gridView;</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>So that takes care of setting up the grid column header.&#160; Now, I need to bind the data.&#160; I want to treat each document as a “Row”, so I create a custom class called CustomRow.&#160; Some of the stuff in there won’t make sense right now, but bear with me.</p>
<pre class="csharpcode"><span class="kwrd">internal</span> <span class="kwrd">class</span> CustomRow
{
    <span class="kwrd">private</span> <span class="kwrd">int</span> index = 0;
    <span class="kwrd">private</span> ArrayList _list;

    <span class="kwrd">public</span> CustomRow()
    {
        _list = <span class="kwrd">new</span> ArrayList();
    }

    <span class="kwrd">public</span> <span class="kwrd">object</span> Value
    {
        get
        {
            <span class="kwrd">if</span> (index &lt; 0) index = 0;
            <span class="kwrd">if</span> (index &gt;= _list.Count) index = 0; <span class="rem">//wrap around and start from beginning</span>

            <span class="kwrd">return</span> _list[index++];
        }
    }

    <span class="kwrd">public</span> <span class="kwrd">object</span> Current
    {
        get
        {
            <span class="kwrd">if</span> (index &lt; 0) index = 0;
            <span class="kwrd">if</span> (index &gt;= _list.Count) index = 0; <span class="rem">//wrap around and start from beginning</span>
            <span class="kwrd">return</span> _list[index];
        }
    }

    <span class="kwrd">public</span> <span class="kwrd">void</span> Add(<span class="kwrd">object</span> item)
    {
        _list.Add(item);
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>&#160;</p>
<p>Now, all I have to do is convert each document to CustomRow:</p>
<pre class="csharpcode"><span class="kwrd">private</span> <span class="kwrd">object</span> ConvertToRows(IEnumerable&lt;Document&gt; documents)
{
    var results = <span class="kwrd">new</span> List&lt;CustomRow&gt;();

    <span class="kwrd">foreach</span> (var document <span class="kwrd">in</span> documents)
    {
        var row = <span class="kwrd">new</span> CustomRow();
        <span class="kwrd">foreach</span> (var field <span class="kwrd">in</span> document)
        {
            row.Add(field.Value);
        }
        results.Add(row);
    }
    <span class="kwrd">return</span> results;
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>This is the full code used to setup the ListView:</p>
<pre class="csharpcode">lvItems.View = CreateGridViewColumns(results.Documents.FirstOrDefault());
lvItems.DataContext = ConvertToRows(results.Documents);</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>Did you notice the line with the CellTemplateSelector in the CreateGridViewColumns method above?&#160; Well, I wanted my cells to display differently based on whether they are displaying string, date, an embedded object/document or a list of other documents.&#160; So, I created a custom CellTemplateSelector:</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> CustomRowDataTemplateSelector : DataTemplateSelector
{
    <span class="kwrd">public</span> <span class="kwrd">override</span> DataTemplate
        SelectTemplate(<span class="kwrd">object</span> item, DependencyObject container)
    {
        FrameworkElement element = container <span class="kwrd">as</span> FrameworkElement;

        <span class="kwrd">if</span> (element != <span class="kwrd">null</span> &amp;&amp; item != <span class="kwrd">null</span>)
        {
            var row = item <span class="kwrd">as</span> CustomRow;
            <span class="kwrd">if</span> (row != <span class="kwrd">null</span>)
            {
                var cell = row.Current;

                <span class="rem">//set template based on cell type</span>
                <span class="kwrd">if</span> (cell <span class="kwrd">is</span> Document)
                {
                    <span class="kwrd">return</span> element.FindResource(<span class="str">&quot;documentCell&quot;</span>) <span class="kwrd">as</span> DataTemplate;
                }
                <span class="kwrd">if</span> (cell <span class="kwrd">is</span> IList)
                {
                    <span class="kwrd">return</span> element.FindResource(<span class="str">&quot;listCell&quot;</span>) <span class="kwrd">as</span> DataTemplate;
                }

                <span class="kwrd">if</span> (cell <span class="kwrd">is</span> DateTime)
                {
                    <span class="kwrd">return</span> element.FindResource(<span class="str">&quot;dateCell&quot;</span>) <span class="kwrd">as</span> DataTemplate;
                }

                <span class="kwrd">if</span> (cell <span class="kwrd">is</span> Oid)
                    <span class="kwrd">return</span> element.FindResource(<span class="str">&quot;idCell&quot;</span>) <span class="kwrd">as</span> DataTemplate;
                <span class="kwrd">return</span> element.FindResource(<span class="str">&quot;stringCell&quot;</span>) <span class="kwrd">as</span> DataTemplate;
            }

        }

        <span class="kwrd">return</span> <span class="kwrd">null</span>;
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>Basically, I am returning a different DataTemplate based on the object stored in the cell.&#160; As an example, here is dateCell template defined in the App.xaml file.</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">DataTemplate</span> <span class="attr">x:Key</span><span class="kwrd">=&quot;dateCell&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">StackPanel</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">TextBlock</span> <span class="attr">Style</span><span class="kwrd">=&quot;{StaticResource cellStyle}&quot;</span>
                    <span class="attr">Grid</span>.<span class="attr">Row</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">Grid</span>.<span class="attr">Column</span><span class="kwrd">=&quot;0&quot;</span>
                    <span class="attr">Text</span><span class="kwrd">=&quot;{Binding Path=Value, Converter={StaticResource cellConverter}}&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">StackPanel</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">DataTemplate</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<p>This is simply a TextBlock that is bound to the Value property of the CustomRow class (will explain later).&#160; The cellConverter is custom logic that will convert the value of the cell accordingly.&#160; For example, date is converted to short date, an embedded object is simply converted to an “(object)” string as shown above.&#160; Here is my converter (ConvertBack hasn’t been implemented yet):</p>
<pre class="csharpcode"><span class="kwrd">public</span> <span class="kwrd">class</span> CellConverter : IValueConverter
{
    <span class="kwrd">public</span> <span class="kwrd">object</span> Convert(<span class="kwrd">object</span> <span class="kwrd">value</span>, Type targetType, <span class="kwrd">object</span> parameter, CultureInfo culture)
    {
        <span class="kwrd">if</span> (<span class="kwrd">value</span> == <span class="kwrd">null</span>)
            <span class="kwrd">return</span> <span class="str">&quot;(null)&quot;</span>;
        <span class="kwrd">if</span> (<span class="kwrd">value</span> <span class="kwrd">is</span> Document)
            <span class="kwrd">return</span> <span class="str">&quot;(object)&quot;</span>;
        <span class="kwrd">if</span> (<span class="kwrd">value</span> <span class="kwrd">is</span> DateTime)
            <span class="kwrd">return</span> ((DateTime)<span class="kwrd">value</span>).ToShortDateString();
        <span class="kwrd">if</span> (<span class="kwrd">value</span> <span class="kwrd">is</span> IList)
            <span class="kwrd">return</span> <span class="str">&quot;(list)&quot;</span>;

        <span class="kwrd">return</span> <span class="kwrd">value</span>;
    }

    <span class="kwrd">public</span> <span class="kwrd">object</span> ConvertBack(<span class="kwrd">object</span> <span class="kwrd">value</span>, Type targetType, <span class="kwrd">object</span> parameter, CultureInfo culture)
    {
        <span class="kwrd">throw</span> <span class="kwrd">new</span> NotImplementedException();
    }
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<div id="codeSnippetWrapper">
  </div>
<h2>Explanations</h2>
<p>At first, I tried to just bind directly to the list of values in each document.&#160; The problem with that the DataTempalte only display the first item in the collection.&#160; So my grid looks exactly like above but all the cells were set to the value of Id.&#160; That is why I created the CustomRow class and that is why the Value property increments the indexer.&#160; This way everytime I pull out the value for a cell, I increment the indexer so that the next bound cell will get the next value and so on.&#160; </p>
<p>Again, I don’t know if this is the best solution, so if you do know of a better one then please let me know in the comments.&#160; It will help all my readers.&#160; Thanks in advance.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/03/09/clickonce-in-wpf-and-orcas-project/" rel="bookmark" title="Permanent Link: ClickOnce in WPF and Orcas Project" >ClickOnce in WPF and Orcas Project</a></span><div class="aizattos_related_posts_excerpt">For some reason, I couldn't get ClickOnce to work correctly using the Orcas March CTP.  So when time...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/03/09/my-first-wpf-application/" rel="bookmark" title="Permanent Link: My First WPF Application" >My First WPF Application</a></span><div class="aizattos_related_posts_excerpt">Here is my first Windows Presentation Foundation (WPF) application. This was developed using Orcas M...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/03/08/add-context-menu-to-tab-control-in-wpf/" rel="bookmark" title="Permanent Link: Add Context Menu to Tab Control in WPF" >Add Context Menu to Tab Control in WPF</a></span><div class="aizattos_related_posts_excerpt">You can add a context menu to tab control or to individual tabs.  If you add it to tab control it wo...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/14/silverlight-templatebinding-throwing-an-error/" rel="bookmark" title="Permanent Link: Silverlight: TemplateBinding Throwing an Error" >Silverlight: TemplateBinding Throwing an Error</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/03/09/how-to-add-a-user-control-to-your-wpf-window/" rel="bookmark" title="Permanent Link: How to add a User Control to your WPF Window" >How to add a User Control to your WPF Window</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/6bzouivpe0Z34lpj_9HgLluMHOc/0/da"><img src="http://feedads.g.doubleclick.net/~a/6bzouivpe0Z34lpj_9HgLluMHOc/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6bzouivpe0Z34lpj_9HgLluMHOc/1/da"><img src="http://feedads.g.doubleclick.net/~a/6bzouivpe0Z34lpj_9HgLluMHOc/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/rNzY-KB7BeM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2010/07/30/display-a-dictionarykeyvaluepair-as-grid-in-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2010/07/30/display-a-dictionarykeyvaluepair-as-grid-in-wpf/</feedburner:origLink></item>
		<item>
		<title>Subversion (SVN) to Mercurial and TeamCity</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/2MzLGkE1smw/</link>
		<comments>http://www.emadibrahim.com/2010/05/03/subversion-svn-to-mercurial-and-teamcity/#comments</comments>
		<pubDate>Mon, 03 May 2010 12:27:00 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[source control]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[teamcity]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2010/05/03/subversion-svn-to-mercurial-and-teamcity/</guid>
		<description>Every time I think I got all the tools I need and I have a killer setup, something comes along that makes me question it all.&amp;#160; I am referring to mercurial.&amp;#160; For some reason, I have just heard of mercurial from TekPub.&amp;#160; I don&amp;#8217;t know why I never heard of it before.&amp;#160; Probably because I [...]</description>
			<content:encoded><![CDATA[<p>Every time I think I got all the tools I need and I have a killer setup, something comes along that makes me question it all.&#160; I am referring to mercurial.&#160; For some reason, I have just heard of mercurial from <a href="http://www.tekpub.com" target="_blank">TekPub</a>.&#160; I don&#8217;t know why I never heard of it before.&#160; Probably because I wasn&#8217;t looking to replace subversion as my trusted source control.</p>
<p>I like the subversion and it does the job for me, but after watching tekpub&#8217;s videos, I instantly realized the power of mercurial and why I must have it.&#160; So I went ahead and converted my source control for <a href="http://dartfiles.com" target="_blank">dartfiles</a> to Hg (hg is the chemical symbol for mercury in the periodic table). I was actually surprised by how easy the move went.</p>
<p>Here is what I did:     </p>
<ol>
<li>Downloaded and installed <a href="http://tortoisehg.bitbucket.org/" target="_blank">TortoiseHg</a> </li>
<li>Exported my subversion project to a new folder&#160;
<p><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image.png" width="478" height="311" />       </li>
<li>Created a Mercurial repository at the new folder where I exported the code in step 2
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image1.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb.png" width="497" height="224" /></a>       <br /><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb1.png" width="452" height="174" /></a>       </li>
<li>Edited the ignore file (.hgignore) in notepad and added the following (which I found somewhere on stackoverflow)      </li>
<pre class="csharpcode"><span class="rem"># Ignore file for Visual Studio 2008</span>

<span class="rem"># use glob syntax</span>
syntax: glob

<span class="rem"># Ignore Visual Studio 2008 files</span>
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.lib
*.sbr
*.scc
[Bb]<span class="kwrd">in</span>
[Db]ebug*/
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*
[Bb]uild[Ll]og.*
*.[Pp]ublish.xml</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<li>Committed the repository
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image3.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb2.png" width="244" height="156" /></a> </p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb3.png" width="398" height="288" /></a> </li>
</ol>
<p>That’s all I had to do to setup mercurial.&#160; </p>
<p>You are probably wondering – where is the source control server and where are you committing too.&#160; This is the part that is different than what I have been used to with subversion.&#160; Obviously if you are using git or similar distributed SCM then you are familiar with this concept.&#160; Mercurial stores all your source code changes and tracking locally right in your folder inside a .hg subfolder (similar to .svn folders but not exactly).&#160; When you commit you are just committing to your local repository.&#160; This is pretty cool because it lets you commit locally, roll back to a different time, branch and do all kind of cool things without having to deal with a server.&#160; </p>
<p>Imagine you are working on feature 1 then you get an email for an urgent bug (lets’ call it bug 2).&#160; You can’t really work on it because feature 1 is not complete and the code won’t compile and things could get messy.&#160; You want to fix the bug but you don’t want to lose all the work you put into feature 1 and you are note ready to deploy.&#160; With mercurial, it’s pretty easy to handle this situation.&#160; Simply go back to a point in your history before you started working on feature 1, create a new branch for bug 2, fix it then commit and push it, you can then deploy this version and then come back and merge the bug 2 branch with your feature 1 branch and continue working on feature 1.&#160; </p>
<p>I probably didn’t do a good job explaining this scenario but hopefully you will at least get an idea of what I am talking about.&#160; If not then head over to <a href="http://mercurial.selenic.com/">http://mercurial.selenic.com/</a> and take a look at their great documentation.</p>
<h2>Remote Repository</h2>
<p>In most cases, you will want to setup a remote repository so you can “push” code to it.&#160; “Pushing” is another concept that was new to me.&#160; Basically, you commit locally and you push remotely (or centrally).&#160; This gives you the flexibility to commit all day long every time you make a change and only when the code is ready and stable you “push” it to the remote repository where other developers can get to it.&#160; I setup my remote repository at bitbucket &#8211; <a href="http://bitbucket.org/">http://bitbucket.org/</a> – they have a free account and some very reasonable pricing.&#160; If you are working on open source/public code, you can always use Google code or codeplex; they both support mercurial.</p>
<p>Here are the steps</p>
<ol>
<li>Created an account at bitbucket.</li>
<li>Setup TortoiseHg to talk with the remote repository (right-click &gt; TortoiseHg &gt; Repository Settings)
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image5.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb4.png" width="477" height="416" /></a></p>
<p> </li>
<li>Pushed my code to the remote server</li>
</ol>
<h2><strong>TeamCity Integration</strong></h2>
<p>I use TeamCity as my build server (<a href="http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/" target="_blank">blog post</a>).&#160; Once everything was working nicely, I had to get TeamCity to work with the new SCM.&#160; This was pretty easy as well.&#160; I basically removed my old SVN root from my TeamCity project and added a new root to point to mercurial</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb5.png" width="561" height="552" /></a> </p>
<p>To make this work, you have to install mercurial on the server.&#160; Get it from <a title="http://mercurial.selenic.com/downloads/" href="http://mercurial.selenic.com/downloads/">http://mercurial.selenic.com/downloads/</a></p>
<p>Initially, I had a problem with the HG command path and it was giving me some weird error like failed to create process or something like that (I can’t remember).&#160; It turned out the problem was that TeamCity couldn’t deal with spaces in the path.&#160; The install location was “c:\Program Files (x86)\hg” so I just moved it to c:\hg and everything worked.</p>
<p>Once everything was working well and after working for a few hours, doing a few commits and one deployment, I realized the power of mercurial.&#160; Just take a look at my repository history and you might grasp the awesomeness that is mercurial.</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2010/05/image7.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2010/05/image_thumb6.png" width="655" height="486" /></a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/" rel="bookmark" title="Permanent Link: Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment" >Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment</a></span><div class="aizattos_related_posts_excerpt">This is a second post in my startup series (first one).&#160; Warning, this one is a lot more techni...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/23/my-altnet-code/" rel="bookmark" title="Permanent Link: My ALT.NET Code" >My ALT.NET Code</a></span><div class="aizattos_related_posts_excerpt">Here is my alt.net code...  Click on the link to decode it.
IOC(SM):IOC(Nin):
MOC(MQ):
TDD(NU):T...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/10/09/marketing-your-services-using-affiliate-programs/" rel="bookmark" title="Permanent Link: Marketing Your Services Using Affiliate Programs" >Marketing Your Services Using Affiliate Programs</a></span><div class="aizattos_related_posts_excerpt">I just launched a hosted microblogging platform (aka twitter clone) at www.yonklyapp.com and right n...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/21/ninject-killer-ioc/" rel="bookmark" title="Permanent Link: Ninject: Killer IoC" >Ninject: Killer IoC</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/r1BmWOVlVARcX8isq_yYW3A9sgA/0/da"><img src="http://feedads.g.doubleclick.net/~a/r1BmWOVlVARcX8isq_yYW3A9sgA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/r1BmWOVlVARcX8isq_yYW3A9sgA/1/da"><img src="http://feedads.g.doubleclick.net/~a/r1BmWOVlVARcX8isq_yYW3A9sgA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/2MzLGkE1smw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2010/05/03/subversion-svn-to-mercurial-and-teamcity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2010/05/03/subversion-svn-to-mercurial-and-teamcity/</feedburner:origLink></item>
		<item>
		<title>Serialize Object To Clean XML</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/6_m4sF59tp0/</link>
		<comments>http://www.emadibrahim.com/2010/02/23/serialize-object-to-clean-xml/#comments</comments>
		<pubDate>Wed, 24 Feb 2010 00:08:12 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2010/02/23/serialize-object-to-clean-xml/</guid>
		<description>I hate all the junk that gets added when serializing object to XML, so here is a quick way to do it cleanly. Here is the dirty way: public static string Serialize(this object obj) { string XmlString = String.Empty; using (var memStream = new MemoryStream()) { var serializer = new XmlSerializer(obj.GetType(), string.Empty); using (var xmlText [...]</description>
			<content:encoded><![CDATA[<p>I hate all the junk that gets added when serializing object to XML, so here is a quick way to do it cleanly.</p>
<p>Here is the dirty way:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">string</span> Serialize(<span style="color: #0000ff">this</span> <span style="color: #0000ff">object</span> obj)
{
    <span style="color: #0000ff">string</span> XmlString = String.Empty;
    <span style="color: #0000ff">using</span> (var memStream = <span style="color: #0000ff">new</span> MemoryStream())
    {
        var serializer = <span style="color: #0000ff">new</span> XmlSerializer(obj.GetType(), <span style="color: #0000ff">string</span>.Empty);
        <span style="color: #0000ff">using</span> (var xmlText = <span style="color: #0000ff">new</span> XmlTextWriter(memStream, Encoding.Default))
        {
            serializer.Serialize(xmlText, obj);
        }
        XmlString = Encoding.Default.GetString(memStream.ToArray());
        memStream.Close();
    }
    <span style="color: #0000ff">return</span> XmlString;
}</pre>
</div>
<p>The resulting XML looks like this:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&lt;?xml version=<span style="color: #006080">&quot;1.0&quot;</span> encoding=<span style="color: #006080">&quot;Windows-1252&quot;</span>?&gt;
&lt;ZipContentInfo xmlns:xsi=<span style="color: #006080">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span> xmlns:xsd=<span style="color: #006080">&quot;http://www.w3.org/2001/XMLSchema&quot;</span>&gt;
    &lt;FileName&gt;00107_tokyoatnight_1680x1050.jpg&lt;/FileName&gt;
    &lt;FileSize&gt;281268&lt;/FileSize&gt;
&lt;/ZipContentInfo&gt;</pre>
</div>
<p>Here is a cleaner way:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">string</span> Serialize(<span style="color: #0000ff">this</span> <span style="color: #0000ff">object</span> obj)
{
    var ser = <span style="color: #0000ff">new</span> XmlSerializer(obj.GetType());
    <span style="color: #0000ff">using</span> (var tw = <span style="color: #0000ff">new</span> StringWriter())
    {
        <span style="color: #0000ff">using</span> (var xw = XmlWriter.Create(tw, <span style="color: #0000ff">new</span> XmlWriterSettings() { OmitXmlDeclaration = <span style="color: #0000ff">true</span> }))
        {
            var ns = <span style="color: #0000ff">new</span> XmlSerializerNamespaces();
            <span style="color: #008000">//Add an empty namespace and empty value</span>
            ns.Add(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #006080">&quot;&quot;</span>);
            ser.Serialize(xw, obj, ns);
            <span style="color: #0000ff">return</span> tw.ToString();
        }
    }
}</pre>
</div>
<p>And the resulting XML looks like this:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">&lt;ZipContentInfo&gt;
    &lt;FileName&gt;00107_tokyoatnight_1680x1050.jpg&lt;/FileName&gt;
    &lt;FileSize&gt;281268&lt;/FileSize&gt;
&lt;/ZipContentInfo&gt;</pre>
</div>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/31/calling-the-wordpress-xmlrpc-api-from-vbnet/" rel="bookmark" title="Permanent Link: Calling the WordPress XMLRPC API from VB.net" >Calling the WordPress XMLRPC API from VB.net</a></span><div class="aizattos_related_posts_excerpt">As an example, I will call the getCategories API method.

Add a reference to the XML-RPC.net libra...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/19/windows-live-writer-image-upload-and-wordpress-wpmu/" rel="bookmark" title="Permanent Link: Windows Live Writer Image Upload and WordPress (WPMU)" >Windows Live Writer Image Upload and WordPress (WPMU)</a></span><div class="aizattos_related_posts_excerpt">My previous post http://emad.blogstogo.com/2007/07/19/window-live-writer-and-pictures/ didn't work r...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/04/22/highlight-syntax-in-your-html-blog-posts/" rel="bookmark" title="Permanent Link: Highlight syntax in your HTML blog posts" >Highlight syntax in your HTML blog posts</a></span><div class="aizattos_related_posts_excerpt">Check out this site which lets you create HTML formatted with syntax highlighting for your code snip...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" rel="bookmark" title="Permanent Link: Deciding Between ASP.NET MVC and WebForms" >Deciding Between ASP.NET MVC and WebForms</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/28/object-and-array-initializers-in-vb-9/" rel="bookmark" title="Permanent Link: Object and Array Initializers in VB 9" >Object and Array Initializers in VB 9</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/mxOhbNnpvEGXSpxUsZs3Z_cONJU/0/da"><img src="http://feedads.g.doubleclick.net/~a/mxOhbNnpvEGXSpxUsZs3Z_cONJU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mxOhbNnpvEGXSpxUsZs3Z_cONJU/1/da"><img src="http://feedads.g.doubleclick.net/~a/mxOhbNnpvEGXSpxUsZs3Z_cONJU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/6_m4sF59tp0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2010/02/23/serialize-object-to-clean-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2010/02/23/serialize-object-to-clean-xml/</feedburner:origLink></item>
		<item>
		<title>Select Random Records Using Nhibernate</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/WdLU2Ga4nLQ/</link>
		<comments>http://www.emadibrahim.com/2009/12/16/select-random-records-using-nhibernate/#comments</comments>
		<pubDate>Thu, 17 Dec 2009 03:54:15 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[nhibernate]]></category>
		<category><![CDATA[SQL]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/12/16/select-random-records-using-nhibernate/</guid>
		<description>Selecting 5 random rows in SQL is easy select top 5 * from users order by newid() .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode [...]</description>
			<content:encoded><![CDATA[<p>Selecting 5 random rows in SQL is easy</p>
</p>
<pre class="csharpcode"><span class="kwrd">select</span> <span class="kwrd">top</span> 5 * <span class="kwrd">from</span> users <span class="kwrd">order</span> <span class="kwrd">by</span> newid()</pre>
<p>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>Nhibernate is a different story.&#160; I am new to NHibernate and I both love and hate it.&#160; I hate the steep learning curve and the unobvious ways of doing things.&#160; Anyway, here is how to select 5 random records using nhibernate.</p>
<p>First class a new order class to perform random ordering:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> RandomOrder : Order
{
    <span style="color: #0000ff">public</span> RandomOrder() : <span style="color: #0000ff">base</span>(<span style="color: #006080">&quot;&quot;</span>, <span style="color: #0000ff">true</span>) { }
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">override</span> SqlString ToSqlString(ICriteria criteria, ICriteriaQuery criteriaQuery)
    {
        <span style="color: #0000ff">return</span> <span style="color: #0000ff">new</span> SqlString(<span style="color: #006080">&quot;newid()&quot;</span>);
    }
}</pre>
</div>
<p>Then use the new class in your query:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px">IList&lt;User&gt; users = session
    .CreateCriteria(<span style="color: #0000ff">typeof</span>(User))
    .AddOrder(<span style="color: #0000ff">new</span> RandomOrder())
    .SetMaxResults(5)
    .List&lt;User&gt;();</pre>
</div>
<p>Done…</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/12/22/a-gui-for-amazon-simpledb-simpledb-manager/" rel="bookmark" title="Permanent Link: A GUI for Amazon SimpleDb &#8211; SimpleDb Manager" >A GUI for Amazon SimpleDb &#8211; SimpleDb Manager</a></span><div class="aizattos_related_posts_excerpt">I just released a new software called SimpleDb Manager for managing your SimpleDb databases.&#160; Y...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/02/19/improve-linq-query-performance/" rel="bookmark" title="Permanent Link: Improve LINQ Query Performance" >Improve LINQ Query Performance</a></span><div class="aizattos_related_posts_excerpt">I was writing a small utility for Outlook 2007 and was using LINQ to query Outlook Tasks.&#160; This...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/04/25/use-skype-to-setup-a-wakeup-call-in-vista/" rel="bookmark" title="Permanent Link: Use Skype to setup a wakeup call in Vista" >Use Skype to setup a wakeup call in Vista</a></span><div class="aizattos_related_posts_excerpt">You can setup a wakeup call using Skype in Vista (and XP too)…
Start Task Scheduler
Click on "Crea...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/05/25/custom-sort-order-in-a-sql-statement/" rel="bookmark" title="Permanent Link: Custom sort order in a SQL statement" >Custom sort order in a SQL statement</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/12/dynamically-build-linq-queries-using-reflection/" rel="bookmark" title="Permanent Link: Dynamically Build LINQ Queries Using Reflection" >Dynamically Build LINQ Queries Using Reflection</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/cYQheCT6OiRTsjHMQRnVXyyEG38/0/da"><img src="http://feedads.g.doubleclick.net/~a/cYQheCT6OiRTsjHMQRnVXyyEG38/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/cYQheCT6OiRTsjHMQRnVXyyEG38/1/da"><img src="http://feedads.g.doubleclick.net/~a/cYQheCT6OiRTsjHMQRnVXyyEG38/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/WdLU2Ga4nLQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/12/16/select-random-records-using-nhibernate/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/12/16/select-random-records-using-nhibernate/</feedburner:origLink></item>
		<item>
		<title>ASP.NET MVC &amp; TDD Free Book Chapter</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/VyuBxWMtA8I/</link>
		<comments>http://www.emadibrahim.com/2009/08/18/asp-net-mvc-tdd-free-book-chapter/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 03:47:08 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/?p=650</guid>
		<description>I can’t believe that I actually finished my book &amp;#8211; ASP.NET MVC 1.0 Test Driven Development Problem &amp;#8211; Design &amp;#8211; Solution.&amp;#160; Whew!!!&amp;#160; It’s a lot of freaking work writing a book and I don’t know how others can crank out a book or more a year…&amp;#160; Nonetheless, I am very excited about the book and [...]</description>
			<content:encoded><![CDATA[<p>I can’t believe that I actually finished my book &#8211; <a href="http://bit.ly/1i5ede" target="_blank">ASP.NET MVC 1.0 Test Driven Development Problem &#8211; Design &#8211; Solution</a>.&#160; Whew!!!&#160; It’s a lot of freaking work writing a book and I don’t know how others can crank out a book or more a year…&#160; </p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/08/51y43nUfxkL._SS500_.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="51y43nUfxkL._SS500_" border="0" alt="51y43nUfxkL._SS500_" src="http://www.emadibrahim.com/wp-content/uploads/2009/08/51y43nUfxkL._SS500__thumb.jpg" width="244" height="244" /></a> </p>
<p>Nonetheless, I am very excited about the book and I hope you guys like it too and learn something from it.&#160; Of course, reviews on <a href="http://bit.ly/1i5ede">amazon.com</a> would be appreciated &#8211; specially positive ones :-)</p>
<p>Thanks to <a href="http://bit.ly/XOwGg" target="_blank">Wrox</a>, here is a free chapter – <a href="http://bit.ly/1aInOp">download it here</a>.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" rel="bookmark" title="Permanent Link: Deciding Between ASP.NET MVC and WebForms" >Deciding Between ASP.NET MVC and WebForms</a></span><div class="aizattos_related_posts_excerpt">I am trying to create a decision flowchart for my ASP.NET MVC book and wanted to get some community ...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/18/the-best-ioc-container/" rel="bookmark" title="Permanent Link: The Best IoC Container?" >The Best IoC Container?</a></span><div class="aizattos_related_posts_excerpt">As I previously mentioned in my post "The Best JavaScript Library", I am in the process of developin...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/01/05/resolving-url-in-aspnet-using-tilda/" rel="bookmark" title="Permanent Link: Resolving URL in ASP.net using Tilda (~)" >Resolving URL in ASP.net using Tilda (~)</a></span><div class="aizattos_related_posts_excerpt">I have been using .net since it has come out and I just found this out (so, I am kind of pissed).  W...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/02/10/free-image-editing-application/" rel="bookmark" title="Permanent Link: Free image editing application" >Free image editing application</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/01/11/aspnet-20-error-title-is-not-a-member-of-asp%e2%80%a6/" rel="bookmark" title="Permanent Link: asp.net 2.0 Error: &#8216;Title&#8217; is not a member of &#8216;ASP…" >asp.net 2.0 Error: &#8216;Title&#8217; is not a member of &#8216;ASP…</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/TvA8zTOxXXbB7SuWT23phlwNOdY/0/da"><img src="http://feedads.g.doubleclick.net/~a/TvA8zTOxXXbB7SuWT23phlwNOdY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TvA8zTOxXXbB7SuWT23phlwNOdY/1/da"><img src="http://feedads.g.doubleclick.net/~a/TvA8zTOxXXbB7SuWT23phlwNOdY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/VyuBxWMtA8I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/08/18/asp-net-mvc-tdd-free-book-chapter/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/08/18/asp-net-mvc-tdd-free-book-chapter/</feedburner:origLink></item>
		<item>
		<title>Startup – ASP.NET MVC, Cloud Scale &amp; Deployment</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/FJdtoT5Yby8/</link>
		<comments>http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 14:47:00 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Startup]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[gogrid]]></category>
		<category><![CDATA[mvc]]></category>
		<category><![CDATA[nant]]></category>
		<category><![CDATA[Yonkly]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/</guid>
		<description>This is a second post in my startup series (first one).&amp;#160; Warning, this one is a lot more technical than my first one. If you have been following my blog, my company or my twitter page then you probably know that my startup – yonkly – was built with ASP.NET MVC.&amp;#160; In this post, I [...]</description>
			<content:encoded><![CDATA[<p>This is a second post in my startup series (<a href="http://www.emadibrahim.com/?p=617">first one</a>).&#160; Warning, this one is a lot more technical than my first one.</p>
<p>If you have been following my blog, my company or my <a href="http://twitter.com/eibrahim" target="_blank">twitter</a> page then you probably know that my startup – <a href="http://yonkly.com" target="_blank">yonkly</a> – was built with <a href="http://asp.net/mvc">ASP.NET MVC</a>.&#160; In this post, I will talk about how I scale deploy Yonkly very easily.</p>
<h2>Hosting</h2>
<p>Initially, I had it hosted on <a href="http://aws.amazon.com/" target="_blank">Amazon Web Services</a> inside EC2 instance.&#160; That didn’t work too well for a few reasons:</p>
<ul>
<li>EC2 only supports windows 2003</li>
<li>A separate instance is needed for load balancing (extra cost)</li>
<li>The database instance is very costly</li>
<li>Databases tend to run slow on virtual machines</li>
</ul>
<p>While looking for alternatives to AWS, I joined Microsoft <a href="http://www.microsoft.com/bizspark/" target="_blank">BizSpark</a> (a program that provides software,&#160; support and visibility for software startups).&#160; The greatest benefit of the program is the use of pretty much all Microsoft products for 3 years for free.&#160; Imagine all the SQL and Windows licenses that you need to scale your website – all for free.&#160; Another great benefit is that Microsoft partnered with hosting companies for even more discounts.</p>
<p>The next step is to find a hosting company.&#160; I went with <a href="http://www.servepath.com/" target="_blank">ServePath</a>/<a href="http://www.gogrid.com" target="_blank">GoGrid</a>.&#160; They offer the best combination in price, scalability and flexibility.&#160; I got a dedicated server for SQL Server and created virtual machines for the front end in GoGrid.&#160; Since both services are by the same company, the virtual machine has a super fast connection to the dedicated server.&#160; The cool thing about GoGrid is that it includes a free load balancer.&#160; So my setup looks something like this:</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/08/image.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/08/image_thumb.png" width="503" height="536" /></a> </p>
<p>The blue machines are virtual/cloud machines running in GoGrid and the database server is a dedicated/physical server. </p>
<p><strong>Web Servers</strong>: Windows 2008, IIS, ASP.NET MVC</p>
<p><strong>Build Server</strong>: Windows 2008, <a href="http://www.jetbrains.com/teamcity/" target="_blank">TeamCity</a></p>
<p><strong>Database Server</strong>: Windows 2008, SQL Server 2008</p>
<p>The beauty of all this is that I can add X more servers and scale within minutes.&#160; Eventually, the db server will be the bottleneck and I would have to cluster it, but let’s not get ahead of ourselves here.</p>
<h2>Management &amp; Deployment</h2>
<p>You are probably wondering.&#160; How do you manage all these machines?&#160; How long does it take you to deploy a new version?&#160; The answers are “easy” and “less than a minute”</p>
<p>I started off using <a href="http://confluence.public.thoughtworks.org/display/CCNET/Welcome+to+CruiseControl.NET" target="_blank">CruiseControl.NET</a> (CCNET) to manage my build and deployment but eventually changed to TeamCity.&#160;&#160; I like CCNET and the fact that is written in .NET and runs in IIS is very comforting to me.&#160; On the other hand TeamCity is way more capable, has a better interface and was way too easy to setup.&#160; On the flip side, TeamCity is written in Java and runs in Tomcat.&#160; This is a very simplified list of benefits, for more info check their homepage and look at the <a href="http://www.jetbrains.com/teamcity/features/screenshots.html" target="_blank">screen tour</a>.&#160; The best part, both products are free and CCNET is open source.</p>
<p>Once I got TeamCity up and running, I created 2 projects one called “Yonkly Build” and the other “Yonkly Deploy”.</p>
<p>The Yonkly Build project:</p>
<ul>
<li>monitors the source control repository (SVN)</li>
<li>checks out changes</li>
<li>builds the code</li>
</ul>
<p>The Yonkly Deploy project copies the changed files using Robocopy to every web server using a <a href="http://nant.sourceforge.net/" target="_blank">NANT</a> script.&#160; The NANT build file looks like this:</p>
<div style="border-bottom: gray 1px solid; border-left: gray 1px solid; padding-bottom: 4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%; padding-right: 4px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; max-height: 200px; font-size: 8pt; overflow: auto; border-top: gray 1px solid; cursor: text; border-right: gray 1px solid; padding-top: 4px">
<pre style="border-bottom-style: none; padding-bottom: 0px; line-height: 12pt; border-right-style: none; background-color: #f4f4f4; margin: 0em; padding-left: 0px; width: 100%; padding-right: 0px; font-family: consolas, &#39;Courier New&#39;, courier, monospace; border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">=&quot;1.0&quot;</span>?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">project</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;yonkly&quot;</span> <span style="color: #ff0000">default</span><span style="color: #0000ff">=&quot;deploy files&quot;</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">target</span> <span style="color: #ff0000">name</span><span style="color: #0000ff">=&quot;deploy files&quot;</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">exec</span>
         <span style="color: #ff0000">program</span><span style="color: #0000ff">=&quot;robocopy.exe&quot;</span>
         <span style="color: #ff0000">commandline</span><span style="color: #0000ff">=&quot;c:\dev\yonkly20\yonkly20\ c:\websites\yonkly20 *.* /E /XA:H /COPY:DT /XO /XD .svn logs obj aspnet_client app_data properties controllers helpers models /NDL /NC /NS /NP /XF *.cs *.csproj *.config  *.pdb&quot;</span>
         <span style="color: #ff0000">timeout</span><span style="color: #0000ff">=&quot;120000&quot;</span>
         <span style="color: #ff0000">failonerror</span><span style="color: #0000ff">=&quot;false&quot;</span>
         <span style="color: #ff0000">resultproperty</span><span style="color: #0000ff">=&quot;nunitReturnCode&quot;</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;/</span><span style="color: #800000">exec</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">fail</span> <span style="color: #ff0000">if</span>=&quot;${<span style="color: #ff0000">nunitReturnCode</span> <span style="color: #0000ff">&gt;</span> '7'}&quot;<span style="color: #0000ff">&gt;</span>Robocopy failed with yonkly20 (return code ${nunitReturnCode})<span style="color: #0000ff">&lt;/</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span>  

       <span style="color: #0000ff">&lt;</span><span style="color: #800000">exec</span>
         <span style="color: #ff0000">program</span><span style="color: #0000ff">=&quot;robocopy.exe&quot;</span>
         <span style="color: #ff0000">commandline</span><span style="color: #0000ff">=&quot;c:\dev\yonkly20\yonkly20\ \\10.109.69.2\c\websites\yonkly20 *.* /E /XA:H /COPY:DT /XO /XD .svn logs obj aspnet_client app_data properties controllers helpers models /NDL /NC /NS /NP /XF *.cs *.csproj *.config  *.pdb&quot;</span>
         <span style="color: #ff0000">timeout</span><span style="color: #0000ff">=&quot;120000&quot;</span>
         <span style="color: #ff0000">failonerror</span><span style="color: #0000ff">=&quot;false&quot;</span>
         <span style="color: #ff0000">resultproperty</span><span style="color: #0000ff">=&quot;nunitReturnCode&quot;</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;/</span><span style="color: #800000">exec</span><span style="color: #0000ff">&gt;</span>
       <span style="color: #0000ff">&lt;</span><span style="color: #800000">fail</span> <span style="color: #ff0000">if</span>=&quot;${<span style="color: #ff0000">nunitReturnCode</span> <span style="color: #0000ff">&gt;</span> '7'}&quot;<span style="color: #0000ff">&gt;</span>Robocopy failed with yonkly20 on remote (return code ${nunitReturnCode})<span style="color: #0000ff">&lt;/</span><span style="color: #800000">fail</span><span style="color: #0000ff">&gt;</span>  

    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">target</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">project</span><span style="color: #0000ff">&gt;</span></pre>
</div>
<p>You can repeat the Robocopy command for every web server.&#160; You can learn more about Robocopy <a href="http://ss64.com/nt/robocopy.html" target="_blank">here</a>, NANT tasks <a href="http://nant.sourceforge.net/release/latest/help/tasks/" target="_blank">here</a> and the exec task <a href="http://nant.sourceforge.net/release/latest/help/tasks/exec.html" target="_blank">here</a>.&#160; The fail element in the above XML file tells TeamCity to only fail the build if the return value from Robocopy is greater than 7.&#160; Get more info about Robcopy return code which is a bit map over <a href="http://blogs.technet.com/deploymentguys/archive/2008/06/16/robocopy-exit-codes.aspx" target="_blank">here</a>.</p>
<p>It’s important to note that I have a dependency setup between my build and deploy projects.&#160; This is to ensure that I don’t deploy a failed build.&#160; The deploy project will only work if the build succeeds.</p>
<h2>Tools &amp; Helpers</h2>
<p>There are a couple of helpful tools/plugins that make TeamCity even more powerful.&#160; The first plugin is a system tray notifier that will display popups to notify of build status.</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/08/image1.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/08/image_thumb1.png" width="482" height="247" /></a> </p>
<p>The other plugin is for Visual Studio and is a “killer feature” for TeamCity.&#160; It allows me to verify that my code will build on the server before I check it in.&#160; it’s probably better if you read the description on <a href="http://www.jetbrains.com/teamcity/delayed_commit.html" target="_blank">their site</a>.</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/08/image2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/08/image_thumb2.png" width="244" height="206" /></a> </p>
<h2>Ready. Set. Go</h2>
<p>Now, all I have to do is check in my code.&#160; TeamCity will detect the new files, check them out, build the application and if it succeeds, it will deploy it.</p>
<h2>What’s Next?</h2>
</p>
<p>Many of these things are relatively new to me, so if you know of a better way to do things, please share.&#160; I am also looking for a way to automate my database migration (probably with a NANT task).</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/01/11/aspnet-20-error-title-is-not-a-member-of-asp%e2%80%a6/" rel="bookmark" title="Permanent Link: asp.net 2.0 Error: &#8216;Title&#8217; is not a member of &#8216;ASP…" >asp.net 2.0 Error: &#8216;Title&#8217; is not a member of &#8216;ASP…</a></span><div class="aizattos_related_posts_excerpt">I had this error come up on a few pages after I deployed my website and it was driving me crazy.  Af...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/01/05/resolving-url-in-aspnet-using-tilda/" rel="bookmark" title="Permanent Link: Resolving URL in ASP.net using Tilda (~)" >Resolving URL in ASP.net using Tilda (~)</a></span><div class="aizattos_related_posts_excerpt">I have been using .net since it has come out and I just found this out (so, I am kind of pissed).  W...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/31/ajax-with-aspnet-mvc-framework-preview-2/" rel="bookmark" title="Permanent Link: Ajax with ASP.NET MVC Framework Preview 2" >Ajax with ASP.NET MVC Framework Preview 2</a></span><div class="aizattos_related_posts_excerpt">This is the updated version of the Nikhil's excellent example on how to use Ajax with ASP.net MVC.
...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/09/07/deciding-between-aspnet-mvc-and-webforms/" rel="bookmark" title="Permanent Link: Deciding Between ASP.NET MVC and WebForms" >Deciding Between ASP.NET MVC and WebForms</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/18/the-best-ioc-container/" rel="bookmark" title="Permanent Link: The Best IoC Container?" >The Best IoC Container?</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/ZjOHWMohtxr2J8t2Oi-260Az2As/0/da"><img src="http://feedads.g.doubleclick.net/~a/ZjOHWMohtxr2J8t2Oi-260Az2As/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ZjOHWMohtxr2J8t2Oi-260Az2As/1/da"><img src="http://feedads.g.doubleclick.net/~a/ZjOHWMohtxr2J8t2Oi-260Az2As/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/FJdtoT5Yby8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/</feedburner:origLink></item>
		<item>
		<title>Product Ideas – Help Me Decide</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/mQNZTJknBs0/</link>
		<comments>http://www.emadibrahim.com/2009/07/28/product-ideas-help-me-decide/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 18:18:00 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Interesting]]></category>
		<category><![CDATA[Random]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[feedback]]></category>
		<category><![CDATA[poll]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/07/28/product-ideas-help-me-decide/</guid>
		<description>I founded www.yonkly.com about 8 months ago and it is at a point now that doesn&amp;#8217;t require my full time attention. So, I need to start/create a new product or service and need your opinion on what to do next. I created a very short questionnaire (only 1 required question and no email address is [...]</description>
			<content:encoded><![CDATA[<p>I founded www.yonkly.com about 8 months ago and it is at a point now that doesn&#8217;t require my full time attention. </p>
<p>So, I need to start/create a new product or service and need your opinion on what to do next.</p>
<p>I created a very short questionnaire (only 1 required question and no email address is required).&#160; Can you please take 5 seconds and guide me in the right direction?</p>
<p>It is located at <a href="http://bit.ly/hIk1p">http://bit.ly/hIk1p</a> </p>
<p>If you decide to fill out your email (optional), I will use it to send you a free copy/subscription of whatever I (we) decide to create. </p>
<p>I will announce the results of your votes on <a href="http://twitter.com/eibrahim" target="_blank">twitter</a> after I close voting.&#160; </p>
<p>Thanks for your help in advance. </p>
<p>PS: You can also help by re-tweeting &#8211; <a href="http://bit.ly/1uIuvI">http://bit.ly/1uIuvI</a> my request for feedback.</p>
<p>PSS: I will make the results public once voting is closed.&#160; I just don’t want the current results to influence your vote.&#160; I will also make public the ideas suggested by you – some are really fantastic (thanks).</p>
<p>PSSS: Some related discussions <a href="http://discuss.joelonsoftware.com/default.asp?biz.5.769024.7" target="_blank">here</a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/22/book-how-to-win-friends-and-influence-people/" rel="bookmark" title="Permanent Link: How to Win Friends and Influence People" >How to Win Friends and Influence People</a></span><div class="aizattos_related_posts_excerpt">This is one of my all time favorite books "How to Win Friends and Influence People" by Dale Carnegie...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/20/i-quit/" rel="bookmark" title="Permanent Link: I quit" >I quit</a></span><div class="aizattos_related_posts_excerpt">I am was working for a very good company and making a good paycheck. The economy is slowing down (ak...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/15/implicitly-type-local-variables-in-vb-90/" rel="bookmark" title="Permanent Link: Implicitly type local variables in VB 9.0" >Implicitly type local variables in VB 9.0</a></span><div class="aizattos_related_posts_excerpt">I love this new feature of VB 9 (Orcas).  It lets you declare local variables without explicitly dec...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/24/pdc-2008-sponsorship-opportunity/" rel="bookmark" title="Permanent Link: PDC 2008, Sponsorship Opportunity" >PDC 2008, Sponsorship Opportunity</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/13/kisagotami/" rel="bookmark" title="Permanent Link: Kisagotami" >Kisagotami</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/X66ggPeQPmjEiiVrFxDQMHDntmA/0/da"><img src="http://feedads.g.doubleclick.net/~a/X66ggPeQPmjEiiVrFxDQMHDntmA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/X66ggPeQPmjEiiVrFxDQMHDntmA/1/da"><img src="http://feedads.g.doubleclick.net/~a/X66ggPeQPmjEiiVrFxDQMHDntmA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/mQNZTJknBs0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/07/28/product-ideas-help-me-decide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/07/28/product-ideas-help-me-decide/</feedburner:origLink></item>
		<item>
		<title>jQuery Wildcard Selector</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/IhURByfEFyg/</link>
		<comments>http://www.emadibrahim.com/2009/07/25/jquery-wildcard-selector/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 13:27:49 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/07/25/jquery-wildcard-selector/</guid>
		<description>This post is a reminder for me on how to do wildcard selection in jQuery.&amp;#160; It comes up more than you think and for some reason, I can never remember it. &amp;#60;div id='pnlUsers'&amp;#62;&amp;#60;/div&amp;#62; &amp;#60;div id='pnlMessages'&amp;#62;&amp;#60;/div&amp;#62; &amp;#60;div id='pnlStatus'&amp;#62;&amp;#60;/div&amp;#62; .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: consolas, "Courier New", courier, monospace; background-color: #ffffff; /*white-space: pre;*/ [...]</description>
			<content:encoded><![CDATA[<p>This post is a reminder for me on how to do wildcard selection in jQuery.&#160; It comes up more than you think and for some reason, I can never remember it.</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">='pnlUsers'</span><span class="kwrd">&gt;&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">='pnlMessages'</span><span class="kwrd">&gt;&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">div</span> <span class="attr">id</span><span class="kwrd">='pnlStatus'</span><span class="kwrd">&gt;&lt;/</span><span class="html">div</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>I can easily hide all the divs up by doing a wildcard selection on elements with an id starting with “pnl”, like this:</p>
<pre class="csharpcode">$(<span class="str">&quot;[id^=pnl]&quot;</span>).hide();</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>You can even narrow it to only divs like this:</p>
<pre class="csharpcode">$(<span class="str">&quot;div[id^=pnl]&quot;</span>).hide();</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
</p>
<p>There is another example with even more explanations <a href="http://www.insideria.com/2009/04/jquery-wild-card-example.html" target="_blank">over here</a>.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/10/the-best-javascript-library/" rel="bookmark" title="Permanent Link: The Best JavaScript Library" >The Best JavaScript Library</a></span><div class="aizattos_related_posts_excerpt">I am in the process of creating a new web application using asp.net mvc and I am trying to choose th...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/13/cmap-code-camp-2008-spring-edition/" rel="bookmark" title="Permanent Link: CMAP Code Camp 2008 Spring Edition" >CMAP Code Camp 2008 Spring Edition</a></span><div class="aizattos_related_posts_excerpt">Yesterday, I gave a talk at CMAP Code Camp about the asp.net mvc framework and AJAX using JQuery.  T...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/22/is-microsoft-buying-the-community/" rel="bookmark" title="Permanent Link: Is Microsoft Buying the Community?" >Is Microsoft Buying the Community?</a></span><div class="aizattos_related_posts_excerpt">I love the blogosphere - specially for technical information and news.&nbsp; My guess is that probab...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/09/08/client-server-side-validation-in-aspnet-mvc/" rel="bookmark" title="Permanent Link: Client &amp; Server Side Validation in ASP.NET MVC" >Client &amp; Server Side Validation in ASP.NET MVC</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/11/yonkly-open-source-twitter/" rel="bookmark" title="Permanent Link: Yonkly &#8211; Open Source Twitter" >Yonkly &#8211; Open Source Twitter</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/ceSd1mvFGVGmCGKd2Ku7xtqMDGY/0/da"><img src="http://feedads.g.doubleclick.net/~a/ceSd1mvFGVGmCGKd2Ku7xtqMDGY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ceSd1mvFGVGmCGKd2Ku7xtqMDGY/1/da"><img src="http://feedads.g.doubleclick.net/~a/ceSd1mvFGVGmCGKd2Ku7xtqMDGY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/IhURByfEFyg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/07/25/jquery-wildcard-selector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/07/25/jquery-wildcard-selector/</feedburner:origLink></item>
		<item>
		<title>Regular Express For Parsing URLs</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/0ca0d7g58FU/</link>
		<comments>http://www.emadibrahim.com/2009/07/05/regular-express-for-parsing-urls/#comments</comments>
		<pubDate>Sun, 05 Jul 2009 15:51:00 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[regex]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/07/05/regular-express-for-parsing-urls/</guid>
		<description>I am always looking for this one, so I am blogging it for future reference and for everyone to use. ^(?#Protocol)(?:(?:ht&amp;#124;f)tp(?:s?)\:\/\/&amp;#124;~/&amp;#124;/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com&amp;#124;org&amp;#124;net&amp;#124;gov&amp;#124;mil&amp;#124;biz&amp;#124;info&amp;#124;mobi&amp;#124;name&amp;#124;aero&amp;#124;jobs&amp;#124;museum&amp;#124;travel&amp;#124;[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+&amp;#124;.,=]&amp;#124;%[a-f\d]{2})+)+&amp;#124;/)+&amp;#124;\?&amp;#124;#)?(?#Query)(?:(?:\?(?:[-\w~!$+&amp;#124;.,*:]&amp;#124;%[a-f\d{2}])+=(?:[-\w~!$+&amp;#124;.,*:=]&amp;#124;%[a-f\d]{2})*)(?:&amp;#38;(?:[-\w~!$+&amp;#124;.,*:]&amp;#124;%[a-f\d{2}])+=(?:[-\w~!$+&amp;#124;.,*:=]&amp;#124;%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+&amp;#124;.,*:=]&amp;#124;%[a-f\d]{2})*)?$ There is more information on Ivan’s blog. Related PostsFailed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be [...]</description>
			<content:encoded><![CDATA[<p>I am always looking for this one, so I am blogging it for future reference and for everyone to use.</p>
<blockquote><p>^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~/|/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&amp;(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$</p>
</blockquote>
<p>There is more information on <a href="http://geekswithblogs.net/casualjim/archive/2005/12/01/61722.aspx" target="_blank">Ivan’s blog</a>.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/06/08/failed-to-generate-a-user-instance-of-sql-server-due-to-a-failure-in-starting-the-process-for-the-user-instance-the-connection-will-be-closed/" rel="bookmark" title="Permanent Link: Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed." >Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.</a></span><div class="aizattos_related_posts_excerpt">I had to uninstall and reinstall SQL server 2005 and Express on my development machine.  After the u...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/05/07/shortening-urls-with-bitlys-api-in-net/" rel="bookmark" title="Permanent Link: Shortening URLs with bit.ly’s API in .NET" >Shortening URLs with bit.ly’s API in .NET</a></span><div class="aizattos_related_posts_excerpt">I previously wrote about shortening URLs with TinyURL’s API but my new favorite URL shortener is h...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/04/18/shrink-long-urls-easily-in-firefox/" rel="bookmark" title="Permanent Link: Shrink long URLs easily in FireFox" >Shrink long URLs easily in FireFox</a></span><div class="aizattos_related_posts_excerpt">Almost everyone knows about http://tinyurl.com it's a great idea but I hate copying the URL, going t...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/10/tricky-aspnet-mvc-url-rewriting/" rel="bookmark" title="Permanent Link: Tricky Asp.net MVC URL Rewriting" >Tricky Asp.net MVC URL Rewriting</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/15/shortening-urls-using-tinyurl-api-in-net/" rel="bookmark" title="Permanent Link: Shortening URLs Using TinyUrl API in .net" >Shortening URLs Using TinyUrl API in .net</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/RgZzer5wczYHxnnUZofEHclq7JI/0/da"><img src="http://feedads.g.doubleclick.net/~a/RgZzer5wczYHxnnUZofEHclq7JI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/RgZzer5wczYHxnnUZofEHclq7JI/1/da"><img src="http://feedads.g.doubleclick.net/~a/RgZzer5wczYHxnnUZofEHclq7JI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/0ca0d7g58FU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/07/05/regular-express-for-parsing-urls/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/07/05/regular-express-for-parsing-urls/</feedburner:origLink></item>
		<item>
		<title>Startup – How To Build A Web 2.0 Business: The Risks</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/-nVkjoKrdjg/</link>
		<comments>http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/#comments</comments>
		<pubDate>Sun, 10 May 2009 02:29:39 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Startup]]></category>
		<category><![CDATA[marketing]]></category>
		<category><![CDATA[series]]></category>
		<category><![CDATA[web20]]></category>
		<category><![CDATA[Yonkly]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/?p=617</guid>
		<description>If you have been reading along, I probably sound like a broken record, talking about how I quit my job over a year ago and decided to go solo (here and here).  It has been a tough but fun ride so far and I have made a few mistakes and learned a lot on the [...]</description>
			<content:encoded><![CDATA[<p>If you have been reading along, I probably sound like a broken record, talking about how I quit my job over a year ago and decided to go solo (<a href="http://www.emadibrahim.com/2008/03/20/i-quit/">here</a> and <a href="http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/">here</a>).  It has been a tough but fun ride so far and I have made a few mistakes and learned a lot on the way.  I would like to share some of these experiences with you, so hopefully you won’t make the same mistakes.  I say that even though I know that you will still make them, but at least I warned you.</p>
<p>Initially, I thought I should turn this into an eBook and sell it for a few bucks then I thought my target audience are probably not willing to spend money even it were only 5 bucks.  I finally settled on making it into a series of blog posts and also incorporating your comments along the way.</p>
<h2>Risks</h2>
<p>First, let’s set the stage.  My situation is probably different than yours; so if you have lots of money saved up, rich parents or potential investors and have no debt then some of these questions/pointers might not apply to you.  I started off with <strong>zero savings</strong>, high <strong>credit card debt</strong> and pretty good credit score.  So, among money of the risks you will be taking, ask yourself <span style="text-decoration: underline;">if you are willing to end up with bad credit</span>.  A year+ later, I am short selling my condo, have a lot <strong>more debt</strong> than before and I don’t even want to know my credit score.</p>
<p>I was telling my sister about my situation and she said “you are taking this surprisingly well.  You used to be very conscious of your credit score”.  Well, I told her it’s<strong> not the end of the world</strong> and I will just have to learn to <strong>live within my means</strong> for the next few years until banks agree to lend me again.  Can you imagine living in a world where you only buy the car you can afford?  The computer you can afford?  The house you can afford?  So again, are you willing to take this risk and take it “<strong>surprisingly well</strong>” if things go bad?</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/05/willcodeforfoodgeekhappenscartoonsba1.jpg"><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="Will code for food - GEEK HAPPENS CARTOONS BANDES DESSINES FUMETTI COMICS FUN" src="http://www.emadibrahim.com/wp-content/uploads/2009/05/willcodeforfoodgeekhappenscartoonsba1-thumb.jpg" border="0" alt="Will code for food - GEEK HAPPENS CARTOONS BANDES DESSINES FUMETTI COMICS FUN" width="512" height="512" /></a></p>
<p>So far we have “Are you willing to end up with bad credit?”, this of course is one of many more questions you should ask yourself to assess your readiness to take the leap:</p>
<ul>
<li>Can you handle a foreclosure?</li>
<li>Can you live without a car if it breaks down and you can’t fix it or if it gets repossessed?</li>
<li>Can your significant other handle it?</li>
<li>Can you handle living without some “relative luxuries”: eating out, drinking, partying, vacation, gadgets, toys and so on?</li>
</ul>
<p>In the above questions, when I say “handle”, I mean “can you mentally, psychologically and physically handle it?”.  It is really hard for me to walk into Best Buy or stumble on <a href="http://www.amazon.com/exec/obidos/redirect-home/dotnetfactory-20" target="_blank">Amazon.com</a> and come out empty handed.  It is very difficult for me to go out with some friends and just order a couple of beers all night.  All I am saying is: <strong>prepare yourself</strong>.</p>
<p>One more thing and then I will move on.  A friend once told me about how brave I was for doing this and that he could never do the same thing in a million years.  I asked him what was his biggest fear and his answer shocked me: “… that my wife would leave me”.  I am sorry, but personally I think if you are thinking this way then you probably married the wrong person.  And, honestly if she leaves you because you are broke, then good riddance.  What happens to “until death do us apart”, it’s not “until your credit score do us apart”.  Luckily, my fiancé is still around and we are getting married in the next few months.  Off topic: weddings are a big, expensive, waste-of-money one-night party that no one will remember.  And if anyone remembers your wedding 3 months later it is because it was really good or really bad.</p>
<h2>Offsets</h2>
<p>There are many things to offset the risk while you are starting your company.  The most obvious one is to not quit your job.  I personally couldn’t do that.  You can’t spend 10 hours at work and then come back home and be able to fully focus and commit to your startup.  If you can do that then you should.  But say goodbye to your social life and probably health and mental well being.</p>
<p>Again there are a hundred ways to offset the risk and generate some money on the side if not to cover all your bills at least it will cover your food and Internet bill.  I don’t know you and I don’t know what you can do to make some money but I will tell you some of the things I did and an estimate on how income they generated.</p>
<ul>
<li>Consulting gigs (web development and social media consulting) &#8211; $30k</li>
<li>Online ad Revenue from my <a href="http://emadibrahim.com/projects" target="_blank">websites</a> &#8211; $2k</li>
<li>Startup/<a href="http://yonkly.com" target="_blank">yonkly</a> – revenue (I know!  Can you believe that?  It is already generating revenue) &#8211; ~$10k.  Most of the money was a side effect of the startup e.g. custom development.</li>
<li><a href="http://bit.ly/H7ziD" target="_blank">Book writing</a> – I don’t think I am allowed to disclose the amount but let’s just say it’s enough money to pay your bills for 2 or 3 months.</li>
<li><a href="http://tinyurl.com/584khw" target="_blank">Article writing</a> – depends on the magazine but should be between $500 and $1000 per article.</li>
<li>Sell your junk on amazon, ebay and craigslist.  I sold a ton of books, dvds and electronics that I didn’t use anymore &#8211; $1k.  It won’t make you reach but it will be enough money to feed the dog for a few months.</li>
<li>Raise money &#8211; $0.  Hey, don’t sound surprised, it’s a tough market.</li>
<li>Not selling your organs on the black market – priceless.</li>
</ul>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/05/img-6893.jpg"><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="IMG_6893" src="http://www.emadibrahim.com/wp-content/uploads/2009/05/img-6893-thumb.jpg" border="0" alt="IMG_6893" width="483" height="366" /></a></p>
<p>The important thing is that you need to find the <strong>right balance</strong>.  If you do too much consulting then you won’t have time for your startup.  But if you get lucky and find a contract that lasts a couple of months and pays a lot of money then take it.  That should keep you going for a few more months.</p>
<h2>Coming Up</h2>
<p>I don’t want to make this post too long.  I talked about the risks and how to offset.  It is important to understand that you are <strong>minimizing risk</strong> – not eliminating it.</p>
<p>I am going to focus this series on an web startup or do I dare say a web 2.0 startup.  Not everything will apply to everyone (or to anyone for that matter) but hopefully it will be helpful and entertaining.  I would like to cover the following topics in future posts:</p>
<ul>
<li>Building The Website (multiple posts)
<ul>
<li>Development (Programming)</li>
<li>Hosting and scaling</li>
<li>Payment integration (PayPal)</li>
</ul>
</li>
<li>Marketing &amp; PR (here is a good <a href="http://bit.ly/30txp" target="_blank">book</a>)</li>
<li>Tools &amp; Services (I will expand on my <a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" target="_blank">previous post</a>)</li>
<li>Resources &amp; References</li>
<li>[insert your suggestion here]</li>
</ul>
<p>Help me expand the previous list.  Leave a comment and tell me what you would like me to discuss.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/30/my-elevator-pitch/" rel="bookmark" title="Permanent Link: My Elevator Pitch" >My Elevator Pitch</a></span><div class="aizattos_related_posts_excerpt">I found this cool site that has a free wizard which helps you build your elevator (15 second) pitch....</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/25/web-design-toolbox/" rel="bookmark" title="Permanent Link: Web Design Toolbox" >Web Design Toolbox</a></span><div class="aizattos_related_posts_excerpt">Here is an excellent post with tons of links to all sort of web design sites, tools, resources, etc....</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/" rel="bookmark" title="Permanent Link: Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment" >Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment</a></span><div class="aizattos_related_posts_excerpt">This is a second post in my startup series (first one).&#160; Warning, this one is a lot more techni...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" rel="bookmark" title="Permanent Link: Services Worth Paying For as a Startup" >Services Worth Paying For as a Startup</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/06/27/free-it-consultation-in-the-dc-metro-area/" rel="bookmark" title="Permanent Link: Free IT Consultation in the DC Metro Area" >Free IT Consultation in the DC Metro Area</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/xYoYszwAmgLo7oInYewWP7qsOg0/0/da"><img src="http://feedads.g.doubleclick.net/~a/xYoYszwAmgLo7oInYewWP7qsOg0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xYoYszwAmgLo7oInYewWP7qsOg0/1/da"><img src="http://feedads.g.doubleclick.net/~a/xYoYszwAmgLo7oInYewWP7qsOg0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/-nVkjoKrdjg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/</feedburner:origLink></item>
		<item>
		<title>Shortening URLs with bit.ly’s API in .NET</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/qSzaLyrwOvs/</link>
		<comments>http://www.emadibrahim.com/2009/05/07/shortening-urls-with-bitlys-api-in-net/#comments</comments>
		<pubDate>Thu, 07 May 2009 18:34:02 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[bitly]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[tinyurl]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/05/07/shortening-urls-with-bitlys-api-in-net/</guid>
		<description>I previously wrote about shortening URLs with TinyURL’s API but my new favorite URL shortener is http://bit.ly and it also has a great API that you can use from within your .net code.  I just recently used in my twitter contest website – tweetastica. The code is also very simple.  I didn’t add all the [...]</description>
			<content:encoded><![CDATA[<p>I previously wrote about shortening URLs with <a href="http://www.emadibrahim.com/2008/04/15/shortening-urls-using-tinyurl-api-in-net/">TinyURL’s API</a> but my new favorite URL shortener is <a href="http://bit.ly">http://bit.ly</a> and it also has a great API that you can use from within your .net code.  I just recently used in my twitter contest website – <a href="http://tweetastica.com">tweetastica</a>.</p>
<p>The code is also very simple.  I didn’t add all the extra options that the API makes available and just wrote enough for me to shorten a URL.  Here it is:</p>
<div>
<pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: consolas, 'Courier New', courier, monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"><span style="color: #0000ff">public</span> <span style="color: #0000ff">static class</span> BitlyApi
{
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">const</span> <span style="color: #0000ff">string</span> apiKey = <span style="color: #006080">"[add api key here]"</span>;
    <span style="color: #0000ff">private</span> <span style="color: #0000ff">const</span> <span style="color: #0000ff">string</span> login = <span style="color: #006080">"[add login name here]"</span>;

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> BitlyResults ShortenUrl(<span style="color: #0000ff">string</span> longUrl)
    {
        var url =
            <span style="color: #0000ff">string</span>.Format(<span style="color: #006080">"http://api.bit.ly/shorten?format=xml&amp;version=2.0.1&amp;longUrl={0}&amp;login={1}&amp;apiKey={2}"</span>,
                          HttpUtility.UrlEncode(longUrl), login, apiKey);
        var resultXml = XDocument.Load(url);
        var x = (from result <span style="color: #0000ff">in</span> resultXml.Descendants(<span style="color: #006080">"nodeKeyVal"</span>)
                 select <span style="color: #0000ff">new</span> BitlyResults
                            {
                                UserHash = result.Element(<span style="color: #006080">"userHash"</span>).Value,
                                ShortUrl = result.Element(<span style="color: #006080">"shortUrl"</span>).Value
                            }
                );
        <span style="color: #0000ff">return</span> x.Single();
    }
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> BitlyResults
{
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> UserHash { get; set; }

    <span style="color: #0000ff">public</span> <span style="color: #0000ff">string</span> ShortUrl { get; set; }
}</pre>
</div>
<p>Using this code is very straight forward.</p>
<div>
<pre style="line-height: 12pt; background-color: #f4f4f4; margin: 0em; width: 100%; font-family: consolas, 'Courier New', courier, monospace; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;">var shortUrl = BitlyApi.ShortenUrl(<span style="color: #006080">"http://www.verylongUrl.com"</span>).ShortUrl;</pre>
</div>
<p>bit.ly has tons of features and a great API.  You can even see stats of any bit.ly generate url using /info.  for example: <a href="http://bit.ly/info/S0vRy">http://bit.ly/info/S0vRy</a> shows you stats for <a href="http://bit.ly/S0vRy">http://bit.ly/S0vRy</a></p>
<p>Another feature I really like is their bookmarklet which you can keep on your browser’s bookmark bar and click it to shrink the site you are at…  It even pops this side bar with a bunch of useful info.</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/05/image.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/05/image-thumb.png" border="0" alt="image" width="410" height="298" /></a></p>
<p>The API is pretty well documented at <a href="http://code.google.com/p/bitly-api/wiki/ApiDocumentation">http://code.google.com/p/bitly-api/wiki/ApiDocumentation</a></p>
<p>Don’t forget to follow me on <a href="http://twitter.com/eibrahim" target="_blank">twitter</a>.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/15/shortening-urls-using-tinyurl-api-in-net/" rel="bookmark" title="Permanent Link: Shortening URLs Using TinyUrl API in .net" >Shortening URLs Using TinyUrl API in .net</a></span><div class="aizattos_related_posts_excerpt">Here is a quick method to shorten URLs using the TinyUrl API in .net - C# and VB
C#

public stati...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/31/calling-the-wordpress-xmlrpc-api-from-vbnet/" rel="bookmark" title="Permanent Link: Calling the WordPress XMLRPC API from VB.net" >Calling the WordPress XMLRPC API from VB.net</a></span><div class="aizattos_related_posts_excerpt">As an example, I will call the getCategories API method.

Add a reference to the XML-RPC.net libra...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/07/05/regular-express-for-parsing-urls/" rel="bookmark" title="Permanent Link: Regular Express For Parsing URLs" >Regular Express For Parsing URLs</a></span><div class="aizattos_related_posts_excerpt">I am always looking for this one, so I am blogging it for future reference and for everyone to use. ...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/08/18/asp-net-mvc-tdd-free-book-chapter/" rel="bookmark" title="Permanent Link: ASP.NET MVC &amp; TDD Free Book Chapter" >ASP.NET MVC &amp; TDD Free Book Chapter</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/07/28/product-ideas-help-me-decide/" rel="bookmark" title="Permanent Link: Product Ideas &ndash; Help Me Decide" >Product Ideas &ndash; Help Me Decide</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/aWD09yZ79MCREssRAqfGBu6oDu4/0/da"><img src="http://feedads.g.doubleclick.net/~a/aWD09yZ79MCREssRAqfGBu6oDu4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/aWD09yZ79MCREssRAqfGBu6oDu4/1/da"><img src="http://feedads.g.doubleclick.net/~a/aWD09yZ79MCREssRAqfGBu6oDu4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/qSzaLyrwOvs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/05/07/shortening-urls-with-bitlys-api-in-net/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/05/07/shortening-urls-with-bitlys-api-in-net/</feedburner:origLink></item>
		<item>
		<title>“I Quit” 1 Year Anniversary</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/sOe0m3_JVdY/</link>
		<comments>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/#comments</comments>
		<pubDate>Mon, 09 Mar 2009 11:13:44 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Featured]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Yonkly]]></category>
		<category><![CDATA[aspnetmvc]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/?p=603</guid>
		<description>It has been a year since I quit my job and decided to go independent.  I didn&amp;#8217;t know what I was going to do, the economic outlook wasn&amp;#8217;t good, I had two rental properties and a condo that I didn&amp;#8217;t know how I was going to pay for.  I was armed with only hope, ambition, [...]</description>
			<content:encoded><![CDATA[<div>It has been a year since <a href="http://www.emadibrahim.com/2008/03/20/i-quit/">I quit</a> my job and decided to go independent.  I didn&#8217;t know what I was going to do, the economic outlook wasn&#8217;t good, I had two rental properties and a condo that I didn&#8217;t know how I was going to pay for.  I was armed with only hope, ambition, credit cards and my fiancé&#8217;s love &amp; support.</div>
<div></div>
<div>The first three months, I toyed around with different and random ideas, I read lots of technical books and online material.  I learned a ton of stuff and in the process I launched an open source project called <a href="http://yonkly.com">Yonkly</a> that was written using Microsoft&#8217;s newest web framework &#8211; <a href="http://www.asp.net/mvc/">asp.net mvc</a>.</div>
<div></div>
<div>Yonkly was initially a Twitter clone, it was free and it was open source.  Feedback was positive for the most part and I kept getting requests for customization and installation.  One of my first clients was <a href="http://isweat.com">isweat.com</a> which was a custom version of Yonkly.  This was a good deal because I was getting paid to add more features to Yonkly as well as have a good reference client.  I was also lucky to have a great client <a href="http://www.ryanlee.com/">Ryan Lee</a> &#8211; who is just an all around great guy and pays on time &#8211; actually ahead of time.</div>
<div></div>
<div>
<div>I kept getting more praises on Yonkly and more requests for customization.  That&#8217;s when I thought to myself that there seem to be a market for this things.  It looks like people want to create their own Twitter-like website for whatever reason.  Some wanted to cultivate a community around a niche topic, some wanted to generate money with ads, some wanted to communicate/collaborate within a group/team/company.  Regardless of the reason, there seemed to be enough demand to take this to the next level.</div>
<div></div>
<div>I was confused (and still am) on which direction to go.  There was the WordPress direction &#8211; offer a free, open source, extensible platform à la wordpress.org with an accompanying free hosted version à la wordpress.com.  There was the Ning direction &#8211; offer a hosted, subscription-based product à la <a href="http://ning.com">Ning</a> that lets anyone create their own microblog with zero-friction.  I kept going back and forth and finally settled on a hybrid model that leans more to the ning model.  I still kept the open source version out there (albeit it is outdated).  I chose a subscription-based model because I was tired of all these eyeball-centered business models with ads as their only revenue.  I wanted to create a sustainable business that will generate predictable recurring revenue.  The result was the birth of the hosted version of Yonkly &#8211; currently at <a href="http://yonkly.com">yonkly.com</a>.</div>
<div></div>
<div>Similar to ning, Yonkly allows you to easily create a microblog by simply selecting a name and a url.  You can create soccermoms.yonkly.com and voila, you got yourself a Twitter-like website focused around soccer moms.  If this is a small community then you can set it up for free.  My first release had 3 plans priced at 25, 50 and 100, I quickly realized that these were ridiculously high prices.  I also realized that people like, no LOVE free stuff.  I quickly adapted by introducing a free plan and changing the prices to 5, 15 and 25 with even reduced prices for annual subscriptions.</div>
<div></div>
<div>The cool thing about Yonkly is its approach to white-labeling.  If you are a premium subscriber, you can create a site with your own domain, your own look and feel and with no mention of Yonkly anywhere.  Good examples of that is <a href="http://isweat.com">isweat.com</a> and <a href="http://blogpei.com">blogpei.com</a>.  Yonkly has come a long way and now has thousands of users and over 1600 networks hosted on it.  It is also profitable.  I know that is hard to believe in this day and age.  I am not rich off Yonkly (yet) and it won&#8217;t pay my mortgage BUT it pays for itself and then some.  I have some really big plans for Yonkly which I will discuss in a future post.</div>
<div></div>
<div>
<div>So that was the story of Yonkly thus far; about 3  or 4 months after I quit my job, I accidently :) signed a book deal with Wiley Wrox on ASP.NET MVC and Test Driven Development (TDD).  It has always been a dream of mine to write a book, so I was really excited.  I won&#8217;t get rich of the book but I think it is an excellent learning experience and a great résumé filler.  It forced me to get better about the book&#8217;s subject and to get better at writing in general.  It also made me appreciate the amount of work that goes into each book.</div>
<div></div>
<div>I thought it was going to be an easy task, I mean, all I have to do is write.  Right?  Wrong, that was so far from the truth.  I was cranking out an average of 3 pages a day &#8211; a mind numbingly slow rate.  It wasn&#8217;t consistent either.  Sometimes, I will write 15 pages in 3 hours and then spend 2 weeks writing the next 15.  Sometimes I also feel that I can talk about a specific topic for 20 pages and then 2 paragraphs in, I realize that I got nothing else to say.  It has been an interesting experience.  The good news is that I am pretty much done with the book now and it should be published by May.</div>
<div></div>
<div>In conclusion, a year after I quit my job here are the end results:</div>
<div></div>
<div><strong>Bad</strong>:</div>
<div>
<ul>
<li>Huge credit card debt</li>
<li>Possibility of foreclosure on rental properties</li>
<li>Zero financial security</li>
<li>No stable income</li>
<li>Unpredictable outcome</li>
</ul>
</div>
<div><strong>Good</strong>:</div>
<div>
<ul>
<li><a href="http://www.emadibrahim.com/category/yonkly/">Yonkly launched</a> &#8211; officially my first web 2.0 service built from scratch</li>
<li><a href="http://www.emadibrahim.com/category/mvc-book/">Wrote a book</a> &#8211; to be published soon by Wiley Wrox</li>
<li>Proposed to my girlfriend (Laura) &#8211; she said yes</li>
<li>Adopted a puppy.  His name is Mac, we also considered naming him Dot com, Google, C# and Web.</li>
</ul>
</div>
<p style="text-align: center"><a href="http://www.emadibrahim.com/wp-content/uploads/2009/03/001e089e-eac8-441a-a30c-c7c817aa016b.jpg"><img class="size-medium wp-image-604 aligncenter" title="001e089e-eac8-441a-a30c-c7c817aa016b" src="http://www.emadibrahim.com/wp-content/uploads/2009/03/001e089e-eac8-441a-a30c-c7c817aa016b-300x225.jpg" alt="001e089e-eac8-441a-a30c-c7c817aa016b" width="300" height="225" /></a></p>
<div>Overall, I am glad I quit my job.  Other than the fact that I am broke, I learned and accomplished a lot and ready to take Yonkly to the next level.</div>
<div></div>
<div>You can follow me on twitter at <a href="http://twitter.com/eibrahim">twitter.com/eibrahim</a> for more updates and to track the progress of Yonkly, check out the blog at <a href="http://blog.yonkly.com">blog.yonkly.com</a> or follow it at <a href="http://twitter.com/yonkly">twitter.com/yonkly</a>.</div>
</div>
</div>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/" rel="bookmark" title="Permanent Link: Startup &#8211; How To Build A Web 2.0 Business: The Risks" >Startup &#8211; How To Build A Web 2.0 Business: The Risks</a></span><div class="aizattos_related_posts_excerpt">If you have been reading along, I probably sound like a broken record, talking about how I quit my j...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/06/27/free-it-consultation-in-the-dc-metro-area/" rel="bookmark" title="Permanent Link: Free IT Consultation in the DC Metro Area" >Free IT Consultation in the DC Metro Area</a></span><div class="aizattos_related_posts_excerpt">I have been busy working on several things since I quit my job.&nbsp; Things like the open source tw...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" rel="bookmark" title="Permanent Link: Services Worth Paying For as a Startup" >Services Worth Paying For as a Startup</a></span><div class="aizattos_related_posts_excerpt">[Update: added crowdsound] If you have been reading my blog or following me on Twitter then you alre...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/20/i-quit/" rel="bookmark" title="Permanent Link: I quit" >I quit</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/20/the-ultimate-rejection-letter/" rel="bookmark" title="Permanent Link: The Ultimate Rejection Letter" >The Ultimate Rejection Letter</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/fzK7UyV2MkqXqQ3s9IlW_WLDPGQ/0/da"><img src="http://feedads.g.doubleclick.net/~a/fzK7UyV2MkqXqQ3s9IlW_WLDPGQ/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fzK7UyV2MkqXqQ3s9IlW_WLDPGQ/1/da"><img src="http://feedads.g.doubleclick.net/~a/fzK7UyV2MkqXqQ3s9IlW_WLDPGQ/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/sOe0m3_JVdY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/03/09/i-quit-1-year-anniversary/</feedburner:origLink></item>
		<item>
		<title>Yonkly in Top 25 Social Networks?</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/dZ6FF9Z9gUQ/</link>
		<comments>http://www.emadibrahim.com/2009/02/12/yonkly-in-top-25-social-networks/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 16:31:08 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Yonkly]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/02/12/yonkly-in-top-25-social-networks/</guid>
		<description>There is a blog post on compete.com&amp;#8217;s blog about the top 25 social networks.  As expected, Facebook is on top spot and Twitter has climbed to 3rd.  What is interesting to me though is the fact that Ning is number 12.  That validates Yonkly&amp;#8217;s business model and direction and as Twitter&amp;#8217;s popularity (and microblogs in [...]</description>
			<content:encoded><![CDATA[<p>There is a blog post on compete.com&#8217;s blog about the <a href="http://blog.compete.com/2009/02/09/facebook-myspace-twitter-social-network/">top 25 social networks</a>.  As expected, Facebook is on top spot and Twitter has climbed to 3rd.  What is interesting to me though is the fact that Ning is number 12.  That validates Yonkly&#8217;s business model and direction and as Twitter&#8217;s popularity (and microblogs in general) grow, so will Yonkly.</p>
<p>Yonkly offers a white-label platform that enables anyone and everyone to create a twitter-clone/microblog network for anything.  The same way Ning allows you to create a Facebook-clone/social network.  Just like Ning, Yonkly offers a hosted solution that is fully customizable.  For as little as 5 bucks a month, you have your own Twitter-clone that you don&#8217;t have to install, maintain or upgrade.  It just works.</p>
<blockquote><p>You can have your own look and feel (<a href="http://christtr.com">christtr.com</a>).</p>
<p>You can have your own domain (<a href="http://isweat.com">isweat.com</a>).</p>
<p>You can target any niche market (<a href="http://photographersjournal.yonkly.com">photographersjournal.com</a>).</p>
<p>You can even run your own advertising if you want and make some money (<a href="http://writezoo.com">writezoo.com</a>).</p>
<p>You can create private networks for your company, team, group or anything.</p>
<p>You can integrate with Flickr, Picasa and Twitter (more integration points coming soon).</p>
<p>There are ton more features, check out the tour <a href="http://yonkly.com/home/tour">over here</a>.</p></blockquote>
<p><a href="http://siteanalytics.compete.com/shoutem.com+buzzable.com+twingr.com+yonkly.com/?metric=uv"><img src="http://grapher.compete.com/shoutem.com+buzzable.com+twingr.com+yonkly.com_uv_460.png" alt="" /></a></p>
<p>It is very possible that <strong>one day Yonkly will be in the top 25 list</strong>.  In the meantime, why don&#8217;t you go create a free account and try it out at <a href="http://yonkly.com">yonkly.com</a></p>
<p>PS: Don&#8217;t want a hosted solution?  Prefer to host your own?  No problem, we are selling the source code, <a href="http://yonkly.com/buy">click here</a> for more info.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/" rel="bookmark" title="Permanent Link: Yonkly Making Progress" >Yonkly Making Progress</a></span><div class="aizattos_related_posts_excerpt">I have two reasons to celebrate.&#160; Yonkly's team has doubled in size.&#160; That is 200% growth....</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/09/startup-next-steps/" rel="bookmark" title="Permanent Link: Startup: Next Steps" >Startup: Next Steps</a></span><div class="aizattos_related_posts_excerpt">Yonkly has been out for a couple of months now and is doing very well.&#160; We have 1000+ networks ...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/06/24/yonkly-groups-and-new-look/" rel="bookmark" title="Permanent Link: Yonkly Groups and new Look" >Yonkly Groups and new Look</a></span><div class="aizattos_related_posts_excerpt">We finally got around to releasing a new version of yonkly.&nbsp; We have cleaned up the look and fe...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/" rel="bookmark" title="Permanent Link: Yonkly Source Code For Sale" >Yonkly Source Code For Sale</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/29/yonkly-source-code/" rel="bookmark" title="Permanent Link: Yonkly Source Code" >Yonkly Source Code</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/TwCAEiLtShN1rYBgcDNKAD5-bHY/0/da"><img src="http://feedads.g.doubleclick.net/~a/TwCAEiLtShN1rYBgcDNKAD5-bHY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/TwCAEiLtShN1rYBgcDNKAD5-bHY/1/da"><img src="http://feedads.g.doubleclick.net/~a/TwCAEiLtShN1rYBgcDNKAD5-bHY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/dZ6FF9Z9gUQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/02/12/yonkly-in-top-25-social-networks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/02/12/yonkly-in-top-25-social-networks/</feedburner:origLink></item>
		<item>
		<title>Services Worth Paying For as a Startup</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/30wDpqDWEeE/</link>
		<comments>http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 15:12:46 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Startup]]></category>
		<category><![CDATA[Yonkly]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/</guid>
		<description>[Update: added crowdsound] If you have been reading my blog or following me on Twitter then you already know that I quit my job almost a year ago and launched my first startup (Yonkly) a few months ago. The economy sucks, we are bootstrapped and doing whatever it takes to survive &amp;#8211; I hope that [...]</description>
			<content:encoded><![CDATA[<p><strong>[Update: added crowdsound]</strong></p>
<p>If you have been reading my blog or following me on <a href="http://twitter.com/eibrahim" target="_blank">Twitter</a> then you already know that <a href="http://www.emadibrahim.com/2008/03/20/i-quit/" target="_blank">I quit</a> my job almost a year ago and launched my first startup (<a href="http://yonkly.com" target="_blank">Yonkly</a>) a few months ago.</p>
<p>The economy sucks, we are bootstrapped and doing whatever it takes to survive &#8211; I hope that kid I stole the sandwich from will understand.&nbsp; As a startup, we need to cut the fat (not that there is any) and make sure we only pay for things we need (and no, you don&#8217;t need a subscription to Playboy).</p>
<p>I thought, I would come up with a list of online (and offline services) that are worth paying for.&nbsp; Feel free to leave a comment with links to services that you use and think are worth the money.</p>
<p><a href="https://www.freshbooks.com/subscribe.php?ref=fccf620d113202-1" target="_blank">FreshBooks</a>: A great way to track your time and invoice your clients (until your startup takes off).&nbsp; I am currently using their free plan but they have plans starting at $14/month</p>
<p><a href="http://www.basecampHQ.com/?referrer=EMADIBRAHIM" target="_blank">Basecamp</a>: Really easy project management on the web.&nbsp; They have a free version and plans start at $12/month</p>
<p><a href="http://www.dreamhost.com/r.cgi?307988" target="_blank">DreamHost</a>: A very affordable way to host your blogs and websites I must have over 30 websites hosted with them for a ridiculously low fee.&nbsp; It is so low, I want to pay extra with my bill (but I won&#8217;t).</p>
<p><a href="http://www.woothemes.com/amember/go.php?r=4773&amp;i=b0" target="_blank">WooThemes</a>: Impress your customers with a killer WordPress theme.&nbsp; These are some of the best themes I have seen anywhere.&nbsp; We are currently using it on the Yonkly blog.</p>
<p><a href="http://animoto.com/?ref=qokbczwn" target="_blank">Animoto</a>: So you have decided to raise some money and want to create an interesting video to put on your homepage.&nbsp; Unfortunately you are as artistically talented as box of donuts (no offense Krispy Kream).&nbsp; This is a killer way to create a video, go and try it out, you can create a 30 second video for free.&nbsp; Here is the video I created for Yonkly, it took me less than 30 minutes. </p>
</p>
<div class="wlWriterSmartContent" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:d484b9f2-e7b1-4b9d-9813-4d94be1ec9e0" style="padding-right: 0px; display: inline; padding-left: 0px; padding-bottom: 0px; margin: 0px; padding-top: 0px">
<div id="3db2f756-1e2b-4356-8803-50fab0a4028c" style="margin: 0px; padding: 0px; display: inline;">
<div><a href="http://www.youtube.com/watch?v=AcgZH3lzrBM" target="_new"><img src="http://www.emadibrahim.com/wp-content/uploads/2009/01/videoadd0c0084261.jpg" galleryimg="no" onload="var downlevelDiv = document.getElementById('3db2f756-1e2b-4356-8803-50fab0a4028c'); downlevelDiv.innerHTML = &quot;&lt;div&gt;&lt;object width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;param name=\&quot;movie\&quot; value=\&quot;http://www.youtube.com/v/AcgZH3lzrBM\&quot;&gt;&lt;\/param&gt;&lt;param name=\&quot;wmode\&quot; value=\&quot;transparent\&quot;&gt;&lt;\/param&gt;&lt;embed src=\&quot;http://www.youtube.com/v/AcgZH3lzrBM\&quot; type=\&quot;application/x-shockwave-flash\&quot; wmode=\&quot;transparent\&quot; width=\&quot;425\&quot; height=\&quot;355\&quot;&gt;&lt;\/embed&gt;&lt;\/object&gt;&lt;\/div&gt;&quot;;" alt=""></a></div>
</div>
</div>
<p>&nbsp;</p>
<p><a href="http://www.angelsoft.net" target="_blank">Angelsoft.net</a>: Speaking of raising money, try this site.&nbsp; I signed up and paid $250 to have my application submitted to thousands of potential investors and investor groups.&nbsp; <strong>Warning: </strong>It has only been 3 days since I subscribed to it, so I don&#8217;t know how effective it is.&nbsp; I personally like the fact that I can reach so many investors very quickly it&#8217;s like monster.com for entrepreneurs/investors.&nbsp; But don&#8217;t get your hopes too high, only 5% get funded.&nbsp; Here are some stats <a title="http://angelsoft.net/industry/index.seam" href="http://angelsoft.net/industry/index.seam">http://angelsoft.net/industry/index.seam</a></p>
<p><a href="http://www.streamsend.com/291.html" target="_blank">StreamSend</a>: Now that you have 15 thousand people signed up to receive your newsletter announcing the grand opening (or closing) of your startup, you need a way to send bulk email.&nbsp; StreamSend is the cheapest I could find.&nbsp; Not that best, but the cheapest. </p>
<p><a href="www.rmilk.com" target="_blank">Remember The Milk</a> (RTM): Stay organized and productive with Remember The Milk.&nbsp; They are everywhere: on the web, on your iphone, in your gmail inbox, in your gmail calendar on your windows and mac desktop, in your iGoogle start page and even integrates with QuickSilver on the mac and Launchy on the pc.&nbsp; It&#8217;s free but I pay $25/year to use their iPhone app (that&#8217;s 25 a YEAR).&nbsp; One drawback: it doesn&#8217;t <a href="http://www.emadibrahim.com/2008/04/14/synchronize-outlook-tasks-with-remember-the-milk/" target="_blank">sync withOutlook</a>&nbsp;&nbsp; </p>
<p><a href="http://tinyurl.com/crygue" target="_blank">Amazon Prime</a>: If you are going to buy a ton of book to tell you how to market/sell/buy/start/ a business or how to work <a href="http://tinyurl.com/c4yft7" target="_blank">4 hours a week</a> and live your dream then you should subscribe to Amazon Prime.&nbsp; It gives you free shipping on pretty much everything at Amazon for $75 a year.</p>
<p><a href="http://aws.amazon.com/" target="_blank">Amazon Web Services</a>: The best way to reduce your bandwidth and online storage.&nbsp; I use S3, CloudFront, Elastic Compute Cloud and SimpleDB.&nbsp; I even created a <a href="http://www.sdbmanager.com/" target="_blank">SimpleDB manager</a>, which you should buy a copy of.&nbsp; Legend has it that for every copy sold a terrorist is captured.&nbsp; You don&#8217;t believe?&nbsp; I sold a copy the day John Walker (the terrorist not the drink) was captured.&nbsp; Coincidence?&nbsp; I don&#8217;t think so.</p>
<p><a href="http://www.joesgoals.com" target="_blank">Joe&#8217;s Goals</a>: Set some goals, track them and celebrate your achievements (or cry yourself to sleep, loser).&nbsp; It&#8217;s free, but you can pay $12/year to have the ads removed.&nbsp; I will take my ads now, please.</p>
<p><a href="http://www.crowdsound.com" target="_blank">CrowdSound</a>: A great way to collect user feedback.&nbsp; They have a free plan and plans starting at $10/month.&nbsp; Definitely worth the money.</p>
<p>And of course, the myriad of Google tools and services out there: <a href="http://docs.google.com" target="_blank">Docs</a>, <a href="http://calendar.google.com" target="_blank">Calendar</a>, <a href="http://gmail.com" target="_blank">Mail</a>, <a href="http://analytics.google.com" target="_blank">Analytics</a>, <a href="http://reader.google.com" target="_blank">Reader</a>.&nbsp; They are all free but you have to give up your soul to Google.&nbsp; But don&#8217;t worry, they will &#8220;do no evil&#8221;.&nbsp; Worst case, they will sell ads on your soul with SoulSense (still in beta).</p>
<p><strong>Please share with everyone services that you use and think are worth the money.</strong></p>
<p><strong>Hacker News</strong> users are stubborn and insist on commenting there.&nbsp; I can&#8217;t seem to convince them, so here is a link to their comments <a href="http://news.ycombinator.com/item?id=456422">http://news.ycombinator.com/item?id=456422</a></p>
<p><u>Disclaimer</u>: I am sure you noticed that most of the links have a referral code.&nbsp; Don&#8217;t worry, that didn&#8217;t affect my recommendations or integrity (what is that?).&nbsp; <u>I actually use all the services</u><strong> </strong>mentioned above.&nbsp; Plus we are bootstrapped and the economy is in the crapper so give me a break and use these links.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/" rel="bookmark" title="Permanent Link: Startup &#8211; How To Build A Web 2.0 Business: The Risks" >Startup &#8211; How To Build A Web 2.0 Business: The Risks</a></span><div class="aizattos_related_posts_excerpt">If you have been reading along, I probably sound like a broken record, talking about how I quit my j...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/06/14/how-much-is-your-domain-worth/" rel="bookmark" title="Permanent Link: How much is your domain worth?" >How much is your domain worth?</a></span><div class="aizattos_related_posts_excerpt">Check the price of your domain and how much you could potentially generate in advertising revenue at...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/09/startup-next-steps/" rel="bookmark" title="Permanent Link: Startup: Next Steps" >Startup: Next Steps</a></span><div class="aizattos_related_posts_excerpt">Yonkly has been out for a couple of months now and is doing very well.&#160; We have 1000+ networks ...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/26/downsizing-my-budget/" rel="bookmark" title="Permanent Link: Downsizing My Budget" >Downsizing My Budget</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/08/05/startup-asp-net-mvc-cloud-scale-deployment/" rel="bookmark" title="Permanent Link: Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment" >Startup &ndash; ASP.NET MVC, Cloud Scale &amp; Deployment</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/qLya5rOl-fD9_rwzuHKOuaOSFxw/0/da"><img src="http://feedads.g.doubleclick.net/~a/qLya5rOl-fD9_rwzuHKOuaOSFxw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/qLya5rOl-fD9_rwzuHKOuaOSFxw/1/da"><img src="http://feedads.g.doubleclick.net/~a/qLya5rOl-fD9_rwzuHKOuaOSFxw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/30wDpqDWEeE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/</feedburner:origLink></item>
		<item>
		<title>Testing Web Apps With Selenium, Explorer and .NET</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/DEPMNKtIVB8/</link>
		<comments>http://www.emadibrahim.com/2009/01/19/testing-web-app-with-selenium-explorer-and-net/#comments</comments>
		<pubDate>Mon, 19 Jan 2009 06:52:04 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[Web Dev]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/01/19/testing-web-app-with-selenium-explorer-and-net/</guid>
		<description>Here are the steps to run your Selenium tests against Internet Explorer. Create the tests Install Selenium IDE from http://seleniumhq.org Record your tests in Firefox using the Selenium IDE Click File &amp;#62; Create New Test Click the record button and create your test Click the record button to stop the test Save your test Click [...]</description>
			<content:encoded><![CDATA[<p>Here are the steps to run your Selenium tests against Internet Explorer.</p>
<h2>Create the tests</h2>
<ol>
<li>Install Selenium IDE from <a title="http://seleniumhq.org" href="http://seleniumhq.org">http://seleniumhq.org</a>
<li>Record your tests in Firefox using the Selenium IDE <br /><a href="http://www.emadibrahim.com/wp-content/uploads/2009/01/image.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="352" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/01/image-thumb.png" width="262" border="0"></a>
<li>Click File &gt; Create New Test
<li>Click the record button and create your test
<li>Click the record button to stop the test
<li>Save your test
<li>Click Options &gt; Format &gt; C# to get the C# code <br /><a href="http://www.emadibrahim.com/wp-content/uploads/2009/01/image1.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="452" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/01/image-thumb1.png" width="463" border="0"></a> </li>
</ol>
<h2>Setup Selenium Remote Control (RC)</h2>
<ol>
<li>Download Selenium RC (it includes the server and all necessary files)
<li>Start the server by running selenium-server.jar in the selenium-server folder
<ol>
<li>You can double click it, or
<li>Open a command prompt and type: <br /><em>java -jar selenium-server.jar</em> </li>
</ol>
</li>
</ol>
<h2>Run the tests</h2>
<ol>
<li>Create a new class library project in Visual Studio.
<li>Reference the assemblies in the selenium RC folder related to .net
<li>Paste the generated code from step #7 above into a class file
<li>To test Internet Explorer, change the setup method to this <br /> 
<div>
<pre style="padding-right: 0px; padding-left: 0px; font-size: 8pt; padding-bottom: 0px; margin: 0em; overflow: visible; width: 100%; color: black; border-top-style: none; line-height: 12pt; padding-top: 0px; font-family: consolas, 'Courier New', courier, monospace; border-right-style: none; border-left-style: none; background-color: #f4f4f4; border-bottom-style: none">[SetUp]
<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> SetupTest()
{
    selenium = <span style="color: #0000ff">new</span> DefaultSelenium(<span style="color: #006080">"localhost"</span>, 4444, <span style="color: #006080">"*iexplore"</span>,
                                    <span style="color: #006080">"http://www.mywebsite.com/"</span>);
    selenium.Start();
    verificationErrors = <span style="color: #0000ff">new</span> StringBuilder();
}</pre>
</div>
<li>Run the tests with your favorite Runner &#8211; I use ReSharper </li>
</ol>
<p>A Selenium Core window opens up as well as an IE window and your tests will run.</p>
<p><a href="http://www.emadibrahim.com/wp-content/uploads/2009/01/image2.png"><img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="218" alt="image" src="http://www.emadibrahim.com/wp-content/uploads/2009/01/image-thumb2.png" width="515" border="0"></a> </p>
<p>Jeremy blogged something very similar to this at <a title="http://codebetter.com/blogs/jeremy.miller/archive/2006/05/14/144666.aspx" href="http://codebetter.com/blogs/jeremy.miller/archive/2006/05/14/144666.aspx">http://codebetter.com/blogs/jeremy.miller/archive/2006/05/14/144666.aspx</a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/08/08/software-virtualization/" rel="bookmark" title="Permanent Link: Software Virtualization" >Software Virtualization</a></span><div class="aizattos_related_posts_excerpt">&nbsp; Look ma, no virtualisation window: at Tech.Ed Australia today, Microsoft showed its new "Soft...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/25/web-design-toolbox/" rel="bookmark" title="Permanent Link: Web Design Toolbox" >Web Design Toolbox</a></span><div class="aizattos_related_posts_excerpt">Here is an excellent post with tons of links to all sort of web design sites, tools, resources, etc....</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/08/01/smartsniff-freeware-packet-sniffer-2/" rel="bookmark" title="Permanent Link: SmartSniff: Freeware Packet Sniffer" >SmartSniff: Freeware Packet Sniffer</a></span><div class="aizattos_related_posts_excerpt">&nbsp; SmartSniff: Freeware Packet Sniffer - Capture TCP/IP packets on your network adapter  here is...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/09/24/free-icons-and-images/" rel="bookmark" title="Permanent Link: Free Icons and Images" >Free Icons and Images</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/08/10/the-best-javascript-library/" rel="bookmark" title="Permanent Link: The Best JavaScript Library" >The Best JavaScript Library</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/CCLiwn_yWD8Qn8_XP9nh5WDacd0/0/da"><img src="http://feedads.g.doubleclick.net/~a/CCLiwn_yWD8Qn8_XP9nh5WDacd0/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CCLiwn_yWD8Qn8_XP9nh5WDacd0/1/da"><img src="http://feedads.g.doubleclick.net/~a/CCLiwn_yWD8Qn8_XP9nh5WDacd0/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/DEPMNKtIVB8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/01/19/testing-web-app-with-selenium-explorer-and-net/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/01/19/testing-web-app-with-selenium-explorer-and-net/</feedburner:origLink></item>
		<item>
		<title>Startup: Next Steps</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/38NoeKZyxg4/</link>
		<comments>http://www.emadibrahim.com/2009/01/09/startup-next-steps/#comments</comments>
		<pubDate>Fri, 09 Jan 2009 17:12:32 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Startup]]></category>
		<category><![CDATA[Yonkly]]></category>
		<category><![CDATA[Lifestyle]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/01/09/startup-next-steps/</guid>
		<description>Yonkly has been out for a couple of months now and is doing very well.&amp;#160; We have 1000+ networks already created in every category imaginable from law to physical training to photography to religion &amp;#8211; even an adult network. We have subscription plans and currently offering a discounted annual subscription* to celebrate the new year.&amp;#160; [...]</description>
			<content:encoded><![CDATA[<p>Yonkly has been out for a couple of months now and is doing very well.&#160; We have 1000+ networks already created in every category imaginable from law to physical training to photography to religion &#8211; even an adult network.</p>
<p>We have <a href="http://yonkly.com/home/plans" target="_blank">subscription plans</a> and currently offering a discounted annual subscription* to celebrate the new year.&#160; For the technically-savvy, we even have the <a href="http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/" target="_blank">source code up for sale</a> .</p>
<h2>What Next?</h2>
<p>We have been contemplating the next step in our startup and want to hear your take on it.</p>
<p>Should we look for funding?&#160; Angel investors? VCs? Friends and Family?</p>
<p>If yes, then how much and in return for what?</p>
<p>If no, then why and what are the other options?</p>
<p>Do we sell?&#160; How much? How and to who?</p>
<h2>The Dream</h2>
<p>We are a dedicated and highly motivated team of entrepreneurs that want to achieve a 4HWW lifestyle and not work ourselves to the grave.&#160; With that in mind is getting investors a good idea?</p>
<h2>Exit: A Good Outcome</h2>
<p>We think the best outcome for us is having enough paid subscribers to pay our bills and more.&#160; A second best outcome is to sell the company and use the money to fund our next idea &#8211; we have a ton of ideas and lots of talent (that sounds conceited).&#160; Third outcome is to get funding so we can aggressively develop, market and grow the company.</p>
<p><strong>What do you think and why?</strong></p>
<p>* Discounted annual subscriptions of up to 33% off.&#160; <a href="http://yonkly.com" target="_blank">Create your network</a>, go to the admin control panel and click subscriptions.&#160;&#160; This is a limited-time offer, so if you don&#8217;t see it there, it probably expired.</p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/05/09/startup-how-to-build-a-web-20-business-the-risks/" rel="bookmark" title="Permanent Link: Startup &#8211; How To Build A Web 2.0 Business: The Risks" >Startup &#8211; How To Build A Web 2.0 Business: The Risks</a></span><div class="aizattos_related_posts_excerpt">If you have been reading along, I probably sound like a broken record, talking about how I quit my j...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/25/ruby-on-rails-for-a-net-developer/" rel="bookmark" title="Permanent Link: Ruby on Rails for a .NET Developer &#8211; Part 1" >Ruby on Rails for a .NET Developer &#8211; Part 1</a></span><div class="aizattos_related_posts_excerpt">Looking at my blog or resume, you will immediately know that I am a .net developer and my entire pro...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" rel="bookmark" title="Permanent Link: Services Worth Paying For as a Startup" >Services Worth Paying For as a Startup</a></span><div class="aizattos_related_posts_excerpt">[Update: added crowdsound] If you have been reading my blog or following me on Twitter then you alre...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/02/14/silverlight-tip-reverse-your-animation/" rel="bookmark" title="Permanent Link: Silverlight Tip &#8211; Reverse your animation" >Silverlight Tip &#8211; Reverse your animation</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/24/laser-sharp-focus/" rel="bookmark" title="Permanent Link: Laser-Sharp Focus" >Laser-Sharp Focus</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/4TApMkmfYSAPhpuiPSd8yF8_7kk/0/da"><img src="http://feedads.g.doubleclick.net/~a/4TApMkmfYSAPhpuiPSd8yF8_7kk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4TApMkmfYSAPhpuiPSd8yF8_7kk/1/da"><img src="http://feedads.g.doubleclick.net/~a/4TApMkmfYSAPhpuiPSd8yF8_7kk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/38NoeKZyxg4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/01/09/startup-next-steps/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/01/09/startup-next-steps/</feedburner:origLink></item>
		<item>
		<title>Yonkly Source Code For Sale</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/E0JcJTQkK3A/</link>
		<comments>http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/#comments</comments>
		<pubDate>Thu, 08 Jan 2009 13:57:39 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[Yonkly]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/</guid>
		<description>You can now buy the best twitter-clone software out there complete with full source code for your customization pleasures. Buy it now at http://yonkly.com/buy Includes Flexible license &amp;#8211; deploy up to 2 domains and 10 sub-domains Make any changes you want Community support through forums No copyright required One time payment Advanced control panel Groups [...]</description>
			<content:encoded><![CDATA[<p>You can now buy the best twitter-clone software out there complete with full source code for your customization pleasures.</p>
<p>Buy it now at <a href="http://yonkly.com/buy">http://yonkly.com/buy</a></p>
<h2>Includes</h2>
<ul>
<li>Flexible license &#8211; deploy up to <strong>2 domains</strong> and <strong>10 sub-domains</strong> </li>
<li>Make any changes you want </li>
<li>Community support through forums </li>
<li>No copyright required</li>
<li>One time payment</li>
<li>Advanced control panel </li>
<li>Groups </li>
<li>Picture sharing </li>
<li>Sidebar widgets </li>
<li>Run your own ads </li>
<li>Use your own domain </li>
<li>Threaded conversations </li>
<li>Twitter integration</li>
</ul>
<p>For more information visit <a href="http://yonkly.com/buy">http://yonkly.com/buy</a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/09/startup-next-steps/" rel="bookmark" title="Permanent Link: Startup: Next Steps" >Startup: Next Steps</a></span><div class="aizattos_related_posts_excerpt">Yonkly has been out for a couple of months now and is doing very well.&#160; We have 1000+ networks ...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/29/yonkly-source-code/" rel="bookmark" title="Permanent Link: Yonkly Source Code" >Yonkly Source Code</a></span><div class="aizattos_related_posts_excerpt">[UPDATE] Source code is now available in codeplex at http://www.codeplex.com/yonkly

I apologize f...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/09/yonkly-updated-05092008/" rel="bookmark" title="Permanent Link: Yonkly: Updated 05/09/2008" >Yonkly: Updated 05/09/2008</a></span><div class="aizattos_related_posts_excerpt">[update: Yonkly source code is now public]

We just released a new updated version younkly that is...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/" rel="bookmark" title="Permanent Link: Yonkly Making Progress" >Yonkly Making Progress</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/04/11/yonkly-open-source-twitter/" rel="bookmark" title="Permanent Link: Yonkly &#8211; Open Source Twitter" >Yonkly &#8211; Open Source Twitter</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/feYnjRtYnhf98wc3Ej-R4hB-RIE/0/da"><img src="http://feedads.g.doubleclick.net/~a/feYnjRtYnhf98wc3Ej-R4hB-RIE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/feYnjRtYnhf98wc3Ej-R4hB-RIE/1/da"><img src="http://feedads.g.doubleclick.net/~a/feYnjRtYnhf98wc3Ej-R4hB-RIE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/E0JcJTQkK3A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/</feedburner:origLink></item>
		<item>
		<title>A GUI for Amazon SimpleDb – SimpleDb Manager</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/5UKb1vYn6RQ/</link>
		<comments>http://www.emadibrahim.com/2008/12/22/a-gui-for-amazon-simpledb-simpledb-manager/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 15:24:35 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Random]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2008/12/22/a-gui-for-amazon-simpledb-simpledb-manager/</guid>
		<description>I just released a new software called SimpleDb Manager for managing your SimpleDb databases.&amp;#160; You can get it form www.sdbmanager.com and try it free for 30 days.&amp;#160; Since it is still in beta, I have reduced the price to $19.99 but only for a LIMITED time.&amp;#160; The price will go up as soon as the [...]</description>
			<content:encoded><![CDATA[<p>I just released a new software called SimpleDb Manager for managing your SimpleDb databases.&#160; You can get it form <a href="http://www.sdbmanager.com">www.sdbmanager.com</a> and try it free for 30 days.&#160; </p>
<p>Since it is still in beta, I have reduced the price to $19.99 but only for a LIMITED time.&#160; The price will go up as soon as the bugs are ironed out and we get out of beta (very soon).</p>
<p>So what can SimpleDb Manager do for you?</p>
<ul>
<li>Create and delete domains </li>
<li>Edit-In-Place item attributes (select the cell and start typing or hit F2 to edit) </li>
<li>Delete items (select row and hit the delete button) </li>
<li>Delete attributes (edit cell and delete its content) </li>
<li>Add new items (just start typing in the last row) </li>
<li>Execute queries (type query in query box and click the execute button) </li>
<li>Save connection information for easy management of multiple accounts</li>
</ul>
<p>There are a ton <strong>more features coming</strong>, so stay tuned.</p>
<p><font size="4"><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&amp;hosted_button_id=1933588" target="_blank">Get SimpleDb Manager NOW before the price goes up &#8211; I am serious.</a></font></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/29/services-worth-paying-for-as-a-startup/" rel="bookmark" title="Permanent Link: Services Worth Paying For as a Startup" >Services Worth Paying For as a Startup</a></span><div class="aizattos_related_posts_excerpt">[Update: added crowdsound] If you have been reading my blog or following me on Twitter then you alre...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/07/14/visual-studio-window-manager/" rel="bookmark" title="Permanent Link: Visual Studio Window Manager" >Visual Studio Window Manager</a></span><div class="aizattos_related_posts_excerpt">This is a great productivity plugin and time saver…  Have you ever wanted to have different window...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/04/04/amazon-context-links/" rel="bookmark" title="Permanent Link: Amazon Context Links" >Amazon Context Links</a></span><div class="aizattos_related_posts_excerpt">I just installed the amazon.com context links plugin and this post is to test it.  Let's see if it h...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/06/08/failed-to-generate-a-user-instance-of-sql-server-due-to-a-failure-in-starting-the-process-for-the-user-instance-the-connection-will-be-closed/" rel="bookmark" title="Permanent Link: Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed." >Failed to generate a user instance of SQL Server due to a failure in starting the process for the user instance. The connection will be closed.</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2007/08/13/iphoto-08-and-iptc/" rel="bookmark" title="Permanent Link: iPhoto &#8217;08 and IPTC" >iPhoto &#8217;08 and IPTC</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/WHGaI09ClqlOZvZzNVFJCKkjWEk/0/da"><img src="http://feedads.g.doubleclick.net/~a/WHGaI09ClqlOZvZzNVFJCKkjWEk/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/WHGaI09ClqlOZvZzNVFJCKkjWEk/1/da"><img src="http://feedads.g.doubleclick.net/~a/WHGaI09ClqlOZvZzNVFJCKkjWEk/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/5UKb1vYn6RQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2008/12/22/a-gui-for-amazon-simpledb-simpledb-manager/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2008/12/22/a-gui-for-amazon-simpledb-simpledb-manager/</feedburner:origLink></item>
		<item>
		<title>Yonkly Making Progress</title>
		<link>http://feedproxy.google.com/~r/EmadIbrahim/~3/vyxFqXvicLg/</link>
		<comments>http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/#comments</comments>
		<pubDate>Tue, 11 Nov 2008 03:43:19 +0000</pubDate>
		<dc:creator>Emad Ibrahim</dc:creator>
				<category><![CDATA[Yonkly]]></category>

		<guid isPermaLink="false">http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/</guid>
		<description>I have two reasons to celebrate.&amp;#160; Yonkly&amp;#8217;s team has doubled in size.&amp;#160; That is 200% growth.&amp;#160; Yes, we are two people now.&amp;#160; Scott Scheper has joined Yonkly and will be bringing a whole lot of experience, strategic planning, vision, direction and eventually a lot of money. The second reason to celebrate: we finally popped the [...]</description>
			<content:encoded><![CDATA[<p>I have two reasons to celebrate.&#160; Yonkly&#8217;s team has doubled in size.&#160; That is 200% growth.&#160; Yes, we are two people now.&#160; Scott Scheper has joined Yonkly and will be<a href="http://www.emadibrahim.com/wp-content/uploads/2008/11/champagne.jpg"><img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="191" alt="champagne" src="http://www.emadibrahim.com/wp-content/uploads/2008/11/champagne-thumb.jpg" width="244" align="right" border="0" /></a> bringing a whole lot of experience, strategic planning, vision, direction and eventually a lot of money.</p>
<p>The second reason to celebrate: we finally popped the cherry and sold our first enterprise copy of Yonkly (<a href="http://about.yonkly.com">http://about.yonkly.com</a>).&#160;&#160; Now, we just have to do it again a few thousand times.</p>
<p>Yonkly is now in private beta, but you can signup for an invitation at <a href="http://about.yonkly.com/">http://about.yonkly.com/</a>.&#160; It will be coming out shortly and it will be kicking some ass.&#160; If you can&#8217;t wait, you can always buy the latest version with source code for $399, go to <a href="http://about.yonkly.com/">http://about.yonkly.com/</a> enter your email and you will receive instructions.</p>
<p>You can follow Yonkly&#8217;s progress on our new blog at <a href="http://blog.yonkly.com">http://blog.yonkly.com</a> (it&#8217;s a work in progress).&#160; You can also follow us on twitter at <a href="http://twitter.com/yonkly">http://twitter.com/yonkly</a>&#160;</p>
<p>Back to work, we have got a lot to do and not enough time.</p>
<p>Also, don&#8217;t for get to check Scott&#8217;s blog is <a href="http://scottdig.com/">http://scottdig.com/</a></p>
<div class="aizattos_related_posts"><span class="aizattos_related_posts_header" >Related Posts</span><ul><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/05/29/yonkly-source-code/" rel="bookmark" title="Permanent Link: Yonkly Source Code" >Yonkly Source Code</a></span><div class="aizattos_related_posts_excerpt">[UPDATE] Source code is now available in codeplex at http://www.codeplex.com/yonkly

I apologize f...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/01/08/yonkly-source-code-for-sale/" rel="bookmark" title="Permanent Link: Yonkly Source Code For Sale" >Yonkly Source Code For Sale</a></span><div class="aizattos_related_posts_excerpt">You can now buy the best twitter-clone software out there complete with full source code for your cu...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2009/02/12/yonkly-in-top-25-social-networks/" rel="bookmark" title="Permanent Link: Yonkly in Top 25 Social Networks?" >Yonkly in Top 25 Social Networks?</a></span><div class="aizattos_related_posts_excerpt">There is a blog post on compete.com's blog about the top 25 social networks.  As expected, Facebook...</div></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/06/24/yonkly-groups-and-new-look/" rel="bookmark" title="Permanent Link: Yonkly Groups and new Look" >Yonkly Groups and new Look</a></span></li><li><span class="aizattos_related_posts_title"><a href="http://www.emadibrahim.com/2008/03/20/i-quit/" rel="bookmark" title="Permanent Link: I quit" >I quit</a></span></li></ul></div>
<p><a href="http://feedads.g.doubleclick.net/~a/6M9I2qybaPVNiV-4eWi9QIOYFpE/0/da"><img src="http://feedads.g.doubleclick.net/~a/6M9I2qybaPVNiV-4eWi9QIOYFpE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/6M9I2qybaPVNiV-4eWi9QIOYFpE/1/da"><img src="http://feedads.g.doubleclick.net/~a/6M9I2qybaPVNiV-4eWi9QIOYFpE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/EmadIbrahim/~4/vyxFqXvicLg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.emadibrahim.com/2008/11/10/yonkly-making-progress/</feedburner:origLink></item>
	</channel>
</rss><!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
