Sunday, July 24, 2005

Time management !!!

Yesterday, attended my first lecture on Time Management as part of my E-MBA course.

The crux of the matter was to able to save 20 minutes of quality time a day.

Some sample equation...

20 minutes a day
600 minutes a month
7200 minutes a year. i.e 120 hours a year..

For 25 years + more of life time you have got 3000 hours of more time which you can utilise to achieve your life goals..

To manage time ==> is to manage self.
And self management requires some discipline which is not developed overnight.
Patience and practice is required...

More to come...

Wednesday, July 13, 2005

Replacing cursors and while loops...

Cursors and while loops seems to be bit evil in terms of gaining performance..
Here's a solution to it...
Avoiding Cursors and While Loops

Enjoy...

Monday, July 11, 2005

Really Simple Syndication (RSS)

RSS is a Web content syndication format.
Its acronym stands for Really Simple Syndication.
RSS is a dialect of XML. All RSS files must conform to the XML 1.0 specification, as published on the World Wide Web Consortium (W3C) website.

For more info...
Click here RSS

Sample code to read RSS feed in asp.net..

private DataTable GetRSSFeed(string strURL )
{
//Retrieve the XML data
XmlTextReader reader = new XmlTextReader(strURL);
DataSet ds = new DataSet();
ds.ReadXml(reader) ;
return ds.Tables[2];
}

// for displaying the RSS feed add the following code to the page load event.
private void Page_Load(object sender, System.EventArgs e)
{
string strURL = Server.MapPath
("rss.xml"); //"http://rajeshpillai.blogspot.com/atom.xml";
dgRSS.DataSource = GetRSSFeed(strURL);
dgRSS.DataBind();
}


When the dataset is generated from ReadXML, three tables are created in the dataset, one for each rss, channel and item tag.
Since we are only interested in the item we are returning ds.Tables[2].
We can easily display this information in a datagrid or datalist.

Happy Syndicating...

Thursday, July 07, 2005

Design Pattern - Strategy


Today out of curiosity, I was experimenting with strategy design pattern.
Here's the outcome of my experiment.

Strategy pattern falls under the Behavioral category.

The Intent:
Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.
The strategy pattern embodies two fundamental principle of object oriented programming. First encapsulate the concept which changes behaviour and program against the interface.

I had written a small notepad application to illustrate the use of strategy.
Other things remaining same, the dynamics of the pattern is applied when using the "find" method in the notepad. Based on the user's selection either a normal "find" alogrithm is invoked or a "regex" based algorithm is used.

The application being trivial, you wont find much regex code. Its used only for demonstration purpose.

Dissecting the application

(1) Program against the interface


// IFind.cs - This would be our strategy interface
using System;
using System.Windows.Forms;
namespace DesignPatterns
{
public interface IFind
{
int Find(RichTextBox textControl,string str);
}
}

// NormalFind.cs - An implementation of 1st algorithm - ConcreteStrategyA
using System;
using System.Windows.Forms;

namespace DesignPatterns
{
public class NormalFind : IFind
{
static int filePointer = 0;
public NormalFind()
{}

int IFind.Find(RichTextBox textControl, string str)
{
int start = -1;
try
{
start = textControl.Text.IndexOf(str, filePointer);
int len = str.Length;

textControl.Select(start, len);
textControl.Focus();
filePointer = start + len;
}
catch (Exception e)
{
e.ToString();
MessageBox.Show("Reached End of Document.");
filePointer = 0;
}
return start;
}
}
}

// RegexFind.cs - An implementation of 2nd algorithm - ConcreteStrategyB
using System;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Diagnostics;

namespace DesignPatterns
{
public class RegexFind : IFind
{
static int filePointer = 0;
int start = -1;
public RegexFind()
{}

int IFind.Find(RichTextBox textControl,string str)
{
Regex r = new Regex(str);
try
{
Match m = r.Match(textControl.Text,filePointer, textControl.TextLength);
Trace.Assert(m.Success);
textControl.Select(m.Index, m.Length);
textControl.Focus();
filePointer = m.Index + m.Length;
start = m.Index;
}
catch (Exception e)
{
e.ToString();
MessageBox.Show("Reached End of Document.");
filePointer = 0;
}
return start;
}
}
}

// FindManager.cs - Handles the strategy context -
using System;
using System.Windows.Forms;
namespace DesignPatterns
{
public class FindManager
{
IFind find;
RichTextBox rtb;

public FindManager()
{}

public FindManager(RichTextBox rbox)
{
this.rtb = rbox;
}

public void SetFindStrategy( IFind myfind)
{
this.find =myfind;
}

public int Find(string findString)
{
return find.Find(rtb, findString);
}
}
}

// The client code extract
private void btnFind_Click(object sender, System.EventArgs e)
{
FindManager fm = new FindManager(this.richTextBoxInstance);
// dynamically set the strategy
if (chkRegEx.Checked == true)
fm.SetFindStrategy(new RegexFind());
else
fm.SetFindStrategy(new NormalFind());

fm.Find(txtFind.Text);
}

For more information go to
www.dofactory.com
davidhayden.com/blog
Also refer the GOF pattern book.

UML class diagram has been adapted from www.dofactory.com. I hope they don't mind it.



Enjoy patterning :)

Tuesday, July 05, 2005

Circular reference assembly...

Here's a link which describes how to create circular reference assembly in .net.

http://blogs.msdn.com/junfeng/archive/2004/02.aspx

Monday, July 04, 2005

.net Reflection Tip

To convert a string to its corresponding type use the following code snippet...
///
/// To get the underlying property type for the object
///

/// The object for which u r finding the property info.
/// The name of the property.. eg. For form object, say finding the Location property
/// The property value.
/// An object containing the underlying propertytype.
private object ConvertStringToPropertyType(object control,
string propertyName,
string val)
{
object result = null;

Type type = control.GetType();
PropertyInfo p = type.GetProperty(propertyName);
Type propertyType = p.PropertyType;

TypeConverter converter = TypeDescriptor.GetConverter(propertyType);
result = converter.ConvertFrom(val);

return result;
}

for eg. if you pass

Yesterday went to chill out at Zenith waterfall and lonavala!!!

Snaps, soon to be uploaded..