<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9216109971576658448</id><updated>2011-11-27T15:39:35.577-08:00</updated><category term='Steve Yegge'/><category term='C#'/><category term='Sorting'/><category term='Yande'/><category term='Agile'/><category term='Family'/><category term='Google environment'/><category term='Parenting'/><category term='Pictures'/><category term='Opera'/><category term='Dependencies'/><category term='Topological'/><category term='New Dad'/><category term='Enum'/><category term='Cyclic'/><category term='Random Date'/><category term='Memory consumption'/><category term='kobe'/><category term='asp.net mvc'/><category term='FireFox'/><title type='text'>Tawani's Blog Rants</title><subtitle type='html'>Tips on programming, software design and anything that comes to mind</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-8538773952077695208</id><published>2011-09-13T10:58:00.001-07:00</published><updated>2011-09-13T10:58:55.358-07:00</updated><title type='text'>Hoerdt</title><content type='html'>&lt;div style="margin: 0 0 10px 0; padding: 0; font-size: 0.8em; line-height: 1.6em;"&gt;&lt;a href="http://www.flickr.com/photos/92251022@N00/6144188241/" title="Hoerdt"&gt;&lt;img src="http://farm7.static.flickr.com/6165/6144188241_e059bc5ee8.jpg" alt="Hoerdt by still tippin'" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;span style="margin: 0;"&gt;&lt;a href="http://www.flickr.com/photos/92251022@N00/6144188241/"&gt;Hoerdt&lt;/a&gt;, a photo by &lt;a href="http://www.flickr.com/photos/92251022@N00/"&gt;still tippin'&lt;/a&gt; on Flickr.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;Hoerdt&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-8538773952077695208?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/8538773952077695208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=8538773952077695208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8538773952077695208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8538773952077695208'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2011/09/hoerdt.html' title='Hoerdt'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm7.static.flickr.com/6165/6144188241_e059bc5ee8_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4968795889873361030</id><published>2009-10-09T13:12:00.000-07:00</published><updated>2009-10-09T13:14:20.715-07:00</updated><title type='text'>Health Care Debate Analysis</title><content type='html'>Just read one of the best analogy to the Health Care debate: &lt;a href="http://substitute.livejournal.com/1922188.html"&gt;Who is my neighbor? A lesson from the Fire Department.&lt;/a&gt;&lt;br /&gt;&lt;a href="http://substitute.livejournal.com/1922188.html"&gt;http://substitute.livejournal.com/1922188.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4968795889873361030?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4968795889873361030/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4968795889873361030' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4968795889873361030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4968795889873361030'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2009/10/health-care-debate-analysis.html' title='Health Care Debate Analysis'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-7796164090763624301</id><published>2009-04-17T07:21:00.000-07:00</published><updated>2009-04-17T07:31:14.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kobe'/><category scheme='http://www.blogger.com/atom/ns#' term='asp.net mvc'/><title type='text'>Kobe  - A true "Worst Practices" ASP.NET MVC Example</title><content type='html'>I never comment about such things but after reading going through Kobe, I believe Microsoft has finally put out a true "Worst Practices" and "How-not-to" develop an ASP.NET MVC application. Check out these detailed analysis:&lt;br /&gt;&lt;br /&gt;High level overiview by Karl Seguin : &lt;a href="http://codebetter.com/blogs/karlseguin/archive/2009/04/16/kobe-oh-dead-lord-why.aspx"&gt;Kobe - Oh Dear Lord Why?!&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Low level analysis by Ayende Rahien : &lt;a href="http://ayende.com/Blog/archive/2009/04/17/kobe-ndash-in-the-nuts-amp-bolts-and-donrsquot-really.aspx"&gt;Kobe – In the nuts &amp; bolts and don’t really liking it&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is nothing worse for a coding newbie than to be mislead with such ridiculous "sample reference application" especially from Microsoft.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-7796164090763624301?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/7796164090763624301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=7796164090763624301' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7796164090763624301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7796164090763624301'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2009/04/kobe-true-worst-practices-aspnet-mvc.html' title='Kobe  - A true &quot;Worst Practices&quot; ASP.NET MVC Example'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4245746694035938174</id><published>2009-02-18T12:54:00.000-08:00</published><updated>2009-02-20T12:08:25.196-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sorting'/><category scheme='http://www.blogger.com/atom/ns#' term='Dependencies'/><category scheme='http://www.blogger.com/atom/ns#' term='Cyclic'/><category scheme='http://www.blogger.com/atom/ns#' term='Topological'/><title type='text'>Topological Sorting and Cyclic Dependencies</title><content type='html'>Recently I needed to re-arrange items in an array based on its dependencies? and also detect any cyclic dependency. To be more clear, consider the following:&lt;br /&gt;&lt;br /&gt;Given the type:&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;class Field&lt;br /&gt;{&lt;br /&gt;    public string Name{get;set;}&lt;br /&gt;    public string[] DependsOn{get;set;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Let's say I have an array of Field items:&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;List&amp;lt;Field&gt; fields = new List&amp;lt;Field&gt;();&lt;br /&gt;fields.Add(new Field() { Name = "FirstName" });&lt;br /&gt;fields.Add(new Field() { Name = "FullName",&lt;br /&gt;    DependsOn = new[] {"FirstName","LastName"}});&lt;br /&gt;fields.Add(new Field() { Name = "Age",&lt;br /&gt;    DependsOn = new[] { "DateOfBirth" } });&lt;br /&gt;fields.Add(new Field() { Name = "LastName" });&lt;br /&gt;fields.Add(new Field() { Name = "DateOfBirth" });&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;So clearly we get our items in the following order:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;FirstName&lt;/li&gt;&lt;li&gt;FullName&lt;/li&gt;&lt;li&gt;Age&lt;/li&gt;&lt;li&gt;LastName&lt;/li&gt;&lt;li&gt;DateOfBirth&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;First question:&lt;/strong&gt; What is the best way to re-arrange the items in my list/array so that dependent columns (FullName &amp;amp; Age) are placed after the columns they depend on i.e. something like this:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;FirstName&lt;/li&gt;&lt;li&gt;LastName&lt;/li&gt;&lt;li&gt;FullName&lt;/li&gt;&lt;li&gt;DateOfBirth&lt;/li&gt;&lt;li&gt;Age&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;So fields like Age always come after DateOfBirth which it depends on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Second question:&lt;/strong&gt; How do you detect cyclic dependencies? i.e. when&lt;br /&gt;&lt;code&gt;Field1&lt;/code&gt; depends on &lt;code&gt;Field2&lt;/code&gt; and&lt;br /&gt;&lt;code&gt;Field2&lt;/code&gt; depends on &lt;code&gt;Field3&lt;/code&gt; and&lt;br /&gt;&lt;code&gt;Field3&lt;/code&gt; depends on &lt;code&gt;Field1&lt;/code&gt;&lt;br /&gt;So we don't get caught in a circle.&lt;br /&gt;&lt;br /&gt;The solution will be to sort the fields in topological order. Below is the C# sample code I adopted from the &lt;i&gt;Java&lt;/i&gt; version found at: &lt;a href="http://www.java2s.com/Code/Java/Collections-Data-Structure/Topologicalsorting.htm"&gt;http://www.java2s.com/Code/Java/Collections-Data-Structure/Topologicalsorting.htm&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;class TopologicalSorter&lt;br /&gt;{&lt;br /&gt;    #region - Private Members -&lt;br /&gt;&lt;br /&gt;    private readonly int[] _vertices; // list of vertices&lt;br /&gt;    private readonly int[,] _matrix; // adjacency matrix&lt;br /&gt;    private int _numVerts; // current number of vertices&lt;br /&gt;    private readonly int[] _sortedArray;&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    #region - CTors -&lt;br /&gt;&lt;br /&gt;    public TopologicalSorter(int size)&lt;br /&gt;    {&lt;br /&gt;        _vertices = new int[size];&lt;br /&gt;        _matrix = new int[size, size];&lt;br /&gt;        _numVerts = 0;&lt;br /&gt;        for (int i = 0; i &lt; size; i++)&lt;br /&gt;            for (int j = 0; j &lt; size; j++)&lt;br /&gt;                _matrix[i, j] = 0;&lt;br /&gt;        _sortedArray = new int[size]; // sorted vert labels&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    #region - Public Methods -&lt;br /&gt;&lt;br /&gt;    public int AddVertex(int vertex)&lt;br /&gt;    {&lt;br /&gt;        _vertices[_numVerts++] = vertex;&lt;br /&gt;        return _numVerts - 1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void AddEdge(int start, int end)&lt;br /&gt;    {&lt;br /&gt;        _matrix[start, end] = 1;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public int[] Sort() // toplogical sort&lt;br /&gt;    {&lt;br /&gt;        while (_numVerts &gt; 0) // while vertices remain,&lt;br /&gt;        {&lt;br /&gt;            // get a vertex with no successors, or -1&lt;br /&gt;            int currentVertex = noSuccessors();&lt;br /&gt;            if (currentVertex == -1) // must be a cycle                &lt;br /&gt;                throw new Exception("Graph has cycles");&lt;br /&gt;&lt;br /&gt;            // insert vertex label in sorted array (start at end)&lt;br /&gt;            _sortedArray[_numVerts - 1] = _vertices[currentVertex];&lt;br /&gt;&lt;br /&gt;            deleteVertex(currentVertex); // delete vertex&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        // vertices all gone; return sortedArray&lt;br /&gt;        return _sortedArray;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;&lt;br /&gt;    #region - Private Helper Methods -&lt;br /&gt;&lt;br /&gt;    // returns vert with no successors (or -1 if no such verts)&lt;br /&gt;    private int noSuccessors()&lt;br /&gt;    {&lt;br /&gt;        for (int row = 0; row &lt; _numVerts; row++)&lt;br /&gt;        {&lt;br /&gt;            bool isEdge = false; // edge from row to column in adjMat&lt;br /&gt;            for (int col = 0; col &lt; _numVerts; col++)&lt;br /&gt;            {&lt;br /&gt;                if (_matrix[row, col] &gt; 0) // if edge to another,&lt;br /&gt;                {&lt;br /&gt;                    isEdge = true;&lt;br /&gt;                    break; // this vertex has a successor try another&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;            if (!isEdge) // if no edges, has no successors&lt;br /&gt;                return row;&lt;br /&gt;        }&lt;br /&gt;        return -1; // no&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void deleteVertex(int delVert)&lt;br /&gt;    {&lt;br /&gt;        // if not last vertex, delete from vertexList&lt;br /&gt;        if (delVert != _numVerts - 1)&lt;br /&gt;        {&lt;br /&gt;            for (int j = delVert; j &lt; _numVerts - 1; j++)&lt;br /&gt;                _vertices[j] = _vertices[j + 1];&lt;br /&gt;&lt;br /&gt;            for (int row = delVert; row &lt; _numVerts - 1; row++)&lt;br /&gt;                moveRowUp(row, _numVerts);&lt;br /&gt;&lt;br /&gt;            for (int col = delVert; col &lt; _numVerts - 1; col++)&lt;br /&gt;                moveColLeft(col, _numVerts - 1);&lt;br /&gt;        }&lt;br /&gt;        _numVerts--; // one less vertex&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void moveRowUp(int row, int length)&lt;br /&gt;    {&lt;br /&gt;        for (int col = 0; col &lt; length; col++)&lt;br /&gt;            _matrix[row, col] = _matrix[row + 1, col];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void moveColLeft(int col, int length)&lt;br /&gt;    {&lt;br /&gt;        for (int row = 0; row &lt; length; row++)&lt;br /&gt;            _matrix[row, col] = _matrix[row, col + 1];&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    #endregion&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So we can then test our code using something as below:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;class Program&lt;br /&gt;{&lt;br /&gt;    public static void Main (string[] args)&lt;br /&gt;    {&lt;br /&gt;        List&amp;lt;Field&gt; fields = new List&amp;lt;Field&gt;();&lt;br /&gt;        fields.Add(new Field() { Name = "FirstName" });&lt;br /&gt;        fields.Add(new Field()&lt;br /&gt;        {&lt;br /&gt;            Name = "FullName",&lt;br /&gt;            DependsOn = new[] { "FirstName", "LastName" }&lt;br /&gt;        });&lt;br /&gt;        fields.Add(new Field()&lt;br /&gt;        {&lt;br /&gt;            Name = "Age",&lt;br /&gt;            DependsOn = new[] { "DateOfBirth" }&lt;br /&gt;        });&lt;br /&gt;        fields.Add(new Field() { Name = "LastName" });&lt;br /&gt;        fields.Add(new Field() { Name = "DateOfBirth" });&lt;br /&gt;&lt;br /&gt;        foreach (var field in fields)&lt;br /&gt;        {&lt;br /&gt;            Console.WriteLine(field.Name);&lt;br /&gt;            if(field.DependsOn != null)&lt;br /&gt;                foreach (var item in field.DependsOn)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(" -{0}",item);&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        Console.WriteLine("\n...Sorting...\n");&lt;br /&gt;&lt;br /&gt;        int[] sortOrder = getTopologicalSortOrder(fields);&lt;br /&gt;&lt;br /&gt;        for (int i = 0; i &lt; sortOrder.Length; i++)&lt;br /&gt;        {&lt;br /&gt;            var field = fields[sortOrder[i]];&lt;br /&gt;            Console.WriteLine(field.Name);&lt;br /&gt;            if (field.DependsOn != null)&lt;br /&gt;                foreach (var item in field.DependsOn)&lt;br /&gt;                {&lt;br /&gt;                    Console.WriteLine(" -{0}", item);&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private static int[] getTopologicalSortOrder(List&amp;lt;Field&gt; fields)&lt;br /&gt;    {&lt;br /&gt;        TopologicalSorter g = new TopologicalSorter(fields.Count);&lt;br /&gt;        Dictionary&amp;lt;string, int&gt; _indexes = new Dictionary&amp;lt;string, int&gt;();&lt;br /&gt;&lt;br /&gt;        //add vertices&lt;br /&gt;        for (int i = 0; i &lt; fields.Count; i++)&lt;br /&gt;        {&lt;br /&gt;            _indexes[fields[i].Name.ToLower()] = g.AddVertex(i);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        //add edges&lt;br /&gt;        for (int i = 0; i &lt; fields.Count; i++)&lt;br /&gt;        {&lt;br /&gt;            if (fields[i].DependsOn != null)&lt;br /&gt;            {&lt;br /&gt;                for (int j = 0; j &lt; fields[i].DependsOn.Length; j++)&lt;br /&gt;                {&lt;br /&gt;                    g.AddEdge(i,&lt;br /&gt;                        _indexes[fields[i].DependsOn[j].ToLower()]);&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        int[] result = g.Sort();&lt;br /&gt;        return result;&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    class Field&lt;br /&gt;    {&lt;br /&gt;        public string Name { get; set; }&lt;br /&gt;        public string[] DependsOn { get; set; }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4245746694035938174?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4245746694035938174/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4245746694035938174' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4245746694035938174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4245746694035938174'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2009/02/topological-sorting-and-cyclic.html' title='Topological Sorting and Cyclic Dependencies'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-7916017888183301858</id><published>2009-02-18T12:48:00.000-08:00</published><updated>2009-02-19T13:17:21.965-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Random Date'/><title type='text'>Get a Random Date</title><content type='html'>&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;static DateTime GetRandomDate(Random rand, &lt;br /&gt;    DateTime minDate, DateTime maxDate)&lt;br /&gt;{&lt;br /&gt;    TimeSpan ts = maxDate - minDate;&lt;br /&gt;    int totalDays = (int)ts.TotalDays;&lt;br /&gt;    int randomDays = rand.Next(0, totalDays);&lt;br /&gt;    return minDate.AddDays(randomDays);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-7916017888183301858?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/7916017888183301858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=7916017888183301858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7916017888183301858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7916017888183301858'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2009/02/get-random-date.html' title='Get a Random Date'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-3759124835621708173</id><published>2007-11-08T10:26:00.001-08:00</published><updated>2009-02-20T12:13:37.996-08:00</updated><title type='text'>Algarve</title><content type='html'>&lt;div&gt;nice place to be right now (winter)&lt;/div&gt;&lt;br /&gt;&lt;img src="http://farm1.static.flickr.com/127/397929768_2cc760acc6_m.jpg" alt="Algarve" style="border: 2px solid rgb(0, 0, 0);" align="left" /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/97171476@N00/397929768/"&gt;algarve&lt;/a&gt; &lt;br /&gt;Originally uploaded by &lt;a href="http://www.flickr.com/people/97171476@N00/"&gt;coulportste&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-3759124835621708173?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/3759124835621708173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=3759124835621708173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/3759124835621708173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/3759124835621708173'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/11/algarve.html' title='Algarve'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/127/397929768_2cc760acc6_t.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-9010043771440126776</id><published>2007-09-25T08:52:00.000-07:00</published><updated>2007-09-25T09:00:49.697-07:00</updated><title type='text'>Some truth about software consulting</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_xSnzH6A00Gg/RvkvQ0ZLsLI/AAAAAAAAADc/ndthIVffsBc/s1600-h/consulting-copy.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_xSnzH6A00Gg/RvkvQ0ZLsLI/AAAAAAAAADc/ndthIVffsBc/s400/consulting-copy.jpg" alt="" id="BLOGGER_PHOTO_ID_5114170817844588722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Somehow this poster [from &lt;a href="http://despair.com/insanity.html"&gt;Despair, Inc.&lt;/a&gt;] always makes a lot of sense.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-9010043771440126776?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/9010043771440126776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=9010043771440126776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/9010043771440126776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/9010043771440126776'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/09/some-truth-about-software-consulting.html' title='Some truth about software consulting'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_xSnzH6A00Gg/RvkvQ0ZLsLI/AAAAAAAAADc/ndthIVffsBc/s72-c/consulting-copy.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4056838105218959455</id><published>2007-09-15T15:26:00.001-07:00</published><updated>2007-09-15T15:26:48.048-07:00</updated><title type='text'>Accidents de voiture : Tunnels Russe</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/RnQjKdpQ41s' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/RnQjKdpQ41s'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;It must be the vodka!&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4056838105218959455?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4056838105218959455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4056838105218959455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4056838105218959455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4056838105218959455'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/09/accidents-de-voiture-tunnels-russe.html' title='Accidents de voiture : Tunnels Russe'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-44640747022327875</id><published>2007-09-15T15:19:00.001-07:00</published><updated>2007-09-15T15:19:53.278-07:00</updated><title type='text'>The Bus Lane</title><content type='html'>&lt;div xmlns='http://www.w3.org/1999/xhtml'&gt;&lt;p&gt;&lt;object height='350' width='425'&gt;&lt;param value='http://youtube.com/v/EushIFYIkTk' name='movie'/&gt;&lt;embed height='350' width='425' type='application/x-shockwave-flash' src='http://youtube.com/v/EushIFYIkTk'/&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Always respect the bus lane .. or else ... well, see for yourselves&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-44640747022327875?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/44640747022327875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=44640747022327875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/44640747022327875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/44640747022327875'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/09/bus-lane.html' title='The Bus Lane'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-2312906148281205385</id><published>2007-09-12T09:17:00.000-07:00</published><updated>2009-02-19T14:00:09.480-08:00</updated><title type='text'>How to get a random date in C#</title><content type='html'>I looked everywhere for a sample on generating random dates in C# but could find any so I wrote mine.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;private static DateTime getRandomDate(Random rand, &lt;br /&gt;    DateTime minDate, DateTime maxDate)&lt;br /&gt;{&lt;br /&gt;    int totalDays = (int)DateTimeUtil.DateDiff(&lt;br /&gt;        DateInterval.Day , minDate, maxDate);&lt;br /&gt;    int randomDays = rand.Next(0,totalDays);&lt;br /&gt;    return minDate.AddDays(randomDays);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This function uses the DateTime utility class below which I found somewhere on the web.&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;    public enum DateInterval&lt;br /&gt;    {&lt;br /&gt;        Day,&lt;br /&gt;        DayOfYear,&lt;br /&gt;        Hour,&lt;br /&gt;        Minute,&lt;br /&gt;        Month,&lt;br /&gt;        Quarter,&lt;br /&gt;        Second,&lt;br /&gt;        Weekday,&lt;br /&gt;        WeekOfYear,&lt;br /&gt;        Year&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;///&lt;br /&gt;&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;    public sealed class DateTimeUtil&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        #region DateDiff Methods&lt;br /&gt;&lt;br /&gt;        public static long DateDiff(DateInterval interval, &lt;br /&gt;            DateTime dt1, DateTime dt2)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            return DateDiff(interval, dt1, dt2, System.Globalization&lt;br /&gt;                .DateTimeFormatInfo.CurrentInfo.FirstDayOfWeek);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static int GetQuarter(int nMonth)&lt;br /&gt;        {&lt;br /&gt;            if (nMonth &lt;= 3)&lt;br /&gt;                return 1;&lt;br /&gt;            if (nMonth &lt;= 6)&lt;br /&gt;                return 2;&lt;br /&gt;            if (nMonth &lt;= 9)&lt;br /&gt;                return 3;&lt;br /&gt;            return 4;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public static long DateDiff(DateInterval interval, &lt;br /&gt;            DateTime dt1, DateTime dt2, DayOfWeek eFirstDayOfWeek)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Year)&lt;br /&gt;&lt;br /&gt;                return dt2.Year - dt1.Year;&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Month)&lt;br /&gt;&lt;br /&gt;                return (dt2.Month - dt1.Month) + &lt;br /&gt;                    (12 * (dt2.Year - dt1.Year));&lt;br /&gt;&lt;br /&gt;            TimeSpan ts = dt2 - dt1;&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Day || &lt;br /&gt;                interval == DateInterval.DayOfYear)&lt;br /&gt;                return Round(ts.TotalDays);&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Hour)&lt;br /&gt;                return Round(ts.TotalHours);&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Minute)&lt;br /&gt;                return Round(ts.TotalMinutes);&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Second)&lt;br /&gt;&lt;br /&gt;                return Round(ts.TotalSeconds);&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Weekday)&lt;br /&gt;            {&lt;br /&gt;                return Round(ts.TotalDays / 7.0);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.WeekOfYear)&lt;br /&gt;            {&lt;br /&gt;                while (dt2.DayOfWeek != eFirstDayOfWeek)&lt;br /&gt;                    dt2 = dt2.AddDays(-1);&lt;br /&gt;                while (dt1.DayOfWeek != eFirstDayOfWeek)&lt;br /&gt;                    dt1 = dt1.AddDays(-1);&lt;br /&gt;                ts = dt2 - dt1;&lt;br /&gt;                return Round(ts.TotalDays / 7.0);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            if (interval == DateInterval.Quarter)&lt;br /&gt;            {&lt;br /&gt;                double d1Quarter = GetQuarter(dt1.Month);&lt;br /&gt;                double d2Quarter = GetQuarter(dt2.Month);&lt;br /&gt;                double d1 = d2Quarter - d1Quarter;&lt;br /&gt;                double d2 = (4 * (dt2.Year - dt1.Year));&lt;br /&gt;                return Round(d1 + d2);&lt;br /&gt;            }&lt;br /&gt;            return 0;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        private static long Round(double dVal)&lt;br /&gt;        {&lt;br /&gt;            if (dVal &gt;= 0)&lt;br /&gt;                return (long)Math.Floor(dVal);&lt;br /&gt;            return (long)Math.Ceiling(dVal);&lt;br /&gt;        }&lt;br /&gt;        #endregion&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-2312906148281205385?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/2312906148281205385/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=2312906148281205385' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2312906148281205385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2312906148281205385'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/09/how-to-get-random-date-in-c.html' title='How to get a random date in C#'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-2820825165845477118</id><published>2007-09-06T12:47:00.000-07:00</published><updated>2007-09-06T12:56:24.391-07:00</updated><title type='text'>Visual Studio  is a memory hog - uses 1/2 a gig of memory</title><content type='html'>Visual Studio (2005) and ASP.NET server are using more than 1/3 (765,304k) of all my memory. Has Microsoft lost its mind?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xSnzH6A00Gg/RuBavecJPGI/AAAAAAAAADU/4ZEKuQoiSvQ/s1600-h/vs_mem_usage.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_xSnzH6A00Gg/RuBavecJPGI/AAAAAAAAADU/4ZEKuQoiSvQ/s400/vs_mem_usage.jpg" alt="" id="BLOGGER_PHOTO_ID_5107181749109603426" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-2820825165845477118?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/2820825165845477118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=2820825165845477118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2820825165845477118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2820825165845477118'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/09/visual-studio-is-memory-hog-uses-12-gig.html' title='Visual Studio  is a memory hog - uses 1/2 a gig of memory'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_xSnzH6A00Gg/RuBavecJPGI/AAAAAAAAADU/4ZEKuQoiSvQ/s72-c/vs_mem_usage.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-7779454659920624812</id><published>2007-07-03T10:39:00.001-07:00</published><updated>2009-02-19T13:54:41.374-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Enum'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# - How to check if a property type is an Enum</title><content type='html'>&lt;pre name="code" class="csharp"&gt;&lt;br /&gt;class EnumTests&lt;br /&gt;{&lt;br /&gt;  public static void Run()&lt;br /&gt;  {&lt;br /&gt;      // convert a string into a color Enum&lt;br /&gt;      Colour c = (Colour)Enum.Parse(typeof(Colour), "Red", true);&lt;br /&gt;      Console.WriteLine("Colour Value: {0}", c.ToString());&lt;br /&gt;&lt;br /&gt;      // Picking an invalid colour throws an ArgumentException. To&lt;br /&gt;      // avoid this, call Enum.IsDefined() first, as follows:&lt;br /&gt;      string nonColour = "OrangeGreen";&lt;br /&gt;&lt;br /&gt;      if (Enum.IsDefined(typeof(Colour), nonColour))&lt;br /&gt;          c = (Colour)Enum.Parse(typeof(Colour), nonColour, true);&lt;br /&gt;      else&lt;br /&gt;          Console.WriteLine("'{0}' is an undefined Color", nonColour);&lt;br /&gt;&lt;br /&gt;      //Check if c is an Enum&lt;br /&gt;      Console.WriteLine("c is an Enum = {0} ", c.GetType().IsEnum);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#region Helper Classes&lt;br /&gt;&lt;br /&gt;enum Colour&lt;br /&gt;{&lt;br /&gt;  Red,&lt;br /&gt;  Green,&lt;br /&gt;  Blue&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;#endregion&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-7779454659920624812?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/7779454659920624812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=7779454659920624812' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7779454659920624812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/7779454659920624812'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/07/c-how-to-check-if-property-type-is-enum.html' title='C# - How to check if a property type is an Enum'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4853668961392715120</id><published>2007-05-30T15:52:00.000-07:00</published><updated>2007-05-30T16:13:05.017-07:00</updated><title type='text'>Yande, almost 10 weeks later.</title><content type='html'>It's been almost 10 weeks since Yande was born, and he has almost double in size - about 16 lbs now. Anyway he wore shoes today and I thought I should take him some pictures.&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://lh3.google.com/image/ladonnarx/RlfGIEXXx3I/AAAAAAAAFCw/AeZLY4qHdR0/P5250985.JPG?imgmax=640"&gt;&lt;img src="http://lh3.google.com/image/ladonnarx/RlfGIEXXx3I/AAAAAAAAFCw/AeZLY4qHdR0/P5250985.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://lh6.google.com/image/ladonnarx/RlfGI0XXx4I/AAAAAAAAFC0/fAjnZ5tkHBA/P5250986.JPG?imgmax=640"&gt;&lt;img src="http://lh6.google.com/image/ladonnarx/RlfGI0XXx4I/AAAAAAAAFC0/fAjnZ5tkHBA/P5250986.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://lh4.google.com/image/ladonnarx/RlfGJUXXx5I/AAAAAAAAFC4/B7T-bLnKzN8/P5250987.JPG?imgmax=640"&gt;&lt;img src="http://lh4.google.com/image/ladonnarx/RlfGJUXXx5I/AAAAAAAAFC4/B7T-bLnKzN8/P5250987.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://lh3.google.com/image/ladonnarx/RlfGTEXXyCI/AAAAAAAAFDQ/JaFEp7qdBDo/P5250996.JPG?imgmax=640"&gt;&lt;img src="http://lh3.google.com/image/ladonnarx/RlfGTEXXyCI/AAAAAAAAFDQ/JaFEp7qdBDo/P5250996.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://lh3.google.com/image/ladonnarx/Rk5vdUXXKsI/AAAAAAAAADI/uNnd7rq6nsU/P5160966.JPG?imgmax=640"&gt;&lt;img src="http://lh3.google.com/image/ladonnarx/Rk5vdUXXKsI/AAAAAAAAADI/uNnd7rq6nsU/P5160966.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://lh6.google.com/image/ladonnarx/Rk5viEXXKuI/AAAAAAAAADY/eEw3JvJNUaI/P5160968.JPG?imgmax=640"&gt;&lt;img src="http://lh6.google.com/image/ladonnarx/Rk5viEXXKuI/AAAAAAAAADY/eEw3JvJNUaI/P5160968.JPG?imgmax=144"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4853668961392715120?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4853668961392715120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4853668961392715120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4853668961392715120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4853668961392715120'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/05/yande-almost-10-weeks-later.html' title='Yande, almost 10 weeks later.'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-8350512782891580281</id><published>2007-03-20T18:01:00.000-07:00</published><updated>2007-03-20T18:17:55.129-07:00</updated><title type='text'>Apollo Extensions for Flexbuilder 2.0.1 won't Install/Run</title><content type='html'>After painstakingly downloading the new Apollo runtime and Apollo extensions for Flex Builder from &lt;a href="http://labs.adobe.com"&gt;Adobe Labs&lt;/a&gt;, I now have to deal with  errors nobody at the &lt;a href="http://www.adobe.com/cfusion/webforums/forum/categories.cfm?forumid=72&amp;catid=641"&gt;Apollo forums&lt;/a&gt; seems to have any clue about. (Except another few 10s of developers who have the same problems).&lt;br /&gt;&lt;br /&gt;I am running WinXP Pro SP2. During the Flex extensions install, I get to select the location of the Flex Builder folder and then I get an &lt;a href="http://eclipse.org"&gt;Eclipse&lt;/a&gt; Folder Error as shown below:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xSnzH6A00Gg/RgCFqXhgPMI/AAAAAAAAABE/e-OoqCUr7v4/s1600-h/fb_apollo_ext_install1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xSnzH6A00Gg/RgCFqXhgPMI/AAAAAAAAABE/e-OoqCUr7v4/s200/fb_apollo_ext_install1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5044178545570495682" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xSnzH6A00Gg/RgCF1XhgPNI/AAAAAAAAABM/GGogKz5l5jQ/s1600-h/fb_apollo_ext_install_error.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xSnzH6A00Gg/RgCF1XhgPNI/AAAAAAAAABM/GGogKz5l5jQ/s200/fb_apollo_ext_install_error.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5044178734549056722" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="clear:both;"&gt;&amp;nbsp;&lt;/div&gt;&lt;br /&gt;And I do not have Eclipse installed on this computer. I know Flex is built on Eclipse, but common, Adobe should be able to do better - I've been waiting for Apollo for too long.&lt;br /&gt;&lt;br /&gt;The when I start Flex Builder, Apollo is present but still won't run.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_xSnzH6A00Gg/RgCGknhgPOI/AAAAAAAAABU/KtZfIcwkJYA/s1600-h/fb_apollo_load_error.jpg"&gt;&lt;img style="xfloat:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_xSnzH6A00Gg/RgCGknhgPOI/AAAAAAAAABU/KtZfIcwkJYA/s200/fb_apollo_load_error.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5044179546297875682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm still watching the forums hoping somebody will answer this one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-8350512782891580281?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/8350512782891580281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=8350512782891580281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8350512782891580281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8350512782891580281'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/03/apollo-extensions-for-flexbuilder-201.html' title='Apollo Extensions for Flexbuilder 2.0.1 won&apos;t Install/Run'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_xSnzH6A00Gg/RgCFqXhgPMI/AAAAAAAAABE/e-OoqCUr7v4/s72-c/fb_apollo_ext_install1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-8597137572195934624</id><published>2007-03-19T07:44:00.000-07:00</published><updated>2007-03-19T08:00:01.508-07:00</updated><title type='text'>Adobe.com is just Unacceptably TOO SLOW</title><content type='html'>As a matter of fact, &lt;a href="http://labs.adobe.com/technologies/apollo/"&gt;this site&lt;/a&gt; doesn't even load.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xSnzH6A00Gg/Rf6lUVCaDBI/AAAAAAAAAA8/nBAN41m9vNo/s1600-h/adobe.com_noload.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xSnzH6A00Gg/Rf6lUVCaDBI/AAAAAAAAAA8/nBAN41m9vNo/s200/adobe.com_noload.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5043650401364741138" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Today I received an email from adobe to download the alpha release for the highly anticipated Apollo SDK for building desktop apps that will run on Windows &amp; Mac. But unfortunaly for the last 10 minutes, the site still hasn't loaded. &lt;br /&gt;&lt;a href="http://adobe.com"&gt;Adobe.com&lt;/a&gt; is notoriously slow especially when compared to other tech company sites such as &lt;a href="http://yahoo.com"&gt;Yahoo.com&lt;/a&gt; and &lt;a href="http://microsoft.com"&gt;Microsoft.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Adobe, I have 2 questions.&lt;br /&gt;1. Why should I even bother about your software when your site would load?&lt;br /&gt;2. Is your site running on ColdFusion?&lt;br /&gt;Bonus&lt;br /&gt;3. Add I hear you want to put Photoshop on the web, good luck.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-8597137572195934624?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/8597137572195934624/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=8597137572195934624' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8597137572195934624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/8597137572195934624'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/03/adobecom-is-just-unacceptably-too-slow.html' title='Adobe.com is just Unacceptably TOO SLOW'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_xSnzH6A00Gg/Rf6lUVCaDBI/AAAAAAAAAA8/nBAN41m9vNo/s72-c/adobe.com_noload.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-5761356236208129470</id><published>2007-03-18T11:40:00.000-07:00</published><updated>2007-03-18T12:02:38.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='New Dad'/><title type='text'>Yande's Home Coming</title><content type='html'>Yande and mother (Philo) finally came home on Thursday (3/15/2007). I will be putting up hist first home pictures later.&lt;br /&gt;Apart from the Wheel Chair incident I still give &lt;a href="http://www.dimensionshealth.org/website/c/pghc/"&gt;Prince George's Hospital Center&lt;/a&gt; a solid &lt;span style="color:blue;font-weight:bold;font-family:arial bold;"&gt;&amp;#147;A&amp;#148;&lt;/span&gt; for their service. PG Hospital Center currently is run by &lt;a href="http://dimensionshealth.org/"&gt;Dimensions Healthcare System&lt;/a&gt; and I salute them for the excellent experience we had with their services. &lt;span title="Keep Up The Good Work"&gt;KUTGW&lt;/span&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-5761356236208129470?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/5761356236208129470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=5761356236208129470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/5761356236208129470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/5761356236208129470'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/03/yandes-home-coming.html' title='Yande&apos;s Home Coming'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-2070364642372932395</id><published>2007-03-14T09:22:00.000-07:00</published><updated>2007-03-14T09:51:38.920-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pictures'/><category scheme='http://www.blogger.com/atom/ns#' term='Yande'/><category scheme='http://www.blogger.com/atom/ns#' term='New Dad'/><title type='text'>Yande Franklin Anyangwe - First Pictures</title><content type='html'>&lt;a href="http://www.cityjams.com/yande/photos/P1010300.jpg"&gt; &lt;img style="display:inline;"  src="http://www.cityjams.com/yande/tmb/P1010300.jpg" /&gt; &lt;/a&gt; &lt;a href="http://www.cityjams.com/yande/photos/P1010291.jpg"&gt;&lt;img style="display:inline;"src="http://www.cityjams.com/yande/tmb/P1010291.jpg" /&gt;&lt;/a&gt;&lt;a href="http://www.cityjams.com/yande/photos/P1010292.jpg"&gt; &lt;img style="display:inline;"src="http://www.cityjams.com/yande/tmb/P1010292.jpg" /&gt; &lt;/a&gt; &lt;a href="http://www.cityjams.com/yande/photos/P1010299.jpg"&gt;&lt;img style="display:inline;"src="http://www.cityjams.com/yande/tmb/P1010299.jpg" /&gt;&lt;/a&gt;&lt;a href="http://www.cityjams.com/yande/photos/P1010303.jpg"&gt; &lt;img style="display:inline;"src="http://www.cityjams.com/yande/tmb/P1010303.jpg" /&gt; &lt;/a&gt; &lt;a href="http://www.cityjams.com/yande/photos/P1010306.jpg"&gt;&lt;img style="display:inline;"src="http://www.cityjams.com/yande/tmb/P1010306.jpg" /&gt;&lt;/a&gt;&lt;a href="http://www.cityjams.com/yande"&gt;...&lt;i&gt;more&lt;/i&gt;...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since blogger does not provide a way to upload or manage a simple photo gallery, I have uploaded the pictures to my personal website at &lt;a href="http://www.cityjams.com/yande"&gt;http://www.cityjams.com/yande&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-2070364642372932395?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/2070364642372932395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=2070364642372932395' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2070364642372932395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/2070364642372932395'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/03/yande-franklin-anyangwe-first-pictures.html' title='Yande Franklin Anyangwe - First Pictures'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-6633660304930992260</id><published>2007-03-13T07:21:00.000-07:00</published><updated>2007-03-13T07:24:20.800-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Parenting'/><category scheme='http://www.blogger.com/atom/ns#' term='Yande'/><category scheme='http://www.blogger.com/atom/ns#' term='Family'/><title type='text'>Yande Franklin Anyangwe 03/12/07</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_xSnzH6A00Gg/Rfazgc0yPHI/AAAAAAAAAAk/iicPaaLOaq8/s1600-h/yande_03-12-07.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_xSnzH6A00Gg/Rfazgc0yPHI/AAAAAAAAAAk/iicPaaLOaq8/s320/yande_03-12-07.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5041414202962623602" /&gt;&lt;/a&gt;&lt;br /&gt;Philo and I hereby welcome Yande F. Anyangwe into our family who arrived yesterday March 12th 2007 at 8lbs. 10oz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-6633660304930992260?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/6633660304930992260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=6633660304930992260' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/6633660304930992260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/6633660304930992260'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/03/yande-franklin-anyangwe-031207.html' title='Yande Franklin Anyangwe 03/12/07'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_xSnzH6A00Gg/Rfazgc0yPHI/AAAAAAAAAAk/iicPaaLOaq8/s72-c/yande_03-12-07.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-678309663089311114</id><published>2007-01-08T08:40:00.000-08:00</published><updated>2007-01-08T09:01:01.272-08:00</updated><title type='text'>Best Comparism: Ruby vs Java et al</title><content type='html'>This is probably the best analogy I've seen comparing dynamic languages (like Ruby &amp; JavaScript) to static object oriented languages (like C# &amp; Java) by &lt;a href="http://www.joelonsoftware.com"&gt;Joel on Software&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also a good start to understand how to map (ConvertAll) and reduce (Fold) your code - &lt;a href="http://labs.google.com/papers/mapreduce.html"&gt;MapReduce&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/items/2006/08/01.html"&gt;http://www.joelonsoftware.com/items/2006/08/01.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-678309663089311114?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/678309663089311114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=678309663089311114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/678309663089311114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/678309663089311114'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2007/01/best-comparism-ruby-vs-java-et-al.html' title='Best Comparism: Ruby vs Java et al'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-3648122173039170335</id><published>2006-12-27T20:55:00.001-08:00</published><updated>2006-12-27T20:55:43.897-08:00</updated><title type='text'>Serialize JavaScript objects to XML (for use with Ajax)</title><content type='html'>The following 3 functions can be added to any JavaScript library to serialize objects to XML for use with Ajax.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;--- serialize.js ---&lt;/i&gt;&lt;pre&gt;&lt;font face="courier new" size="2"&gt;&lt;br /&gt;Array.prototype.toXml = &lt;font color="blue"&gt;function&lt;/font&gt;(t){&lt;br /&gt;    &lt;font color="blue"&gt;var&lt;/font&gt; s = &lt;font color="blue"&gt;new&lt;/font&gt; Array(), i, l = &lt;font color="blue"&gt;this&lt;/font&gt;.length, v;&lt;br /&gt;    &lt;font color="blue"&gt;var&lt;/font&gt; t2 = (t.charAt(t.length-1)=='s')?t.substring(0,t.length-1):t;&lt;br /&gt;   &lt;br /&gt;    &lt;font color="blue"&gt;for&lt;/font&gt;(i=0;i&amp;lt;l;i++){&lt;br /&gt;        v = &lt;font color="blue"&gt;this&lt;/font&gt;[i];&lt;br /&gt;        &lt;font color="blue"&gt;switch&lt;/font&gt; (&lt;font color="blue"&gt;typeof&lt;/font&gt; v) {&lt;br /&gt;            &lt;font color="blue"&gt;case&lt;/font&gt; 'undefined':&lt;br /&gt;            &lt;font color="blue"&gt;case&lt;/font&gt; 'function':&lt;br /&gt;            &lt;font color="blue"&gt;case&lt;/font&gt; 'unknown':&lt;font color="blue"&gt;break;&lt;/font&gt;&lt;br /&gt;            &lt;font color="blue"&gt;case&lt;/font&gt; 'object':if(v!=null){s.push(v.toXml(t2));}&lt;font color="blue"&gt;break;&lt;/font&gt;&lt;br /&gt;            &lt;font color="blue"&gt;case&lt;/font&gt; 'string':v = v.toXml();&lt;br /&gt;            &lt;font color="blue"&gt;default&lt;/font&gt;:s.push('&lt;'+t2+'&gt;'+v+'&lt;/'+t2+'&gt;');&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;font color="blue"&gt;if&lt;/font&gt;(s.length&gt;1)return '&lt;'+t+'&gt;'+s.join('')+'&lt;/'+t+'&gt;';&lt;br /&gt;    &lt;font color="blue"&gt;return&lt;/font&gt; s;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;Object.prototype.toXml = function(t){&lt;br /&gt;    &lt;font color="blue"&gt;var&lt;/font&gt; sa = &lt;font color="blue"&gt;new&lt;/font&gt; Array(''), se = &lt;font color="blue"&gt;new&lt;/font&gt; Array('');&lt;br /&gt;    &lt;font color="blue"&gt;if&lt;/font&gt;(!t) t=&lt;font color="blue"&gt;this&lt;/font&gt;._tagName||'object';&lt;br /&gt;   &lt;br /&gt;    &lt;font color="blue"&gt;for&lt;/font&gt;(&lt;font color="blue"&gt;var&lt;/font&gt; i &lt;font color="blue"&gt;in this&lt;/font&gt;){               &lt;br /&gt;        &lt;font color="blue"&gt;if&lt;/font&gt; (&lt;font color="blue"&gt;this&lt;/font&gt;.hasOwnProperty(i) &amp;&amp;amp; i.charAt(0)!='_') {&lt;br /&gt;            &lt;font color="blue"&gt;var&lt;/font&gt; v = &lt;font color="blue"&gt;this&lt;/font&gt;[i];&lt;br /&gt;            &lt;font color="blue"&gt;switch&lt;/font&gt; (&lt;font color="blue"&gt;typeof&lt;/font&gt; v) {&lt;br /&gt;                &lt;font color="blue"&gt;case&lt;/font&gt; 'undefined':&lt;br /&gt;                &lt;font color="blue"&gt;case&lt;/font&gt; 'function':&lt;br /&gt;                &lt;font color="blue"&gt;case&lt;/font&gt; 'unknown':&lt;font color="blue"&gt;break&lt;/font&gt;;&lt;br /&gt;                &lt;font color="blue"&gt;case&lt;/font&gt; 'object':if(v!=null){se.push(v.toXml(i));}&lt;font color="blue"&gt;break&lt;/font&gt;;&lt;br /&gt;                &lt;font color="blue"&gt;case&lt;/font&gt; 'string':v = v.toXml();&lt;br /&gt;                &lt;font color="blue"&gt;default&lt;/font&gt;: sa.push(' '+i+'="'+v+'"');&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    &lt;font color="blue"&gt;var&lt;/font&gt; s = se.join('');&lt;br /&gt;    &lt;font color="blue"&gt;return&lt;/font&gt; '&lt;'+t+sa.join('')+((s!='')?'&gt;'+s+'&lt;/'+t+'&gt;':'/&gt;');&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;String.prototype.toXml = &lt;font color="blue"&gt;function&lt;/font&gt;(){&lt;br /&gt;    &lt;font color="blue"&gt;return this&lt;/font&gt;.replace('&amp;','&amp;amp;amp;').&lt;br /&gt;      replace('&lt;','&amp;amp;lt;').replace('&gt;','&amp;amp;gt;').&lt;br /&gt;      replace('\'','&amp;amp;apos;').replace('"','&amp;amp;quot;');&lt;br /&gt;};&lt;br /&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sample Usage&lt;/b&gt;&lt;br/&gt;&lt;font face="courier new" size="2"&gt;&lt;font color="blue"&gt;&lt;br /&gt;&amp;lt;&lt;font color="brown"&gt;script&lt;/font&gt; &lt;font color="red"&gt;language&lt;/font&gt;="javascript" &lt;font color="red"&gt;src&lt;/font&gt;="serialize.js"&amp;gt;&amp;lt;/&lt;font color="brown"&gt;script&lt;/font&gt;&amp;gt;&lt;br /&gt;&amp;lt;&lt;font color="brown"&gt;script&lt;/font&gt; &lt;font color="red"&gt;language&lt;/font&gt;="javascript"&amp;gt;&lt;/font&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="blue"&gt;function&lt;/font&gt; Car(make,model,color){&lt;br /&gt;    &lt;font color="blue"&gt;this&lt;/font&gt;.make  = make;&lt;br /&gt;    &lt;font color="blue"&gt;this&lt;/font&gt;.model = model;&lt;br /&gt;    &lt;font color="blue"&gt;this&lt;/font&gt;.color = color;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;var&lt;/font&gt; cars = &lt;font color="blue"&gt;new&lt;/font&gt; Array();&lt;br /&gt;cars.push(&lt;font color="blue"&gt;new&lt;/font&gt; Car('BMW','545i','Silver'));&lt;br /&gt;cars.push(&lt;font color="blue"&gt;new&lt;/font&gt; Car('Toyota','Corrola','Red'));&lt;br /&gt;cars.push(&lt;font color="blue"&gt;new&lt;/font&gt; Car('Honda','Accord','Black'));&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;//serialize to xml&lt;/font&gt;&lt;br /&gt;alert(cars.toXml());&lt;br /&gt;&lt;/pre&gt;&lt;font color="blue"&gt;&amp;lt;/&lt;font color="brown"&gt;script&lt;/font&gt;&amp;gt;&lt;/font&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Note:&lt;/b&gt;&lt;br /&gt;1. Private properties are prefixed with an underscore&lt;br /&gt;2. You can add a default TagName for an object using the &lt;i&gt;this._tagName&lt;/i&gt; property. For example in the Cars object above, you can add: &lt;br /&gt;&lt;pre&gt;&lt;font color="blue"&gt;this&lt;/font&gt;._tagName = &lt;font color="brown"&gt;'car'&lt;/font&gt;;&lt;/pre&gt;&lt;center&gt;&lt;big&gt;&lt;b&gt;...&lt;/b&gt;&lt;/big&gt;&lt;/center&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-3648122173039170335?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/3648122173039170335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=3648122173039170335' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/3648122173039170335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/3648122173039170335'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2006/12/serialize-javascript-objects-to-xml-for.html' title='Serialize JavaScript objects to XML (for use with Ajax)'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4593923437897181105</id><published>2006-10-12T04:58:00.000-07:00</published><updated>2006-10-12T05:04:56.121-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Memory consumption'/><category scheme='http://www.blogger.com/atom/ns#' term='FireFox'/><category scheme='http://www.blogger.com/atom/ns#' term='Opera'/><title type='text'>Why use FireFox when you can use Opera?</title><content type='html'>For the past couple of days I've been getting increasingly frustrated with FireFox because it eats up all of my memory. The tabbed browsing feature is a neccessity for me (&lt;i&gt;I dare not install IE7&lt;/i&gt;). So I switched a couple of days ago to Opera which has all the features I need and a very small footprint. After two day, I can say nothing but wonder, &lt;i&gt;&lt;span style="color:#000066;"&gt;Why use FireFox when you can use Opera?&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4593923437897181105?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4593923437897181105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4593923437897181105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4593923437897181105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4593923437897181105'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2006/10/why-use-firefox-when-you-can-use-opera.html' title='Why use FireFox when you can use Opera?'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9216109971576658448.post-4098952713983363623</id><published>2006-09-28T13:15:00.000-07:00</published><updated>2007-03-18T12:04:26.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Steve Yegge'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Google environment'/><title type='text'>In Stevey's word on Agile Programming</title><content type='html'>Up until maybe a year ago, I had a pretty one-dimensional view of so-called "Agile" programming, namely that it's an idiotic fad-diet of a marketing scam making the rounds as yet another technological virus implanting itself in naive programmers who've never read "No Silver Bullet", the kinds of programmers who buy extended warranties and self-help books and believe their bosses genuinely care about them as people, the kinds of programmers who attend conferences to make friends and who don't know how to avoid eye contact with leaflet-waving fanatics in airports and who believe writing shit on index cards will suddenly make software development easier. &lt;a href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html"&gt;... more..&lt;/a&gt;&lt;br /&gt;(I kind of agree)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9216109971576658448-4098952713983363623?l=tawani.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tawani.blogspot.com/feeds/4098952713983363623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9216109971576658448&amp;postID=4098952713983363623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4098952713983363623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9216109971576658448/posts/default/4098952713983363623'/><link rel='alternate' type='text/html' href='http://tawani.blogspot.com/2006/09/stevey-thinks-of-agile-programming.html' title='In Stevey&apos;s word on Agile Programming'/><author><name>Tawani Anyangwe</name><uri>http://www.blogger.com/profile/07048402899899544722</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
