<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Programmable Programmer</title>
	<atom:link href="http://gizmoworks.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gizmoworks.wordpress.com</link>
	<description>I'm thinking about it</description>
	<lastBuildDate>Fri, 05 Dec 2008 05:23:11 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='gizmoworks.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/19a02d09441b247f9381cd958a8ec709?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Programmable Programmer</title>
		<link>http://gizmoworks.wordpress.com</link>
	</image>
			<item>
		<title>ASP.NET Wrapper Panel</title>
		<link>http://gizmoworks.wordpress.com/2008/12/04/aspnet-wrapper-panel/</link>
		<comments>http://gizmoworks.wordpress.com/2008/12/04/aspnet-wrapper-panel/#comments</comments>
		<pubDate>Thu, 04 Dec 2008 16:30:04 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[c-sharp]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/?p=99</guid>
		<description><![CDATA[This is a useful control that works like a masterpage but is more lightweight.
You can use this control as a wrapper for commonly used html snippets in your code.
&#60;%@ Control Language='C#' AutoEventWireup='true' 
CodeBehind='WrapperPanel.ascx.cs' Inherits='Controls.WrapperPanel' %&#62;
&#60;div class='wrapper'&#62;
	&#60;div&#62;
		&#60;asp:Label ID='lbHeader' runat='server' /&#62;
	&#60;/div&#62;
	&#60;div&#62;
		&#60;asp:PlaceHolder ID="itemPlaceHolder" runat="server" /&#62;
	&#60;/div&#62;
&#60;/div&#62;

This is the code file for the control.

 
	[PersistChildren(true)]
	public partial class WrapperPanel : UserControl
	{
		public string [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=99&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This is a useful control that works like a masterpage but is more lightweight.<br />
You can use this control as a wrapper for commonly used html snippets in your code.</p>
<pre><code>&lt;%@ Control Language='C#' AutoEventWireup='true' </code>
<code>CodeBehind='WrapperPanel.ascx.cs' Inherits='Controls.WrapperPanel' %&gt;
&lt;div class='wrapper'&gt;
	&lt;div&gt;
		&lt;asp:Label ID='lbHeader' runat='server' /&gt;
	&lt;/div&gt;
	&lt;div&gt;
		&lt;asp:PlaceHolder ID="itemPlaceHolder" runat="server" /&gt;
	&lt;/div&gt;
&lt;/div&gt;

This is the code file for the control.
</code></pre>
<p><code> </code></p>
<pre><code>	[PersistChildren(true)]
	public partial class WrapperPanel : UserControl
	{
		public string HeaderText { set { lbHeader.Text = value; } }
		private ITemplate _itemTemplate; 

		[TemplateInstance(TemplateInstance.Single)]
		[PersistenceMode(PersistenceMode.InnerProperty)]
		public ITemplate ItemTemplate
                {
                  get { return _itemTemplate; }
                  set { _itemTemplate = value; }
                } 

		protected override void OnInit(EventArgs e)
		{
			base.OnInit(e);
			itemPlaceHolder.Controls.Clear();
			if (ItemTemplate == null) return;
			ItemTemplate.InstantiateIn(itemPlaceHolder);
		}
	}
</code></pre>
<p>You would use it as follows:</p>
<pre><code>	&lt;AR:wrapperpanel runat="server" HeaderText="Some Control" id-"wrapperpanel"&gt;
		&lt;ItemTemplate&gt; Your content here &lt;/ItemTemplate&gt;
	&lt;/AR:</code><code>wrapperpanel</code><code>&gt;
</code></pre>
<p>The result would be:</p>
<pre><code>	&lt;div class='wrapper'&gt;
		&lt;div&gt;
			&lt;asp:Label ID='lbHeader' runat='server' /&gt;
		&lt;/div&gt;
		&lt;div&gt;
			Your content here
		&lt;/div&gt;
	&lt;/div&gt;
</code></pre>
<p>Now you can focus on what&#8217;s important and not worry about the wrapping html code.</p>
<p>Also using the TemplateInstance.Single attribute, you can access controls within your wrapper just as you would without it. If you didn&#8217;t use it, you willl have to access them using the FindControl function on wrapper control.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=99&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2008/12/04/aspnet-wrapper-panel/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>Heapsort in Arc</title>
		<link>http://gizmoworks.wordpress.com/2008/08/09/heapsort-in-arc/</link>
		<comments>http://gizmoworks.wordpress.com/2008/08/09/heapsort-in-arc/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 19:12:01 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[arc]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/?p=91</guid>
		<description><![CDATA[


(def parent (i)
    (trunc (/ i 2)))

(def left (i)
    (* 2 i))

(def right (i)
    (+ 1 (* 2 i)))

(def elm (h i)
    (let ind (- i 1)
        h.ind))

(def setval (h i val)
    (= [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=91&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><blockquote>
<pre>
<code style="font-size:12px;">
(def parent (i)
    (trunc (/ i 2)))

(def left (i)
    (* 2 i))

(def right (i)
    (+ 1 (* 2 i)))

(def elm (h i)
    (let ind (- i 1)
        h.ind))

(def setval (h i val)
    (= (h (- i 1)) val)
    h)

(def hswap (h i j)
    (= temp (elm h i))
    (setval h i (elm h j))
    (setval h j temp))

(def t-lgi (h idx (o curr))
    (if (empty idx)
        curr
        (t-lgi h (cdr idx) (if (no curr)
            (car idx)
            (&gt; (elm h (car idx)) (elm h curr))
            (car idx)
            curr))))

(def largesti (h idx (o hsize (len h)))
    (t-lgi h (keep [&gt;= hsize _] idx)))

(def max-heapify (h i (o hsize (len h)))
    (let largest
        (largesti h (list (left i) (right i) i) hsize)
        (when (~is i largest)
            (hswap h i largest)
            (max-heapify h largest hsize)))
      h)

(def build-max-heap (h (o hsize (len h)))
    (each x (rev:range 1 (trunc (/ hsize 2)))
        (max-heapify h x hsize))
    h)

(def heapsort (h)
    (hswap h 1 (len h))
     (each x (rev:range 2 (- (len h) 1))
        (max-heapify h 1 x)
        (hswap h 1 x))
      h)

;test
;(max-heapify '(16 4 10 14 7 9 3 2 8 1) 2)
;(heapsort '(16 14 10 8 7 9 3 2 4 1))

</code>
</pre>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/91/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/91/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/91/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/91/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/91/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=91&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2008/08/09/heapsort-in-arc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>C# Expressions</title>
		<link>http://gizmoworks.wordpress.com/2008/08/09/one-of-the-cooler-features-of-c-30/</link>
		<comments>http://gizmoworks.wordpress.com/2008/08/09/one-of-the-cooler-features-of-c-30/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 18:24:23 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[c-sharp]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/2008/08/09/one-of-the-cooler-features-of-c-30/</guid>
		<description><![CDATA[One of the cooler features of c# 3.0 are expression trees. A quick intro can be found here .
Now the fact that you can compile a function at runtime means that you can build a dynamic language on top of Linq Expressions.
Here&#8217;s a simple dynamic &#8220;XML Language&#8221; written using Expression Trees.
Basically, the idea here is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=62&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>One of the cooler features of c# 3.0 are expression trees. A quick intro can be found here .</p>
<p>Now the fact that you can compile a function at runtime means that you can build a dynamic language on top of Linq Expressions.</p>
<p>Here&#8217;s a simple dynamic &#8220;XML Language&#8221; written using Expression Trees.</p>
<p>Basically, the idea here is to have a one-to-one mapping between your XML expression and the Linq EXpressions themselves.</p>
<p>For example,<br />
 </p>
<p><code> </code><code style="font-size:12px;">&lt;Expression FunctionName="Constant" Type="System.String" Value="someval" /&gt;<br />
</code><br />
would create an Linq Expression of type</p>
<blockquote><p> </p>
<p><code style="font-size:12px;">Expression.Constant("someval",Type.GetType(string));</p>
<p></code> </p></blockquote>
<p>Here&#8217;s a related test for the mapping:</p>
<blockquote><p> </p>
<p><code style="font-size:12px;">[TestMethod]<br />
public void GetConstantTest()<br />
{<br />
XMLExpressionProvider expr = new XMLExpressionProvider();<br />
XElement elem = expr.BuildConstant(typeof(int).ToString(), "1");<br />
Assert.AreEqual("1", expr.GetConstant(elem));<br />
}</p>
<p></code> </p></blockquote>
<p>and related implementations:</p>
<blockquote><p> </p>
<p><code style="font-size:12px;">public XElement BuildConstant(string type, string value)<br />
{<br />
XElement elem = new XElement("Expression");<br />
elem.Add(new XAttribute("FunctionName", "Constant"));<br />
elem.Add(new XAttribute("Type", type));<br />
elem.Add(new XAttribute("Value", value));</p>
<p>return elem;<br />
}</p>
<p></code><code style="font-size:12px;"> public object GetConstant(XElement elem)<br />
{<br />
return elem.Attribute("Value").Value;<br />
}<br />
</code></p></blockquote>
<p>Binary operations can also be mapped similarly.</p>
<p>Here we&#8217;re creating a new Add Expression with the constants 1 and 2. This actually creates a xml representation for the Add Operation.</p>
<blockquote><p> </p>
<p><code style="font-size:12px;"> </code><code style="font-size:12px;"> [TestMethod]<br />
public void BuildExpressionTest()<br />
{<br />
XMLExpressionProvider expr = new XMLExpressionProvider();<br />
XElement xelm = expr.BuildExpression("Add", new[] {<br />
expr.BuildConstant(typeof(int).ToString(),"1"),<br />
expr.BuildConstant(typeof(int).ToString(),"2")});<br />
Assert.AreEqual(xelm.ToString(SaveOptions.DisableFormatting),<br />
"&lt;Expression FunctionName=\"Add\"&gt;&lt;Expression FunctionName=\"Constant\" Type=\"System.Int32\" Value=\"1\" /&gt;&lt;Expression FunctionName=\"Constant\" Type=\"System.Int32\" Value=\"2\" /&gt;&lt;/Expression&gt;");<br />
}<br />
</code></p></blockquote>
<p>Basically the XML Represenation would look like</p>
<blockquote><p> </p>
<p><code style="font-size:12px;"> </code><code style="font-size:12px;"> &lt;Expression FunctionName="Add"&gt;<br />
&lt;Expression FunctionName="Constant" Type="System.Int32" Value="1" /&gt;<br />
&lt;Expression FunctionName="Constant" Type="System.Int32" Value="2" /&gt;<br />
&lt;/Expression&gt;<br />
</code></p></blockquote>
<p>In the test below, we&#8217;re actually creating a XML Representation for a GreaterThan expression and executing it with different parameters.</p>
<blockquote><p> </p>
<p><code style="font-size:12px;"> </code><code style="font-size:12px;"> [TestMethod]<br />
public void ExpressionTest()<br />
{<br />
XMLExpressionProvider expr = new XMLExpressionProvider();<br />
ParameterExpression p = Expression.Parameter(typeof(int), "x");<br />
XElement elem = expr.BuildExpression("GreaterThan", new[] { expr.BuildConstant(typeof(int).ToString(), "5"), expr.BuildParameter(0) });<br />
Expression expression= expr.ExpressionFromXElement(elem, new [] {p});<br />
Expression&lt;Func&lt;int, bool&gt;&gt; e = Expression.Lambda&lt;Func&lt;int, bool&gt;&gt;(expression,new []{p});<br />
Console.WriteLine(e.ToString());<br />
Assert.IsTrue(e.Compile().Invoke(4));<br />
Assert.IsFalse(e.Compile().Invoke(7));<br />
}<br />
</code></p></blockquote>
<p>The heart of the implementation lies in the method ExpressionFromXElement which is implemented as</p>
<blockquote><p> </p>
<p><code style="font-size:12px;">public Expression ExpressionFromXElement(XElement elem, ParameterExpression [] p)<br />
{</p>
<p>if (IsExpression(elem))<br />
{</p>
<p>switch (GetFunctionName(elem))<br />
{<br />
case "Or":<br />
return Expression.Or(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1],p));<br />
case "And":<br />
return Expression.And(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1], p));<br />
case "LessThan":<br />
return Expression.LessThan(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1], p));<br />
case "GreaterThan":<br />
return Expression.GreaterThan(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1], p));<br />
case "Equal":<br />
return Expression.Equal(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1], p));<br />
case "Condition":<br />
return Expression.Condition(ExpressionFromXElement(GetArguments(elem)[0], p), ExpressionFromXElement(GetArguments(elem)[1], p), ExpressionFromXElement(GetArguments(elem)[2], p));<br />
case "Parameter":<br />
return p[Convert.ToInt32(elem.Attribute("Index").Value)];<br />
case "Constant":<br />
return Expression.Constant(((object)GetConstant(elem)),Type.GetType(elem.Attribute("Type").Value));<br />
case "Member":<br />
return Expression.PropertyOrField(ExpressionFromXElement(GetArguments(elem)[0], p), elem.Attribute("FieldName").Value);<br />
case "IsEmptyOrNull":<br />
return Expression.Or(<br />
Expression.Equal(ExpressionFromXElement(GetArguments(elem)[0], p), Expression.Constant(String.Empty)),<br />
Expression.Equal(ExpressionFromXElement(GetArguments(elem)[0], p), Expression.Constant(null)));<br />
default: throw new Exception();<br />
}<br />
}<br />
return null;<br />
}</p>
<p></code> </p></blockquote>
<p>You can also do member accesses:</p>
<blockquote><p> </p>
<p><code style="font-size:12px;">[TestMethod]<br />
public void MemberAccessTest()<br />
{<br />
XMLExpressionProvider expr = new XMLExpressionProvider();<br />
ParameterExpression p = Expression.Parameter(typeof(string), "str");<br />
XElement elem = expr.BuildMemberExpr("Length", new []{expr.BuildParameter(0)});<br />
Expression expression = expr.ExpressionFromXElement(elem, new[] { p });<br />
var e = Expression.Lambda&lt;Func&lt;string, int&gt;&gt;(expression, new[] { p });<br />
Console.WriteLine(e.ToString());<br />
Assert.AreEqual(6, e.Compile().Invoke("string"));<br />
Assert.AreEqual(3, e.Compile().Invoke("str"));<br />
}</p>
<p></code><code style="font-size:12px;"> [TestMethod]<br />
public void BuildMemberTest()<br />
{<br />
XMLExpressionProvider expr = new XMLExpressionProvider();<br />
Assert.AreEqual("&lt;Expression FunctionName=\"Member\" FieldName=\"MaxValue\"&gt;&lt;Expression FunctionName=\"Parameter\" Index=\"0\" /&gt;&lt;/Expression&gt;", expr.BuildMemberExpr("MaxValue", new []{expr.BuildParameter(0)} ).ToString(SaveOptions.DisableFormatting));<br />
}<br />
</code></p></blockquote>
<p>The examples given here should give you an idea of how it works and the possiblities that exist.</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/62/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/62/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/62/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/62/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/62/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=62&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2008/08/09/one-of-the-cooler-features-of-c-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>Another Primitive Obsession Solution</title>
		<link>http://gizmoworks.wordpress.com/2008/08/09/another-primitive-obsession-solution/</link>
		<comments>http://gizmoworks.wordpress.com/2008/08/09/another-primitive-obsession-solution/#comments</comments>
		<pubDate>Sat, 09 Aug 2008 16:44:54 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[c-sharp]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/?p=29</guid>
		<description><![CDATA[
There are a few suggested ways to handle primitive obsession. Personally, I would prefer:

public class Validated
{
private string _value;
private Regex _regex = null;

public Validated(string pattern)
{
_regex = new Regex(pattern);
}
public bool IsValid(string value)
{
if (_regex.IsMatch(value))
return true;
return false;
}
public string Value
{
get { return _value; }
set
{
if (IsValid(value))
_value = value;
else throw new FormatException("Invalid format.");
}
}
}

And use it as:

Validated zip = new Validated(@"/^\d{5}([\-]\d{4})?$/");
Validated email = [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=29&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="blog-content">
<p style="text-align:left;">There are a few suggested ways to handle primitive obsession. Personally, I would prefer:</p>
<blockquote><p><code style="font-size:larger;"><br />
public class Validated<br />
{<br />
private string _value;<br />
private Regex _regex = null;<br />
</code><br />
<code style="font-size:larger;">public Validated(string pattern)<br />
{<br />
_regex = new Regex(pattern);<br />
}</code></p>
<p><code style="font-size:larger;">public bool IsValid(string value)<br />
{<br />
if (_regex.IsMatch(value))<br />
return true;<br />
return false;<br />
}</code></p>
<p><code style="font-size:larger;">public string Value<br />
{<br />
get { return _value; }<br />
set<br />
{<br />
if (IsValid(value))<br />
_value = value;<br />
else throw new FormatException("Invalid format.");<br />
}<br />
}<br />
}<br />
</code></p></blockquote>
<p>And use it as:</p>
<blockquote><p><code style="font-size:larger;"><br />
Validated zip = new Validated(@"/^\d{5}([\-]\d{4})?$/");<br />
Validated email = new Validated(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$");<br />
zip.Value = "74445";<br />
email.Value = "example@yahoo.com";<br />
</code></p></blockquote>
<p>Now if you think that this is not flexible enough to accommodate all cases, try this,</p>
<blockquote><p><code style="font-size:larger;"><br />
public class Validated<br />
{<br />
private string _value;<br />
private Func&lt;string, bool&gt; IsValid;</code></p>
<p><code style="font-size:larger;"><br />
public Validated(Func&lt;string, bool&gt; isValid)<br />
{<br />
this.IsValid = isValid;<br />
}</code></p>
<p><code style="font-size:larger;"><br />
public string Value<br />
{<br />
get { return _value; }<br />
set<br />
{<br />
if (IsValid.Invoke(value))<br />
_value = value;<br />
else throw new FormatException("Invalid format.");<br />
}<br />
}<br />
}<br />
</code></p></blockquote>
<p>And use it as:</p>
<blockquote><p><code style="font-size:larger;">Validated zip = new Validated((z) =&gt; new Regex(@"/^\d{5}([\-]\d{4})?$/").IsMatch(z));<br />
Validated email = new Validated((e) =&gt; new Regex(@"^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$").IsMatch(e));<br />
zip.Value = "74445";<br />
email.Value = "example@yahoo.com";</code></p></blockquote>
</div>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/29/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/29/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=29&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2008/08/09/another-primitive-obsession-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>Palindrome in Lisp</title>
		<link>http://gizmoworks.wordpress.com/2007/06/28/palindrome-in-lisp/</link>
		<comments>http://gizmoworks.wordpress.com/2007/06/28/palindrome-in-lisp/#comments</comments>
		<pubDate>Thu, 28 Jun 2007 22:35:50 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/2007/06/28/palindrome-in-lisp/</guid>
		<description><![CDATA[Here&#8217;s my version of palindrome for lisp problems 99 no 06 found here



(defun last1 (lst)
  (car (last lst)))

(defun palin1 (lst)
  (if (equal nil lst)
  t
  (let ((start (first lst)) (finish (last1 lst)))
    (if (equal start finish)
    (palin1 (rest (butlast lst)))
    nil))))


  [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=12&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Here&#8217;s my version of palindrome for lisp problems 99 no 06 found <a href="http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html">here</a></p>
<blockquote>
<pre>
<code style="font-size:12px;">
(defun last1 (lst)
  (car (last lst)))

(defun palin1 (lst)
  (if (equal nil lst)
  t
  (let ((start (first lst)) (finish (last1 lst)))
    (if (equal start finish)
    (palin1 (rest (butlast lst)))
    nil))))
</code></pre>
</blockquote>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/12/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/12/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/12/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/12/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/12/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=12&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2007/06/28/palindrome-in-lisp/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>Factorial in Lisp</title>
		<link>http://gizmoworks.wordpress.com/2007/06/27/factorial-in-lisp/</link>
		<comments>http://gizmoworks.wordpress.com/2007/06/27/factorial-in-lisp/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 22:28:24 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[lisp]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/2007/06/27/factorial-in-lisp/</guid>
		<description><![CDATA[My implementation for factorial in Lisp. This is a response to a post found  here.
Also, it is tail recursive.



(defun fact (n)
       (labels ((rec (n acc)
           (if (&#60; n 2)
          [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=11&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>My implementation for factorial in Lisp. This is a response to a post found  <a href="http://worsethanfailure.com/Articles/Fd-Factorial.aspx">here.</a></p>
<p>Also, it is tail recursive.</p>
<blockquote>
<pre>
<code style="font-size:12px;">
(defun fact (n)
       (labels ((rec (n acc)
           (if (&lt; n 2)
           acc
           (rec (1- n ) (* acc n)))))
         (rec n 1)))
</code>
</pre>
</blockquote>
<p>ps: Factorial in Haskell seems easier though</p>
<blockquote>
<pre>
<code style="font-size:12px;">
fact 0 = 1
fact n = n * fact (n-1)
</code>
</pre>
</blockquote>
<p>or</p>
<blockquote>
<pre>
<code style="font-size:12px;">
fact = product . enumFromTo 1
</code>
</pre>
</blockquote>
<p>Edit: fixed the (&lt; n 1)  bug</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/11/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/11/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/11/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/11/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/11/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=11&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2007/06/27/factorial-in-lisp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
		<item>
		<title>Post With GWT</title>
		<link>http://gizmoworks.wordpress.com/2007/05/15/post-with-gwt/</link>
		<comments>http://gizmoworks.wordpress.com/2007/05/15/post-with-gwt/#comments</comments>
		<pubDate>Tue, 15 May 2007 17:23:00 +0000</pubDate>
		<dc:creator>gizmoworks</dc:creator>
				<category><![CDATA[grails]]></category>
		<category><![CDATA[gwt]]></category>

		<guid isPermaLink="false">http://gizmoworks.wordpress.com/2007/05/15/post-with-gwt/</guid>
		<description><![CDATA[This article is about integrating GWT with Grails. Here, GWT makes request to the Grails server which then returns a JSON object back to the GWT client.
Here&#8217;s a way to do post using GWT




RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
 "http://localhost:9098/json/json/jsontest");
rb.setHeader("Content-Type",
                 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=10&subd=gizmoworks&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>This article is about integrating GWT with Grails. Here, GWT makes request to the Grails server which then returns a JSON object back to the GWT client.</p>
<p>Here&#8217;s a way to do post using GWT</p>
<blockquote>
<pre>
<code style="font-size:12px;">

RequestBuilder rb = new RequestBuilder(RequestBuilder.POST,
 "http://localhost:9098/json/json/jsontest");
rb.setHeader("Content-Type",
                   "application/x-www-form-urlencoded");
try
{
    rb.sendRequest("jsontext="+hellothere.toString(),
                          new DateCallbackHandler());
}
catch (RequestException e) {
    Window.alert(e.toString());
}
</code>
</pre>
</blockquote>
<p>By the way, its calling a controller of a grails project.</p>
<p>Here&#8217;s how it handles it</p>
<blockquote>
<pre>
<code style="font-size:12px;">
def jsontest = {
   String _json = (params.jsontext)?
                         params.jsontext:'{"JSON":"text"}'
   JSONObject obj = new JSONObject(_json)
   render obj.getString("JSON")
}
</code>
</pre>
</blockquote>
<p>Edit:</p>
<p>Mary, you should be able to find that info somewhere on the web. Essentially, you create a RequestBuilder, send a request using <code><strong><a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/RequestBuilder.html#sendRequest%28java.lang.String,%20com.google.gwt.http.client.RequestCallback%29"></a></strong></code></p>
<p><code><strong><a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/RequestBuilder.html#sendRequest%28java.lang.String,%20com.google.gwt.http.client.RequestCallback%29">sendRequest</a></strong>(java.lang.String requestData,             <a title="interface in com.google.gwt.http.client" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/RequestCallback.html">RequestCallback</a> callback)</code></p>
<p>callback should be a class that inherits RequestCallback interface. Now RequestCallback has a method</p>
<p><code><strong><a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/RequestCallback.html#onResponseReceived%28com.google.gwt.http.client.Request,%20com.google.gwt.http.client.Response%29">onResponseReceived</a></strong>(<a title="class in com.google.gwt.http.client" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/Request.html">Request</a> request,                    <a title="class in com.google.gwt.http.client" href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/Response.html">Response</a> response)</code></p>
<p>that you should implement, and Response has some methods like <code><strong><a href="http://google-web-toolkit.googlecode.com/svn/javadoc/1.4/com/google/gwt/http/client/Response.html#getText%28%29">getText</a></strong>()</code> that you can use.</p>
<p>Cheers</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/gizmoworks.wordpress.com/10/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/gizmoworks.wordpress.com/10/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/gizmoworks.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/gizmoworks.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/gizmoworks.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/gizmoworks.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/gizmoworks.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/gizmoworks.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/gizmoworks.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/gizmoworks.wordpress.com/10/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/gizmoworks.wordpress.com/10/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/gizmoworks.wordpress.com/10/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=gizmoworks.wordpress.com&blog=1009804&post=10&subd=gizmoworks&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://gizmoworks.wordpress.com/2007/05/15/post-with-gwt/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/d53ae50cd01c8159bbd9c45e10bf1bf7?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">arcman</media:title>
		</media:content>
	</item>
	</channel>
</rss>