<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:planet="http://planet.intertwingly.net/" xmlns:indexing="urn:atom-extension:indexing" indexing:index="no"><access:restriction xmlns:access="http://www.bloglines.com/about/specs/fac-1.0" relationship="deny"/>
  <title>Planet FoxPro</title>
  <updated>2012-02-09T11:36:51Z</updated>
  <generator uri="http://intertwingly.net/code/venus/">Venus</generator>
  <author>
    <name>Ted Roche</name>
    <email>tedroche@tedroche.com</email>
  </author>
  <id>http://www.tedroche.com/planetfox/atom.xml</id>
  <link href="http://www.tedroche.com/planetfox/atom.xml" rel="self" type="application/atom+xml"/>
  <link href="http://www.tedroche.com/planetfox/" rel="alternate"/>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-1987002787440537455</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/1987002787440537455/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=1987002787440537455" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1987002787440537455" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1987002787440537455" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_09.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Viera-Wetlands-Florida/i-jWDvLZT/0/L/D300123w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Viera-Wetlands-Florida/i-jWDvLZT/0/L/D300123w-M.jpg"/></a><br/>Shoveler<br/>Viera Wetlands<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-1987002787440537455?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-09T06:00:00Z</updated>
    <published>2012-02-09T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.tedroche.com/?p=3668</id>
    <link href="http://blog.tedroche.com/2012/02/08/ot-hitler-apple-gates-and-godwins-law/" rel="alternate" type="text/html"/>
    <title>[OT] Hitler, Apple, Gates and Godwin’s Law</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Pilloried for pointing out Godwin's Law, rather than just letting it blow over, Ted strikes back using the awesome power of the blog... <a href="http://blog.tedroche.com/2012/02/08/ot-hitler-apple-gates-and-godwins-law/">Continue reading <span class="meta-nav">→</span></a></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Perhaps there is a corollary (if not, let’s coin Roche’s Rule) to <a href="http://en.wikipedia.org/wiki/Godwin%27s_law">Godwin’s Law</a> — briefly, that any discussion is practically over when it degenerates to metaphors of Naziism — that those who call off Godwin are in turn berated as thread police, censors, infringers on some divine human right to drag threads off topic and, yes, with all the irony involved, Nazis. In this response, I make the foolish mistake of not ignoring the troll bait. I am as guilty of overreacting as the hyperbole used by the original poster to compare Apple with Hitler.</p>
<p>Hitler burned, gassed, tortured, shot seven million Jews in concentration camps. Millions more, of all faiths, died defeating him.</p>
<p>The late Steve Jobs charged premium dollars (and sometimes outrageous fees!) to keep his company out there and competing in the tough markets of computers and software. Apple makes beautiful industrial design, often as impractical as Lamborghinis. They sell DRM-crippled music. They have pushed the envelope of consumer computing, much as Microsoft “innovated” back in the days when they had competition. Apple has sold a billion songs. I admire and respect Jobs, as an empire builder, like Gates and Olsen and Carnegie before him, but I don’t spend the money to buy many of his products, as I’m cheap. I have philosophical differences with Apple, too, but I’d probably buy an iPhone if I hit the lottery. They’re shiny. But, unlike some, I’m not betting my business on them.</p>
<p>Microsoft’s behavior has often been as outrageous as Apples, having been pulled into court a few times, regularly making their large corporate customers buy computers with Windows pre-installed and then pay again and again for licenses to run their OS, access their machines remotely, or run software on them, switching their license fees and terms and dropping products that are near and dear to all of our hearts. I’m not ABM as much as preferring what works best. Windows DirectX is supposed to be a good gaming platform. I hear XBoxes are great for Netflix. I use a Microsoft keyboard and mouse. I happen to think that Microsoft Windows on the desktop is here to stay, even with the incredible drag it puts on businesses with malware problems, poor performance and high cost. I do not, however, think that “the desktop” is here to stay, as a metaphor for people to do their business, and I look forward to Microsoft’s stranglehold on their clients breaking with some Next Big Thing. Off the desktop, I really don’t see Microsoft having contributed that much to the state of computing through their many (many, many) acquisitions. I prefer other brands for networking, server OSes, database servers, programming languages and technologies, not through some blind hatred as much as hard-earned experience. But that’s off-topic…</p>
<p>[The poster who tripped Godwin's Law...] ‘s post doesn’t have much to do with the topic of the thread, Linux, and is a really offensive comparison to some of us. Hitler and Naziism was one of the most horrific incidents of modern history and to minimize it by comparing it to shiny overpriced phones dehumanizes us all. Gates is not Idi Amin. The cellphone landscape does not resemble Dafur. Let’s get some perspective here, people.</p>
<p>There’s a difference between policing a thread, trying to manage to stay on topic, and censorship. I invoked Godwin’s Law to point out that the thread has likely run its course. You’re free to say what you want. I’m free to point out you’re off-topic.</p>
<p>So, if you want to keep on-topic on the “Linux Desktop Thread” I have some insight and informed opinions on the matter, having run Linux as my desktop for six years now, supporting a half-dozen clients with LAMP boxes in their offices, and developed some dozen or more LAMP applications. If you want to go off-kilter onto iPhones and Google as “liars and thieves,” why don’t you go start your own thread?</p>
<p>(Full disclosure: as I’ve mentioned before [<a href="http://blog.tedroche.com/disclaimers">blog.tedroche.com/disclaimers</a>], I purchased a tiny bit of Apple stock a long time ago. It’s now worth a lot more than I paid for it, through no fault nor skill of mine. I also own tiny bits of Red Hat, HP and Microsoft. They’re still tiny. I don’t think this influences my opinion all that much, but I let my possible biases be known.)</p></div>
    </content>
    <updated>2012-02-08T20:01:49Z</updated>
    <category term="Apple Macintosh OS X"/>
    <category term="Microsoft"/>
    <category term="OpenSource"/>
    <category term="Personal"/>
    <category term="Technology"/>
    <category term="Apple"/>
    <category term="Gates"/>
    <category term="Godwin"/>
    <category term="Hitler"/>
    <category term="Red Hat"/>
    <author>
      <name>tedroche</name>
    </author>
    <source>
      <id>http://blog.tedroche.com</id>
      <link href="http://blog.tedroche.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://blog.tedroche.com" rel="alternate" type="text/html"/>
      <subtitle>Mission: Interoperable. Working Well with Others Is Good. Competition breeds Innovation. Monopolies breed stagnation.</subtitle>
      <title>Ted Roche's weblog</title>
      <updated>2012-02-09T11:34:25Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.08-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Editor comments: <b><i>Deleted spam</i></b>
<br/>
I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations.<a href="http://www.yourminskapartment.com/">minsk apartment</a>
<br/>
I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --
<br/>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a>
<br/>
 The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)
<br/>

<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:
<br/>
</s> <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a>
<br/>
<br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a>
<br/>
<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2003.01.13"/> The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></div>
    </summary>
    <updated>2012-02-08T12:36:53Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-09T11:32:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://feeds.feedburner.com/1262439_201202081028</id>
    <link href="http://feedproxy.google.com/~r/RickStrahl/~3/MS9XK_eWO1s/Creating-a-dynamic-extensible-C-Expando-Object" rel="alternate" type="text/html"/>
    <title>Creating a dynamic, extensible C# Expando Object</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I love dynamic functionality in a strongly typed language because it offers us the best of both worlds. In C# (or any of the main .NET languages) we now have the <em>dynamic</em> type that provides a host of dynamic features for the static C# language.</p> <p>One place where I've found dynamic to be incredibly useful is in building extensible types or types that expose traditionally non-object data (like dictionaries) in easier to use and more readable syntax. I wrote about a couple of these for accessing old school ADO.NET <a href="http://www.west-wind.com/weblog/posts/2011/Nov/24/Creating-a-Dynamic-DataRow-for-easier-DataRow-Syntax" target="_blank">DataRows</a> and <a href="http://www.west-wind.com/weblog/posts/2011/Dec/06/Creating-a-Dynamic-DataReader-for-easier-Property-Access" target="_blank">DataReaders</a> more easily for example. These classes are dynamic wrappers that provide easier syntax and auto-type conversions which greatly simplifies code clutter and increases clarity in existing code.</p> <h3>ExpandoObject in .NET 4.0</h3> <p>Another great use case for dynamic objects is the ability to create extensible objects - objects that start out with a set of static members and then can add additional properties and even methods dynamically. The .NET 4.0 framework actually includes an <a href="http://msdn.microsoft.com/en-us/library/system.dynamic.expandoobject.aspx" target="_blank">ExpandoObject class</a> which provides a very dynamic object that allows you to add properties and methods on the fly and then access them again.</p> <p>For example with ExpandoObject you can do stuff like this:</p><pre class="code"><span style="color: blue;">dynamic </span>expand = <span style="color: blue;">new </span>ExpandoObject();

expand.Name = <span style="color: #a31515;">"Rick"</span>;
expand.HelloWorld = (<span style="color: #2b91af;">Func</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">string</span>&gt;) ((<span style="color: blue;">string </span>name) =&gt; 
{ 
    <span style="color: blue;">return </span><span style="color: #a31515;">"Hello " </span>+ name; 
});

<span style="color: #2b91af;">Console</span>.WriteLine(expand.Name);
<span style="color: #2b91af;">Console</span>.WriteLine(expand.HelloWorld(<span style="color: #a31515;">"Dufus"</span>));</pre>
<p>Internally ExpandoObject uses a Dictionary like structure and interface to store properties and methods and then allows you to add and access properties and methods easily. As cool as ExpandoObject is it has a few shortcomings too:</p>
<ul>
<li>It's a sealed type so you can't use it as a base class 
</li><li>It only works off 'properties' in the internal Dictionary - you can't expose existing type data 
</li><li>It doesn't serialize to XML or with DataContractSerializer/DataContractJsonSerializer</li></ul>
<h3>Expando - A truly extensible Object</h3>
<p>ExpandoObject is nice if you just need a dynamic container for a dictionary like structure. However, if you want to build an extensible object that starts out with a set of strongly typed properties and then allows you to extend it, ExpandoObject does not work because it's a sealed class that can't be inherited.</p>
<p>I started thinking about this very scenario for one of my applications I'm building for a customer. In this system we are connecting to various different user stores. Each user store has the same basic requirements for username, password, name etc. But then each store also has a number of extended properties that is available to each application. In the real world scenario the data is loaded from the database in a data reader and the known properties are assigned from the known fields in the database. All unknown fields are then 'added' to the expando object dynamically.</p>
<p>In the past I've done this very thing with a separate property - Properties - just like I do for this class. But the property and dictionary syntax is not ideal and tedious to work with.</p>
<p>I started thinking about how to represent these extra property structures. One way certainly would be to add a Dictionary, or an ExpandoObject to hold all those extra properties. But wouldn't it be nice if the application could actually extend an existing object that looks something like this as you can with the Expando object:</p><pre class="code"><span style="color: blue;">public class </span><span style="color: #2b91af;">User </span>: Westwind.Utilities.Dynamic.<span style="color: #2b91af;">Expando
</span>{
    <span style="color: blue;">public string </span>Email { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public string </span>Password { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public string </span>Name { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public bool </span>Active { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public </span><span style="color: #2b91af;">DateTime</span>? ExpiresOn { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
}

</pre>
<p>and then simply start extending the properties of this object dynamically? Using the Expando object I describe later you can now do the following:</p><pre class="code">[<span style="color: #2b91af;">TestMethod</span>]
<span style="color: blue;">public void </span>UserExampleTest()
{            
    <span style="color: blue;">var </span>user = <span style="color: blue;">new </span><span style="color: #2b91af;">User</span>();

    <span style="color: green;">// Set strongly typed properties
    </span>user.Email = <span style="color: #a31515;">"rick@west-wind.com"</span>;
    user.Password = <span style="color: #a31515;">"nonya123"</span>;
    user.Name = <span style="color: #a31515;">"Rickochet"</span>;
    user.Active = <span style="color: blue;">true</span>;

    <span style="color: green;">// Now add dynamic properties
    </span><span style="color: blue;">dynamic </span>duser = user;
    duser.Entered = <span style="color: #2b91af;">DateTime</span>.Now;
    duser.Accesses = 1;

    <span style="color: green;">// you can also add dynamic props via indexer
    </span>user[<span style="color: #a31515;">"NickName"</span>] = <span style="color: #a31515;">"AntiSocialX"</span>;
    duser[<span style="color: #a31515;">"WebSite"</span>] = <span style="color: #a31515;">"http://www.west-wind.com/weblog"</span>;

<span style="color: green;">
    // Access strong type through dynamic ref
    </span><span style="color: #2b91af;">Assert</span>.AreEqual(user.Name,duser.Name);

    <span style="color: green;">// Access strong type through indexer 
    </span><span style="color: #2b91af;">Assert</span>.AreEqual(user.Password,user[<span style="color: #a31515;">"Password"</span>]);
    

    <span style="color: green;">// access dyanmically added value through indexer
    </span><span style="color: #2b91af;">Assert</span>.AreEqual(duser.Entered,user[<span style="color: #a31515;">"Entered"</span>]);
    
    <span style="color: green;">// access index added value through dynamic
    </span><span style="color: #2b91af;">Assert</span>.AreEqual(user[<span style="color: #a31515;">"NickName"</span>],duser.NickName);
    

    <span style="color: green;">// loop through all properties dynamic AND strong type properties (true)
    </span><span style="color: blue;">foreach </span>(<span style="color: blue;">var </span>prop <span style="color: blue;">in </span>user.GetProperties(<span style="color: blue;">true</span>))
    { 
        <span style="color: blue;">object </span>val = prop.Value;
        <span style="color: blue;">if </span>(val == <span style="color: blue;">null</span>)
            val = <span style="color: #a31515;">"null"</span>;

        <span style="color: #2b91af;">Console</span>.WriteLine(prop.Key + <span style="color: #a31515;">": " </span>+ val.ToString());
    }
}
</pre>
<p>As you can see this code somewhat blurs the line between a static and dynamic type. You start with a strongly typed object that has a fixed set of properties. You can then cast the object to dynamic (<a href="http://www.west-wind.com/weblog/posts/2012/Feb/01/Dynamic-Types-and-DynamicObject-References-in-C">as I discussed in my last post</a>) and add additional properties to the object. You can also use an indexer to add dynamic properties to the object. </p>
<p>To access the strongly typed properties you can use either the strongly typed instance, the indexer or the dynamic cast of the object. Personally I think it's kinda cool to have an easy way to access strongly typed properties by string which can make some data scenarios much easier.</p>
<p>To access the 'dynamically added' properties you can use either the indexer on the strongly typed object, or property syntax on the dynamic cast.</p>
<p>Using the dynamic type allows all three modes to work on both strongly typed and dynamic properties.</p>
<p>Finally you can iterate over all properties, both dynamic and strongly typed if you chose. Lots of flexibility.</p>
<p>Note also that by default the Expando object works against the (this) instance meaning it extends the current object. You can also pass in a separate instance to the constructor in which case that object will be used to iterate over to find properties rather than this.</p>
<p>Using this approach provides some really interesting functionality when use the dynamic type. To use this we have to add an explicit constructor to the Expando subclass:</p><pre class="code"><span style="color: blue;">public class </span><span style="color: #2b91af;">User </span>: Westwind.Utilities.Dynamic.<span style="color: #2b91af;">Expando
</span>{
    <span style="color: blue;">public string </span>Email { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public string </span>Password { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public string </span>Name { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public bool </span>Active { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public </span><span style="color: #2b91af;">DateTime</span>? ExpiresOn { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }

    <span style="color: blue;">public </span>User() : <span style="color: blue;">base</span>()
    { }

    <span style="color: green;">// only required if you want to mix in seperate instance
    </span><span style="color: blue;">public </span>User(<span style="color: blue;">object </span>instance)
        : <span style="color: blue;">base</span>(instance)
    {
    }
}
</pre>
<p>to allow the instance to be passed. When you do you can now do:</p><pre class="code">[<span style="color: #2b91af;">TestMethod</span>]
<span style="color: blue;">public void </span>ExpandoMixinTest()
{
    <span style="color: green;">// have Expando work on Addresses
    </span><span style="color: blue;">var </span>user = <span style="color: blue;">new </span><span style="color: #2b91af;">User</span>( <span style="color: blue;">new </span><span style="color: #2b91af;">Address</span>() );

    <span style="color: green;">// cast to dynamicAccessToPropertyTest
    </span><span style="color: blue;">dynamic </span>duser = user;

    <span style="color: green;">// Set strongly typed properties
    </span>duser.Email = <span style="color: #a31515;">"rick@west-wind.com"</span>;
    user.Password = <span style="color: #a31515;">"nonya123"</span>;
    
    <span style="color: green;">// Set properties on address object
    </span>duser.Address = <span style="color: #a31515;">"32 Kaiea"</span>;
    <span style="color: green;">//duser.Phone = "808-123-2131";

    // set dynamic properties
    </span>duser.NonExistantProperty = <span style="color: #a31515;">"This works too"</span>;

    <span style="color: green;">// shows default value Address.Phone value
    </span><span style="color: #2b91af;">Console</span>.WriteLine(duser.Phone);

}</pre>
<p><br/>Using the dynamic cast in this case allows you to access *three* different 'objects': The strong type properties, the dynamically added properties in the dictionary and the properties of the instance passed in! Effectively this gives you a way to simulate multiple inheritance (which is scary - so be very careful with this, but you can do it).</p>
<h3>How Expando works</h3>
<p>Behind the scenes Expando is a DynamicObject subclass as <a href="http://www.west-wind.com/weblog/posts/2012/Feb/01/Dynamic-Types-and-DynamicObject-References-in-C">I discussed in my last post</a>. By implementing a few of DynamicObject's methods you can basically create a type that can trap 'property missing' and 'method missing' operations. When you access a non-existant property a known method is fired that our code can intercept and provide a value for. Internally Expando uses a custom dictionary implementation to hold the dynamic properties you might add to your expandable object.</p>
<p>Let's look at code first. The code for the Expando type is straight forward and given what it provides relatively short. Here it is.</p><pre class="code"><span style="color: blue;">using </span>System;
<span style="color: blue;">using </span>System.Collections.Generic;
<span style="color: blue;">using </span>System.Linq;
<span style="color: blue;">using </span>System.Dynamic;
<span style="color: blue;">using </span>System.Reflection;

<span style="color: blue;">namespace </span>Westwind.Utilities.Dynamic
{
    <span style="color: gray;">/// &lt;summary&gt;
    /// </span><span style="color: green;">Class that provides extensible properties and methods. This
    </span><span style="color: gray;">/// </span><span style="color: green;">dynamic object stores 'extra' properties in a dictionary or
    </span><span style="color: gray;">/// </span><span style="color: green;">checks the actual properties of the instance.
    </span><span style="color: gray;">/// 
    /// </span><span style="color: green;">This means you can subclass this expando and retrieve either
    </span><span style="color: gray;">/// </span><span style="color: green;">native properties or properties from values in the dictionary.
    </span><span style="color: gray;">/// 
    /// </span><span style="color: green;">This type allows you three ways to access its properties:
    </span><span style="color: gray;">/// 
    /// </span><span style="color: green;">Directly: any explicitly declared properties are accessible
    </span><span style="color: gray;">/// </span><span style="color: green;">Dynamic: dynamic cast allows access to dictionary and native properties/methods
    </span><span style="color: gray;">/// </span><span style="color: green;">Dictionary: Any of the extended properties are accessible via IDictionary interface
    </span><span style="color: gray;">/// &lt;/summary&gt;
    </span>[<span style="color: #2b91af;">Serializable</span>]
    <span style="color: blue;">public class </span><span style="color: #2b91af;">Expando </span>: <span style="color: #2b91af;">DynamicObject</span>, <span style="color: #2b91af;">IDynamicMetaObjectProvider
    </span>{
        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Instance of object passed in
        </span><span style="color: gray;">/// &lt;/summary&gt;
        </span><span style="color: blue;">object </span>Instance;

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Cached type of the instance
        </span><span style="color: gray;">/// &lt;/summary&gt;
        </span><span style="color: #2b91af;">Type </span>InstanceType;

        <span style="color: #2b91af;">PropertyInfo</span>[] InstancePropertyInfo
        {
            <span style="color: blue;">get
            </span>{
                <span style="color: blue;">if </span>(_InstancePropertyInfo == <span style="color: blue;">null </span>&amp;&amp; Instance != <span style="color: blue;">null</span>)                
                    _InstancePropertyInfo = Instance.GetType().GetProperties(<span style="color: #2b91af;">BindingFlags</span>.Instance | </pre><pre class="code">                                                          <span style="color: #2b91af;">BindingFlags</span>.Public | <span style="color: #2b91af;">BindingFlags</span>.DeclaredOnly);
                <span style="color: blue;">return </span>_InstancePropertyInfo;                
            }
        }
        <span style="color: #2b91af;">PropertyInfo</span>[] _InstancePropertyInfo;


        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">String Dictionary that contains the extra dynamic values
        </span><span style="color: gray;">/// </span><span style="color: green;">stored on this object/instance
        </span><span style="color: gray;">/// &lt;/summary&gt;        
        /// &lt;remarks&gt;</span><span style="color: green;">Using PropertyBag to support XML Serialization of the dictionary</span><span style="color: gray;">&lt;/remarks&gt;
        </span><span style="color: blue;">public </span><span style="color: #2b91af;">PropertyBag </span>Properties = <span style="color: blue;">new </span><span style="color: #2b91af;">PropertyBag</span>();

        <span style="color: green;">//public Dictionary&lt;string,object&gt; Properties = new Dictionary&lt;string, object&gt;();

        </span><span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">This constructor just works off the internal dictionary and any 
        </span><span style="color: gray;">/// </span><span style="color: green;">public properties of this object.
        </span><span style="color: gray;">/// 
        /// </span><span style="color: green;">Note you can subclass Expando.
        </span><span style="color: gray;">/// &lt;/summary&gt;
        </span><span style="color: blue;">public </span>Expando() 
        {
            Initialize(<span style="color: blue;">this</span>);            
        }

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Allows passing in an existing instance variable to 'extend'.        
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;remarks&gt;
        /// </span><span style="color: green;">You can pass in null here if you don't want to 
        </span><span style="color: gray;">/// </span><span style="color: green;">check native properties and only check the Dictionary!
        </span><span style="color: gray;">/// &lt;/remarks&gt;
        /// &lt;param name="instance"&gt;&lt;/param&gt;
        </span><span style="color: blue;">public </span>Expando(<span style="color: blue;">object </span>instance)
        {
            Initialize(instance);
        }


        <span style="color: blue;">protected virtual void </span>Initialize(<span style="color: blue;">object </span>instance)
        {
            Instance = instance;
            <span style="color: blue;">if </span>(instance != <span style="color: blue;">null</span>)
                InstanceType = instance.GetType();           
        }


       <span style="color: gray;">/// &lt;summary&gt;
       /// </span><span style="color: green;">Try to retrieve a member by name first from instance properties
       </span><span style="color: gray;">/// </span><span style="color: green;">followed by the collection entries.
       </span><span style="color: gray;">/// &lt;/summary&gt;
       /// &lt;param name="binder"&gt;&lt;/param&gt;
       /// &lt;param name="result"&gt;&lt;/param&gt;
       /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public override bool </span>TryGetMember(<span style="color: #2b91af;">GetMemberBinder </span>binder, <span style="color: blue;">out object </span>result)
        {
            result = <span style="color: blue;">null</span>;

            <span style="color: green;">// first check the Properties collection for member
            </span><span style="color: blue;">if </span>(Properties.Keys.Contains(binder.Name))
            {
                result = Properties[binder.Name];
                <span style="color: blue;">return true</span>;
            }


            <span style="color: green;">// Next check for Public properties via Reflection
            </span><span style="color: blue;">if </span>(Instance != <span style="color: blue;">null</span>)
            {
                <span style="color: blue;">try
                </span>{
                    <span style="color: blue;">return </span>GetProperty(Instance, binder.Name, <span style="color: blue;">out </span>result);                    
                }
                <span style="color: blue;">catch </span>{ }
            }

            <span style="color: green;">// failed to retrieve a property
            </span>result = <span style="color: blue;">null</span>;
            <span style="color: blue;">return false</span>;
        }


        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Property setter implementation tries to retrieve value from instance 
        </span><span style="color: gray;">/// </span><span style="color: green;">first then into this object
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="binder"&gt;&lt;/param&gt;
        /// &lt;param name="value"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public override bool </span>TrySetMember(<span style="color: #2b91af;">SetMemberBinder </span>binder, <span style="color: blue;">object </span>value)
        {

            <span style="color: green;">// first check to see if there's a native property to set
            </span><span style="color: blue;">if </span>(Instance != <span style="color: blue;">null</span>)
            {
                <span style="color: blue;">try
                </span>{
                    <span style="color: blue;">bool </span>result = SetProperty(Instance, binder.Name, value);
                    <span style="color: blue;">if </span>(result)
                        <span style="color: blue;">return true</span>;
                }
                <span style="color: blue;">catch </span>{ }
            }
            
            <span style="color: green;">// no match - set or add to dictionary
            </span>Properties[binder.Name] = value;
            <span style="color: blue;">return true</span>;
        }

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Dynamic invocation method. Currently allows only for Reflection based
        </span><span style="color: gray;">/// </span><span style="color: green;">operation (no ability to add methods dynamically).
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="binder"&gt;&lt;/param&gt;
        /// &lt;param name="args"&gt;&lt;/param&gt;
        /// &lt;param name="result"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public override bool </span>TryInvokeMember(<span style="color: #2b91af;">InvokeMemberBinder </span>binder, <span style="color: blue;">object</span>[] args, <span style="color: blue;">out object </span>result)
        {
            <span style="color: blue;">if </span>(Instance != <span style="color: blue;">null</span>)
            {
                <span style="color: blue;">try
                </span>{
                    <span style="color: green;">// check instance passed in for methods to invoke
                    </span><span style="color: blue;">if </span>(InvokeMethod(Instance, binder.Name, args, <span style="color: blue;">out </span>result))
                        <span style="color: blue;">return true</span>;                    
                }
                <span style="color: blue;">catch </span>{ }
            }

            result = <span style="color: blue;">null</span>;
            <span style="color: blue;">return false</span>;
        }
        

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Reflection Helper method to retrieve a property
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="instance"&gt;&lt;/param&gt;
        /// &lt;param name="name"&gt;&lt;/param&gt;
        /// &lt;param name="result"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">protected bool </span>GetProperty(<span style="color: blue;">object </span>instance, <span style="color: blue;">string </span>name, <span style="color: blue;">out object </span>result)
        {
            <span style="color: blue;">if </span>(instance == <span style="color: blue;">null</span>)
                instance = <span style="color: blue;">this</span>;

            <span style="color: blue;">var </span>miArray = InstanceType.GetMember(name, <span style="color: #2b91af;">BindingFlags</span>.Public | </pre><pre class="code">                                      <span style="color: #2b91af;">BindingFlags</span>.GetProperty | <span style="color: #2b91af;">BindingFlags</span>.Instance);
            <span style="color: blue;">if </span>(miArray != <span style="color: blue;">null </span>&amp;&amp; miArray.Length &gt; 0)
            {
                <span style="color: blue;">var </span>mi = miArray[0];
                <span style="color: blue;">if </span>(mi.MemberType == <span style="color: #2b91af;">MemberTypes</span>.Property)
                {
                    result = ((<span style="color: #2b91af;">PropertyInfo</span>)mi).GetValue(instance,<span style="color: blue;">null</span>);
                    <span style="color: blue;">return true</span>;
                }
            }

            result = <span style="color: blue;">null</span>;
            <span style="color: blue;">return false</span>;                
        }

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Reflection helper method to set a property value
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="instance"&gt;&lt;/param&gt;
        /// &lt;param name="name"&gt;&lt;/param&gt;
        /// &lt;param name="value"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">protected bool </span>SetProperty(<span style="color: blue;">object </span>instance, <span style="color: blue;">string </span>name, <span style="color: blue;">object </span>value)
        {
            <span style="color: blue;">if </span>(instance == <span style="color: blue;">null</span>)
                instance = <span style="color: blue;">this</span>;

            <span style="color: blue;">var </span>miArray = InstanceType.GetMember(name, <span style="color: #2b91af;">BindingFlags</span>.Public | </pre><pre class="code">                                                       <span style="color: #2b91af;">BindingFlags</span>.SetProperty | </pre><pre class="code">                                                       <span style="color: #2b91af;">BindingFlags</span>.Instance);
            <span style="color: blue;">if </span>(miArray != <span style="color: blue;">null </span>&amp;&amp; miArray.Length &gt; 0)
            {
                <span style="color: blue;">var </span>mi = miArray[0];
                <span style="color: blue;">if </span>(mi.MemberType == <span style="color: #2b91af;">MemberTypes</span>.Property)
                {
                    ((<span style="color: #2b91af;">PropertyInfo</span>)mi).SetValue(Instance, value, <span style="color: blue;">null</span>);
                    <span style="color: blue;">return true</span>;
                }
            }
            <span style="color: blue;">return false</span>;                
        }

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Reflection helper method to invoke a method
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="instance"&gt;&lt;/param&gt;
        /// &lt;param name="name"&gt;&lt;/param&gt;
        /// &lt;param name="args"&gt;&lt;/param&gt;
        /// &lt;param name="result"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">protected bool </span>InvokeMethod(<span style="color: blue;">object </span>instance, <span style="color: blue;">string </span>name, <span style="color: blue;">object</span>[] args, <span style="color: blue;">out object </span>result)
        {
            <span style="color: blue;">if </span>(instance == <span style="color: blue;">null</span>)
                instance = <span style="color: blue;">this</span>;

            <span style="color: green;">// Look at the instanceType
            </span><span style="color: blue;">var </span>miArray = InstanceType.GetMember(name,
                                    <span style="color: #2b91af;">BindingFlags</span>.InvokeMethod |
                                    <span style="color: #2b91af;">BindingFlags</span>.Public | <span style="color: #2b91af;">BindingFlags</span>.Instance);

            <span style="color: blue;">if </span>(miArray != <span style="color: blue;">null </span>&amp;&amp; miArray.Length &gt; 0)
            {
                <span style="color: blue;">var </span>mi = miArray[0] <span style="color: blue;">as </span><span style="color: #2b91af;">MethodInfo</span>;
                result = mi.Invoke(Instance, args);
                <span style="color: blue;">return true</span>;
            }

            result = <span style="color: blue;">null</span>;
            <span style="color: blue;">return false</span>;
        }



        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Convenience method that provides a string Indexer 
        </span><span style="color: gray;">/// </span><span style="color: green;">to the Properties collection AND the strongly typed
        </span><span style="color: gray;">/// </span><span style="color: green;">properties of the object by name.
        </span><span style="color: gray;">/// 
        /// </span><span style="color: green;">// dynamic
        </span><span style="color: gray;">/// </span><span style="color: green;">exp["Address"] = "112 nowhere lane"; 
        </span><span style="color: gray;">/// </span><span style="color: green;">// strong
        </span><span style="color: gray;">/// </span><span style="color: green;">var name = exp["StronglyTypedProperty"] as string; 
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;remarks&gt;
        /// </span><span style="color: green;">The getter checks the Properties dictionary first
        </span><span style="color: gray;">/// </span><span style="color: green;">then looks in PropertyInfo for properties.
        </span><span style="color: gray;">/// </span><span style="color: green;">The setter checks the instance properties before
        </span><span style="color: gray;">/// </span><span style="color: green;">checking the Properties dictionary.
        </span><span style="color: gray;">/// &lt;/remarks&gt;
        /// &lt;param name="key"&gt;&lt;/param&gt;
        /// 
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public object this</span>[<span style="color: blue;">string </span>key]
        {
            <span style="color: blue;">get
            </span>{
                <span style="color: blue;">try
                </span>{
                    <span style="color: green;">// try to get from properties collection first
                    </span><span style="color: blue;">return </span>Properties[key];
                }
                <span style="color: blue;">catch </span>(<span style="color: #2b91af;">KeyNotFoundException </span>ex)
                {
                    <span style="color: green;">// try reflection on instanceType
                    </span><span style="color: blue;">object </span>result = <span style="color: blue;">null</span>;
                    <span style="color: blue;">if </span>(GetProperty(Instance, key, <span style="color: blue;">out </span>result))
                        <span style="color: blue;">return </span>result;

                    <span style="color: green;">// nope doesn't exist
                    </span><span style="color: blue;">throw</span>;
                }
            }
            <span style="color: blue;">set
            </span>{
                <span style="color: blue;">if </span>(Properties.ContainsKey(key))
                {
                    Properties[key] = <span style="color: blue;">value</span>;
                    <span style="color: blue;">return</span>;
                }

                <span style="color: green;">// check instance for existance of type first
                </span><span style="color: blue;">var </span>miArray = InstanceType.GetMember(key, <span style="color: #2b91af;">BindingFlags</span>.Public | <span style="color: #2b91af;">BindingFlags</span>.GetProperty);
                <span style="color: blue;">if </span>(miArray != <span style="color: blue;">null </span>&amp;&amp; miArray.Length &gt; 0)
                    SetProperty(Instance, key, <span style="color: blue;">value</span>);
                <span style="color: blue;">else
                    </span>Properties[key] = <span style="color: blue;">value</span>;
            }
        }<span style="color: blue;">


        </span><span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Returns and the properties of 
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="includeProperties"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public </span><span style="color: #2b91af;">IEnumerable</span>&lt;<span style="color: #2b91af;">KeyValuePair</span>&lt;<span style="color: blue;">string</span>,<span style="color: blue;">object</span>&gt;&gt; GetProperties(<span style="color: blue;">bool </span>includeInstanceProperties = <span style="color: blue;">false</span>)
        {
            <span style="color: blue;">if </span>(includeInstanceProperties &amp;&amp; Instance != <span style="color: blue;">null</span>)
            {
                <span style="color: blue;">foreach </span>(<span style="color: blue;">var </span>prop <span style="color: blue;">in this</span>.InstancePropertyInfo)
                    <span style="color: blue;">yield return new </span><span style="color: #2b91af;">KeyValuePair</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">object</span>&gt;(prop.Name, prop.GetValue(Instance, <span style="color: blue;">null</span>));
            }

            <span style="color: blue;">foreach </span>(<span style="color: blue;">var </span>key <span style="color: blue;">in this</span>.Properties.Keys)
               <span style="color: blue;">yield return new </span><span style="color: #2b91af;">KeyValuePair</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">object</span>&gt;(key, <span style="color: blue;">this</span>.Properties[key]);

        }
  

        <span style="color: gray;">/// &lt;summary&gt;
        /// </span><span style="color: green;">Checks whether a property exists in the Property collection
        </span><span style="color: gray;">/// </span><span style="color: green;">or as a property on the instance
        </span><span style="color: gray;">/// &lt;/summary&gt;
        /// &lt;param name="item"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        </span><span style="color: blue;">public bool </span>Contains(<span style="color: #2b91af;">KeyValuePair</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">object</span>&gt; item, <span style="color: blue;">bool </span>includeInstanceProperties = <span style="color: blue;">false</span>)
        {
            <span style="color: blue;">bool </span>res = Properties.ContainsKey(item.Key);
            <span style="color: blue;">if </span>(res)
                <span style="color: blue;">return true</span>;

            <span style="color: blue;">if </span>(includeInstanceProperties &amp;&amp; Instance != <span style="color: blue;">null</span>)
            {
                <span style="color: blue;">foreach </span>(<span style="color: blue;">var </span>prop <span style="color: blue;">in this</span>.InstancePropertyInfo)
                {
                    <span style="color: blue;">if </span>(prop.Name == item.Key)
                        <span style="color: blue;">return true</span>;
                }
            }

            <span style="color: blue;">return false</span>;
        }        

    }
}</pre>
<p>Although the Expando class supports an indexer, it doesn't actually implement IDictionary or even IEnumerable. It only provides the indexer and Contains() and GetProperties() methods, that work against the Properties dictionary AND the internal instance.</p>
<p>The reason for not implementing IDictionary is that a) it doesn't add much value since you can access the Properties dictionary directly and that b) I wanted to keep the interface to class very lean so that it can serve as an entity type if desired. Implementing these IDictionary (or even IEnumerable) causes LINQ extension methods to pop up on the type which obscures the property interface and would only confuse the purpose of the type. IDictionary and IEnumerable are also problematic for XML and JSON Serialization - the XML Serializer doesn't serialize IDictionary&lt;string,object&gt;, nor does the DataContractSerializer. The JavaScriptSerializer does serialize, but it treats the entire object like a dictionary and doesn't serialize the strongly typed properties of the type, only the dictionary values which is also not desirable. Hence the decision to stick with only implementing the indexer to support the user["CustomProperty"] functionality and leaving iteration functions to the publicly exposed Properties dictionary.</p>
<p>Note that the Dictionary used here is <a href="http://www.west-wind.com/weblog/posts/2011/Sep/27/An-Xml-Serializable-PropertyBag-Dictionary-Class-for-NET">a custom <em>PropertyBag </em>class I created to allow for serialization to work</a>. One important aspect for my apps is that whatever custom properties get added they have to be accessible to AJAX clients since the particular app I'm working on is a SIngle Page Web app where most of the Web access is through JSON AJAX calls. PropertyBag can serialize to XML and one way serialize to JSON using the JavaScript serializer (not the DCS serializers though).</p>
<p>The key components that make Expando work in this code are the Properties Dictionary and the TryGetMember() and TrySetMember() methods. The Properties collection is public so if you choose you can explicitly access the collection to get better performance or to manipulate the members in internal code (like loading up dynamic values form a database). </p>
<p>Notice that TryGetMember() and TrySetMember() both work against the dictionary AND the internal instance to retrieve and set properties. This means that user["Name"] works against native properties of the object as does user["Name"] = "RogaDugDog".</p>
<h3>What's your Use Case?</h3>
<p>This is still an early prototype but I've plugged it into one of my customer's applications and so far it's working very well. The key features for me were the ability to easily extend the type with values coming from a database and exposing those values in a nice and easy to use manner. I'm also finding that using this type of object for ViewModels works very well to add custom properties to view models. I suspect there will be lots of uses for this - I've been using the extra dictionary approach to extensibility for years - using a dynamic type to make the syntax cleaner is just a bonus here.</p>
<p>What can you think of to use this for?</p>
<h3>Resources</h3>
<ul>
<li><strong><a href="https://github.com/RickStrahl/Expando">Source Code (GitHub)</a></strong> 
</li><li><strong><a href="http://www.west-wind.com/WestwindWebToolkit/">Also integrated in Westwind.Utilities of the West Wind Web Toolkit</a></strong> 
</li><li><strong><a href="http://nuget.org/packages/Westwind.Utilities">West Wind Utilities NuGet</a></strong></li></ul><div style="margin: 10px 0px;"><small>© Rick Strahl, West Wind Technologies, 2005-2012</small></div><div>Posted in <b><a href="http://feeds.feedburner.com/Weblog/ShowPosts.aspx?Category=CSharp">CSharp</a>  <a href="http://feeds.feedburner.com/Weblog/ShowPosts.aspx?Category=.NET">.NET</a>  <a href="http://feeds.feedburner.com/Weblog/ShowPosts.aspx?Category=Dynamic Types">Dynamic Types</a>  </b></div>
<div style="margin-top: 5px;">
<a class="twitter-share-button" href="https://twitter.com/share">Tweet</a>
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;

&lt;g:plusone href="http://www.west-wind.com/weblog/posts/2012/Feb/08/Creating-a-dynamic-extensible-C-Expando-Object" size="medium"&gt;&lt;/g:plusone&gt;
&lt;script type="text/javascript"&gt;
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
&lt;/script&gt;

</div><img height="1" src="http://feeds.feedburner.com/~r/RickStrahl/~4/MS9XK_eWO1s" width="1"/></div>
    </summary>
    <updated>2012-02-08T10:28:28Z</updated>
    <category term="CSharp"/>
    <category term=".NET"/>
    <category term="Dynamic Types"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.west-wind.com/weblog/posts/2012/Feb/08/Creating-a-dynamic-extensible-C-Expando-Object</feedburner:origLink>
    <author>
      <name>Rick Strahl</name>
    </author>
    <source>
      <id>http://www.west-wind.com/weblog/</id>
      <logo>http://www.west-wind.com/weblog/images/WebLogBannerLogo.jpg</logo>
      <link href="http://www.west-wind.com/weblog/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/RickStrahl" rel="self" type="application/rss+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license"/>
      <subtitle>Life, Surf, Code and everything in between</subtitle>
      <title>Rick Strahl's Web Log</title>
      <updated>2012-02-09T11:18:40Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>d67277c4-116b-43f1-b688-e9ef184ea916:1805681</id>
    <link href="http://msmvps.com/blogs/theproblemsolver/archive/2012/02/08/controlling-when-the-value-is-updated-with-knockout-js.aspx" rel="alternate" type="text/html"/>
    <title>Controlling when the value is updated with Knockout.js</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>In the previous blog post about <a href="http://knockoutjs.com/">Knockout.js</a> I showed why and how to get started with Knockout.js. And I explained that the reason I really like Knockout.js is that it is a very familiar way of working with its MVVM style.</p>  <p>I created a small demo where we could update the first and last name of a person and the ViewModel would combine the two and display the concatenated parts as the complete name. This worked just fine as soon as I started using observables except for one thing. Whenever I start typing the full name isn’t updated until the &lt;input&gt; control losses focus.</p>  <p><a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7750.image_5F00_578727C6.png"><img alt="image" border="0" height="256" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3173.image_5F00_thumb_5F00_5A6C66AC.png" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="image" width="279"/></a></p>  <p>Quite often this will be good enough as the resulting value isn’t used right away but there are cases, like here, where it is and we want more frequent updates.</p>  <p> </p>  <p><strong>The value binding</strong></p>  <p>As it turns out the <a href="http://knockoutjs.com/documentation/value-binding.html">value data binding</a> has an additional option, the valueUpdate, that controls when the value, and therefor the computed observable full name is updated. By adding that to the data-bind expression we can get real time updates. There are several options but for these real time scenarios using the value of <strong>afterkeydown</strong> works best.</p>  <p>The markup now looks like this:</p>  <div id="codeSnippetWrapper">   <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fieldset</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">legend</span><span style="color: #0000ff;">&gt;</span>Enter person<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">legend</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        First name:</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="value: firstName, valueUpdate: 'afterkeydown'"</span> <span style="color: #0000ff;">/&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        last name:</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="value: lastName, valueUpdate: 'afterkeydown'"</span> <span style="color: #0000ff;">/&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        Full name: <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="text: fullName"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fieldset</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
</div>

<p>The JavaScript is unchanged and looks like this:</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">$(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">var</span> viewModel = {};</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.firstName = ko.observable(<span style="color: #006080;">"Maurice"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.lastName = ko.observable(<span style="color: #006080;">"de Beijer"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.fullName = ko.computed(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">return</span> viewModel.firstName() + <span style="color: #006080;">" "</span> + viewModel.lastName();</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"> </pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    ko.applyBindings(viewModel);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">});</pre>
</div>
</div>

<p> </p>

<p>With this change the full name is updated with each character entered.</p>

<p><a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3056.image_5F00_318151A3.png"><img alt="image" border="0" height="255" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/7446.image_5F00_thumb_5F00_1CAF5923.png" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="image" width="279"/></a></p>

<p> </p>

<p>Sweet <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/3833.wlEmoticon_2D00_smile_5F00_08B5C68D.png" style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none;"/></p>

<p> </p>

<p>Enjoy!</p>

<p> </p>

<p><a href="http://www.theproblemsolver.nl/">TheProblemSolver</a>
  <br/><a href="http://www.dotnetevents.nl/">DotNetEvents</a></p><div style="clear: both;"/><img height="1" src="http://msmvps.com/aggbug.aspx?PostID=1805681" width="1"/></div>
    </summary>
    <updated>2012-02-08T10:02:00Z</updated>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/ASP.NET/default.aspx" term="ASP.NET"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/REST/default.aspx" term="REST"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/dotnetmag/default.aspx" term="dotnetmag"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/HTML5/default.aspx" term="HTML5"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/Knockout/default.aspx" term="Knockout"/>
    <author>
      <name>Maurice</name>
    </author>
    <source>
      <id>http://msmvps.com/blogs/theproblemsolver/default.aspx</id>
      <link href="http://msmvps.com/blogs/theproblemsolver/default.aspx" rel="alternate" type="text/html"/>
      <link href="http://msmvps.com/blogs/theproblemsolver/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Tell me and I will forget<br/>
Show me and I will remember<br/>
Involve me and I will understand<br/>
- Confucius -</div>
      </subtitle>
      <title>The Problem Solver</title>
      <updated>2012-02-09T11:33:50Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-4899403983047838784</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/4899403983047838784/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=4899403983047838784" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/4899403983047838784" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/4899403983047838784" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_08.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Viera-Wetlands-Florida/i-SVZrcqM/0/L/D300057w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Viera-Wetlands-Florida/i-SVZrcqM/0/L/D300057w-M.jpg"/></a><br/>Snowy Egret<br/><br/>I spent the past weekend at Viera Wetlands, near Melbourne, Florida. A wonderful place, one of the best bird photo opportunities in Florida.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-4899403983047838784?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-08T06:00:08Z</updated>
    <published>2012-02-08T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://foxcentral.net/464_201202072212</id>
    <link href="http://vfpphilly.blogspot.com/" rel="alternate" type="text/html"/>
    <title>Philadelphia VFP User Group meets February 14--Menachem Bazian</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img align="left" hspace="5" src="http://www.tomorrowssolutionsllc.com/images/fox.jpg"/><img align="right" src="http://www.tomorrowssolutionsllc.com/images/fox.jpg"/> The Philadelphia VFP User Group will meet on Tuesday, February 14. Menachem Bazian will reprise his Southwest Fox 2011 session, ?Class Design Strategies."


When is a class needed and when isn't it? How can you design classes that add power and flexibility not only to your current application but to all your projects? How can you simplify the development and maintenance by using classes? The "textbook" answer is to do a full blown object orientation analysis and design. But what do you do if you don't have the time for that formal process? This session, which is both theoretical and practical (code based), will discuss how to think in "OO" mode and how the traditional Cowboy Programmer approach of Visual FoxPro and the formal world of Object Orientation can come together and live in harmony. The session will also discuss how to modify classes safely.</div>
    </summary>
    <updated>2012-02-07T22:12:30Z</updated>
    <category term="fox"/>
    <author>
      <name>Philadelphia Visual FoxPro User Group</name>
    </author>
    <source>
      <id>http://www.foxcentral.net/</id>
      <link href="http://www.foxcentral.net/" rel="alternate" type="text/html"/>
      <link href="http://foxcentral.net/foxcentralrssfeed.fc" rel="self" type="application/rss+xml"/>
      <subtitle>FoxCentral - News about the Microsoft Visual FoxPro community</subtitle>
      <title>FoxCentral News</title>
      <updated>2012-02-09T11:31:27Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.07-http://fox.wikis.com/wc.dll?Wiki~PhiladelphiaVFPUserGroup</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~PhiladelphiaVFPUserGroup" rel="alternate" type="text/html"/>
    <title>PhiladelphiaVFPUserGroup</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Editor comments: <b><i>Feb: Menachem Bazian</i></b>
<br/>
Starting in August 2008, we meet the second Tuesday of the month.
<br/>
<br/>
A user group for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers in the greater Philadelphia area, including New Jersey, Delaware and the Lehigh Valley. We meet the second Tuesday of each month at 7 PM.
<br/>
<br/>
Beginning with the April 2006 meeting, there is a $5 charge per meeting.
<br/>
<br/>
Beginning with the July 2011 meeting, we will meet in room 158 at <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~DeVry" title="Create a topic for this">DeVry</a> University, 1140 Virginia Drive, Fort Washington, PA.
<br/>
<br/>
Feel free to bring something to eat and arrive as early as 6:30.
<br/>
<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2008.01.18"/> Check out our blog at <a href="http://vfpphilly.blogspot.com">httP://vfpphilly.blogspot.com</a>.
<br/>
<br/>
 If you'd like to speak at our group, contact Bob Pierce: <a href="mailto:rpierce@smooth-on.com">rpierce@smooth-on.com</a>. To join our email list, send a message to <a href="mailto:tamar@tamargranor.com">tamar@tamargranor.com</a>.</div>
    </summary>
    <updated>2012-02-07T22:11:12Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-09T11:32:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.07-http://fox.wikis.com/wc.dll?Wiki~UpcomingEvents</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~UpcomingEvents" rel="alternate" type="text/html"/>
    <title>UpcomingEvents</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A place to list upcoming <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> events like conferences, meetings, user groups, open training sessions...
<br/>
Closest at the top please, and please remove past events.</div>
    </summary>
    <updated>2012-02-07T22:09:33Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-09T11:32:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.07-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations.
<br/>
I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --
<br/>
<br/>
<a href="http://www.casinoluckywin.com/">CasinoLuckyWin</a>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a>
<br/>
 The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)
<br/>

<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:
<br/>
</s> <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a>
<br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a>
<br/>
<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2003.01.13"/> The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></div>
    </summary>
    <updated>2012-02-07T17:57:37Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://foxpro.ntsl119.com/scr/?p=1519</id>
    <link href="http://foxpro.ntsl119.com/scr/archives/1519" rel="alternate" type="text/html"/>
    <title>Smart Software</title>
    <summary>WesnerM's blog Smart Software.  In my blogroll since I started blogging 7+ years ago.  </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>WesnerM's blog <a href="http://wesnerm.blogs.com/net_undocumented/" target="_blank">Smart Software</a>.  In my blogroll since I started blogging 7+ years ago.</p>
<p> </p></div>
    </content>
    <updated>2012-02-07T17:54:20Z</updated>
    <category term="SoftDev (non-VFP)"/>
    <author>
      <name>WildFire</name>
    </author>
    <source>
      <id>http://foxpro.ntsl119.com/scr</id>
      <link href="http://foxpro.ntsl119.com/scr/feed" rel="self" type="application/atom+xml"/>
      <link href="http://foxpro.ntsl119.com/scr" rel="alternate" type="text/html"/>
      <subtitle>FoxPro workBLOGS and MORE...                         .                         .                        .</subtitle>
      <title>foxpro.catalyst       «</title>
      <updated>2012-02-09T11:33:29Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://foxcentral.net/462_201202070949</id>
    <link href="http://www.west-wind.com/WestwindClientTools.aspx" rel="alternate" type="text/html"/>
    <title>West Wind Internet and Client Tools 4.62 released</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img align="left" hspace="5" src="http://www.west-wind.com/Images/WestWindClientTools_tiny.jpg"/><img align="right" src="http://www.foxcentral.net/images/wwIcon.gif"/> West Wind Technologies has released version 5.62 of West Wind Client Tools. Client Tools provide a host of Internet functionality to client desktop applications including support for sending and retrieving email, rich HTTP access, FTP up and downloads as well as high level data services that allow for remote data and RPC calls over HTTP. The toolkit also contains utility classes including a simple business object layer, SQL Server access wrapper, SOAP and XML class, PDF rendering and more. This update is a maintenance release that extends a few features and adds number of new small helper functions. As always, the update is free to registered users of version 5 and available as shareware to try and play with.</div>
    </summary>
    <updated>2012-02-07T09:49:24Z</updated>
    <category term="fox"/>
    <author>
      <name>West Wind Technologies</name>
    </author>
    <source>
      <id>http://www.foxcentral.net/</id>
      <link href="http://www.foxcentral.net/" rel="alternate" type="text/html"/>
      <link href="http://foxcentral.net/foxcentralrssfeed.fc" rel="self" type="application/rss+xml"/>
      <subtitle>FoxCentral - News about the Microsoft Visual FoxPro community</subtitle>
      <title>FoxCentral News</title>
      <updated>2012-02-09T11:31:27Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://foxpro.ntsl119.com/scr/?p=1517</id>
    <link href="http://foxpro.ntsl119.com/scr/archives/1517" rel="alternate" type="text/html"/>
    <title>BeTD</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://foxpro.ntsl119.com/scr/wp-content/uploads/2012/02/20120207-155304.jpg"><img alt="20120207-155304.jpg" class="alignnone " height="550" src="http://foxpro.ntsl119.com/scr/wp-content/uploads/2012/02/20120207-155304.jpg" width="550"/></a></p></div>
    </content>
    <updated>2012-02-07T07:54:04Z</updated>
    <category term="LEGO"/>
    <category term="PHTGRPH"/>
    <author>
      <name>WildFire</name>
    </author>
    <source>
      <id>http://foxpro.ntsl119.com/scr</id>
      <link href="http://foxpro.ntsl119.com/scr/feed" rel="self" type="application/atom+xml"/>
      <link href="http://foxpro.ntsl119.com/scr" rel="alternate" type="text/html"/>
      <subtitle>FoxPro workBLOGS and MORE...                         .                         .                        .</subtitle>
      <title>foxpro.catalyst       «</title>
      <updated>2012-02-09T11:33:29Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-8477545945875600572</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/8477545945875600572/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=8477545945875600572" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/8477545945875600572" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/8477545945875600572" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_07.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-73mQtq4/0/L/D704330w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-73mQtq4/0/L/D704330w-M.jpg"/></a><br/>1955 Dodge - Miami Beach Police Dept<br/>at the 2012 Miami Beach Art Deco weekend on Ocean Drive (SoBe).<br/>(more on <a href="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/21032917_nVwJLd">my website</a>)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-8477545945875600572?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-07T06:03:00Z</updated>
    <published>2012-02-07T06:03:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://foxcentral.net/461_201202062149</id>
    <link href="http://www.west-wind.com/wwThreads/" rel="alternate" type="text/html"/>
    <title>West Wind Message Board Update</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><img align="left" hspace="5" src="http://localhost/wwThreads/images/icons/post_32.png"/><img align="right" src="http://www.foxcentral.net/images/wwIcon.gif"/> The West Wind Message Board we use for support has gotten a visual and slight functional makeover. We've updated the styling to look a bit more modern and work better for smaller devices like phones and tablets - the new look integrates a smoother looking dark theme, Gravatar support for user images and some easier navigation features. Note also that the message board now requires logins to post messages to thwart some of the spam issues that have been escalating recently. Logins were also added to make it easier to sync user accounts across devices and provide Gravatar user image support. I hope you'll take the time to check out the new design and as always please let us know if there are any problems or you have suggestions.</div>
    </summary>
    <updated>2012-02-06T21:49:15Z</updated>
    <category term="fox"/>
    <author>
      <name>West Wind Technologies</name>
    </author>
    <source>
      <id>http://www.foxcentral.net/</id>
      <link href="http://www.foxcentral.net/" rel="alternate" type="text/html"/>
      <link href="http://foxcentral.net/foxcentralrssfeed.fc" rel="self" type="application/rss+xml"/>
      <subtitle>FoxCentral - News about the Microsoft Visual FoxPro community</subtitle>
      <title>FoxCentral News</title>
      <updated>2012-02-09T11:31:27Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.06-http://fox.wikis.com/wc.dll?Wiki~VFPSQL-TSQL-Mapping</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~VFPSQL-TSQL-Mapping" rel="alternate" type="text/html"/>
    <title>VFPSQL-TSQL-Mapping</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">VFP/SQL functions concordance<br/>
<br/>
This is a table to help people that are converting VFP SQL Statements to SQL Server T-SQL statements.<br/>
<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2010.02.10"/> Set of VFP string functions implemented in T-SQL by Brad Schulz<br/>
<br/>
<a href="http://bradsruminations.blogspot.com/2010/01/handy-string-functions.html">Handy String Functions</a><br/>
<br/>
<br/>
<table class="bordertable" id="tbl">
<thead>
<tr><th>TYPE</th><th>VFP</th><th>T-SQL</th></tr>
</thead>
<tbody>
<tr><td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~AutoIncrement" title="Create a topic for this">AutoIncrement</a> field last value</td><td>GETAUTOINCVALUE</td><td>SCOPE_IDENTITY() / OUTPUT clause in SQL Server 2005 and up.<br/>
<br/>
 <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2012.01.23"/> See also:<br/><a href="http://www.hexcentral.com/articles/sql-identity.htm">Find the IDENTITY value of the last inserted row</a> (discussion on @@IDENTITY, SCOPE_IDENTITY() and IDENT_CURRENT(), and which one to use).<br/><br/>

See also <a href="http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/">http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/</a><br/>

</td></tr>
<tr><td>Inline Condition</td><td>IIF(condition,true value, false value)</td><td>CASE WHEN condition THEN true value ELSE false value END</td></tr>

<tr><td>BETWEEN </td><td>BETWEEN(field,low value, high value)</td><td>field BETWEEN lowvalue AND highvalue. Better yet, just use the SQL BETWEEN instead of the VFP between() in all cases when writing SQL (VFP or NOT)</td></tr>
<tr><td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~True/False" title="Create a topic for this">True/False</a></td><td>.T. / .F.</td><td>No logical data type<br/>
1=1/1=2</td></tr>

<tr><td>Check something is NULL</td><td>ISNULL(checked_value)</td><td>IS [NOT] NULL this syntax worked in VFP also</td></tr>
<tr>

<td>Get non NULL value from two expressions</td><td>NVL(checked_value,value_if_expression_is_null)</td><td><p>ISNULL(checked_value,value_if_expression_is_null)</p><p>Also COALESCE ( expression [ ,...n ] ) - returns the first nonnull expression among its arguments.</p><br/>
</td></tr>

<tr><td>String comparison</td><td> = for partial, == for exact. LIKE is supported since at least VFP v7 -- <a href="http://fox.wikis.com/wc.dll?Wiki~MikeYearwood">Mike Yearwood</a> </td><td>LIKE</td></tr>

<tr><td>Empty Dates</td><td>{}</td><td>Not supported. Use NULL instead</td></tr>

<tr><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.08.13"/> Checking for an empty string</td><td>EMPTY(fieldname). EMPTY() has never been Rushmore optimizable. Try fieldname = space(len(fieldname)) or UPPER(fieldname) = SPACE(LEN(fieldname)) especially if you have an index on UPPER(fieldname). -- <a href="http://fox.wikis.com/wc.dll?Wiki~MikeYearwood">Mike Yearwood</a> </td><td>LEN(fieldname) = 0</td></tr>

<tr><td>Current Date and Time</td><td>DateTime()</td><td>GetDate() or DATEADD(ms,-DATEPART(ms,GETDATE()),GETDATE()) because <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GetDate" title="Create a topic for this">GetDate</a>() return datetime with ms</td></tr>

<tr><td>Current Date</td><td>Date()</td><td>Date data type doesn't exist<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2009.09.10"/> In SQL Server 2008 there are new DATE and TIME types</td></tr>

<tr><td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Add/Subtract" title="Create a topic for this">Add/Subtract</a> from a date</td><td>Use arithmetic operators Date() + 1 or Date() - 1</td>
<td>DATEADD(day,1,Getdate()) or to substract use a negative integer<br/>You can directly add/subtract dates from getdate():<br/>select getdate() - 31, getdate() + 30<br/>
Regarding the last comment - you can not do this with Dates in SQL Server 2008<br/>
see <a href="http://blogs.lessthandot.com/index.php/DataMgmt/DataDesign/operand-type-clash-date-is-incompatible--2008">Compatibility Clash in 2008</a><br/>
</td></tr>

<tr><td>Compare two dates</td><td>logic symbols&lt;,&gt;,=</td><td>DATEDIFF ( datepart , startdate , enddate )<br/>
</td></tr>

<tr><td>Date constant or literal</td><td>curly braces and an uproot example: {^2006/01/31} </td><td>Several format with single quotes example: 'April 15, 1998'<br/>
'15 April, 1998'<br/>
'980415'<br/>
'04/15/98'. However, only ISO constants are safe, e.g. only this type of constant '20101201' can be used in queries for the dates.<br/>
</td></tr>
<tr><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.08.18"/> Get the integer portion of a number</td><td>INT()</td><td>CAST(somenumber AS int)</td></tr>
<tr><td>Convert date to sortable string</td><td>DTOS(date-value) </td><td>CONVERT(char(8), date-value, 112) </td></tr>

<tr><td>Replace text in a string</td><td>STRTRAN()</td><td>REPLACE()<br/>
</td></tr>

<tr><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2012.01.23"/> Trim string</td><td>LTRIM(), TRIM() or RTRIM(),<br/>
ALLTRIM()</td><td>LTRIM(), RTRIM(),<br/>
LTRIM(RTRIM())</td></tr>

<tr><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2009.10.16"/> Number of occurrences of a character in a string</td><td>OCCURS()<br/>
</td><td><a href="http://wiki.lessthandot.com/index.php/Find_Out_How_Many_Occurrences_Of_A_Substring_Are_In_A_String">How many occurrences in a string</a> </td></tr>

<tr><td>Pad a string with space</td><td>PADR(somestring,numchars)<br/>
PADL(somestring,numchars)</td><td>CAST(somestring AS char(numchars))<br/>
REPLICATE(SPACE(1), numchars - DATALENGTH(somestring )) + somestring , <a href="http://www.universalthread.com/ViewPageArticle.aspx?ID=274" rel="nofollow">PADR(),PADL(),PADC()</a> <img alt="&gt;&lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td&gt;Convert an integer to fixed length zero padded&lt;/td&gt;&lt;td&gt;PADL(intval,numchars, '0')&lt;br&gt; &lt;/td&gt;&lt;td&gt; REPLICATE('0', numchars - DATALENGTH( CAST(intval AS varchar(numchars)) )) + CAST(intval AS varchar(numchars)) &lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td&gt;Find text in a string&lt;/td&gt;&lt;td&gt;AT()&lt;br&gt; $&lt;/td&gt;&lt;td&gt;CHARINDEX(), PATINDEX()&lt;br&gt; LIKE &lt;/td&gt;&lt;/tr&gt;  &lt;tr&gt;&lt;td&gt;&lt;img src=" border="0" src="http://fox.wikis.com/OffSiteLnk.gif"/></td></tr>

<tr><td>Convert an integer to fixed length zero padded</td><td>PADL(intval,numchars, '0')<br/>
</td><td>
REPLICATE('0', numchars - DATALENGTH( CAST(intval AS varchar(numchars)) )) + CAST(intval AS varchar(numchars)) </td></tr>

<tr><td>Find text in a string</td><td>AT()<br/>
$</td><td>CHARINDEX(), PATINDEX()<br/>
LIKE </td></tr>

<tr><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.02.16"/> Return a string within in a string</td><td>SUBSTR()</td><td>SUBSTRING()</td></tr>
<tr><td>A string length</td><td>LEN()</td><td>DATALENGTH()<br/>
LEN() - doesn't count trailing spaces</td></tr>

<tr><td>Checking a list of values</td><td>[NOT] INLIST(valuelookingfor, testval1, testval2, testval3)<br/>
IN / NOT IN works in VFP also<br/>
</td><td>valuelookingfor [NOT] IN (testval1, testval2, testval3)<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.08.13"/> If value is in another table, then INNER JOIN / LEFT JOIN with IS NULL may be a better alternative<br/>
</td></tr>

<tr><td>Deleting all records</td><td>ZAP [IN nWorkArea | cTableAlias]</td><td> <a href="http://codebetter.com/blogs/raymond.lewallen/archive/2005/05/09/62960.aspx">TRUNCATE TABLE</a> tablename</td></tr>
<tr><td>Determine last query rowcount</td><td>_TALLY</td><td>@@ROWCOUNT</td></tr>
<tr><td>Replaces each character in a character expression that matches a character in a second character expression with the corresponding character in a third character expression.</td><td>CHRTRAN()</td><td/></tr>
<tr><td>Removes all characters from a string except those specified.<br/>
</td><td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2012.01.23"/> CHRTRAN(cString, CHRTRAN(cString, cFilter, "), ")</td><td>Igor's Nikiforov UDF <a href="http://www.universalthread.com/ViewPageNewDownload.aspx?ID=27115">StrFilter</a></td></tr>
<tr><td>Counts the words in a string.<br/>
</td><td>GETWORDCOUNT()</td><td>Igor's Nikiforov UDF <a href="http://www.universalthread.com/ViewPageNewDownload.aspx?ID=27115">GetWordCount</a></td></tr>
<tr><td>Returns a specified word from a string.<br/>
</td><td>GETWORDNUM()</td><td>Igor's Nikiforov UDF <a href="http://www.universalthread.com/ViewPageNewDownload.aspx?ID=27115">GetWordNum</a></td></tr>
</tbody>
</table></div>
    </summary>
    <updated>2012-02-06T15:50:41Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-09T11:32:05Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>d67277c4-116b-43f1-b688-e9ef184ea916:1805626</id>
    <link href="http://msmvps.com/blogs/theproblemsolver/archive/2012/02/06/how-to-get-started-with-knockout-js.aspx" rel="alternate" type="text/html"/>
    <title>How to get started with Knockout.js</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Once you get into doing more client side JavaScript code with business applications and REST services you are going to run into the question of how to construct the client side HTML required to show the data to the users. </p>  <p> </p>  <p><strong>Using jQuery</strong></p>  <p>Assuming most people are going to be using <a href="http://jquery.com/">jQuery</a> on the client you might start with some jQuery code to generate HTML.</p>  <p>Your code might look something like this</p>  <div id="codeSnippetWrapper">   <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">     <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">$(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    $(<span style="color: #006080;">"#btn"</span>).click(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        $.getJSON(<span style="color: #006080;">"/services/books"</span>).then(<span style="color: #0000ff;">function</span> (books) {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">            $.each(books, <span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">                $(<span style="color: #006080;">"&lt;li&gt;"</span>).text(<span style="color: #0000ff;">this</span>.Title + <span style="color: #006080;">" by "</span> + <span style="color: #0000ff;">this</span>.Author).appendTo(<span style="color: #006080;">"#books"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">            });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">});</pre>
</div>
</div>

<p>The code isn’t very complicated but then we are only showing a simple bit of text. And in all likelihood the actual HTML that needs to be generated will be quite a bit more complex. And the code increases as least as much, but often much more, in complexity.</p>

<p> </p>

<p><strong>Using templates</strong></p>

<p>The next step people tend to take is using templates. There are lots of different templating libraries out there with more coming but in this example I am using the <a href="http://ejohn.org/blog/javascript-micro-templating/">JavaScript Micro-Templating</a> function John Resig wrote. If you are looking for others take a look at <a href="http://documentcloud.github.com/underscore/">Underscore.js</a> or <a href="http://borismoore.github.com/jsrender/demos/index.html">JsRender</a>/<a href="https://github.com/BorisMoore/jsviews">JsViews</a> (still in preview at the moment). Specially <a href="http://documentcloud.github.com/underscore/">Underscore.js</a> is a nice library to look at because all the additional functions in there.</p>

<p>Using templates we separate the code from the template to generate the required HTML. The code is easier to understand. </p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">$(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    $(<span style="color: #006080;">"#btn"</span>).click(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        $.getJSON(<span style="color: #006080;">"/services/books"</span>).then(<span style="color: #0000ff;">function</span> (books) {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">            <span style="color: #0000ff;">var</span> html = tmpl(<span style="color: #006080;">"books_tmpl"</span>, { books: books });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">            $(<span style="color: #006080;">"#books"</span>).html(html);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">});</pre>
</div>
</div>

<p>However this comes at a cost as we also need a template and that is a mixture of markup and expressions. The expressions syntax varies depending on the templating engine, in this case it’s <strong><em>&lt;%= JavaScript Expression %&gt;. </em></strong>Not hard to use but it is another bit of executing code that has to be maintained.</p>



<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">&lt;script type=<span style="color: #006080;">"text/html"</span> id=<span style="color: #006080;">"books_tmpl"</span>&gt;</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">  &lt;% <span style="color: #0000ff;">for</span> ( <span style="color: #0000ff;">var</span> i = 0; i &lt; books.length; i++ ) { </pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">var</span> book = books[i];%&gt;</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    &lt;li&gt;&lt;a href=<span style="color: #006080;">"/services/books/&lt;%=book.Id%&gt;"</span>&gt;&lt;%=book.Title%&gt; by &lt;%=book.Author%&gt;&lt;/a&gt;&lt;/li&gt;</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">  &lt;% } %&gt;</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">&lt;/script&gt;</pre>
</div>
</div>

<br/>As you can see the template is actually embedded as a &lt;script&gt; block. Not a requirement as it is just a string but an easy way to do so. It does however mean that you have to handcraft the HTML with no designer or IntelliSense support.



<p> </p>

<p><strong>Using Knockout.js</strong></p>

<p>As soon as we start using <a href="http://knockoutjs.com/">Knockout.js</a> this become somewhat more like Silverlight/WPF. Not that it is exactly the same but it uses the same MVVM pattern and data binding that Silverlight developers are used to. Something I really like <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5873.wlEmoticon_2D00_smile_5F00_322BDF61.png" style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none;"/>. Now Knockout.js is my no means the only way to do this, just as with templates there are plenty of other options like <a href="http://documentcloud.github.com/backbone/">Backbone</a> or <a href="http://javascriptmvc.com/">JavaScriptMVC</a> for example. See <a href="http://codebrief.com/2012/01/the-top-10-javascript-mvc-frameworks-reviewed/">this</a> blog post for a longer list of alternatives.</p>

<p>Personally I really like the MVVM and binding style Knockout.js uses.</p>

<p>Instead of splitting the HTML into a static and a dynamically generated part with Knockout.js you embed data binding expressions in your HTML. Notice the data-bind attributes in the following HTML snippet. They indicate data binding syntax. The first two data bind the value property of the &lt;input&gt; control to the firstName and lastName from the ViewModel. The third data binds the text in the &lt;span&gt; against the fullName of the ViewModel.</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">fieldset</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">legend</span><span style="color: #0000ff;">&gt;</span>Enter person<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">legend</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        First name:</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="value: firstName"</span> <span style="color: #0000ff;">/&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        last name:</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">input</span> <span style="color: #ff0000;">type</span><span style="color: #0000ff;">="text"</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="value: lastName"</span> <span style="color: #0000ff;">/&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        Full name: <span style="color: #0000ff;">&lt;</span><span style="color: #800000;">span</span> <span style="color: #ff0000;">data-bind</span><span style="color: #0000ff;">="text: fullName"</span><span style="color: #0000ff;">&gt;&lt;/</span><span style="color: #800000;">span</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">fieldset</span><span style="color: #0000ff;">&gt;</span></pre>
</div>
</div>

<p>So what does the view model look like? It can be a real simple JavaScript object. In fact the following would work. It would be less than perfect thou and we can do better.</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">var</span> viewModel = {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    firstName: <span style="color: #006080;">"Maurice"</span>,</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    lastName: <span style="color: #006080;">"de Beijer"</span>,</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    fullName: <span style="color: #006080;">"Maurice de Beijer"</span></pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">};</pre>
</div>
</div>

<p>A better way is to use the Knockout functionality and define the data fields using observables. By using Observables we can observer changes being made. And by defining the fullName as a computed observable we can have the &lt;span&gt; with the fullName dynamically update. A much better ViewModel:</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"><span style="color: #0000ff;">var</span> viewModel = {};</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">viewModel.firstName = ko.observable(<span style="color: #006080;">"Maurice"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">viewModel.lastName = ko.observable(<span style="color: #006080;">"de Beijer"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">viewModel.fullName = ko.computed(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">return</span> viewModel.firstName() + <span style="color: #006080;">" "</span> + viewModel.lastName();</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">});</pre>
</div>
</div>

<p> </p>

<p>Of course we still need to tell Knockout to use the ViewModel and that takes all of one line:</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">ko.applyBindings(viewModel);</pre>
</div>
</div>

<p> </p>

<p>So the complete JavaScript in my page is now:</p>

<div id="codeSnippetWrapper">
  <div id="codeSnippet" style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">
    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">$(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    <span style="color: #0000ff;">var</span> viewModel = {};</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.firstName = ko.observable(<span style="color: #006080;">"Maurice"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.lastName = ko.observable(<span style="color: #006080;">"de Beijer"</span>);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    viewModel.fullName = ko.computed(<span style="color: #0000ff;">function</span> () {</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">        <span style="color: #0000ff;">return</span> viewModel.firstName() + <span style="color: #006080;">" "</span> + viewModel.lastName();</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    });</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;"> </pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: white; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">    ko.applyBindings(viewModel);</pre>


    <pre style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt; background-color: #f4f4f4; margin: 0em; border-left-style: none; padding-left: 0px; width: 100%; padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none; color: black; border-right-style: none; font-size: 8pt; overflow: visible; padding-top: 0px;">});</pre>
</div>
</div>

<p> </p>

<p>And the nice thing is that updating the first name automatically updates the fullName <img alt="Smile" class="wlEmoticon wlEmoticon-smile" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5873.wlEmoticon_2D00_smile_5F00_322BDF61.png" style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none;"/></p>

<p><a href="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/0385.image_5F00_23150087.png"><img alt="image" border="0" height="297" src="http://msmvps.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/theproblemsolver.metablogapi/5618.image_5F00_thumb_5F00_0F1B6DF1.png" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="303"/></a></p>

<p> </p>

<p>This is just the first baby steps using Knockout.js as it is far more capable than just this. In fact we can data bind against arrays of data and create nice list etc. The <a href="http://knockoutjs.com/">Knockout.js</a> site has some nice <a href="http://learn.knockoutjs.com/">tutorials</a> that will help you get started.</p>

<p> </p>

<p>Enjoy!</p>

<p> </p>

<p><a href="http://www.theproblemsolver.nl/">TheProblemSolver</a> 
  <br/><a href="http://www.dotnetevents.nl/">DotNetEvents</a></p><div style="clear: both;"/><img height="1" src="http://msmvps.com/aggbug.aspx?PostID=1805626" width="1"/></div>
    </summary>
    <updated>2012-02-06T09:31:00Z</updated>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/REST/default.aspx" term="REST"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/dotnetmag/default.aspx" term="dotnetmag"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/HTML5/default.aspx" term="HTML5"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/Knockout/default.aspx" term="Knockout"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/jQuery/default.aspx" term="jQuery"/>
    <author>
      <name>Maurice</name>
    </author>
    <source>
      <id>http://msmvps.com/blogs/theproblemsolver/default.aspx</id>
      <link href="http://msmvps.com/blogs/theproblemsolver/default.aspx" rel="alternate" type="text/html"/>
      <link href="http://msmvps.com/blogs/theproblemsolver/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Tell me and I will forget<br/>
Show me and I will remember<br/>
Involve me and I will understand<br/>
- Confucius -</div>
      </subtitle>
      <title>The Problem Solver</title>
      <updated>2012-02-09T11:33:50Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-1229175174846628776</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/1229175174846628776/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=1229175174846628776" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1229175174846628776" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1229175174846628776" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_06.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-4BZ8rGH/0/L/D704281w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-4BZ8rGH/0/L/D704281w-M.jpg"/></a><br/>1967 Austin Healey 3000 Mk III<br/>at the 2012 Miami Beach Art Deco weekend on Ocean Drive (SoBe).<br/>(more on <a href="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/21032917_nVwJLd">my website</a>)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-1229175174846628776?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-06T06:01:01Z</updated>
    <published>2012-02-06T06:01:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.05-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Editor comments: <b><i>Removed spam</i></b><br/>
I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations.<br/>
I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --<br/>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a><br/>
<font color="purple"> The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)<br/>
<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:<br/>
 <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a></s><br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a><br/>
<br/>
&lt;updated&gt; The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></font></div>
    </summary>
    <updated>2012-02-05T16:34:11Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-06T11:45:33Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-24989625.post-6003935544918418963</id>
    <link href="http://doughennig.blogspot.com/feeds/6003935544918418963/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6003935544918418963" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/24989625/posts/default/6003935544918418963" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/24989625/posts/default/6003935544918418963" rel="self" type="application/atom+xml"/>
    <link href="http://doughennig.blogspot.com/2012/02/updating-vfpx-reportbuilderapp.html" rel="alternate" type="text/html"/>
    <title>Updating the VFPX ReportBuilder.APP</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>There are a couple of bugs in the VFP 9 Service Pack 2 version of ReportBuilder.APP, which provides the Report Designer dialogs and event handlers. I discussed the first bug, which causes the Printer Environment setting for a report to be turned on when you click the font button in the Field or Label Properties dialogs, in an <a href="http://doughennig.blogspot.com/2010/03/fixing-report-designer-bug.html">earlier blog post</a>. The other is a small one: using code like:</p>  <p>do (_reportbuilder) with 3, "TablePath.DBF"</p>  <p>to specify a custom registry table causes DELETED to be set off. The fix for this is simple: save the current setting of DELETED in FRXBuilder.PRG before setting it off and restore the setting near the end.</p>  <p>Several people suggested I actually implement these fixes in the copy of ReportBuilder.APP (and the corresponding source code) available on <a href="http://vfpx.codeplex.com/">VFPX</a>, so I did so today.</p>  <div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/24989625-6003935544918418963?l=doughennig.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-05T16:21:53Z</updated>
    <published>2012-02-05T16:21:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="VFPX"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="VFP 9 SP2"/>
    <author>
      <name>Doug Hennig</name>
      <email>noreply@blogger.com</email>
      <uri>http://www.blogger.com/profile/00208525487680844022</uri>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-24989625</id>
      <category term="Personal"/>
      <category term="Stonefield"/>
      <category term="Pervasive"/>
      <category term="Virtual PC"/>
      <category term="Twitter"/>
      <category term="FoxPro Lifetime Achievement Award"/>
      <category term="Email"/>
      <category term="Advantage Database Server"/>
      <category term="Outlook"/>
      <category term="Echo Challenge"/>
      <category term=".Net"/>
      <category term="SQL Server"/>
      <category term="Consulting"/>
      <category term="Fundraising"/>
      <category term="Windows API"/>
      <category term="Cycling"/>
      <category term="White Paper"/>
      <category term="Windows"/>
      <category term="VFP"/>
      <category term="Translation"/>
      <category term="HTML Help"/>
      <category term="Code Signing"/>
      <category term="Reporting"/>
      <category term="Australia"/>
      <category term="Community"/>
      <category term="VFPX"/>
      <category term="RSS"/>
      <category term="Charity"/>
      <category term="Graphics"/>
      <category term="ActiveX"/>
      <category term="Banks"/>
      <category term="OLEDB"/>
      <category term="My"/>
      <category term="Humor"/>
      <category term="YMCA"/>
      <category term="VFP 9 SP2"/>
      <category term="Products"/>
      <category term="Services"/>
      <category term="Video"/>
      <category term="Stonefield Query"/>
      <category term="Articles"/>
      <category term="Code Samples"/>
      <category term="Press Release"/>
      <category term="Icons"/>
      <category term="ListView"/>
      <category term="Windows 7"/>
      <category term="time zone"/>
      <category term="Windows Vista"/>
      <category term="64-bit"/>
      <category term="Web Connection"/>
      <category term="PDF"/>
      <category term="Images"/>
      <category term="DDEX"/>
      <category term="Sage"/>
      <category term="FoxShow"/>
      <category term="MVP"/>
      <category term="GDIPlusX"/>
      <category term="PowerPoint"/>
      <category term="FoxCharts"/>
      <category term="Vacation"/>
      <category term="Fun"/>
      <category term="Ambassador Fund"/>
      <category term="PEM Editor"/>
      <category term="Workaround"/>
      <category term="Sedna"/>
      <category term="Presentations"/>
      <category term="Google"/>
      <category term="Southwest Fox"/>
      <category term="Business"/>
      <category term="Development"/>
      <category term="Conferences"/>
      <category term="TreeView"/>
      <category term="West Wind HTML Help Builder"/>
      <category term="Bug Fix"/>
      <category term="SnagIt"/>
      <category term="Tools"/>
      <category term="Anniversary"/>
      <category term="GDI+"/>
      <category term="Foxit"/>
      <category term="Blog"/>
      <category term="Silverlight"/>
      <category term="Excel"/>
      <category term="Utilities"/>
      <category term="Books"/>
      <author>
        <name>Doug Hennig</name>
        <email>noreply@blogger.com</email>
        <uri>http://www.blogger.com/profile/00208525487680844022</uri>
      </author>
      <link href="http://doughennig.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/24989625/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://doughennig.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/24989625/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <subtitle>Thoughts on software development in general, projects I'm working on, and anything else I feel like writing about.</subtitle>
      <title>Doug Hennig</title>
      <updated>2012-02-07T14:52:30Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-2343368235657736688</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/2343368235657736688/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=2343368235657736688" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/2343368235657736688" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/2343368235657736688" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_05.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Animals/Reptiles-1/i-GdB5B9g/0/L/D308580w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Animals/Reptiles-1/i-GdB5B9g/0/L/D308580w-M.jpg"/></a><br/>Alligator in Wakodahatchee Wetlands, Delray, Florida<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-2343368235657736688?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-05T10:04:00Z</updated>
    <published>2012-02-05T10:04:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations. <a href="http://www.yourminskapartment.com/">minsk apartment</a><br/>
I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --<br/>
<a href="http://www.bouncewow.com/"> Bounce House Rental Mesa AZ </a><br/>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a><br/>
<font color="purple"> The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)<br/>
<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:<br/>
 <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a></s><br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a><br/>
<br/>
&lt;updated&gt; The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a><br/>
<a href="http://www.womencasinos.co.uk/">Women Casinos</a></font></div>
    </summary>
    <updated>2012-02-04T16:55:07Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-05T13:36:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~TemporalCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~TemporalCohesion" rel="alternate" type="text/html"/>
    <title>TemporalCohesion</title>
    <summary>A form of cohesion in which aspects of a system are grouped together which are used during the same phase of execution of a program, i.e. execute close together in time</summary>
    <updated>2012-02-04T16:28:32Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~CommunicationalCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CommunicationalCohesion" rel="alternate" type="text/html"/>
    <title>CommunicationalCohesion</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><ul class="noindent">
<li>From Meilir <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Page-Jones" title="Create a topic for this">Page-Jones</a>, part of a great general discussion: <b>A communicationally cohesive module is one whose elements contribute to activities that use the same input or output data.</b> -- <a href="http://www.waysys.com/ws_content_bl_pgssd_ch06.html">http://www.waysys.com/ws_content_bl_pgssd_ch06.html</a>
<br/>
</li>

<li><b>A form of cohesion in which procedures that access the same data are kept together</b> -- ( See <a href="http://www.site.uottawa.ca:4321/oose/index.html#communicationalcohesion">http://www.site.uottawa.ca:4321/oose/index.html#communicationalcohesion</a>)
<br/>
</li>

<li><a href="http://perl.about.com/od/beginningprogramming/a/081804_2.htm">http://perl.about.com/od/beginningprogramming/a/081804_2.htm</a> -- Different take from a much less reputable source</li>
</ul></div>
    </summary>
    <updated>2012-02-04T16:28:09Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~ProceduralCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~ProceduralCohesion" rel="alternate" type="text/html"/>
    <title>ProceduralCohesion</title>
    <summary>Procedural cohesion is when parts of a module are grouped because they always follow a certain sequence of execution (e.g. a function which checks file permissions and then opens the file).</summary>
    <updated>2012-02-04T16:27:38Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~LogicalCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~LogicalCohesion" rel="alternate" type="text/html"/>
    <title>LogicalCohesion</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Logical cohesion is when parts of a module are grouped because they logically are categorized to do the same thing, even if they are different by nature (e.g. grouping all mouse and keyboard input handling routines).
<br/>
<br/>
<br/>
See also <a href="http://fox.wikis.com/wc.dll?Wiki~Cohesion">Cohesion</a></div>
    </summary>
    <updated>2012-02-04T16:26:28Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~CoincidentalCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CoincidentalCohesion" rel="alternate" type="text/html"/>
    <title>CoincidentalCohesion</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Programming steps that don't relate to each other, but which may be used together to achieve a goal, can be said to be only coincidentaly related, or to have <a href="http://fox.wikis.com/wc.dll?Wiki~CoincidentalCohesion">Coincidental Cohesion</a>
<br/>
<br/>
See also <a href="http://fox.wikis.com/wc.dll?Wiki~Cohesion">Cohesion</a></div>
    </summary>
    <updated>2012-02-04T16:26:00Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~SequentialCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~SequentialCohesion" rel="alternate" type="text/html"/>
    <title>SequentialCohesion</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">A form of <a href="http://fox.wikis.com/wc.dll?Wiki~TemporalCohesion">Temporal Cohesion</a> in which a series of procedures, where one provides input to the next, are kept together.
<br/>
<br/>
See also <a href="http://fox.wikis.com/wc.dll?Wiki~Cohesion">Cohesion</a></div>
    </summary>
    <updated>2012-02-04T16:24:53Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.04-http://fox.wikis.com/wc.dll?Wiki~FunctionalCohesion</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~FunctionalCohesion" rel="alternate" type="text/html"/>
    <title>FunctionalCohesion</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Functional cohesion is when parts of a module are grouped because they all contribute to a single well-defined task of the module.
<br/>
<br/>
See also Cohesion</div>
    </summary>
    <updated>2012-02-04T16:22:08Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-07T12:38:07Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-6759404615762839529</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/6759404615762839529/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=6759404615762839529" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6759404615762839529" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6759404615762839529" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_04.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-QkDs2Mf/0/L/D309325-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Cars/2012-Miami-Beach-Art-Deco/i-QkDs2Mf/0/L/D309325-M.jpg"/></a><br/>At the 2012 Miami Beach Art Deco weekend on Ocean Drive (SoBe). The car is a 1960 Cord Sportsman.<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-6759404615762839529?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-04T06:00:03Z</updated>
    <published>2012-02-04T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.02.03-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations. <a href="http://www.yourminskapartment.com/">minsk apartment</a>
<br/>
I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --
<br/>
 <a href="http://www.bouncewow.com/">Bounce House Rental Mesa AZ</a>
<br/>
<br/>
[<a href="http://www.bouncewow.com/">http://www.bouncewow.com/</a> |Bounce House Rental Mesa AZ]
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a>
<br/>
 The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)
<br/>

<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:
<br/>
</s> <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a>
<br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a>
<br/>
<br/>
<img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2003.01.13"/> The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></div>
    </summary>
    <updated>2012-02-03T12:15:44Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-04T12:46:23Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-1180360369551925321</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/1180360369551925321/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=1180360369551925321" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1180360369551925321" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1180360369551925321" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_03.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-BgNz6bL/0/L/D308155w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-BgNz6bL/0/L/D308155w-M.jpg"/></a><br/>Haulover beach and Sunny Isles, Florida<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-1180360369551925321?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-03T06:00:07Z</updated>
    <published>2012-02-03T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://feeds.feedburner.com/884_20120202</id>
    <link href="http://feedproxy.google.com/~r/RickStrahlsFoxproAndWebConnectionWebLog/~3/LtWtXJ0fCkM/ShowEntry.blog" rel="alternate" type="text/html"/>
    <title>Creating Gravatar Web Image Avatars in FoxPro</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p><a href="http://gravatar.com/" target="_blank">Gravatar.com</a> is a great and very popular Web service based way to associate an image with user accounts that are based on email addresses. It's easy to use and can provide a nice touch of personalization with very little effort to just about any Web application that uses email addresses for users. This post shows how you can use Gravatar from within your FoxPro based applications.</p>  <p>I recently restyled my <a href="http://www.west-wind.com/wwThreads/" target="_blank">West Wind Message Board support site</a> and one of things that I think makes the messages look a little more interesting and personal is having an avatar - an image - associated with users. But rather than asking users to upload images and storing them on my servers, I opted to use Gravatar which is a Web based service that can be used in many applications and is supported by a large number of popular Web sites already. Ultimately it's a better choice for users who only have to sign up once to associate an email address with a Gravatar to be used on many sites.</p>  <p>Here's what the Gravatar image looks like on a message board message:</p>  <p><a href="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Gravatar-Images-in-FoxPro_B5AC/Gravatar_2.png"><img alt="Gravatar" border="0" height="256" src="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Gravatar-Images-in-FoxPro_B5AC/Gravatar_thumb.png" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="Gravatar" width="359"/></a>  <br/>The Gravatar service  simply returns an an image for a given email address and some other parameters that are encoded and point at the Gravatar.com site. As a developer you configure Gravatar by creating a URL and embedding that URL into an &lt;img&gt; control's <em>src</em> attribute.</p>  <p>Above you can see the image that is associated with my Email address. The cool thing about Gravatar - if they have a Gravatar account already - is that once users have provided an email address they don't have to do anything else to associate their gravatar image with your application. If they have a gravatar configured the image is shown. If not, a default image is shown.</p>  <p>If an email address is sent to Gravatar that doesn't exist you can either provide another URL to an alternate image (some sort of default that's appropriate for your app) or you can let Gravatar serve it's default icon which looks like this:</p>  <p><a href="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Gravatar-Images-in-FoxPro_B5AC/GravatarDefault_2.png"><img alt="GravatarDefault" border="0" height="249" src="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Gravatar-Images-in-FoxPro_B5AC/GravatarDefault_thumb.png" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="GravatarDefault" width="378"/></a> </p>  <h3>How it works</h3>  <p>The Gravatar service works by calling a URL on their site and providing a few known parameters. An URL to retrieve an email address looks something like this:</p>  <p><a href="http://www.gravatar.com/avatar/a4ec5092141a8649fe9d81527569a4c0?s=80&amp;r=r" title="http://www.gravatar.com/avatar/d6ec6092141a8649fe9d81527569a4c0?s=80&amp;r=r">http://www.gravatar.com/avatar/a4ec5092141a8649fe9d81527569a4c0?s=80&amp;r=r</a></p>  <p>In an image control:</p>  <pre class="code"><span style="color: blue;">&lt;</span><span style="color: maroon;">img </span><span style="color: red;">src</span><span style="color: blue;">="<a href="http://www.gravatar.com/avatar/a4ec5092141a8649fe9d81527569a4c0?s=80&amp;r=r" title="http://www.gravatar.com/avatar/d6ec6092141a8649fe9d81527569a4c0?s=80&amp;r=r">http://www.gravatar.com/avatar/a4ec5092141a8649fe9d81527569a4c0?s=80&amp;r=</a>" <br/></span><span style="color: red;">     class="gravatar"</span><span style="color: blue;"> <br/>     </span><span style="color: red;">alt</span><span style="color: blue;">="Gratar Image based on email address" /&gt;
</span></pre>


<p>The components you need to send to get a Gravatar image are:</p>

<ul>
  <li>The Email Address encoded with an MD5 Hash</li>

  <li>An image size</li>

  <li>A default image if the email address is not registered with </li>

  <li>A rating for the image (g, pg, r, x)</li>
</ul>

<p>I've created a small reusable function that helps create Gravatar images in FoxPro. Using the function you can do:</p>

<pre class="code"><span style="color: black;">? </span><span style="color: black;">GravatarLink</span><span style="color: black;">(</span><span style="color: teal;">"rstrahl@west-wind.com"</span><span style="color: black;">,</span><span style="color: black;">80</span><span style="color: black;">) 
? </span><span style="color: black;">GravatarLink</span><span style="color: black;">(</span><span style="color: teal;">"invalid@west-wind.com"</span><span style="color: black;">,</span><span style="color: black;">60</span><span style="color: black;">,,</span><span style="color: teal;">"r"</span><span style="color: black;">)</span></pre>

<p>Here's the code for the GravatarLink function:</p>

<pre class="code">************************************************************************
*  GravatarLink
****************************************
***  Function: Creates an image URL for a given email address
***            that is registered with Gravatar.com.
***
***            Gravatar is a very popular avatar service that
***            requires only an email address to share a picture.
***            Used on many web sites so once you sign up your
***            picture will be used on many sites.
***    Assume: 
***      Pass: lcEmail - Email Address
***            lnSize - Image Size (square) 60-80 is usually good
***            lcDefaultImage - Url to an image if no match is found
***                             for email. Empty shows Gravatar's default
***            lcRating - g, pg, r, x   (Default: pg)
***    Return: URL to the Gravatar image
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">GravatarLink</span><span style="color: black;">(</span><span style="color: black;">lcEmail</span><span style="color: black;">,</span><span style="color: black;">lnSize</span><span style="color: black;">,</span><span style="color: black;">lcDefaultImage</span><span style="color: black;">, </span><span style="color: black;">lcRating</span><span style="color: black;">)
</span><span style="color: blue;">LOCAL </span><span style="color: black;">lcDefaultImage

</span><span style="color: blue;">IF EMPTY</span><span style="color: black;">(</span><span style="color: black;">lnSize</span><span style="color: black;">)
   </span><span style="color: black;">lnSize </span><span style="color: black;">= </span><span style="color: black;">80
</span><span style="color: blue;">ENDIF

IF </span><span style="color: black;">!</span><span style="color: blue;">EMPTY</span><span style="color: black;">(</span><span style="color: black;">lcEmail</span><span style="color: black;">)
    </span><span style="color: black;">lcHash </span><span style="color: black;">= </span><span style="color: blue;">LOWER</span><span style="color: black;">(</span><span style="color: blue;">STRCONV</span><span style="color: black;">(</span><span style="color: black;">HashMd5</span><span style="color: black;">(</span><span style="color: black;">lcEmail</span><span style="color: black;">),</span><span style="color: black;">15</span><span style="color: black;">))
</span><span style="color: blue;">ELSE
  </span><span style="color: black;">lcHash </span><span style="color: black;">= </span><span style="color: teal;">""
</span><span style="color: blue;">ENDIF
IF EMPTY</span><span style="color: black;">(</span><span style="color: black;">lcDefaultImage</span><span style="color: black;">)
   </span>*** Gravatar default image displays
   <span style="color: black;">lcDefaultImage </span><span style="color: black;">= </span><span style="color: teal;">""
</span><span style="color: blue;">ELSE
   </span><span style="color: black;">lcDefaultImage </span><span style="color: black;">= </span><span style="color: teal;">"&amp;d=" </span><span style="color: black;">+ </span><span style="color: black;">UrlEncode</span><span style="color: black;">(</span><span style="color: black;">lcDefaultImage</span><span style="color: black;">)
</span><span style="color: blue;">ENDIF   
IF EMPTY</span><span style="color: black;">(</span><span style="color: black;">lcRating</span><span style="color: black;">)
   </span><span style="color: black;">lcRating </span><span style="color: black;">= </span><span style="color: teal;">"pg"
</span><span style="color: blue;">ENDIF   

</span><span style="color: black;">lcUrl </span><span style="color: black;">= </span><span style="color: teal;">"http://www.gravatar.com/avatar/" </span><span style="color: black;">+ </span><span style="color: black;">lcHash </span><span style="color: black;">+ </span><span style="color: teal;">"?" </span><span style="color: black;">+;
       </span><span style="color: teal;">"s=" </span><span style="color: black;">+ </span><span style="color: blue;">TRANSFORM</span><span style="color: black;">(</span><span style="color: black;">lnSize</span><span style="color: black;">) +;
       </span><span style="color: teal;">"&amp;r=" </span><span style="color: black;">+ </span><span style="color: black;">lcRating </span><span style="color: black;">+;
       </span><span style="color: black;">lcDefaultImage

</span><span style="color: blue;">RETURN </span><span style="color: black;">lcUrl
</span>* GravatarLink</pre>



<p>The code is pretty straight forward - it basically builds up a URL as a string and adds the components provided by the parameters. The trickiest part of this is the MD5 encoding of the Email address. The MD5 hash creates a binary value which is then turned into a HexBinary string with STRCONV().</p>

<p>In order to encode the email address as an MD5 hash I use the following routine <a href="http://fox.wikis.com/wc.dll?fox~vfpmd5hashfunction" target="_blank">based on the content from the FoxPro Wiki</a> a long while back:</p>

<pre class="code">************************************************************************
* wwAPI :: HashMD5
****************************************
***  Function: retrieved from the FoxWiki
***            <span style="color: black;">http://fox.wikis.com/wc.dll?fox~vfpmd5hashfunction
</span>***    Assume: Self standing function - not part of wwAPI class
***      Pass: Data to encrypt
***    Return: 
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">HashMD5</span><span style="color: black;">(</span><span style="color: black;">tcData</span><span style="color: black;">)

</span>*** #include "c:\program files\microsoft visual foxpro 8\ffc\wincrypt.h"
<span style="color: black;">#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnPROV_RSA_FULL           </span><span style="color: black;">1
</span><span style="color: black;">#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnCRYPT_VERIFYCONTEXT     </span><span style="color: black;">0xF0000000

</span><span style="color: black;">#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnALG_CLASS_HASH         </span><span style="color: blue;">BITLSHIFT</span><span style="color: black;">(</span><span style="color: black;">4</span><span style="color: black;">,</span><span style="color: black;">13</span><span style="color: black;">)
#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnALG_TYPE_ANY          </span><span style="color: black;">0
</span><span style="color: black;">#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnALG_SID_MD5           </span><span style="color: black;">3
</span><span style="color: black;">#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnCALG_MD5        </span><span style="color: blue;">BITOR</span><span style="color: black;">(</span><span style="color: blue;">BITOR</span><span style="color: black;">(</span><span style="color: black;">dnALG_CLASS_HASH</span><span style="color: black;">,</span><span style="color: black;">dnALG_TYPE_ANY</span><span style="color: black;">),</span><span style="color: black;">dnALG_SID_MD5</span><span style="color: black;">)

#</span><span style="color: blue;">DEFINE </span><span style="color: black;">dnHP_HASHVAL              </span><span style="color: black;">0x0002  </span>&amp;&amp; Hash value

<span style="color: blue;">LOCAL </span><span style="color: black;">lnStatus</span><span style="color: black;">, </span><span style="color: black;">lnErr</span><span style="color: black;">, </span><span style="color: black;">lhProv</span><span style="color: black;">, </span><span style="color: black;">lhHashObject</span><span style="color: black;">, </span><span style="color: black;">lnDataSize</span><span style="color: black;">, </span><span style="color: black;">lcHashValue</span><span style="color: black;">, </span><span style="color: black;">lnHashSize
lhProv </span><span style="color: black;">= </span><span style="color: black;">0
</span><span style="color: black;">lhHashObject </span><span style="color: black;">= </span><span style="color: black;">0
</span><span style="color: black;">lnDataSize </span><span style="color: black;">= </span><span style="color: blue;">LEN</span><span style="color: black;">(</span><span style="color: black;">tcData</span><span style="color: black;">)
</span><span style="color: black;">lcHashValue </span><span style="color: black;">= </span><span style="color: blue;">REPLICATE</span><span style="color: black;">(</span><span style="color: blue;">CHR</span><span style="color: black;">(</span><span style="color: black;">0</span><span style="color: black;">), </span><span style="color: black;">16</span><span style="color: black;">)
</span><span style="color: black;">lnHashSize </span><span style="color: black;">= </span><span style="color: blue;">LEN</span><span style="color: black;">(</span><span style="color: black;">lcHashValue</span><span style="color: black;">)


</span><span style="color: blue;">DECLARE INTEGER </span><span style="color: black;">GetLastError </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">win32api </span><span style="color: blue;">AS </span><span style="color: black;">GetLastError

</span><span style="color: blue;">DECLARE INTEGER </span><span style="color: black;">CryptAcquireContextA </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptAcquireContext </span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">@</span><span style="color: black;">lhProvHandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">STRING </span><span style="color: black;">cContainer</span><span style="color: black;">, ;
   </span><span style="color: blue;">STRING </span><span style="color: black;">cProvider</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nProvType</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nFlags

</span>* load a crypto provider
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptAcquireContext</span><span style="color: black;">(@</span><span style="color: black;">lhProv</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">, </span><span style="color: black;">dnPROV_RSA_FULL</span><span style="color: black;">, </span><span style="color: black;">dnCRYPT_VERIFYCONTEXT</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF

DECLARE INTEGER </span><span style="color: black;">CryptCreateHash </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptCreateHash </span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hProviderHandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nALG_ID</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hKeyhandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nFlags</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">@</span><span style="color: black;">hCryptHashHandle

</span>* create a hash object that uses MD5 algorithm
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptCreateHash</span><span style="color: black;">(</span><span style="color: black;">lhProv</span><span style="color: black;">, </span><span style="color: black;">dnCALG_MD5</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">, @</span><span style="color: black;">lhHashObject</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF

DECLARE INTEGER </span><span style="color: black;">CryptHashData </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptHashData </span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hHashHandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">STRING </span><span style="color: black;">@</span><span style="color: black;">cData</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nDataLen</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nFlags

</span>* add the input data to the hash object
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptHashData</span><span style="color: black;">(</span><span style="color: black;">lhHashObject</span><span style="color: black;">, </span><span style="color: black;">tcData</span><span style="color: black;">, </span><span style="color: black;">lnDataSize</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF


DECLARE INTEGER </span><span style="color: black;">CryptGetHashParam </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptGetHashParam </span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hHashHandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nParam</span><span style="color: black;">, ;
   </span><span style="color: blue;">STRING </span><span style="color: black;">@</span><span style="color: black;">cHashValue</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">@</span><span style="color: black;">nHashSize</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nFlags

</span>* retrieve the hash value, if caller did not provide enough storage (16 bytes for MD5)
* this will fail with dnERROR_MORE_DATA and lnHashSize will contain needed storage size
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptGetHashParam</span><span style="color: black;">(</span><span style="color: black;">lhHashObject</span><span style="color: black;">, </span><span style="color: black;">dnHP_HASHVAL</span><span style="color: black;">, @</span><span style="color: black;">lcHashValue</span><span style="color: black;">, @</span><span style="color: black;">lnHashSize</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF


DECLARE INTEGER </span><span style="color: black;">CryptDestroyHash </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptDestroyHash</span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hKeyHandle

</span>*** free the hash object
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptDestroyHash</span><span style="color: black;">(</span><span style="color: black;">lhHashObject</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF


DECLARE INTEGER </span><span style="color: black;">CryptReleaseContext </span><span style="color: black;">;
   </span><span style="color: blue;">IN </span><span style="color: black;">WIN32API </span><span style="color: blue;">AS </span><span style="color: black;">CryptReleaseContext </span><span style="color: black;">;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">hProvHandle</span><span style="color: black;">, ;
   </span><span style="color: blue;">INTEGER </span><span style="color: black;">nReserved

</span>*** release the crypto provider
<span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">CryptReleaseContext</span><span style="color: black;">(</span><span style="color: black;">lhProv</span><span style="color: black;">, </span><span style="color: black;">0</span><span style="color: black;">)
</span><span style="color: blue;">IF </span><span style="color: black;">lnStatus </span><span style="color: black;">= </span><span style="color: black;">0
   </span><span style="color: blue;">THROW </span><span style="color: black;">GetLastError</span><span style="color: black;">()
</span><span style="color: blue;">ENDIF

RETURN </span><span style="color: black;">lcHashValue
</span><span style="color: blue;">ENDFUNC
</span>* HashMD5</pre>

<p>With this function in place it's now a snap to embed Gravatar images into HTML based applications. In a Web Connection (or any other template/script based environment that uses Fox code) you can now simply do:</p>

<pre class="code"><span style="color: blue;">&lt;</span><span style="color: maroon;">img </span><span style="color: red;">src</span><span style="color: blue;">="</span><span style="background: yellow;">&lt;%</span><span style="color: blue;">= </span>GravatarLink(poUser.Email,80,,"pg") <span style="background: yellow;">%&gt;</span><span style="color: blue;">" </span><span style="color: red;">class</span><span style="color: blue;">="gravatar" /&gt;
</span></pre>

<p>And you're off to the races.</p>

<h3>On the West Wind MessageBoard</h3>

<p>If you're a user of the <a href="http://www.west-wind.com/wwThreads/" target="_blank">West Wind Message Board</a> I recommend you head over to Gravatar.com and hook up your Avatar image if you are interested in showing an image for any of your messages. Go ahead post a message, and see your Gravatar pop up. Once you have a Gravatar you may find that a lot of sites where you participate also already use Gravatar images so this will be useful in a lot of places beyond just the message board or your own applications.</p>

<p>GravatarLink() is now also part of the wwUtils library in <a href="http://west-wind.com/webconnection/" target="_blank">Web Connection</a> and the <a href="http://www.west-wind.com/WestwindClientTools.aspx">West Wind Client Tools</a>.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/CFHYewNOffS4PgwHyVvJ8zzX23k/0/da"><img border="0" ismap="true" src="http://feedads.g.doubleclick.net/~a/CFHYewNOffS4PgwHyVvJ8zzX23k/0/di"/></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CFHYewNOffS4PgwHyVvJ8zzX23k/1/da"><img border="0" ismap="true" src="http://feedads.g.doubleclick.net/~a/CFHYewNOffS4PgwHyVvJ8zzX23k/1/di"/></a></p><img height="1" src="http://feeds.feedburner.com/~r/RickStrahlsFoxproAndWebConnectionWebLog/~4/LtWtXJ0fCkM" width="1"/></div>
    </summary>
    <updated>2012-02-02T23:52:27Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.west-wind.com/wconnect/weblog/ShowEntry.blog?id=884</feedburner:origLink>
    <author>
      <name>Rick Strahl</name>
    </author>
    <source>
      <id>http://www.west-wind.com/wconnect/weblog/</id>
      <link href="http://www.west-wind.com/wconnect/weblog/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/RickStrahlsFoxproAndWebConnectionWebLog" rel="self" type="application/rss+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Life, Surf, Code and everything in between</subtitle>
      <title>Rick Strahl's FoxPro and Web Connection Web Log</title>
      <updated>2012-02-06T11:48:31Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>91d46819-8472-40ad-a661-2c78acb4018c:10263122</id>
    <link href="http://blogs.msdn.com/b/bethmassi/archive/2012/02/02/lightswitch-community-amp-content-rollup-january-2012.aspx" rel="alternate" type="text/html"/>
    <title>LightSwitch Community &amp; Content Rollup–January 2012</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Last Fall I started posting a rollup of interesting community happenings, content, samples and extensions popping up around <a href="http://msdn.com/lightswitch">Visual Studio LightSwitch</a>. If you missed those rollups you can check them out here: </p>  <ul>   <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2011/09/29/lightswitch-community-amp-content-rollup-september.aspx">LightSwitch Community &amp; Content Rollup–September 2011</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2011/10/31/lightswitch-community-amp-content-rollup-october-2011.aspx">LightSwitch Community &amp; Content Rollup–October 2011</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2011/11/30/lightswitch-community-amp-content-rollup-november-2011.aspx">LightSwitch Community &amp; Content Rollup–November 2011</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/05/lightswitch-community-amp-content-rollup-december-2011.aspx">LightSwitch Community &amp; Content Rollup–December 2011</a></li> </ul>  <p>Looks like folks took a few well-deserved days to ramp back into the groove after the holidays (including myself). But there were still a lot of awesome things around LightSwitch this month, especially the number of submissions <a href="http://www.codeproject.com/Competitions/524/LightSwitch-Star-Contest.aspx" target="_blank">The Code Project</a> had in the LightSwitch Star Contest. A lot of really interesting applications and some great case studies for LightSwitch as well as some for Azure. Check them out…</p>  <h3><a href="http://www.codeproject.com/Competitions/524/LightSwitch-Star-Contest.aspx">“LightSwitch Star” Contest</a></h3>  <p><a href="http://go.microsoft.com/fwlink/?LinkId=232292"><img align="left" alt="&#x201C;LightSwitch Star&#x201D; Contest on CodeProject" border="0" src="http://i.msdn.microsoft.com/ff796201.LightSwitchStarContest(en-us,MSDN.10).jpg" style="margin: 0px 10px 0px 0px;"/></a></p>  <p>In November The Code Project launched the <a href="http://www.codeproject.com/Competitions/524/LightSwitch-Star-Contest.aspx">“LightSwitch Star” contest</a>. They’re looking for apps that show off the most productivity in a business as well as apps that use extensions in a unique, innovative way. Prizes are given away each month. Soon they will announce the January winners as well as the two grand prize winners of an <b><a href="http://www.amazon.com/U31SD-DH31-13-3-Inch-Light-Laptop-Black/dp/B005PAIQG0/ref=dp_ob_title_ce">ASUS U31SD-DH31 Laptop</a></b>! </p>  <p>Check out all the submission we had in January and make sure to log onto Code Project and vote <a href="http://www.codeproject.com/KB/LightSwitch/#LightSwitch+Star+Contest" target="_blank">for your favorites</a>. Here’s a breakdown of the 13 apps that were submitted in January (see all <a href="http://www.codeproject.com/KB/LightSwitch/#LightSwitch+Star+Contest">34 apps that have been submitted here</a>). There are some very creative “business apps” here – like a campaign manager for Dungeons &amp; Dragons!    <br/></p>  <ul>   <li><a href="http://www.youtube.com/watch?v=G3xQ4bdL6GE&amp;list=FLgFBc_I8vOTYjXOj0uyQTJA&amp;index=5&amp;feature=plpp_video">Profiling-Pro (video)</a> – Project profiler that helps make sure your software projects are done on time</li>    <li><a href="http://www.codeproject.com/Articles/314201/Luminous-Commands">Luminous Commands For LightSwitch</a> - Luminous Commands provides two pieces of functionality that was missing from LS RTM but wanted by many users</li>    <li><a href="http://www.codeproject.com/Articles/314208/Access-Control-Manager">Access Control Manager</a> - The Access Control Manager tracks user access to applications and other products (such as hardware, cellphones, etc.) by creating requests for access by the supervisor of the user</li>    <li><a href="http://www.codeproject.com/Articles/316162/Light-Enterprise-Solution">Light Enterprise Solution</a> - An article about applications that is an enterprise system targeted for Small &amp; Medium Enterprises in Malaysia and Singapore</li>    <li><a href="http://www.codeproject.com/Articles/316676/Lightswitch-Job-Hunter-Application">LightSwitch Job Hunter Application</a> - Job application tracker for those out of work built using Visual Studio LightSwitch 2011.</li>    <li><a href="http://www.youtube.com/watch?v=ppOb5DHBR-4&amp;list=FLgFBc_I8vOTYjXOj0uyQTJA&amp;index=1&amp;feature=plpp_video">Job Hunter LightSwitch Application (video)</a> - This is a demo video of a free application that is intended to help job applicants. The application and source code are free to download</li>    <li><a href="http://www.youtube.com/watch?v=fifFyOQuADU&amp;list=FLgFBc_I8vOTYjXOj0uyQTJA&amp;index=2&amp;feature=plpp_video">Illuminous overview (video)</a> - Illuminous is a comprehensive college management tool developed using Visual Studio LightSwitch.</li>    <li><a href="http://www.codeproject.com/Articles/318840/Data-Centre-A-Product-Information-and-Promotion-Ma">Data Centre: A Product Information and Promotion Management System</a> - A system for easily and effectively storing product information and managing promotions.</li>    <li><a href="http://www.codeproject.com/Articles/317928/Visual-Studio-LightSwitch-Application-Database-Scr">Visual Studio LightSwitch Application Database Script Generator</a> - A tool to generate Sql server DB script from the LightSwitch internal database</li>    <li><a href="http://www.codeproject.com/Articles/319456/MyBizz-Portal-The-smallest-LightSwitch-application" target="_blank">MyBizz Portal</a> - The "smallest" LightSwitch application you have ever seen. A portal to other LightSwitch applications.</li>    <li><a href="http://www.codeproject.com/Articles/321845/Client-Management-System" target="_blank">Client Management System</a> - A complete CRM solution that manages the entire customer lifecycle.</li>    <li><a href="http://staging.codeproject.com/Articles/322680/BPO-Productivity-Tool" target="_blank">BPO Productivity Tool</a> - This is is primarily built as a custom LightSwitch Shell Extension in which I embed PRISM to manage all LightSwitch and non-LightSwitch views. </li>    <li><a href="http://www.codeproject.com/Articles/322658/Birthright-Campaign-Manager" target="_blank">Birthright Campaign Manager</a> - Birthright Campaign Manager is an open source role playing computer aid for Birthright, a campaign setting for Dungeons &amp; Dragons. </li> </ul>  <p>There are a lot of really interesting real-world LightSwitch production applications that were submitted. Some departmental apps, a few personal apps, some enterprise apps as well as a couple start-up companies. There are also some great case studies here for Azure, in particular:</p>  <ul>   <li><a href="http://www.codeproject.com/Articles/318840/Data-Centre-A-Product-Information-and-Promotion-Ma">Data Centre: A Product Information and Promotion Management System</a></li>    <li><a href="http://www.codeproject.com/Articles/316162/Light-Enterprise-Solution">Light Enterprise Solution</a></li>    <li><a href="http://www.codeproject.com/Articles/302593/Orion">Orion - MiniCRM LightSwitch and Azure</a></li> </ul>    <h3>Developer Center Updates</h3>  <h5><a href="http://msdn.microsoft.com/en-us/lightswitch/ff938857">Learn Page Updates</a></h5>  <p>In December I kicked off a <a href="http://blogs.msdn.com/b/bethmassi/archive/tags/beginning+lightswitch+series/">series aimed at beginner developers</a> just getting started with LightSwitch and was featured in the <a href="http://msdn.microsoft.com/en-us/hh708735">MSDN Flash Newsletter</a>. In January we updated the <a href="http://msdn.microsoft.com/en-us/lightswitch/ff938857">Learn page of the Developer Center</a> to feature this series and it’s been getting some great traffic!</p>  <p><a href="http://msdn.microsoft.com/en-us/lightswitch/ff938857"><img alt="image" border="0" height="418" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/1777.image_5F00_3.png" style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 12px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="image" width="477"/></a></p>  <p>I also released the completed source code for the sample we build in the series: <a href="http://code.msdn.microsoft.com/Begining-LightSwitch-508763ea">Beginning LightSwitch - Address Book Sample</a></p>  <h5>How Do I Videos – Learning Made Easier</h5>  <p>We also updated all the How Do I video pages to show the sequential list of videos so that you can easily get to the previous and next videos in the series. This makes it a lot easier to navigate through the over 20 videos in the correct order. Just click into <a href="http://msdn.microsoft.com/en-us/lightswitch/ff949856">any video page like this one</a> and you will see the video navigator at the bottom of the page.</p>  <p><a href="http://msdn.microsoft.com/en-us/lightswitch/ff949856"><img alt="image" border="0" height="414" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/4807.image_5F00_6.png" style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px;" title="image" width="468"/></a></p>  <h3>Notable Content this Month</h3>  <p>Here’s some more of the fun things the team and community released in January. </p>  <h6>Extensions released in January (<a href="http://visualstudiogallery.msdn.microsoft.com/site/search?f%5B0%5D.Type=SearchText&amp;f%5B0%5D.Value=LightSwitch&amp;sortBy=Date">see all 73 of them here!</a>):</h6>  <ul>   <li><a href="http://visualstudiogallery.msdn.microsoft.com/df61b7a8-f3dc-4e91-a544-76acbcc465e9">Extended Text Box Extension </a></li>    <li><a href="http://visualstudiogallery.msdn.microsoft.com/6cb027ee-cd5f-47a6-ad63-c40a925891e3">Visual Studio LightSwitch application DB script generator </a></li> </ul>  <p>The team also released a control extension sample that you can learn from. Check out the announcement on the team blog:  <a href="http://blogs.msdn.com/b/lightswitch/archive/2012/01/17/many-to-many-control-released.aspx">Many-to-Many Control Released!</a></p>  <p>Build your own extensions by visiting the <a href="http://msdn.microsoft.com/en-us/lightswitch/hh304488">LightSwitch Extensibility page</a> on the <a href="http://msdn.com/lightswitch">LightSwitch Developer Center</a>. </p>  <h5>Team Articles:</h5>  <ul>   <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/30/calling-web-services-to-validate-data-in-visual-studio-lightswitch.aspx">Calling Web Services to Validate Data in Visual Studio LightSwitch</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/26/beginning-lightswitch-address-book-sample.aspx">Beginning LightSwitch–Address Book Sample</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/20/using-different-edit-screens-based-on-record-types-table-inheritance.aspx">Using Different Edit Screens Based on Record Types (Table Inheritance)</a></li>    <li><a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/12/creating-cascading-drop-down-lists-in-visual-studio-lightswitch.aspx">Creating Cascading Drop Down Lists in Visual Studio LightSwitch</a></li>    <li><a href="http://blogs.msdn.com/b/lightswitch/archive/2012/01/12/drop-down-lists-tips-amp-tricks-beth-massi.aspx">Drop-down Lists Tips &amp; Tricks </a></li> </ul>  <h6>Community Articles:</h6>  <ul>   <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/90/List-Box-That-Can-Be-Ordered-By-The-End-User.aspx">List Box That Can Be Ordered By The End-User</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/92/Save-is-a-pain-in-the-As.aspx">Save (is a pain in the) As</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/93/Using-The-Sheel-Shah-Many-To-Many-Control.aspx">Using The Many-To-Many Control</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/94/Using-the-ComponentOne-Excel-for-Silverlight-Control-with-LightSwitch.aspx">Using the ComponentOne Excel for Silverlight Control with LightSwitch</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/95/Application-Logo.aspx">Application Logo</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/96/A-LightSwitch-Web-Installer-Wizard.aspx">A LightSwitch Web Installer Wizard</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/97/Creating-a-Visual-Studio-LightSwitch-Screen-Template.aspx">Creating a Visual Studio LightSwitch Screen Template</a></li>    <li><a href="http://lightswitchhelpwebsite.com/Blog/tabid/61/EntryId/98/Creating-A-LightSwitch-Theme-Extension-using-Expression-Blend.aspx">Creating A LightSwitch Theme Extension using Expression Blend</a></li>    <li><a href="http://janvanderhaegen.wordpress.com/2012/01/18/extensions-made-easy-usesmallimage-and-custom-ordering/">Extensions Made Easy: UseSmallImage and custom ordering.</a></li>    <li><a href="http://janvanderhaegen.wordpress.com/2012/01/17/centric-rad-race-may-the-better-technology-win/">Centric RAD race: may the better technology win…</a></li>    <li><a href="http://janvanderhaegen.wordpress.com/2012/01/10/lightswitch-achievements-chapter-one-introduction-the-idea/">LightSwitch Achievements: Chapter one (Introduction) – The idea</a></li>    <li><a href="http://janvanderhaegen.wordpress.com/2012/01/08/extensions-made-easy-1-11-navigation-sample-explained/">Extensions made easy 1.11 : navigation sample explained</a></li>    <li><a href="http://powerbala.com/2012/01/01/extending-lightswitch-textbox-walk-through/">Extending LightSwitch TextBox : Walk-Through</a></li>    <li><a href="http://lightswitchregularguy.wordpress.com/2012/01/27/resources-for-beginners/">Resources for Beginners</a></li>    <li><a href="http://lightswitchregularguy.wordpress.com/2012/01/29/an-easy-way-to-create-many-to-many-relationships/">An Easy Way to Create Many-to-Many Relationships</a></li> </ul>  <h6><strong>Presentations:</strong></h6>  <ul>   <li><strong><a href="http://www.techdays.ca/contentlibrary/video/en/2011-lightswich-is-hot!-really-hot!!.aspx">LightSwitch is Hot! Really Hot!!</a></strong></li>    <li><a href="http://www.kunal-chowdhury.com/2012/01/presented-lightswitch-for-business.html">Presented “LightSwitch for Business Application Development” in Microsoft Monday</a></li> </ul>  <h6>Samples (<a href="http://msdn.microsoft.com/en-us/lightswitch/hh204519">see all of them here</a>):</h6>  <ul>   <li><a href="http://code.msdn.microsoft.com/Extended-Text-Box-b8c7b911">Extended Text Box Extension - Source Code</a></li>    <li><a href="http://code.msdn.microsoft.com/NavigationDemo-having-some-f2629c9c">NavigationDemo: having some fun in LightSwitch with the EME navigation model</a></li>    <li><a href="http://code.msdn.microsoft.com/Many-to-Many-Control-for-52cd8c6c">Many to Many Control for Visual Studio LightSwitch</a></li>    <li><a href="http://code.msdn.microsoft.com/Begining-LightSwitch-508763ea">Beginning LightSwitch - Address Book Sample</a></li> </ul>  <h5>LightSwitch Team Community Sites</h5>  <p><a href="http://www.facebook.com/vslightswitch"><img align="left" alt="" border="0" height="84" src="http://badge.facebook.com/badge/151211271561073.1904.953280091.png" style="margin: 0px 6px 0px 0px;" width="137"/></a> The <a href="http://www.facebook.com/vslightswitch">Visual Studio LightSwitch Facebook Page</a> has been increasing in activity thanks to you all. Become a fan! Have fun and interact with us on our wall. Check out the cool stories and resources. </p>  <p>Also here are some other places you can find the LightSwitch team: </p>  <p><a href="http://social.msdn.microsoft.com/Forums/en-US/category/vslightswitch">LightSwitch MSDN Forums</a>    <br/><a href="http://msdn.com/lightswitch">LightSwitch Developer Center</a>    <br/><a href="http://blogs.msdn.com/lightswitch">LightSwitch Team Blog</a>    <br/><a href="http://twitter.com/#!/VSLightSwitch">LightSwitch on Twitter</a> (@VSLightSwitch, #VisualStudio #LightSwitch) </p>  <h6>Join Us!</h6>  <p>The community has been using the hash tag #LightSwitch on twitter when posting stuff so it’s easier for me to catch it (although this is a common English word so you may end up with a few weird ones ;-)). <a href="http://twitter.com/#!/search/realtime/%23LightSwitch">Join the conversation!</a> And if I missed anything please add a comment to the bottom of this post and let us know!</p>  <p>Enjoy!</p><div style="clear: both;"/><img height="1" src="http://blogs.msdn.com/aggbug.aspx?PostID=10263122" width="1"/></div>
    </summary>
    <updated>2012-02-02T15:30:00Z</updated>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Community/" term="Community"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/DevCenter/" term="DevCenter"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Article/" term="Article"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Samples/" term="Samples"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/LightSwitch/" term="LightSwitch"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Rollup/" term="Rollup"/>
    <author>
      <name>Beth Massi</name>
    </author>
    <source>
      <id>http://blogs.msdn.com/b/bethmassi/</id>
      <link href="http://blogs.msdn.com/b/bethmassi/" rel="alternate" type="text/html"/>
      <link href="http://blogs.msdn.com/b/bethmassi/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle>Community champion for business application and Visual Basic developers</subtitle>
      <title>Beth Massi - Sharing the goodness that is VB</title>
      <updated>2012-02-09T11:32:24Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-6650998296413038405</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/6650998296413038405/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=6650998296413038405" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6650998296413038405" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6650998296413038405" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day_02.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-4C3fSgp/0/L/D703446w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-4C3fSgp/0/L/D703446w-M.jpg"/></a><br/>On Ocean Drive (SoBe)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-6650998296413038405?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-02T10:00:07Z</updated>
    <published>2012-02-02T10:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-25631453.post-2591487606735349656</id>
    <link href="http://feedproxy.google.com/~r/ChrisSainty/~3/saWFUR94L1o/bug-hunting-in-public-eye.html" rel="alternate" type="text/html"/>
    <title>Bug hunting in the public eye</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>A few days ago, ayende put up a post showing a bug that had been found in RavenDb that was causing the profiling tools to enter an infinite loop.</p>  <p><a href="http://ayende.com/blog/152738/bug-hunt-what-made-this-blog-slow">http://ayende.com/blog/152738/bug-hunt-what-made-this-blog-slow</a></p>  <p>This was followed by a post about how this bug had come into being and survived so long.</p>  <p><a href="http://ayende.com/blog/153825/ask-ayende-what-about-the-qa-env" title="http://ayende.com/blog/153825/ask-ayende-what-about-the-qa-env">http://ayende.com/blog/153825/ask-ayende-what-about-the-qa-env</a></p>  <p>So confession time, that’s my bug. I contributed the early code for the profiler.</p>  <p>So since then I have been trying to work out how I missed it. Was I really so oblivious to what was going on while writing that code?</p>  <p>Second to that, how had it sat in production on ayende’s blog for 6 months or so without being noticed?</p>  <p>I am glad to say I have an explanation for both, which I will share now.</p>  <p>First some background on how the profiling actually works.</p>  <p>When you attach your DocumentStore to the profile, the following code is run</p> &lt;script src="https://gist.github.com/1720587.js?file=RavenProfilingHandler.cs"&gt;&lt;/script&gt;  <p>Basically we attach to the OnSessionCreated event and stuff a header into the response with the session id.</p>  <p>This is very important, and the key to why this bug was missed. So I will say it again, the X-RavenDb-Profiling-Id header is only added to your response if you actually open a session.</p>  <p>So lets look at that JavaScript again.</p> &lt;script src="https://gist.github.com/1720587.js?file=ravendb-profiler-scripts.js"&gt;&lt;/script&gt;  <p>It only calls back to the server when it gets an AJAX response that has the header set. So if you make an AJAX request to your server for data that does not come from RavenDb, the profiler will not pay any attention to that request.</p>  <p>The request to get the profiling results does not need a session, and in all my development it did not create a session. So it never set the header. So it never entered a loop.</p>  <p>So that explained to me how I had missed the bug, the way I deal with session management (creating and disposing of them only as needed) simply does not trigger the bug.</p>  <p>So with my conscious cleared, I moved on to the second problem. Just because I handle my session this way, clearly RacoonBlog does not, surely that bug hasn’t been there since ayende turned on the profiler for his blog.</p>  <p>Well let me present a commit to the RacoonBlog source from the very end of December.</p>  <p><a href="https://github.com/ayende/RaccoonBlog/commit/b284efae61108af991221d948eb891e1310bc64b">https://github.com/ayende/RaccoonBlog/commit/b284efae61108af991221d948eb891e1310bc64b</a></p>  <p>In this commit, Racoon switched from creating sessions only as they are needed (my way of handling them) to creating the session in the BeginRequest event of *every* request. So even requests that don’t use the session still create one. Which obviously adds the profiling header and tells the JavaScript “this request hit RavenDb, so you should fetch it’s profiling results”.</p>  <p>So until that commit was pushed live RacoonBlog, like my own sites, simply did not trigger this bug, it was sitting there dormant just waiting for someone to take a different approach to session management.</p>  <p>So there we have it. I really don’t feel so bad about it now.</p>  <p>To a certain degree the JavaScript was actually correct. It noticed an AJAX request that said it had profiling information attached and it fetched that information. The fallacy in this argument though is that the JavaScript also has enough information available (the request URL) to know that it is being lied to. It should have used that information to avoid the trap that was laid for it. So it’s still a bug for all that I wish it were not.</p>  <div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/25631453-2591487606735349656?l=csainty.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/ChrisSainty/~4/saWFUR94L1o" width="1"/></div>
    </summary>
    <updated>2012-02-02T01:18:00Z</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="ravendb"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://csainty.blogspot.com/2012/02/bug-hunting-in-public-eye.html</feedburner:origLink>
    <author>
      <name>Chris Sainty</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-25631453</id>
      <category term="linqtosql"/>
      <category term="mocks"/>
      <category term="linq"/>
      <category term="appharbor"/>
      <category term="javascript"/>
      <category term="learn something new"/>
      <category term="personal"/>
      <category term="silverlight"/>
      <category term="unittest"/>
      <category term="mmnet"/>
      <category term="gReadie"/>
      <category term="harris"/>
      <category term="nancy"/>
      <category term="ncg"/>
      <category term="YUI"/>
      <category term="mongodb"/>
      <category term="ravendb"/>
      <category term="mvc"/>
      <category term="wp7dev"/>
      <category term="C#"/>
      <category term="node"/>
      <category term="wp7"/>
      <category term="wpf"/>
      <category term="ozfox"/>
      <category term="dt"/>
      <category term="asp.net"/>
      <category term="design"/>
      <category term="glimpse"/>
      <category term="heroku"/>
      <category term="dotnet"/>
      <category term="svfpug"/>
      <category term="open-source"/>
      <category term="vfp"/>
      <category term="vista"/>
      <category term="node-webkit"/>
      <category term="knockout"/>
      <author>
        <name>Chris Sainty</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://csainty.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/ChrisSainty" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>A technical blog about software development. Usual topics include C#, Node.js, WP7, RavenDb, Nancy.</subtitle>
      <title>Chris Sainty</title>
      <updated>2012-02-02T12:38:59Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.tedroche.com/?p=3912</id>
    <link href="http://blog.tedroche.com/2012/02/01/alpha-loft-web-dev-coffeescript/" rel="alternate" type="text/html"/>
    <title>Alpha Loft announces inaugural Web Developers Meetup</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The folks at Alpha Loft announce a new meetup for Web Developers. The first meeting will feature Mark Bates talking about CoffeeScript and, no doubt, provide some insights from his upcoming book. The idea of a group focused on general … <a href="http://blog.tedroche.com/2012/02/01/alpha-loft-web-dev-coffeescript/">Continue reading <span class="meta-nav">→</span></a></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The folks at <a href="http://www.alphaloft.com">Alpha Loft</a> announce a new <a href="http://www.meetup.com/Web-Dev-Meetup/">meetup for Web Developers</a>. The first meeting will feature <a href="http://www.metabates.com/">Mark Bates</a> talking about <a href="http://coffeescript.org/">CoffeeScript</a> and, no doubt, provide some insights from <a href="http://my.safaribooksonline.com/9780132946155?portal=informit">his upcoming book.</a> The idea of a group focused on general web development and not a particular technology sounds like a great idea. I wish the group good luck and hope to attend future meetings.</p></div>
    </content>
    <updated>2012-02-01T14:22:18Z</updated>
    <category term="JavaScript"/>
    <category term="Web Development"/>
    <category term="AlphaLoft"/>
    <category term="CoffeeScript"/>
    <category term="WebDev"/>
    <author>
      <name>tedroche</name>
    </author>
    <source>
      <id>http://blog.tedroche.com</id>
      <link href="http://blog.tedroche.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://blog.tedroche.com" rel="alternate" type="text/html"/>
      <subtitle>Mission: Interoperable. Working Well with Others Is Good. Competition breeds Innovation. Monopolies breed stagnation.</subtitle>
      <title>Ted Roche's weblog</title>
      <updated>2012-02-09T11:34:25Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://feeds.feedburner.com/1256168_201202011047</id>
    <link href="http://feedproxy.google.com/~r/RickStrahl/~3/wsidMJbslo8/Dynamic-Types-and-DynamicObject-References-in-C" rel="alternate" type="text/html"/>
    <title>Dynamic Types and DynamicObject References in C#</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>I've been working a bit with C# custom dynamic types for several customers recently and I've seen some confusion in understanding how dynamic types are referenced. This discussion specifically centers around types that implement IDynamicMetaObjectProvider or subclass from DynamicObject as opposed to arbitrary type casts of standard .NET types. IDynamicMetaObjectProvider types  are treated special when they are cast to the <em>dynamic </em>type.</p> <p>Assume for a second that I've created my own implementation of a custom dynamic type called DynamicFoo which is about as simple of a dynamic class that I can think of:</p><pre class="code"><span style="color: blue;">public class </span><span style="color: #2b91af;">DynamicFoo </span>: <span style="color: #2b91af;">DynamicObject
</span>{
    <span style="color: #2b91af;">Dictionary</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">object</span>&gt; properties = <span style="color: blue;">new </span><span style="color: #2b91af;">Dictionary</span>&lt;<span style="color: blue;">string</span>, <span style="color: blue;">object</span>&gt;();

    <span style="color: blue;">public string </span>Bar { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }
    <span style="color: blue;">public </span><span style="color: #2b91af;">DateTime </span>Entered { <span style="color: blue;">get</span>; <span style="color: blue;">set</span>; }

    <span style="color: blue;">public override bool </span>TryGetMember(<span style="color: #2b91af;">GetMemberBinder </span>binder, <span style="color: blue;">out object </span>result)
    {
        result = <span style="color: blue;">null</span>;
        <span style="color: blue;">if </span>(!properties.ContainsKey(binder.Name))
            <span style="color: blue;">return false</span>;

        result = properties[binder.Name];
        <span style="color: blue;">return true</span>;
    }

    <span style="color: blue;">public override bool </span>TrySetMember(<span style="color: #2b91af;">SetMemberBinder </span>binder, <span style="color: blue;">object </span>value)
    {
        properties[binder.Name] = value;
        <span style="color: blue;">return true</span>;
    }
}</pre>
<p>This class has an internal dictionary member and I'm exposing this dictionary member through a dynamic by implementing DynamicObject. This implementation exposes the <em>properties</em> dictionary so the dictionary keys can be referenced like properties (foo.NewProperty = "Cool!"). I override TryGetMember() and TrySetMember() which are fired at runtime every time you access a 'property' on a dynamic instance of this DynamicFoo type.</p>
<h3>Strong Typing and Dynamic Casting</h3>
<p>I now can instantiate and use DynamicFoo in a couple of different ways:</p>
<p><strong>Strong Typing</strong></p><pre class="code"><span style="color: #2b91af;">DynamicFoo </span>fooExplicit = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();
<span style="color: blue;">var </span>fooVar = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();<br/></pre>
<p>These two commands are essentially identical and use strong typing. The compiler generates identical code for both of them. The <em>var</em> statement is merely a compiler directive to infer the type of fooVar at <em>compile time</em> and so the type of fooExplicit is DynamicFoo, just like fooExplicit. This is very static - nothing dynamic about it - and it completely ignores the IDynamicMetaObjectProvider implementation of my class above as it's never used.</p>
<p>Using either of these I can access the native properties:</p><pre class="code"><span style="color: green;"><pre class="code"><span style="color: #2b91af;">DynamicFoo </span>fooExplicit = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();<br/><br/><br/></pre><pre class="code"><font color="#008000">// static typing assignments</font></pre></span>fooVar.Bar = <span style="color: #a31515;">"Barred!"</span>;
fooExplicit.Entered = <span style="color: #2b91af;">DateTime</span>.Now;
</pre><pre class="code"><span style="color: green;">// echo back static values
</span><span style="color: #2b91af;">Console</span>.WriteLine(fooVar.Bar);
<span style="color: #2b91af;">Console</span>.WriteLine(fooExplicit.Entered);
</pre>
<p>but I have no access whatsoever to the <em>properties</em> dictionary. Basically this creates a strongly typed instance of the type with access only to the strongly typed interface. You get no dynamic behavior at all. The IDynamicMetaObjectProvider features don't kick in until you cast the type to <em>dynamic</em>.</p>
<p>If I try to access a non-existing property on fooExplicit I get a compilation error that tells me that the property doesn't exist. Again, it's clearly and utterly non-dynamic.</p>
<p><strong>Dynamic</strong></p><pre class="code"><span style="color: blue;">dynamic </span>fooDynamic = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();</pre>
<p>fooDynamic on the other hand is created as a dynamic type and it's a completely different beast. I can also create a dynamic by simply casting any type to dynamic like this:</p><pre class="code"><span style="color: #2b91af;">DynamicFoo </span>fooExplicit = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();
<strong><span style="color: blue;">dynamic </span>fooDynamic = fooExplicit;</strong></pre>
<p>Note that dynamic typically doesn't require an explicit cast as the compiler automatically performs the cast so there's no need to use <em>as dynamic</em>.</p>
<p>Dynamic functionality works at runtime and allows for the dynamic wrapper to look up and call members dynamically. A dynamic type will look for members to access or call in two places:</p>
<ul>
<li>Using the strongly typed members of the object 
</li><li>Using theIDynamicMetaObjectProvider Interface methods to access members</li></ul>
<p>So rather than statically linking and calling a method or retrieving a property, the dynamic type looks up - at runtime  - where the value actually comes from. It's essentially late-binding which allows runtime determination what action to take when a member is accessed at runtime *if* the member you are accessing does not exist on the object. Class members are checked first before IDynamicMetaObjectProvider interface methods are kick in.</p>
<p>All of the following works with the <em>dynamic</em> type:</p><pre class="code"><span style="color: blue;">dynamic </span>fooDynamic = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();
<span style="color: green;">// dynamic typing assignments
</span>fooDynamic.NewProperty = <span style="color: #a31515;">"Something new!"</span>;
fooDynamic.LastAccess = <span style="color: #2b91af;">DateTime</span>.Now;

<span style="color: green;">// dynamic assigning static properties
</span>fooDynamic.Bar = <span style="color: #a31515;">"dynamic barred"</span>;
fooDynamic.Entered = <span style="color: #2b91af;">DateTime</span>.Now;
</pre><pre class="code"><span style="color: green;"><br/><pre class="code"><span style="color: green;">// echo back dynamic values
</span><span style="color: #2b91af;">Console</span>.WriteLine(fooDynamic.NewProperty);
<span style="color: #2b91af;">Console</span>.WriteLine(fooDynamic.LastAccess);
<span style="color: #2b91af;">Console</span>.WriteLine(fooDynamic.Bar);
<span style="color: #2b91af;">Console</span>.WriteLine(fooDynamic.Entered);
</pre></span>
</pre>
<p>The dynamic type can access the native class properties (Bar and Entered) and create and read new ones (NewProperty,LastAccess) all using a single type instance which is pretty cool. As you can see it's pretty easy to create an extensible type this way that can dynamically add members at runtime dynamically.</p>
<h3>The Alter Ego of IDynamicObject </h3>
<p>The key point here is that all three statements - explicit, var and dynamic - declare a new DynamicFoo(), but the dynamic declaration results in completely different behavior than the first two simply because the type has been cast to dynamic.</p>
<p>Dynamic binding means that the type loses its typical strong typing, compile time features. You can see this easily in the Visual Studio code editor. As soon as you assign a value to a dynamic you lose Intellisense and you see </p>
<p><a href="http://www.west-wind.com/Weblog/images/200901/Windows-Live-Writer/Dynamic-object-Confusion_F09D/DynamicInDebugger_2.png"><img alt="DynamicInDebugger" border="0" height="116" src="http://www.west-wind.com/Weblog/images/200901/Windows-Live-Writer/Dynamic-object-Confusion_F09D/DynamicInDebugger_thumb.png" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="DynamicInDebugger" width="365"/></a> </p>
<p>which means there's no Intellisense and no compiler type checking on any members you apply to this instance. </p>
<p>If you're new to the dynamic type it might seem really confusing that a single type can behave differently depending on how it is cast, but that's exactly what happens when you use a type that implements IDynamicMetaObjectProvider. Declare the type as its strong type name and you only get to access the native instance members of the type. Declare or cast it to dynamic and you get dynamic behavior which accesses native members plus it uses IDynamicMetaObjectProvider implementation to handle any missing member definitions by running custom code.</p>
<p>You can easily cast objects back and forth between dynamic and the original type:</p><pre class="code"><span style="color: blue;">dynamic </span>fooDynamic = <span style="color: blue;">new </span><span style="color: #2b91af;">DynamicFoo</span>();
fooDynamic.NewProperty = <span style="color: #a31515;">"New Property Value"</span>;             
<span style="color: #2b91af;">DynamicFoo </span>foo = fooDynamic;
foo.Bar = <span style="color: #a31515;">"Barred"</span>;</pre>
<p>Here the code starts out with a dynamic cast and a dynamic assignment. The code then casts back the value to the DynamicFoo. Notice that when casting from dynamic to DynamicFoo and back we typically do not have to specify the cast explicitly - the compiler can induce the type so I don't need to specify as dynamic or as DynamicFoo.</p>
<h3>Moral of the Story</h3>
<p>This easy interchange between dynamic and the underlying type is actually super useful, because it allows you to create extensible objects that can expose non-member data stores and expose them as an object interface. You can create an object that hosts a number of strongly typed properties and then cast the object to dynamic and add additional dynamic properties to the same type at runtime. You can easily switch back and forth between the strongly typed instance to access the well-known strongly typed properties and to dynamic for the dynamic properties added at runtime. </p>
<p>Keep in mind that dynamic object access has quite a bit of overhead and is definitely slower than strongly typed binding, so if you're accessing the strongly typed parts of your objects you definitely want to use a strongly typed reference. Reserve dynamic for the dynamic members to optimize your code.</p>
<p>The real beauty of dynamic is that with very little effort you can build expandable objects or objects that expose different data stores to an object interface. I'll have more on this in my next post when I create a customized and extensible Expando object based on DynamicObject.</p><div style="margin: 10px 0px;"><small>© Rick Strahl, West Wind Technologies, 2005-2012</small></div><div>Posted in <b><a href="http://feeds.feedburner.com/Weblog/ShowPosts.aspx?Category=CSharp">CSharp</a>  <a href="http://feeds.feedburner.com/Weblog/ShowPosts.aspx?Category=.NET">.NET</a>  </b></div>
<div style="margin-top: 5px;">
<a class="twitter-share-button" href="https://twitter.com/share">Tweet</a>
&lt;script&gt;!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");&lt;/script&gt;

&lt;g:plusone href="http://www.west-wind.com/weblog/posts/2012/Feb/01/Dynamic-Types-and-DynamicObject-References-in-C" size="medium"&gt;&lt;/g:plusone&gt;
&lt;script type="text/javascript"&gt;
  (function() {
    var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
    po.src = 'https://apis.google.com/js/plusone.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
  })();
&lt;/script&gt;

</div><img height="1" src="http://feeds.feedburner.com/~r/RickStrahl/~4/wsidMJbslo8" width="1"/></div>
    </summary>
    <updated>2012-02-01T10:47:50Z</updated>
    <category term="CSharp"/>
    <category term=".NET"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.west-wind.com/weblog/posts/2012/Feb/01/Dynamic-Types-and-DynamicObject-References-in-C</feedburner:origLink>
    <author>
      <name>Rick Strahl</name>
    </author>
    <source>
      <id>http://www.west-wind.com/weblog/</id>
      <logo>http://www.west-wind.com/weblog/images/WebLogBannerLogo.jpg</logo>
      <link href="http://www.west-wind.com/weblog/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/RickStrahl" rel="self" type="application/rss+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://creativecommons.org/licenses/by/2.0/" rel="license"/>
      <subtitle>Life, Surf, Code and everything in between</subtitle>
      <title>Rick Strahl's Web Log</title>
      <updated>2012-02-09T11:18:40Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-3713324351835970791</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/3713324351835970791/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=3713324351835970791" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/3713324351835970791" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/3713324351835970791" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/02/photo-of-day.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-Dv8DgWB/0/L/D704235w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Travel/Florida/Miami-Beach-and-surroundings/i-Dv8DgWB/0/L/D704235w-M.jpg"/></a><br/>South Beach (SoBe)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-3713324351835970791?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-02-01T06:00:00Z</updated>
    <published>2012-02-01T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.tedroche.com/?p=3906</id>
    <link href="http://blog.tedroche.com/2012/01/31/keeping-up-theme-changes/" rel="alternate" type="text/html"/>
    <title>Keeping up: theme changes</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Astute readers (and I know who you two are!) will notice a change to a newer theme. I’ve switched over to the WordPress Twenty-Eleven base theme, with a few of my own tucks, nips and tweaks. I wanted to check … <a href="http://blog.tedroche.com/2012/01/31/keeping-up-theme-changes/">Continue reading <span class="meta-nav">→</span></a></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Astute readers (and I know who you two are!) will notice a change to a newer theme. I’ve switched over to the WordPress <a href="http://wordpress.org/extend/themes/twentyeleven">Twenty-Eleven</a> base theme, with a few of my own tucks, nips and tweaks. I wanted to check out the new theme and test out the new functionality and keep up with the latest stuff.</p>
<p><a href="http://codex.wordpress.org/Child_Themes">Child themes</a> are a piece of cake to create, and a child theme lets me override the original without messing with the original source, so updates will not erase the changes. While they are not so difficult to do <a href="http://codex.wordpress.org/Child_Themes">manually</a> if you are familiar with the command-line, they are even easier with the plugin <a href="http://wordpress.org/extend/plugins/one-click-child-theme/">One-Click Child Theme</a>.</p>
<p>With the child theme in place, I was able to shorten the gap between the site description (the motto) and the header picture, just by adding CSS to the style.css in the child theme (that’s the cascading part of CSS). I added a paper-curl edge effect based on the work of Craig Buckler, published on <a href="http://www.sitepoint.com/pure-css3-paper-curl/">Sitepoint</a>.</p>
<p>I was disappointed that my site was not valid HTML5, according to the W3C’s <a href="http://validator.w3.org">validator site</a>. Category tags used in REL links aren’t standard, so I deleted those. The Creative Commons plugins want to use Dublin Core XML namespaces, and there are issues there I’ve got to clean up. And the “generator” REL tag on the bottom of the page isn’t too standard, either. Overall, though, the pages are relatively clean of excessive markup or poorly-formed structures. Stay tuned as I tweak the last few elements into line.</p></div>
    </content>
    <updated>2012-01-31T16:27:30Z</updated>
    <category term="CSS"/>
    <category term="Home Page"/>
    <category term="HTML"/>
    <category term="JavaScript"/>
    <category term="LAMP"/>
    <category term="Linux"/>
    <category term="MySQL"/>
    <category term="OpenSource"/>
    <category term="PHP"/>
    <category term="Technology"/>
    <category term="Web Development"/>
    <category term="blog"/>
    <category term="wordpress"/>
    <author>
      <name>tedroche</name>
    </author>
    <source>
      <id>http://blog.tedroche.com</id>
      <link href="http://blog.tedroche.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://blog.tedroche.com" rel="alternate" type="text/html"/>
      <subtitle>Mission: Interoperable. Working Well with Others Is Good. Competition breeds Innovation. Monopolies breed stagnation.</subtitle>
      <title>Ted Roche's weblog</title>
      <updated>2012-02-09T11:34:25Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-7687709476207983279</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/7687709476207983279/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=7687709476207983279" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/7687709476207983279" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/7687709476207983279" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/01/photo-of-day_31.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Green-Cay-Wetlands-Delray/i-dZfPqQp/0/L/D309234w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Green-Cay-Wetlands-Delray/i-dZfPqQp/0/L/D309234w-M.jpg"/></a><br/>Green-winged teal<br/>Green Cay wetlands<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-7687709476207983279?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-01-31T10:00:00Z</updated>
    <published>2012-01-31T10:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.31-http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~CrystalReportsFAQ" rel="alternate" type="text/html"/>
    <title>CrystalReportsFAQ</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">I have used Crystal Reports with three VFP applications. For the most part, it is a terrific reporting tool, but I am also aware of its limitations. I have written an FAQ for anyone interested in learning more about it. Please see <a href="http://www.ml-consult.co.uk/foxst-19.htm">http://www.ml-consult.co.uk/foxst-19.htm</a>. --<br/>
<a href="http://www.bouncewow.com/"> Bounce House Rental Mesa AZ </a><br/>
<br/>
[<a href="http://www.bouncewow.com/">http://www.bouncewow.com/</a> |Bounce House Rental Mesa AZ]<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~MikeLewis">Mike Lewis</a><br/>
<font color="purple"> The FAQ referred to above has now been updated for Crystal Reports XI (Jan '06)<br/>
<br/>
<s>You can also download a VFP class library that handles a lot of the details of dealing with CR here:<br/>
 <a href="http://www.kirtlandsys.com/Tools%20Page.htm">http://www.kirtlandsys.com/Tools%20Page.htm</a></s><br/>
&lt;&lt; Page not found &gt;&gt; at this link - <a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a><br/>
<br/>
&lt;updated&gt; The whitepapers on my web site will help you get started. <a href="http://www.craigberntson.com">http://www.craigberntson.com</a> -- <a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></font></div>
    </summary>
    <updated>2012-01-31T08:13:42Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-03T11:43:42Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-25631453.post-8331969726941301774</id>
    <link href="http://feedproxy.google.com/~r/ChrisSainty/~3/OcSH-SzOux4/experiments-in-text-adventure.html" rel="alternate" type="text/html"/>
    <title>Experiments in text adventure</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Like many who were into computers “back in the day” I still maintain a nostalgic, warm and fuzzy feeling at the memory of early text based adventure games.</p>  <p>Back when all I knew were the PRINT and INPUT commands in QBASIC, these were the very first programs I created.</p>  <p>Where am I going with this?</p>  <p>Well over the weekend I was learning the <a href="http://bartaz.github.com/impress.js" target="_blank">Impress.js</a> presentation library and thought to myself that it really was a beautiful way to display text in a web browser. Then a little light bulb went off in my head.</p>  <p>3 hours later, I had forked impress.js and used it’s HTML5 canvas and CSS3 animations to create an engine for a modern text adventure game.</p>  <p>You can see the results of that intense session of programming here <a href="http://csainty.github.com/ImpressGame">http://csainty.github.com/ImpressGame</a></p>  <p>I have quite a few other ideas for what I could do with this underlying concept. If it eventually comes together as I see it, it will be beautiful.</p>  <div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/25631453-8331969726941301774?l=csainty.blogspot.com" width="1"/></div><img height="1" src="http://feeds.feedburner.com/~r/ChrisSainty/~4/OcSH-SzOux4" width="1"/></div>
    </summary>
    <updated>2012-01-31T02:39:00Z</updated>
    <category scheme="http://www.blogger.com/atom/ns#" term="javascript"/>
    <category scheme="http://www.blogger.com/atom/ns#" term="design"/><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://csainty.blogspot.com/2012/01/experiments-in-text-adventure.html</feedburner:origLink>
    <author>
      <name>Chris Sainty</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-25631453</id>
      <category term="linqtosql"/>
      <category term="mocks"/>
      <category term="linq"/>
      <category term="appharbor"/>
      <category term="javascript"/>
      <category term="learn something new"/>
      <category term="personal"/>
      <category term="silverlight"/>
      <category term="unittest"/>
      <category term="mmnet"/>
      <category term="gReadie"/>
      <category term="harris"/>
      <category term="nancy"/>
      <category term="ncg"/>
      <category term="YUI"/>
      <category term="mongodb"/>
      <category term="ravendb"/>
      <category term="mvc"/>
      <category term="wp7dev"/>
      <category term="C#"/>
      <category term="node"/>
      <category term="wp7"/>
      <category term="wpf"/>
      <category term="ozfox"/>
      <category term="dt"/>
      <category term="asp.net"/>
      <category term="design"/>
      <category term="glimpse"/>
      <category term="heroku"/>
      <category term="dotnet"/>
      <category term="svfpug"/>
      <category term="open-source"/>
      <category term="vfp"/>
      <category term="vista"/>
      <category term="node-webkit"/>
      <category term="knockout"/>
      <author>
        <name>Chris Sainty</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://csainty.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/ChrisSainty" rel="self" type="application/atom+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>A technical blog about software development. Usual topics include C#, Node.js, WP7, RavenDb, Nancy.</subtitle>
      <title>Chris Sainty</title>
      <updated>2012-02-02T12:38:59Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>91d46819-8472-40ad-a661-2c78acb4018c:10261947</id>
    <link href="http://blogs.msdn.com/b/calvin_hsia/archive/2012/01/30/10261947.aspx" rel="alternate" type="text/html"/>
    <title>Be careful about nothing in managed code</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">  Here’s a pattern of code use I’ve seen in a few places. There’s a function DeserializeList that returns an array of various sizes, depending on the input. This code can be called to deserialize (rehydrate) an object from a stream. For example,...(<a href="http://blogs.msdn.com/b/calvin_hsia/archive/2012/01/30/10261947.aspx">read more</a>)<img height="1" src="http://blogs.msdn.com/aggbug.aspx?PostID=10261947" width="1"/></div>
    </summary>
    <updated>2012-01-30T22:12:26Z</updated>
    <category scheme="http://blogs.msdn.com/b/calvin_hsia/archive/tags/CSharp/" term="CSharp"/>
    <category scheme="http://blogs.msdn.com/b/calvin_hsia/archive/tags/Memory/" term="Memory"/>
    <author>
      <name>CalvinH</name>
    </author>
    <source>
      <id>http://blogs.msdn.com/b/calvin_hsia/</id>
      <link href="http://blogs.msdn.com/b/calvin_hsia/" rel="alternate" type="text/html"/>
      <link href="http://blogs.msdn.com/b/calvin_hsia/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle>thoughts from a professional developer</subtitle>
      <title>Calvin Hsia's WebLog</title>
      <updated>2012-02-09T11:33:01Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>http://blog.tedroche.com/?p=3902</id>
    <link href="http://blog.tedroche.com/2012/01/30/seacoast-wordpress-developers-group-announces-february-meeting/" rel="alternate" type="text/html"/>
    <title>Seacoast WordPress Developers Group announces February meeting</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The Seacoast WordPress Developers Group will meet on February 15th at the New Hampshire Innovation Commercialization Center. I’ll talk about techniques for making backups of WordPress sites (slides and notes) and Amanda Giles will talk about custom post types. Hope … <a href="http://blog.tedroche.com/2012/01/30/seacoast-wordpress-developers-group-announces-february-meeting/">Continue reading <span class="meta-nav">→</span></a></div>
    </summary>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>The <a href="http://www.wordpressdevseacoast.com/">Seacoast WordPress Developers Group</a> will meet on February 15th at the <a href="http://www.nh-icc.org/">New Hampshire Innovation Commercialization Center</a>. I’ll talk about techniques for making backups of WordPress sites (<a href="http://www.tedroche.com/Present/2011/wordpressbackups/WordPressBackupsSlides.html">slides</a> and <a href="http://www.tedroche.com/Present/2011/wordpressbackups/WordPressBackupsOutline.html">notes</a>) and <a href="http://amandagiles.com/www.html">Amanda Giles</a> will talk about custom post types. Hope to see you there!</p>
<p>Sign up at the <a href="http://www.meetup.com/WordpressDevSeacoast/events/50210332/">Meetup site</a> to confirm attendance.</p></div>
    </content>
    <updated>2012-01-30T20:48:15Z</updated>
    <category term="Technology"/>
    <author>
      <name>tedroche</name>
    </author>
    <source>
      <id>http://blog.tedroche.com</id>
      <link href="http://blog.tedroche.com/feed/" rel="self" type="application/atom+xml"/>
      <link href="http://blog.tedroche.com" rel="alternate" type="text/html"/>
      <subtitle>Mission: Interoperable. Working Well with Others Is Good. Competition breeds Innovation. Monopolies breed stagnation.</subtitle>
      <title>Ted Roche's weblog</title>
      <updated>2012-02-09T11:34:25Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.30-http://fox.wikis.com/wc.dll?Wiki~FoxRockXTOC</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~FoxRockXTOC" rel="alternate" type="text/html"/>
    <title>FoxRockXTOC</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">TOC January 2012 - Number 24
<br/>
<br/>
<b>New Ways: Managing Properties as Virtual Table Fields</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a></i>
<br/>
In a distributed multi user application with a central shared database, its not easy to add new fields to a table or modify table structures at will. This may not even be practical. For example, when the Product table must support inventory for a several Business Models, there may be thousands of individual Product properties.
<br/>
<br/>
<b>Deep Dive: The ctl32 Library, Part 3</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Carlos Alloatti has created an incredible library of controls you can use to give your applications a more modern interface. Doug finishes his look at the library with the last set of controls.
<br/>
<br/>
<b>Know How: Speed Up Your SQL Code</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
In my last article, I talked about the two functionsin VFP that allow you to measure the optimization of SQL commands. This month, Ill look at what you can do to improve performance once you know that a query is sub-optimal.
<br/>
<br/>
<b>VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~ParallelFox">Parallel Fox</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Parallel processing is defined as the performance by a computer of two or more simultaneous operations divided among multiple processors. Parallel programming is spawning processes on two separate processors either on different computers or the same computer. This is becoming more and more important based on the engineering fact it is getting harder to get silicone-based processors to run faster with the reliability and stability we expect and require. So how do <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers take advantage of this approach? Well thanks to Joel Leach and the <a href="http://fox.wikis.com/wc.dll?Wiki~ParallelFox">Parallel Fox</a> project on VFPX, it actually is quite straightforward.
<br/>
<br/>


<hr/>
TOC November 2011 - Number 23
<br/>
<br/>
<b>New Ways: Foxparse C Library for Handling Strings, Properties and Windows</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a></i>
<br/>
A limited version of the Foxparse.fll C library was introduced in an earlier recent issue. This issue covers the full version featuring the complete set of advanced functions. The C API was created to expand the limited choices for string handling, formatting and parsing offered by VFP9.
<br/>
<br/>


<hr/>
TOC September 2011 - Number 22
<br/>
<br/>
<b>Editorial: Totally Marshmallowed? Join us at SWFox <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a> for a refresher!</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
You should not miss the SWFox <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a>. It covers a lot of great topics, treated by great speakers! But maybe economics are harsh again in your region and maybe there is a problem with the funding concerning not only the money to spend, but also the time? Time of not being available at your desk for the perennially urgent development work, support and maintenance tasks?. Here come a few more reasons why you should circumnavigate all these obstacles somehow or why your boss should be won over, too.
<br/>
<br/>
<b>Deep Dive: The ctl32 Library, Part 2</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Carlos Alloatti has created an incredible library of controls you
<br/>
can use to give your applications amore modern interface. Doug continues his look at the library withthe next set of controls.
<br/>
<br/>
<b>Know How: Make Your Queries Fly</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
In the January, 2010 issue, I wrote about changes in VFP's SQL commands in VFP 8 and 9. But one of the key elements in using SQL commands is that they can be very fast. When they're not, you need to figure out why. Fortunately, VFP includes a couple of functions that help you do so.
<br/>
<br/>
<b>VFPX: Thor Adding Tools</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Thor is designed to be the ultimate IDE extension and tool manager and is quickly maturing on VFPX. Last issue Rick briefly introduced you to the installation process and provided a brief overview of Thors user interface. This month Rick dives in to the core reason this tool was created in the first place by detailing how you can use Thor to manage various add-ons and tools you want integrated into the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9 IDE.
<br/>
<br/>
<b>Tips &amp; Tricks: Schummer Tips and Tricks</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ActiveX/IntelliSense" title="Create a topic for this">ActiveX/IntelliSense</a> tip
<br/>
Dragging the <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveX">ActiveX</a> controls from the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Toolbox to an editor provides the syntax for CREATEOBJECT() code. The following code was created when I dropped the Adobe PDF Reader <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveX">ActiveX</a> Control in the program editor:
<br/>
<br/>
<b>Tips &amp; Tricks: Report Writer</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~CathyKnight">Cathy Knight</a></i>
<br/>
The VFP Report Writer has some very useful features hidden away. The first hidden feature is very helpful for concatenating data in a single field object on a report. The second hidden feature is helpful for browsing or hacking the FRX.
<br/>
<br/>
<b>Internationalization: Internationalize Your App, Part 1 Entering international characters</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
Numerous articles and publications describe how to use Unicode and such in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> applications to enable the input and display of international character sets. <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> cannot process double byte character sets and a workaround is needed in all cases. The simple approach discussed here might be the quickest solution to internationalize the data input capabilities of your application, at least to some degree.
<br/>
<br/>


<hr/>
TOC July 2011 - Number 21
<br/>
<br/>
<b>Editorial: It's show time again</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
Mark the date: October 26 - 29, 2011. The Southwest Fox 2011 will take place at the Legado Hotel, Gilbert, Arizona, USA and you should not miss this great event! All details including very interesting session descriptions and the speakers' biographies are available on-line at <a href="http://www.swfox.net">www.swfox.net</a>. Registration is already open.
<br/>
<br/>
<b>Deep Dive: The ctl32 Library, Part 1</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Want to add fresher, more modern-looking controls to your applications? Want to avoid <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveX">ActiveX</a> issues?
<br/>
Take a look at the ctl32 library.
<br/>
<br/>
<b>Know How: Talking to Microsoft Office</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
While most Office Automation code moves smoothly from older versions to the latest, some
<br/>
changes in recent versions do have an impact on the process of automating the Office apps. One change in Office 2010 has major implications for applications that need to use Office's applications programmatically.
<br/>
<br/>
<b>Customerizing: Customizing Your Vertical Market Application, Part IV</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a></i>
<br/>
In the previous three installments of this four-part series, I introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. I showed you how to lay the foundation and add hooks in your application. I showed you how to build the custom application and add basic functionality. I explained how to customize menus, forms, processes and even offer customized data. In this last article of the series, I show you how to customize my favorite part of an application; Reports.
<br/>
<br/>
<b>Silverlight: Applications and the local System</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a></i>
<br/>
As You saw this headline You might be wondering why it is necessary to write an article in <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a>
<br/>
about SL-applications and the system they are running on. But please remember: Silverlight is a web-technology, applications written this way are running on the local system in a sandbox, hosted by a web browser, without any access to the local machine. Thinking about business- applications it becomes very important to talk about ways to use the local file system, automate applications like Office or using the local hardware.
<br/>
<br/>
<b>VFPX: Thor Introduction</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Thor is designed to be the ultimate IDE extension and tool manager and is relatively new to VFPX. Thor helps you manage hotkeys as shortcuts to your add-ons, allows you to create and manage a developer menu, and positions itself as a facilitator to add-ons and the ability to more easily share tools you create with other <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers. This month Rick is going to give you a short introduction to this fluid project in hopes you will help test it out and provide some of your own add-ons to share with the Fox Community, and then next time dig deeper into some extensions samples.
<br/>
<br/>


<hr/>
TOC May 2011 - Number 20
<br/>
<br/>
<b>Deep Dive: Email and File Transfer the Fast (and Cheap!) Way</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
In the previous two issues, Doug discusses free libraries generously provided by Craig Boyd to compress and decompress files and encrypt and decrypt strings and files. In this issue, he discussed two more libraries that add MAPI email and file upload and download capabilities to your applications.
<br/>
<br/>
<b>Know How: Build Your Own Project Tools</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
While <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>'s Project Manager doesn't offer much in the way of tools to audit or manage projects, the ability to address the project as an object more than makes up for this deficiency.
<br/>
<br/>
<b>Customerizing: Customizing Your Vertical Market Application, Part III</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a></i>
<br/>
In the previous two installments of this four-part series, I introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. I showed you how to lay the foundation and add hooks in your application. I showed you how to build the custom application, add basic functionality, and explained how to customize menus. In this article, Part 3, I take it a step further and show you how to customize forms, processes, and offer customized data to your clients.
<br/>
<br/>
<b>Tools: dFPUG.fll Version 3 - Zip, Scan and more</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a> and <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ErichTodt" title="Create a topic for this">Erich Todt</a></i>
<br/>
The dFPUG.fll has grown up. The little FLL with functions for compressing and decompressing files has become an ample collection of functions indispensable for many purposes. <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> developers are offered capabilites hitherto unknown.
<br/>
<br/>


<hr/>
TOC March 2011 - Number 19
<br/>
<br/>
<b>Deep Dive: Encryption the Fast (and Cheap!) Way</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
In the previous issue, Doug discussed a free library generously provided by Craig Boyd to compress and decompress files using the ubiquitous ZIP format. This time, he examines another free library from Craig, one that encrypts and decrypts strings and files.
<br/>
<br/>
<b>Know How: Inside the Object Inspector</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
In my last article, I demonstrated the Object and Collection Inspector, a new tool I built to overcome the VFP Debugger's weaknesses in working with collections. This time, I'll open the hood and cover some of the issues I encountered in building the tool.
<br/>
<br/>
<b>Customerizing: Customizing Your Vertical Market Application, Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a></i>
<br/>
Part 1 of this four-part series introduced you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together. This article, Part 2, dives into the code showing you how to lay the foundation and start building the custom application as well as how to add some customization to menus in your application.
<br/>
<br/>
<b>VFPX: Vista (and Windows 7) Dialogs via COMtool</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Sedna was released on January 25, 2008, which is more than three years ago. Yet Rick still finds <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers asking questions about Sedna, where to go get it, what is included, and how to install it. Microsoft open sourced the Sedna release package and source code, and made it so they could be available on VFPX. Now developers can extend them and have the ability to re-release them to the Fox Community. This month Rick is going to show you the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VistaDialogs4COM" title="Create a topic for this">VistaDialogs4COM</a>, which is one of the components available in the Sedna package.
<br/>
<br/>


<hr/>
TOC January 2011 - Number 18
<br/>
<br/>
<b>Deep Dive: Compression the Fast (and Cheap!) Way</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Need a way to compress and decompress files in your applications? VFP guru Craig Boyd has created a free library to zip and unzip files quickly and easily.
<br/>
<br/>
<b>Know How: Introducing the Object and Collection Inspector</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
For the last four years, I've been working on a project that has grown to include a complex object hierarchy with many embedded collections. While VFP's collection class is quite useful, the debugging tools for collections are weak. In particular, there's no support for drilling down into collections. So I finally created my own tool.
<br/>
<br/>
<b>Customerizing: Customizing Your Vertical Market Application, Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a></i>
<br/>
Writing a vertical market application can be very rewarding. You write one application, sell it numerous times, and sit back while the money rolls in. Well,that's the theory anyway. The reality is often times new clients want to buy your software as long as you can change this one little thing. Managing custom code for various clients within your application can easily turn into a nightmare as your client base expands. This article, part 1 of a four-part series, introduces you to a customization methodology you can implement in your vertical market application to keep your standard code independent from your custom code, yet have the two code bases play nice together.
<br/>
<br/>
<b>Silverlight: Lightswitch - a first look at the Beta of the new RAD tool</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a></i>
<br/>
End of August this year Microsoft published the first Beta of their new product called Lightswitch (former internal name: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~KittyHawk" title="Create a topic for this">KittyHawk</a>). This product should fill a gap in the Visual Studio toolset for professional developers as well as for home users to create database applications as easy as possible. Without writing a line of code, Lightswitch enables the user to create CRUD applications for different datasources (locally or anywhere else) easily. Even though its somewhat a model-based application generator there are enough ways for enhancing the generated application to make the toolset a valuable thing for professionals. In this article I will give a brief overview of Lightswitch and its architecture.
<br/>
<br/>
<b>Tools: Application String Handling Made Easy with Foxparse C library</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a></i>
<br/>
In business applications (and in general), we are faced with complex string handling and parsing issues every day. Fulfilling this requirement with the rudimentary VFP functions SUBSTR, ATC and ALINES is a tedious task involving lengthy ad hoc coding with numerous chained function calls within VFP loops, slowing down development not to mention execution. In this introductory article, Pradip Acharya presents the broad outlines of the new Foxparse C library, its advantages, how its used and a few core functions with examples. In a forthcoming issue, the complete set of functions and the advanced options will be unveiled. Foxparse.fll included in this download is the curtailed version of the library.
<br/>
<br/>


<hr/>
TOC November 2010 - Number 17
<br/>
<br/>
<b>Silverlight: Silverlight Business Applications</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a></i>
<br/>
You can create Silverlight 4 applications with any version of Visual Studio 2010. We are using the version Visual Web Developer 2010 Express which is available for download free of charge. Basically all Silverlight 4 applications can be developed with this free version of Visual Studio 2010. But the various commercial versions of Visual Studio offer an extended debugging, automatized testing capabilities, and the possibility of integrating them in a source code management system. However, the free Visual Web Developer 2010 Express is the right choice for beginners. And in many cases it will suffice for doing professional development work.
<br/>
<br/>
<b>Deep Dive: A More Flexible Report Designer</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
This month, Doug presents a way to make the VFP Report Designer more flexible, such as customizing the pages of the properties dialogs without having
<br/>
to change <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ReportDesigner" title="Create a topic for this">ReportDesigner</a>.APP.
<br/>
<br/>
<b>Know How: Understanding Business Objects, Part III</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Once you have business objects, you need to connect them to the user interface. Plus changing the application is easier than when business logic and UI code are mingled
<br/>
<br/>


<hr/>
TOC September 2010 - Number 16
<br/>
<br/>
<b>Editorial: Rescue in sight with Silverlight</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
Dear <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a> reader,the publisher of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a> magazine, the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> User group of German Language Inc., is happy to report good news: Our plans to offer a migration path for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers have taken big steps forward!
<br/>
Complete article available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: zProc <a href="http://fox.wikis.com/wc.dll?Wiki~IntelliSense">IntelliSense</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~IntelliSense">IntelliSense</a> in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> is highly extensible and this is proven by the number of developers who create scripts over the years to assist themselves and other developers in writing source code quicker. This month Rick is going to dive into the relatively new ⬓zProc, zVFP, and zCOM <a href="http://fox.wikis.com/wc.dll?Wiki~IntelliSense">IntelliSense</a> Scripts⬝ project headed up by Jijo Pappachan to show you three new scripts which may or may not be useful for your development, and potentially can save you time.
<br/>
<br/>
<b>Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part III</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the last in a series that examines some practical uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>.
<br/>
<br/>
<b>Know How: Understanding Business Objects, Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
In my last article, I explained what business objects are and why I had a hard time learning to use them. Then, I looked at a client application (called NMS) that brought the ideas home to me. In this issue, I'll begin to look at the details of using business objects.
<br/>
<br/>
<b>Silverlight: SL <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Data-Binding" title="Create a topic for this">Data-Binding</a> and <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Data-Validation" title="Create a topic for this">Data-Validation</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a></i>
<br/>
Developing Silverlight applications is totally different from the way <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> developers did things for a long time. Most of them don⬜t like to switch over to Visual Studio because of the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~DataBinding" title="Create a topic for this">DataBinding</a> in old style Winforms Applications. Microsoft has released the Windows Presentation Foundation and Silverlight with a totally rewritten <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~User-Interface" title="Create a topic for this">User-Interface</a>. So let⬜s take a closer look at it.
<br/>
<br/>


<hr/>
TOC July 2010 - Number 15
<br/>
<br/>
<b><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~SilverLight" title="Create a topic for this">SilverLight</a>: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~SilverLight" title="Create a topic for this">SilverLight</a> for VFP Developers</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a></i>
<br/>
In the past most of VFP developers were in search of new development tools. Some of us switched to other development platforms like Java or .NET, but most VFP developers still looked for a development platform.
<br/>
Complete article available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Code References</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The Code Reference developer tool is one of those tools some developers find indispensible and other developers find less useful. Regardless of your opinion all <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers have the need to do global searching of the different source code files included in their projects. Jim Nelson decided he wanted a few of his enhancements ideas implemented to make his searching more productive and is making Code References a little more powerful. This month Rick digs into the beta release of this product to show you what is new, and maybe even shed some light on some gotchas with the latest release.
<br/>
<br/>
<b>Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the second in a series that examines some practical uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>.
<br/>
<br/>
<b>Know How: Understanding Business Objects, Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
I've been hearing about business objects since some time in the mid-1990's. Not long after VFP added object-orientation, people started recommending that business logic be encapsulated into a set of separate objects. Intellectually, I understood the idea, but the examples I saw never really seemed to deliver on the promise. The standard example involved a customer object with the customer data entry form calling on that business object to do things like calculate sales tax. While I could see how to build that kind of object, it didn't seem all that important.
<br/>
<br/>


<hr/>
TOC May 2010 - Number 14
<br/>
<br/>
<b>Editorial: The <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Roadshow 2010</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
Dear Subscribers, thank you for your ongoing support of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a>! And here comes our gift to you for supporting us: You are herewith invited to a free one-day workhop right after the South West <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a> in October!
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: OOP Menus</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
OOP menus are probably the second highest requested feature to be added to <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> over the years. Microsoft never responded to this request for some reason (I am speculating it was most likely a resource issue). Doug Hennig wanted OOP menus and over the years implemented his own set of classes to accomplish this task and has posted the classes up on VFPX for others to use and help enhance.
<br/>
<br/>
<b>Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the first in a series that examines some practical uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>.
<br/>
<br/>
<b>New Ways: Extending the Toolbox</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Several issues back, I wrote about the Toolbox, a cool tool added in VFP 8 that makes designing forms and classes much easier. Like many other VFP tools, the Toolbox was written with VFP and was designed with extension in mind. This month, I want to show you how simple some changes to the Toolbox are, so you can customize it for your needs.
<br/>
<br/>
<b>New Ways: Dating with DBI</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~ToniFeltman">Toni Feltman</a></i>
<br/>
In the last issue of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a> I talked about three of the eight <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveX">ActiveX</a> controls that DBI Technologies have graciously provided <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9.0 SP2 users for free. In this issue I am going to talk about two more controls that make working with dates a little more exciting.
<br/>
<br/>


<hr/>
TOC March 2010 - Number 13
<br/>
<br/>
<b>Editorial: <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Stack Overflow</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a></i>
<br/>
In software, a stack overflow occurs when too much memory is used on the call stack, usually caused by programming errors, typically resulting in a program crash. In ideas, a stack overflow might occur when too many ideas, all with good intention, comprise a concept which is too far reaching and/ or unrealistic to reach its goals.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ProjectHookX" title="Create a topic for this">ProjectHookX</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Projecthooks were introduced in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 6, yet even today I know developers who have not implemented projecthooks in their development. Projecthooks allow you as a developer to write code that reacts to the different events of the Project Manager. One of the drawbacks of projecthooks is you only get one per project. Toni Feltman from F1 Technologies saw this limitation pain and designed one approach to working around it so developers can use more than one projecthook for any one project and calls this project <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ProjectHookX" title="Create a topic for this">ProjectHookX</a>.
<br/>
<br/>
<b>Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part III</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the third in a series that provides an introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, going through the basics of GDI+, looking at the classes in <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, and going through various samples of how to use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> in VFP applications.
<br/>
<br/>
<b>New Ways: OOP + Metadata = Flexibility</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Over the last few years, I've found many situations where data-driving code makes an application easier to maintain. But sometimes, data-driving alone can lead to repeated code and more difficult maintenance. In such cases, combining good objectoriented practices with data-driving may provide a better solution.
<br/>
<br/>
<b>New Ways: Paying it Forward</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~ToniFeltman">Toni Feltman</a></i>
<br/>
For years DBI Technologies, <a href="http://www.dbi-tech.com">www.dbi-tech.com</a>, has offered for sale <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveX">ActiveX</a> controls that could be used in various development languages and unlike many other third party vendors they had examples written in <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a>. Now, DBI�s support of the Fox- Pro community is even better. They have agreed to give away 8 of their active controls for free to users of VFP 9, SP2 in a bundle called the Sedna Components.
<br/>
<br/>


<hr/>
TOC January 2010 - Number 12
<br/>
<br/>
<b>Editorial: Get on the VFPX Bandwagon</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
A group of VFPX developers/users held a bonus session during the Southwest Fox conference in October to discuss future direction of VFPX and what is needed to get the word out to other developers in the Fox Community. There were a number of good ideas shared, but there are three key details I believe need to be highlighted.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~SCCTextX">SCCText X</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Source code control is an integral part of the development process for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers, but much of the source code elements in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> are stored in binary format (DBF files), which is not friendly to source code control repositories. The Alternate SCCText project and specifically the <a href="http://fox.wikis.com/wc.dll?Wiki~SCCTextX">SCCText X</a> program is the key ingredient to flattening the DBFs into text files so comparisons can be performed between versions, and merging of two changed versions can occur. Jurgen wOOdy Wondzinski leads the <a href="http://fox.wikis.com/wc.dll?Wiki~SCCTextX">SCCText X</a> project that contains what is considered the gold standard for the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> SCCText process.
<br/>
<br/>
<b>Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the second in a series that provides an introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, going through the basics of GDI+, looking at the classes in <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, and going through various samples of how to use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> in VFP applications.
<br/>
<br/>
<b>New Ways: Take adventage of SQL improvements</b>
<br/>
<i><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TamarE.Granor" title="Create a topic for this">Tamar E. Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
When SQL commands were added in <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> 2, it didn't take me long to see that they could make writing code easier. SQL SELECT, in particular, was very appealing since it made it possible to retrieve the data I needed by specifying what I wanted rather than how to find it.
<br/>
<br/>
<b>New Ways: Wheres the Beef?</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
Many times I have found my self using onto a piece of software for one purpose only to find out that it has many other very valuable uses as well. It�s like finding a free tool in my tool box. Well <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a> is just like that once you discover its web version. If you haven�t yet visited <a href="http://www.foxrockx.com">http://www.foxrockx.com</a> please make it a point to visit there and spelunk around abit real soon. There are gems lying around that place worth their weight in gold.
<br/>
<br/>
<b>New Ways: String.Format for VFP</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a></i>
<br/>
If you havent used C#s String.Format() method, its a real treat. Theres nothing natively like it in VFP, but we can certainly roll our own equivalent. This will make our code easier to read and maintain. This article will show why you want to do that, and how to do it.
<br/>
<br/>
<b><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VUProjectTools" title="Create a topic for this">VUProjectTools</a>: Updating project files from the source control management</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a></i>
<br/>
To make our daily development work easier we have brought many useful little tools to life. In this article in two parts we would like to introduce two of our V and U Project Tools. This second part concerns how to update project files from the source control management.
<br/>
<br/>


<hr/>
TOC November 2009 - Number 11
<br/>
<br/>
<b>Editorial</b>
<br/>
<i>Ken Levy</i>
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Control Renamer</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The Control Renamer Builder project headed by long time <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> guru Tamar Granor is relatively new to VFPX, but has been around a few years. This tool started out as a personal project to help Tamar rename controls in forms developed by other developers so the names of the controls have meaning and followed common programming standards. In this article I hope to show you how this sophisticated builder actually helps me refactor code that I have in forms and VCX-based classes.
<br/>
<br/>
<b>Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> is a VFPX project that exposes GDI+ to VFP applications as a set of VFP class libraries. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> makes it easy to add new graphical abilities to your applications, allowing you to provide a fresher and more powerful user interface. This article is the first in a series that provides an introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, going through the basics of GDI+, looking at the classes in <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, and going through various samples of how to use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a> in VFP applications.
<br/>
<br/>
<b>New Ways: Collections instead of Arrays</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Every procedural programming language I used before <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FoxBase+" title="Create a topic for this">FoxBase+</a> offered arrays as a way to hold an ordered collection of information. So when I started learning <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FoxBase+" title="Create a topic for this">FoxBase+</a>, its arrays made sense to me. Infact, the very first article I ever published in a Foxjournal was about arrays.
<br/>
<br/>
<b>Best Practices: Best Practices Part VI</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
In this series of articles we have discussed a wide variety of issues related to the development of high quality software systems. We have investigated methods for achieving efficiency in our development efforts and attempting to reduce the risk for errors in our code.
<br/>
<br/>
<b><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VUProjectTools" title="Create a topic for this">VUProjectTools</a>: Beauty Studio</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a></i>
<br/>
To make our daily development work easier we have brought many useful little tools to life. In this article in two parts we would like to introduce two of our V and U Project Tools. The first part treats the so-called Beauty Studio.
<br/>
<br/>


<hr/>
TOC September 2009 - Number 10
<br/>
<br/>
<b>Editorial: New kids on the block</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
And here they come: A new book about <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> has been sent to the printer today, and printed copies will be available in September 2009. It is the rewritten version of the best-selling <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> book of all time: Effective Techniques for Application development with <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 6.0 by Jim Booth and Steve Sawyer from Hentzenwerke Publishing. Jim Booth has reworked and updated it for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9.0, but it is still valid for all versions. And why do we say kids instead of kid? Because this book, Effective Application development with <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> comes in two flavours, English and German at the same time!
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Code Analyst</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Code Analyst is a tool developed by Andrew <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~MacNeill" title="Create a topic for this">MacNeill</a> who is a long time <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> guru and most recently famous for his The Fox Show podcasts (<a href="http://akselsoft.libsyn.com/">http://akselsoft.libsyn.com/</a>). Code Analyst is being developed to help <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> developers recognize possible refactoring opportunities. If you are not familiar with refactoring then you need to know it is part of the development process when you recognize a smell of properly working code that could be written better. There are a number of refactoring patterns developers have detailed over the years and concepts we all recognize in our code and in other developers code. Code Analyst is here to help you find these opportunities faster.
<br/>
<br/>
<b>Deep Dive: Custom UI <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Controls:SFCombo" title="Create a topic for this">Controls:SFCombo</a> Tree</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Sometimes you need to display a list of items but don�t have much room to do so. While a combo box is usually used in this case, it doesnt display a hierarchical list or support checkboxes for items. <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~SFComboTree" title="Create a topic for this">SFComboTree</a> fits this need nicely.
<br/>
<br/>
<b>New Ways: The Right Keys are Primary</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> is a relational database, that is, data is stored in multiple tables with fields that establish relationships between those tables. In order to establish those relationships, there must be a way to uniquely identify each record in a table. The field or fields that link one table to another are called keys. Over the years, the best practices for creating those keys have changed, as have the tools for doing so in VFP.
<br/>
<br/>
<b>New Ways: Test Driven Development, After the Fact, Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a></i>
<br/>
In Part I, we reviewed what test-driven development (TDD) was, created some unit tests in <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Fox-Unit" title="Create a topic for this">Fox-Unit</a>, and put together some trivial code to calculate a factorial to run the tests on. It�s easy stuff when youre starting with a blank slate, but how do you get started when youve already got a ton of legacy code? This article will show you how to make a couple of quick changes to <a href="http://fox.wikis.com/wc.dll?Wiki~FoxUnit">Fox Unit</a> to quickly get a suite of tests on existing code.
<br/>
<br/>
<b>New Ways: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ActiveLabel" title="Create a topic for this">ActiveLabel</a> Class - <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~CmdButton" title="Create a topic for this">CmdButton</a> Substitute for Forms with the New Look</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a></i>
<br/>
On the Web and in desktop applications, command buttons are a rare sight today. An action is launched via a highlighted or underlined text string. While VFP offers a <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~HyperLink" title="Create a topic for this">HyperLink</a> native class and a Click method for a label, neither a <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Hyper-Link" title="Create a topic for this">Hyper-Link</a> nor a passive label fulfils the general need for a full featured <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ActiveLabel" title="Create a topic for this">ActiveLabel</a> control with <a href="http://fox.wikis.com/wc.dll?Wiki~SetFocus">Set Focus</a>, Keypress and <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TabStop" title="Create a topic for this">TabStop</a> functionality with builtin co-ordination of associated internal or external access keys, images(s), and supplementary descriptive
label. Pradip Acharya presents an easy to use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ActiveLabel" title="Create a topic for this">ActiveLabel</a> class with rich capabilities which is not a container class. The class library in the download is self sufficient with no external dependencies. The class is also an excellent Toolbar alternative for simplicity, and can also serve as raised 3D buttons as seen in VFP task panes, with optional double line captions.
<br/>
<br/>


<hr/>
TOC July 2009 - Number 9
<br/>
<br/>
<b>Editorial: All You Can Eat!</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a></i>
<br/>
It's conference time again. This year's Prague <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a> took place, <a href="http://fox.wikis.com/wc.dll?Wiki~SouthWestFox">South West Fox</a> and the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a> Germany and other events are coming soon. And lots of new topics and new stuff to learn for everyone. For 15+ years I have really tried to attend conferences and learn new things. And the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> conferences I always enjoyed most as they are the best on earth from my perspective. I am really sorry about each one I missed for whatever reason. Surely the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~DevCons" title="Create a topic for this">DevCons</a> are smaller nowadays, which is a pity as the number of topics you need to know about has increased each
year. Therefore developers have to attend other conferences as well.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Tabbing Navigation</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Rick covers the Tabbing Navigation project this month in his continuing series of articles on the open source project known as VFPX hosted on <a href="http://fox.wikis.com/wc.dll?Wiki~CodePlex">Codeplex</a>. This project provides developers with a snappy dialog filled with the titles of the open windows as well as a list of standard <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> windows available for selection. This enhancement to the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Interactive Development Environment (IDE) is clean and a fast way to find a specific instance of an editor or designer window when you have numerous instances open.
<br/>
<br/>
<b>Deep Dive: Custom UI <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Controls:Splitter" title="Create a topic for this">Controls:Splitter</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Adding a splitter control to your forms gives them a more professional behavior and allows your users to decide the relative sizes of resizable controls.
<br/>
<br/>
<b>Best Practices: Best Practices Part V</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
Last time we discussed some of the concepts that allow us to really exploit our object oriented approach to system development. This time we will pull back a bit and look at our work from a more distant perspective. We will look at the very big picture of our system design by focusing on the architectural structure of our systems.
<br/>
<br/>
<b>New Ways: Use the Toolbox!</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Until now, Ive focused this column on the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> language, covering commands and functions. In this issue, I want to take a look at one of my favorite recent tools, the Toolbox, introduced in VFP 8.
<br/>
<br/>
<b>New Ways: Test Driven Development,After the Fact, Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a></i>
<br/>
<a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Test-Driven" title="Create a topic for this">Test-Driven</a> Development (TDD) is easiest when you do it right from the start. But once you�ve written a lot of code it may seem overwhelming to start testing it after the fact. But if you change any of that existing code, having tests is the best way to ensure that you don�t break any functionality. It may seem like a catch-22, but it is worthwhile to create tests on legacy code so you can use to make sure that doesnt happen.
<br/>
<br/>


<hr/>
TOC May 2009 - Number 8
<br/>
<br/>
<b>Editorial: VFP 9 SP2 News</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The perception and adoption of the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9 Service Pack 2 has been in a word, underwhelming. Reports of the Report Designer having some bugs and the Help file being a mess spread across the various forums and blogosphere extremely fast. Rick has good news on both fronts!
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: PEM-Editor</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The PEM Editor is one of the fastest moving projects on VFPX and for this reason one of the hardest tools to write about in this continuing series. That said, this month Rick attempts to catch you up on all the development for the PEM Editor, show you some of the super cool features it has to help you be more productive, and expose some of the new functionality being developed for the fourth release of this powerful tool.
<br/>
<br/>
<b>Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 3</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
The last article in this three-part series finishes examining a set of classes that provide Explorer-style interfaces to <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> applications.
<br/>
<br/>
<b>Best Practices: Best Practices Part IV</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
Last month we covered the introduction of object orientation and some of the key concepts of that programming paradigm. This month we will continue to look into the key concepts of object orientation and discover some additional mechanisms that are at our disposal within this conceptual programming approach. In addition to covering some more of the programming concepts of object orientation, this month we will introduce and discuss at some length the idea of application frameworks and see how they are constructed and what they can do for us. Obviously, in a single article we will not be building a complete application framework or even discussing a complete framework but we will cover enough about frameworks to give you a very good start on how to approach building your own and how to evaluate any of the many commercial application frameworks that are out there.
<br/>
<br/>
<b>New Ways: Handling Code that Changes at Runtime</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
There are lots of places in VFP code where you dont know until the code is running exactly what you want it to do. Perhaps you want to let the user choose a file to operate on, or you want to run a report based on criteria specified by a user. VFP offers a number of different ways to handle code that isnt known until run-time. Knowing which one to use when affects the efficiency, accuracy, and reliability of your code, but many people stick with macros and dont use any of the other options. In this article, I'll look at each of the options and discuss where its appropriate.
<br/>
<br/>
<b>New Ways: Use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FastNoData" title="Create a topic for this">FastNoData</a> to drastically improve form load times</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MikeYearwood">Mike Yearwood</a></i>
<br/>
Forms that take too long to load are a cause of frequent complaints. Heres a technique that can dramatically reduce form load times. Ive seen anywhere from 8 to 4375 times faster. My most complex form went from loading in a range of 8 to 10 seconds, down to a consistent 2.2 seconds.
<br/>
<br/>


<hr/>
TOC March 2009 - Number 7
<br/>
<br/>
<b>Editorial: Thanks for the Memories (and all the code)!</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
As they discuss in this issues article, Andy Kramek and Marcia Akins have written their last Kitbox column. Doug offers a tribute to Andy and Marcia to celebrate their years of contribution to the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> community.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~FoxTabs">Fox Tabs</a> the VFP IDE</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
<a href="http://fox.wikis.com/wc.dll?Wiki~FoxTabs">Fox Tabs</a> is relatively new to VFPX, but has been in development for years. In October 2008 project manager Joel Leach dusted off the initial development started several years ago by Craig Bailey and Scott Scovell and began moving the tool forward. This month Rick will discuss this innovative approach to enhancing the VFP IDE and explain how he uses it to enhance his productivity.
<br/>
<br/>
<b>Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 2</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
In the first part of this three-part series, Doug presented a set of classes that form the basis of an Explorer-style interface. This article looks at more of these classes.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: So Long and Thanks for all the Fish!</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
For more than 10 years Andy has been writing the Kitbox Column. He was first published, with co-author and long-time friend, Paul Maskens, in the April 1998 edition of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxTalk">Fox Talk</a>. Andy and Paul wrote some 42 articles together in the three and a half years of their collaboration and the style of the column as an interchange between two peers began to gradually evolve. When Paul retired from the column in September 2001, Marcia jumped in and took over as Andys partner in the column, as she is in real life. Together they have written more than seventy articles together and, under their collaboration, the back-and-forth style of two real-life developers discussing a problem of mutual interest evolved further until it truly has become their unique signature. Andy and Marcias writings are instantly recognizable, and their style has even been imitated (the sincerest form of flattery even if it was not very successful). However, like all things, this too must come
to an end and this is the final offering from Andy and Marcia.
<br/>
<br/>
<b>New Ways: The Scope of Things</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
When I started using <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FoxBase+" title="Create a topic for this">FoxBase+</a>, there were two kinds of variables available: public and private. If you did nothing, any variables you used in code were private. Since that was the most restrictive scope available, it was easy to get into the habit of not declaring variables unless they were public.
<br/>
<br/>
<b>Best Practices: Best Practices Part III</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
In the last article of this series we covered the concepts of encapsulation and cohesiveness to understand how to construct routines that have a solid internal structure and we discussed coupling to investigate the issues involved with constructing routines that play well with others. Our first venture into this best practices series covered what constitutes a routine and why we care about routines at all.
<br/>
<br/>


<hr/>
TOC January 2009 - Number 6
<br/>
<br/>
<b>VFPS: <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Stack</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a></i>
<br/>
The evolution and next phase of <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> has essentially been transferred from Microsoft to the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> community. <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> will evolve, but the results of its evolution depend on the efforts within the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> community. VFPS (Visual <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> Stack) can become an important part in the future and perception of <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> starting in 2009 and into the next decade.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Using Desktop Alerts</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The Desktop Alerts provide you with another common mechanism to deliver informational messages to the users while your application is running. This month in Rick�s continuing series on VFPX deep dives, he takes a look at the Desktop Alert project on <a href="http://fox.wikis.com/wc.dll?Wiki~CodePlex">Codeplex</a>, and demonstrates why this control might help you get rid of a few WAIT WINDOWS in your applications.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Take it up with Management</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
All <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> applications rely on data and in VFP we have various ways of handling sets of data. We may use tables directly, views, predefined cursors, or cursors generated on the fly by SQL queries. However, VFP doesnt have a command that will unconditionally create or open and make current a data set irrespective of the type. In this months column Andy and Marcia discuss the creation of a class that will do precisely that thing.
<br/>
<br/>
<b>New Ways: From Type to Type</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Changing data from one type to another is a common requirement. In older versions of VFP, you had to know a veritable cornucopia of functions to handle the various possibilities. A few recent additions make type conversion easier.
<br/>
<br/>
<b>Best Practices: Best Practices Part II</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
Last month we started this series with a little history and some discussion of basic programming practices. We discovered the ideas of routines and modules in our application development and we discussed the impact of designing for expansion to be able to adapt to future requirements. This month we will be digging deeper into the construction of our code and the concepts that we need to understand to realize the benefits of well designed system development.
<br/>
<br/>
<b>Extend Excel with VFP!: Using a <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a> with Excel (and other VBA applications)</b>
<br/>
<i><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~RainerVoemel" title="Create a topic for this">Rainer Voemel</a></i>
<br/>
Most programmers that use VBA are non-IT employees usually, with a marketing, finance, or logistics background trying to automate some reporting tasks. Usually this starts with an Excel spreadsheet and the use of ODBC. With ODBC the user can retrieve results from database queries and create some powerful reports. However, there might be some surprises that will make the user look for a different solution. In my case this was a bug in the VFP ODBC driver when I was using the default settings. The setting Fetch data in background caused the ODBC driver to hang after creating a lot of reports. In my case this was creating a personalized report for roughly 150 recipients. Sometimes after about report 92 the process would hang; at other times this would be around report 102, etc. This made me want to use a VFP <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a> instead of ODBC. After unchecking the ODBC setting Fetch data in the
background, the problem vanished, but I now understood the potential benefits of using a <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a>. In addition, the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a> now has all the SQL features of <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9, whereas the ODBC driver has not been updated for several years. The <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a> I am using now has about 150 methods. This article describes how to use a <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Comserver with Microsoft Excel.
<br/>
<br/>


<hr/>
TOC November 2008 - Number 5
<br/>
<br/>
<b>VFPX: Using the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~BalloonTip" title="Create a topic for this">BalloonTip</a></b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The balloon tip control is a nice way to communicate information to the users while they are interacting with the user interface of the application. This month in Rick�s continuing series on VFPX deep dives, he takes a look at the ctl32_BalloonTip control found in the ctl32_StatusBar project up on <a href="http://fox.wikis.com/wc.dll?Wiki~CodePlex">Codeplex</a>.
<br/>
<br/>
<b>Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 1</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Explorer-style user interfaces are among the most popular for today�s applications. However, working with and integrating the controls necessary to implement an explorer interface can be challenging. This first of a multi-part series presents a set of classes and techniques that makes short work of developing explorer interfaces for your applications.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: A Moving Experience</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
One question that seems to pop up again and again in various on-line forums is how to create a grid with mover bars that will allow the users to re-sequence the records in the same way that they can in a list box. This month Andy and Marcia discuss how to implement this.
<br/>
<br/>
<b>New Ways: Breaking Up is Not Hard to Do</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
In my last article, I looked at techniques for reading and writing text files. Once you�ve read a text file into memory, or perhaps created a long string in some other way, its not unusual to need to break it up into lines, or words, or based on some other criteria. Prior to VFP 6, you had to use different approaches depending on the criteria for parsing. With the introduction of the ALINES() function, though, most simple parsing has been reduced to a single function call.
<br/>
<br/>
<b>Best Practices: Best Practices Part I</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
Programming in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> is not really any different than programming in any other language. Programming languages all have differing syntaxes and the commands and functions vary from one to the other, but the underlying concepts of good programming are universal across all languages. These underlying concepts of good programming are referred to as the Best Practices. In this article series I will be discussing the Best Practices in programming with <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>. The Best Practices are the same for all languages; consequently, the only thing that will make this series about <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> will be the example code.
<br/>


<hr/>
TOC September 2008 - Number 4
<br/>
<br/>
<b>Intro: Career Investment 101 - How can I become a better developer?</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
Rick gets asked the question: how can I become a better developer? He explains how he attempts to stay at the top of his game in software development.
<br/>
Complete editorial available at <a href="http://www.foxrockx.com">http://www.foxrockx.com</a>.
<br/>
<br/>
<b>VFPX: Putting the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~OutlookNavBar" title="Create a topic for this">OutlookNavBar</a> to use</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The Microsoft Outlook user interface was all the rage a few years ago. The last two versions of Outlook include the navigation bar with separate panes for you to manage email, calendar, contacts, tasks, etc. Developers scrambled to duplicate this interface in VFP applications. Emerson Stanton Reed first created the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Outlook2003Bar" title="Create a topic for this">Outlook2003Bar</a>. This month Rick is going to show you how to implement the most current <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~OutlookNavBar" title="Create a topic for this">OutlookNavBar</a> and demonstrate some new flexibility included in the July 2008 release.
<br/>
<br/>
<b>Deep Dive: Practical Uses for XML, Part 2</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
In part 1 of this two-part article, Doug examined the basics of XML: what it is, how its structured, how to create XML, and how to parse it. This article focuses on why XML is useful and shows some practical examples of how he�s used XML in various applications.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: A program is trying to automatically send e-mail</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
Sending E-mail from within an application is often more than a luxury, and there are many ways of doing it in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>. Outlook automation is a common approach and works well, but the version of Collaboration Data Objects that was introduced with Windows 2000 offers a more flexible and extensible approach that allows you to generate E-mail without needing a specific E-mail client installed, or even a work-around for the security patch introduced in Office 2000 SP2. In this months column Andy and Marcia show how to implement CDO in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>.
<br/>
<br/>
<b>New Ways: Working with text</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
VFPs tools for working with text have improved as the importance of text files has grown. In a world where we need to parse and create HTML, XML, and other text formats, using the best VFP has to offer makes the job a lot easier.
<br/>
<br/>
<b><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TimeFrame" title="Create a topic for this">TimeFrame</a> Class - Autoset Past or Future Date Range in Reports</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a></i>
<br/>
Many financial and forecasting reports require a start date and an end date to be entered in the Report Setup interface. This can be a past or a future time period. A sales summary for the last completed Quarter or a preventive maintenance forecast for the next month are typical examples. It�s not easy for the user to figure out the limiting dates in the first place and secondly, users in general are averse to typing in dates in the stipulated format. The <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TimeFrame" title="Create a topic for this">TimeFrame</a> class was created to make it easy to autoset a date range with a click. Select any past or future time period from a dropdown list and the two dates are filled in programmatically. The user can then override either date or select the Open Dates option to enter a date range of choice.
<br/>
<br/>


<hr/>
TOC July 2008 - Number 3
<br/>
<br/>
<b>VFPX: ctl32_StatusBar Easy to Implement</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
The VFPX project is a set of replacement controls designed to improve the user interface experience of your applications. In this issue of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a>, Rick shows you how simple it is to implement a modern replacement for the <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> native status bar.
<br/>
<br/>
<b>Deep Dive: Practical Uses for XML, Part 1</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
XML can be a great way to store some types of data or transfer data from one application to another. In the first of a two-part article, Doug discusses what XML is and how to use it.
<br/>
<br/>
<b>New Ways: Working with work areas</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Although we have had techniques that let us ignore work area numbers and letters for many versions, some developers still write code that addresses work areas directly. This month, I will look at how to write code without worrying about work area letters or numbers, and how to depend as little as possible on the currently selected work area. The result is better code that is easier to write and maintain.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Doing a PROPER job</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
Correctly formatting blocks of text is a problem that we all have to deal with from time to time. While VFP has functions for forcing text to either upper or lower case, its handling of mixed case text suffers from a number of shortcomings that make it essentially unusable in all but the simplest of circumstances. This month Andy and Marcia are discussing the issues surrounding the task of formatting text and come up with a class that does a better job of handling mixed case text.
<br/>
<br/>
<b>Vista: Displaying form borders in Windows Vista</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a></i>
<br/>
If you are running VFP 9 applications in Windows Vista, you will know the problem. Forms with a Border Style setting other than 3 sometimes appear without a form border. In principle this bug shall have been fixed with VFP 9 SP 2. But then why are the forms often displayed incorrectly?
<br/>
<br/>
<b>Events: The <a href="http://fox.wikis.com/wc.dll?Wiki~DevConGermany">DevCon Germany</a> 2007 from a visitors perspective</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~BoudewijnLutgerink">Boudewijn Lutgerink</a></i>
<br/>
While visiting the <a href="http://fox.wikis.com/wc.dll?Wiki~DevConGermany">DevCon Germany</a> last year I took the chance to listen to Steven Blacks sessions about niche markets and So fox is dead, now what?
<br/>
<br/>


<hr/>
TOC May 2008 - Number 2
<br/>
<br/>
<b>New Ways: Use the right loop for the job</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a></i>
<br/>
Learning to use the right loop for the situation will make your code faster and more readable. Both of those goals are worth breaking old habits and building new ones. Happy looping!
<br/>
<br/>
<b>New Ways: Stroking the Keys</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/></i>
<br/>
The mouse is commonly used for many tasks in windows. In real heads down data entry operations it is often more efficient for the users to keep their fingers on the home row. To accomplish this, it is necessary to provide keystroke equivalents for mouse actions like selecting an item from a menu or clicking on a button, even access to functionality that may not be represented by any menu option or button.
<br/>
<br/>
<b>Deep Dive: A Generic Import Utility, Part 2</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Part 1 of this two-part series presented a set of classes making up a generic import utility you can add to your applications to provide import capabilities from a variety of data sources. Part 2 focuses on the user interface components.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: All a matter of form</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
This month Andy and Marcia create a class to handle the creation of word documents from templates using named Bookmarks and Tables to indicate where data should be inserted. The class was originally designed for use with Office 2003, but will work without modification in Office XP and Office 2000. It will also work in Office 2007 but, in that version, creates the new ".docx" file type by default.
<br/>
<br/>
<b>VFPX: Property / Method Dialog Replacements</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
In the first issue of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a>, Rick provided you an overview of VFPX and the <a href="http://fox.wikis.com/wc.dll?Wiki~CodePlex">Codeplex</a> Web site where VFPX projects are established and maintained. In this issue he is starting a series of deepdives into the various projects of VFPX with the intent of exposing the productivity you can gain using VFPX tools, and enhance your applications using the various VFPX components. First up are two of the tools he uses numerous times a day: the New Property and Method dialog and the Edit <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Property/Method" title="Create a topic for this">Property/Method</a> dialog replacements.
<br/>


<hr/>
TOC April 2008 - Free ADS issue
<br/>
<br/>
<b>Advantage Database Server for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Developers</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Advantage Database Server is a full-featured, high-performance client/server database engine. Interestingly, it can use <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> DBF files as its data store and provides a number of benefits over accessing these files directly. This article introduces Advantage and discusses how to access it from VFP applications.
<br/>


<hr/>
TOC March 2008 - Number 1
<br/>
<br/>
<b>VFPX: Open Source Extensions</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a></i>
<br/>
In 2007 I presented a session on VFPX at four <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Conferences in the United States and Europe. During each of the sessions I asked, How many of you have heard of VFPX? Approximately 10 to 15 percent of the people sitting in the room raised their hand. Since I believe VFPX is a significant part of the future of <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, this is a disturbing revelation. The goal of this series of articles is to introduce you to the VFPX open source project, and to do some high level overviews of the different tools and components, as well as some deepdives to show how they can be used in your day-to-day development of <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> solutions. This article will describe VFPX, provide a short history of this project, show you where on the Internet you will find VFPX, and provide an overview of the Web site......
<br/>
<br/>
<b>Deep Dive: A Generic Import Utility, Part 1</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></i>
<br/>
Data entry forms arent the only way your users want to put data into their applications. Often, important data is stored in other applications, so you need a way to import that data into your application. This article, part 1 of a two-part series, presents a generic import utility you can add to your applications to provide import capabilities from a variety of data sources......
<br/>
<br/>
<b>New Ways: Parsing und Building File and Path Names</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a></i>
<br/>
I started using <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FoxBase+" title="Create a topic for this">FoxBase+</a> nearly 20 years ago. In the evolution from that remarkably able product to <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> 9, hundreds, perhaps thousands, of new elements have been added to the <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> programming language. Each new version has introduced not only new capabilities, but new ways to do old things.
<br/>
<br/>
<b><a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Managing Global Variables</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
The use of Public Variables in <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> Applications has long been regarded as poor design. However there are many situations in which a variable that can be accessed, or updated, from anywhere in the application is really the only feasible way of handling things. In this article, Andy and Marcia design a data driven "Variable Manager" class that can be either be instantiated directly, or can be attached to an application object, to manage variables that need to be globally available...
<br/>
<br/>
<b>Blog: Advantage Database Server V9.0, available soon</b>
<br/>
<i><a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></i>
<br/>
Sybase Anywhere have been working on a <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> compatible version of the Advantage Database Server for some time and, just before Christmas, the long-awaited Version 9.0 was released in Beta. You can download the Beta version (time limited until mid of March, beta license expiring on March 28th) from here:....</div>
    </summary>
    <updated>2012-01-30T14:58:35Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-04T12:46:24Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.30-http://fox.wikis.com/wc.dll?Wiki~FoxRockXIssues</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~FoxRockXIssues" rel="alternate" type="text/html"/>
    <title>FoxRockXIssues</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">The 24th regular issue of <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockX">Fox RockX</a> is available:
<br/>
<br/>
January 2012 - Number 24
<br/>
<br/>
01 New Ways: Managing Properties as Virtual Table Fields by <a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a>
<br/>
02 Deep Dive: The ctl32 Library, Part 3 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
06 Know How: Speed Up Your SQL Code by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
09 VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~ParallelFox">Parallel Fox</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
<br/>
<br/>
November 2011 - Number 23
<br/>
<br/>
01 New Ways: Foxparse C Library for Handling Strings, Properties and Windows by <a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a>
<br/>
<br/>
<br/>
September 2011 - Number 22
<br/>
<br/>
01 Editorial: Totally Marshmallowed? Join us at SWFox <a href="http://fox.wikis.com/wc.dll?Wiki~DevCon">DevCon</a> for a refresher! by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 Deep Dive: The ctl32 Library, Part 2 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
07 Know How: Make Your Queries Fly by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
11 VFPX: Thor Adding Tools by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
17 Tips &amp; Tricks: Schummer Tips and Tricks by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
19 Tips &amp; Tricks: Report Writer by <a href="http://fox.wikis.com/wc.dll?Wiki~CathyKnight">Cathy Knight</a>
<br/>
21 Internationalization: Internationalize Your App, Part 1 Entering international characters by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
<br/>
<br/>
July 2011 - Number 21
<br/>
<br/>
01 Editorial: It's show time again by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 Deep Dive: The ctl32 Library, Part 1 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
07 Know How: Talking to Microsoft Office by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
11 Customerizing: Customizing Your Vertical Market Application, Part IV by <a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a>
<br/>
17 Silverlight: Applications and the local System by <a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a>
<br/>
21 VFPX: Thor Introduction by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
<br/>
<br/>
May 2011 - Number 20
<br/>
<br/>
01 Deep Dive: Email and File Transfer the Fast (and Cheap!) Way by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
06 Know How: Build Your Own Project Tools by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
13 Customerizing: Customizing Your Vertical Market Application, Part III by <a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a>
<br/>
17 Tools: dFPUG.fll Version 3 - Zip, Scan and more by <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a> and <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ErichTodt" title="Create a topic for this">Erich Todt</a>
<br/>
<br/>
<br/>
March 2011 - Number 19
<br/>
<br/>
01 Deep Dive: Encryption the Fast (and Cheap!) Way by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
06 Know How: Inside the Object Inspector by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
14 Customerizing: Customizing Your Vertical Market Application, Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a>
<br/>
19 VFPX: Vista (and Windows 7) Dialogs via COMtool by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
<br/>
<br/>
January 2011 - Number 18
<br/>
<br/>
01 Deep Dive: Compression the Fast (and Cheap!) Way by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
06 Know How: Introducing the Object and Collection Inspector by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
09 Customerizing: Customizing Your Vertical Market Application, Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a>
<br/>
13 Silverlight: Lightswitch - a first look at the Beta of the new RAD tool by <a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a>
<br/>
20 Tools: Application String Handling Made Easy with Foxparse C library by <a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a>
<br/>
<br/>
<br/>
November 2010 - Number 17
<br/>
<br/>
01 Silverlight: Silverlight Business Applications by <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a>.
<br/>
10 Deep Dive: A More Flexible Report Designer by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>.
<br/>
18 Know How: Understanding Business Objects, Part III by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
<br/>
<br/>
September 2010 - Number 16
<br/>
<br/>
01 Editorial: Rescue in sight with Silverlight by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: zProc <a href="http://fox.wikis.com/wc.dll?Wiki~IntelliSense">IntelliSense</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
07 Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part III by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
11 Know How: Understanding Business Objects, Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
20 Silverlight: SL <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Data-Binding" title="Create a topic for this">Data-Binding</a> and <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Data-Validation" title="Create a topic for this">Data-Validation</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~MichaelNiethammer">Michael Niethammer</a>
<br/>
<br/>
<br/>
July 2010 - Number 15
<br/>
<br/>
01 Silverlight: Silverlight for VFP Developers by <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a>
<br/>
09 VFPX: Code References by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
14 Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
19 Know How: Understanding Business Objects, Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
<br/>
<br/>
May 2010 - Number 14
<br/>
<br/>
01 Editorial: The <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Roadshow 2010 by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: OOP Menus by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
08 Deep Dive: Practical Uses for <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
13 New Ways: Extending the Toolbox by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
18 New Ways: Dating with DBI by <a href="http://fox.wikis.com/wc.dll?Wiki~ToniFeltman">Toni Feltman</a>
<br/>
<br/>
<br/>
April 2010 - Free special German issue about ADS
<br/>
German edition, sponsored by <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Sybase" title="Create a topic for this">Sybase</a>
<br/>
<br/>
01 <a href="http://fox.wikis.com/wc.dll?Wiki~AdvantageDatabaseServer">Advantage Database Server</a> fuer <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Entwickler von <a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a>
<br/>
<br/>
<br/>
March 2010 - Number 13
<br/>
<br/>
01 Editorial: <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Stack Overflow by <a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a>
<br/>
02 VFPX: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ProjectHookX" title="Create a topic for this">ProjectHookX</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
06 Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part III by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
11 New Ways: OOP + Metadata = Flexibility by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
15 New Ways: Paying it Forward by <a href="http://fox.wikis.com/wc.dll?Wiki~ToniFeltman">Toni Feltman</a>
<br/>
<br/>
<br/>
February 2010 - Free special issue about ADS
<br/>
sponsored by <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Sybase" title="Create a topic for this">Sybase</a>
<br/>
<br/>
01 <a href="http://fox.wikis.com/wc.dll?Wiki~AdvantageDatabaseServer">Advantage Database Server</a> for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Developers by <a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a>
<br/>
<br/>
<br/>
January 2010 - Number 12
<br/>
<br/>
01 Editorial: Get on the VFPX Bandwagon by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
02 VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~SCCTextX">SCCText X</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
06 Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
13 New Ways: Take adventage of SQL improvements by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
17 New Ways: Where�s the Beef? by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
19 New Ways: String.Format for VFP by <a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a>
<br/>
22 <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VUProjectTools" title="Create a topic for this">VUProjectTools</a>: Updating project files from the source control management by <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a>
<br/>
<br/>
<br/>
December 2009 - Free special issue about VFP.NET
<br/>
<br/>
01 VFP.NET by <a href="http://fox.wikis.com/wc.dll?Wiki~BoudewijnLutgerink">Boudewijn Lutgerink</a>
<br/>
<br/>
<br/>
November 2009 - Number 11
<br/>
<br/>
01 Editorial: The history of VFP by <a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a> (also available in French)
<br/>
02 VFPX: Control Renamer by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
07 Deep Dive: Introduction to <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~GDIPlusX" title="Create a topic for this">GDIPlusX</a>, Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
13 New Ways: Collections instead of Arrays by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
17 Best Practices: Best Practices Part VI by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
19 <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VUProjectTools" title="Create a topic for this">VUProjectTools</a>: Beauty Studio by <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~VenelinaJordanova">Venelina Jordanova</a>
<br/>
<br/>
<br/>
September 2009 - Number 10
<br/>
<br/>
01 Editorial: New kids on the block by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: Code Analyst by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
09 Deep Dive: Custom UI <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Controls:SFCombo" title="Create a topic for this">Controls:SFCombo</a> Tree by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
14 New Ways: The Right Keys are Primary by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
18 New Ways: Test Driven Development, After the Fact, Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a>
<br/>
21 New Ways: <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ActiveLabel" title="Create a topic for this">ActiveLabel</a> Class - <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~CmdButton" title="Create a topic for this">CmdButton</a> Substitute for Forms with the New Look by <a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a>
<br/>
<br/>
<br/>
July 2009 - Number 9
<br/>
<br/>
01 Editorial: All You Can Eat! by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: Tabbing Navigation by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
06 Deep Dive: Custom UI <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Controls:Splitter" title="Create a topic for this">Controls:Splitter</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
10 Best Practices: Best Practices Part V by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
13 New Ways: Use the Toolbox! by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
20 New Ways: Test Driven Development,After the Fact, Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~EricSelje">Eric Selje</a>
<br/>
<br/>
<br/>
May 2009 - Number 8
<br/>
<br/>
01 Editorial: VFP 9 SP2 News by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
02 VFPX: PEM-Editor by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
10 Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 3 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
16 Best Practices: Best Practices Part IV by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
20 New Ways: Handling Code that Changes at Runtime by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
23 New Ways: Use <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FastNoData" title="Create a topic for this">FastNoData</a> to drastically improve form load times by <a href="http://fox.wikis.com/wc.dll?Wiki~MikeYearwood">Mike Yearwood</a>
<br/>
<br/>
<br/>
March 2009 - Number 7
<br/>
<br/>
01 Editorial: Thanks for the Memories (and all the code)! by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
02 VFPX: <a href="http://fox.wikis.com/wc.dll?Wiki~FoxTabs">Fox Tabs</a> the VFP IDE by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
05 Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 2 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
11 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: So Long and Thanks for all the Fish! by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
16 New Ways: The Scope of Things by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
19 Best Practices: Best Practices Part III by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
<br/>
<br/>
January 2009 - Number 6
<br/>
<br/>
01 Editorial: VFPS: <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Stack by <a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a> (also available in French and German)
<br/>
02 VFPX: Using Desktop Alerts by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
06 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Take it up with Management by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
10 New Ways: From Type to Type by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
13 Best Practices: Best Practices Part II by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
17 Extend Excel with VFP!: Using a <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ComServer" title="Create a topic for this">ComServer</a> with Excel (and other VBA applications) by <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~RainerVoemel" title="Create a topic for this">Rainer Voemel</a>
<br/>
<br/>
<br/>
November 2008 - Number 5
<br/>
<br/>
01 Introduction by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: Using the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~BalloonTip" title="Create a topic for this">BalloonTip</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
08 Deep Dive: Creating Explorer Interfaces in <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, Part 1 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
15 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: A Moving Experience by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
18 New Ways: Breaking Up is Not Hard to Do by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
21 Best Practices: Best Practices Part I by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
<br/>
<br/>
September 2008 - Number 4
<br/>
<br/>
01 Introduction by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
03 VFPX: Putting the <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~OutlookNavBar" title="Create a topic for this">OutlookNavBar</a> to use by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
11 Deep Dive: Practical Uses for XML, Part 2 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
17 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: A program is trying to automatically send e-mail by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
23 New Ways: Working with text by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
27 New Ways: Past or Future Date Range in Reports by <a href="http://fox.wikis.com/wc.dll?Wiki~PradipAcharya">Pradip Acharya</a>
<br/>
<br/>
<br/>
July 2008 - Number 3
<br/>
<br/>
01 Introduction by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: ctl32_StatusBar Easy to Implement by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
07 Deep Dive: Practical Uses for XML, Part 1 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
14 New Ways: Working with work areas by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
18 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Doing a PROPER job by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
21 Vista: Displaying form borders in Windows Vista by <a href="http://fox.wikis.com/wc.dll?Wiki~UweHabermann">Uwe Habermann</a>
<br/>
24 Events: The <a href="http://fox.wikis.com/wc.dll?Wiki~DevConGermany">DevCon Germany</a> 2007 from a visitors perspective by <a href="http://fox.wikis.com/wc.dll?Wiki~BoudewijnLutgerink">Boudewijn Lutgerink</a>
<br/>
<br/>
<br/>
June 2008 - Free special issue about ADS
<br/>
German version, sponsored by <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Sybase" title="Create a topic for this">Sybase</a>
<br/>
<br/>
01 <a href="http://fox.wikis.com/wc.dll?Wiki~AdvantageDatabaseServer">Advantage Database Server</a> fuer <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Entwickler by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
<br/>
<br/>
May 2008 - Number 2
<br/>
<br/>
01 Introduction by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 New Ways: Use the right loop for the job by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
06 New Ways: Stroking the Keys by <a href="http://fox.wikis.com/wc.dll?Wiki~JimBooth">Jim Booth</a> <img alt="Offsite link to http://www.jamesbooth.com" src="http://fox.wikis.com/OffSiteLnk.gif"/>
<br/>
08 Deep Dive: A Generic Import Utility, Part 2 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
15 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: All a matter of form by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
21 VFPX: Property / Method Dialog Replacements by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
<br/>
<br/>
April 2008 - Free special issue about ADS
<br/>
sponsored by <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Sybase" title="Create a topic for this">Sybase</a>
<br/>
<br/>
01 <a href="http://fox.wikis.com/wc.dll?Wiki~AdvantageDatabaseServer">Advantage Database Server</a> for <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Developers by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
<br/>
<br/>
March 2008 - Number 1
<br/>
<br/>
01 Introduction, see <a href="http://fox.wikis.com/wc.dll?Wiki~FoxRockXIntroduction">Fox RockX Introduction</a> by <a href="http://fox.wikis.com/wc.dll?Wiki~RainerBecker">Rainer Becker</a>
<br/>
02 VFPX: Open Source Extensions by <a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a>
<br/>
09 Deep Dive: A Generic Import Utility, Part 1 by <a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a>
<br/>
15 New Ways: Parsing und Building File and Path Names by <a href="http://fox.wikis.com/wc.dll?Wiki~TamarGranor">Tamar Granor</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~PhD">Ph D</a>
<br/>
19 <a href="http://fox.wikis.com/wc.dll?Wiki~KitBox">Kit Box</a>: Managing Global Variables by <a href="http://fox.wikis.com/wc.dll?Wiki~MarciaAkins">Marcia Akins</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a>
<br/>
23 Blog: <a href="http://fox.wikis.com/wc.dll?Wiki~AdvantageDatabaseServer">Advantage Database Server</a> V9.0, available soon by <a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a></div>
    </summary>
    <updated>2012-01-30T14:55:24Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-04T12:46:23Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-US">
    <id>91d46819-8472-40ad-a661-2c78acb4018c:10261345</id>
    <link href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/30/calling-web-services-to-validate-data-in-visual-studio-lightswitch.aspx" rel="alternate" type="text/html"/>
    <title>Calling Web Services to Validate Data in Visual Studio LightSwitch</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Very often in business applications we need to validate data through another service. I’m not talking about validating the format of data entered – this is very simple to do in LightSwitch -- I’m talking about validating the <strong>meaning </strong>of the data. For instance, you may need to validate not just the format of an email address (which LightSwitch handles automatically for you) but you also want to verify that the email address is real. Another common example is physical Address validation in order to make sure that a postal address is real before you send packages to it. </p>  <p>In this post I’m going to show you how you can call web services when validating LightSwitch data. I’m going to use the <a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/26/beginning-lightswitch-address-book-sample.aspx" target="_blank">Address Book sample</a> and implement an Address validator that calls a service to verify the data. </p>  <h3>Where Do We Call the Service?</h3>  <p>In <a href="http://msdn.com/lightswitch" target="_blank">Visual Studio LightSwitch</a> there are a few places where you can place code to validate entities. There are <em>Property</em>_Validate methods and there are <em>Entity</em>_Validate methods. <em>Property</em>_Validate methods run first on the client and then on the server and are good for checking the format of data entered, doing any comparisons to other properties, or manipulating the data based on conditions stored in the entity itself or its related entities. Usually you want to put your validation code here so that users get immediate feedback of any errors before the data is submitted to the server. These methods are contained on the entity classes themselves. (For more detailed information on the LightSwitch Validation Framework see: <a href="http://blogs.msdn.com/b/lightswitch/archive/2010/08/30/overview-of-data-validation-in-lightswitch-applications-prem-ramanathan.aspx" target="_blank">Overview of Data Validation in LightSwitch Applications</a>)</p>  <p>The <em>Entity</em>_Validate methods only run on the server and are contained in the ApplicationDataService class. This is the perfect place to call an external validation service because it avoids having clients calling external services directly -- instead the LightSwitch middle-tier makes the call. This gives you finer control over your network traffic. Client applications may only be allowed to connect to your intranet internally but you can allow external traffic to the server managing the external connection in one place. </p>  <h3>Calling Web Services</h3>  <p>There are a lot of services out there for validating all sorts of data and each service has a different set of requirements. Typically I prefer <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer" target="_blank">REST-ful services</a> so that you can make a simple http request (GET) and get some data back. However, you can also add service references like ASMX and WCF services as well. It’s all going to depend on the service you use so you’ll need to refer to their specific documentation. </p>  <p>To add a service reference to a LightSwitch application, first flip to File View in the Solution Explorer, right-click on the Server project and then select Add Service Reference…</p>  <p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/8168.image_5F00_2.png"><img alt="image" border="0" height="460" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/2783.image_5F00_thumb.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="555"/></a></p>  <p>Enter the service URL and the service proxy classes will be generated for you. You can then call these from server code you write on the ApplicationDataService just like you would in any other application that has a service reference. In the case of calling REST-ful services that return XML feeds, you can simply construct the URL to call and examine the results. Let’s see how to do that.</p>  <h3>Address Book Example</h3>  <p>In <a href="http://blogs.msdn.com/b/bethmassi/archive/2012/01/26/beginning-lightswitch-address-book-sample.aspx" target="_blank">this sample</a> we have an Address table where we want to validate the physical address when the data is saved. There are a few address validator services out there to choose from that I could find, but for this example I chose to sign up for a free trial of an <a href="http://www.serviceobjects.com/lookups/address/address-validation-us" target="_blank">address validation service from ServiceObjects</a>. They’ve got some <a href="http://trial.serviceobjects.com/av/AddressValidate.asmx?op=ValidateAddress" target="_blank">nice, simple APIs</a> and support REST web requests. Once you sign up they give you a License Key that you need to pass into the service.</p>  <p>A sample request looks like this:</p>  <p><font>http://trial.serviceobjects.com/av/AddressValidate.asmx/ValidateAddress?Address=One+Microsoft+Way&amp;Address2=&amp;City=Redmond&amp;State=WA&amp;PostalCode=98052&amp;LicenseKey=12345</font></p>  <p>Which gives you back the result:</p>  <pre class="code"><span style="color: #6464b9;">&lt;?</span><span style="color: #844646;">xml </span><span style="color: #b96464;">version</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">1.0</span><span style="color: #555555;">" </span><span style="color: #b96464;">encoding</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">UTF-8</span><span style="color: #555555;">"</span><span style="color: #6464b9;">?&gt;
&lt;</span><span style="color: #844646;">Address </span><span style="color: #b96464;">xmlns</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.serviceobjects.com/</span><span style="color: #555555;">"
</span><span style="color: #b96464;">  xmlns:xsi</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #555555;">"
  </span><span style="color: #b96464;">xmlns:xsd</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.w3.org/2001/XMLSchema</span><span style="color: #555555;">"</span><span style="color: #6464b9;">&gt;
  &lt;</span><span style="color: #844646;">Address</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">1 Microsoft Way</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">Address</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">City</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">Redmond</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">City</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">State</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">WA</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">State</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Zip</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">98052-8300</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">Zip</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Address2</span><span style="color: #6464b9;">/&gt;
    &lt;</span><span style="color: #844646;">BarcodeDigits</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">980528300997</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">BarcodeDigits</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">CarrierRoute</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">C012</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">CarrierRoute</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">CongressCode</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">08</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">CongressCode</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">CountyCode</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">033</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">CountyCode</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">CountyName</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">King</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">CountyName</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Fragment</span><span style="color: #6464b9;">/&gt;
  &lt;/</span><span style="color: #844646;">Address</span><span style="color: #6464b9;">&gt;</span></pre>

<p>If you enter a bogus address or forget to specify the City+State or PostalCode then you will get an error result:</p>

<pre class="code"><span style="color: #6464b9;">&lt;?</span><span style="color: #844646;">xml </span><span style="color: #b96464;">version</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">1.0</span><span style="color: #555555;">" </span><span style="color: #b96464;">encoding</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">UTF-8</span><span style="color: #555555;">"</span><span style="color: #6464b9;">?&gt;
&lt;</span><span style="color: #844646;">Address </span><span style="color: #b96464;">xmlns</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.serviceobjects.com/</span><span style="color: #555555;">"
  </span><span style="color: #b96464;">xmlns:xsi</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.w3.org/2001/XMLSchema-instance</span><span style="color: #555555;">"
  </span><span style="color: #b96464;">xmlns:xsd</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.w3.org/2001/XMLSchema</span><span style="color: #555555;">"</span><span style="color: #6464b9;">&gt;
  &lt;</span><span style="color: #844646;">Error</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Desc</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">Please input either zip code or both city and state.</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">Desc</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Number</span><span style="color: #6464b9;">&gt;</span><span style="color: #555555;">2</span><span style="color: #6464b9;">&lt;/</span><span style="color: #844646;">Number</span><span style="color: #6464b9;">&gt;
    &lt;</span><span style="color: #844646;">Location</span><span style="color: #6464b9;">/&gt;
  &lt;/</span><span style="color: #844646;">Error</span><span style="color: #6464b9;">&gt;
&lt;/</span><span style="color: #844646;">Address</span><span style="color: #6464b9;">&gt;
</span></pre>

<p>So in order to interact with this service we’ll first need to add some assembly references to the Server project. Right-click on the Server project (like shown above) and select “Add Reference” and import System.Web and System.Xml.Linq.</p>

<p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/4035.image_5F00_4.png"><img alt="image" border="0" height="693" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/8156.image_5F00_thumb_5F00_1.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="704"/></a></p>

<p>Next, flip back to Logical View and open the Address entity in the Data Designer. Drop down the Write Code button to access the Addresses_Validate method. (You could also just open the Server\UserCode\ApplicationDataService code file if you are in File View). </p>

<p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/3872.image_5F00_6.png"><img alt="image" border="0" height="423" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/3060.image_5F00_thumb_5F00_2.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="277"/></a></p>

<p>First we need to import some namespaces as well as the default XML namespace that is returned in the response. (For more information on XML in Visual Basic please see: <a href="http://msdn.microsoft.com/en-us/library/bb384460.aspx">Overview of LINQ to XML in Visual Basic</a> and <a href="http://blogs.msdn.com/b/bethmassi/archive/tags/xml/article/" target="_blank">articles here on my blog</a>.) Then we can construct the URL based on the entity’s Address properties and query the result XML for either errors or the corrected address. If we find an error, we tell LightSwitch to display the validation result to the user on the screen. </p>

<pre class="code"><span style="color: blue;">Imports </span>System.Xml.Linq
<span style="color: blue;">Imports </span>System.Web.<span style="color: #2b91af;">HttpUtility
</span><span style="color: blue;">Imports </span>&lt;<span style="color: #b96464;">xmlns</span><span style="color: #6464b9;">=</span><span style="color: #555555;">"</span><span style="color: #6464b9;">http://www.serviceobjects.com/</span><span style="color: #555555;">"</span>&gt;

<span style="color: blue;">Namespace </span>LightSwitchApplication
<span style="color: blue;">  Public Class </span><span style="color: #2b91af;">ApplicationDataService

    </span><span style="color: blue;">Private Sub </span>Addresses_Validate(entity <span style="color: blue;">As </span><span style="color: #2b91af;">Address</span>, results <span style="color: blue;">As </span><span style="color: #2b91af;">EntitySetValidationResultsBuilder</span>)
      <span style="color: blue;">Dim </span>isValid = <span style="color: blue;">False
      Dim </span>errorDesc = <span style="color: #a31515;">""

      </span><span style="color: green;">'Construct the URL to call the web service
      </span><span style="color: blue;">Dim </span>url = <span style="color: blue;">String</span>.Format(<span style="color: #a31515;">"http://trial.serviceobjects.com/av/AddressValidate.asmx/ValidateAddress?" </span>&amp;
                              <span style="color: #a31515;">"Address={0}&amp;Address2={1}&amp;City={2}&amp;State={3}&amp;PostalCode={4}&amp;LicenseKey={5}"</span>,
                              UrlEncode(entity.Address1),
                              UrlEncode(entity.Address2),
                              UrlEncode(entity.City),
                              UrlEncode(entity.State),
                              UrlEncode(entity.ZIP),
                              <span style="color: #a31515;">"12345"</span>)

      <span style="color: blue;">Try
          <span style="color: green;">'Call the service and load the XML result </span><br/>          Dim </span>addressData = <span style="color: #2b91af;">XElement</span>.Load(url)

          <span style="color: green;">'Check for errors first
          </span><span style="color: blue;">Dim </span>err = addressData<span style="color: #6464b9;">...&lt;</span>Error<span style="color: #6464b9;">&gt;
          </span><span style="color: blue;">If </span>err.Any <span style="color: blue;">Then
              </span>errorDesc = err<span style="color: #6464b9;">.&lt;</span>Desc<span style="color: #6464b9;">&gt;</span>.Value
          <span style="color: blue;">Else
              </span><span style="color: green;">'Fill in corrected address values returned from service
              </span>entity.Address1 = addressData<span style="color: #6464b9;">.&lt;</span>Address<span style="color: #6464b9;">&gt;</span>.Value
              entity.Address2 = addressData<span style="color: #6464b9;">.&lt;</span>Address2<span style="color: #6464b9;">&gt;</span>.Value
              entity.City = addressData<span style="color: #6464b9;">.&lt;</span>City<span style="color: #6464b9;">&gt;</span>.Value
              entity.State = addressData<span style="color: #6464b9;">.&lt;</span>State<span style="color: #6464b9;">&gt;</span>.Value
              entity.ZIP = addressData<span style="color: #6464b9;">.&lt;</span>Zip<span style="color: #6464b9;">&gt;</span>.Value
              isValid = <span style="color: blue;">True
          End If

      Catch </span>ex <span style="color: blue;">As </span><span style="color: #2b91af;">Exception
          Trace</span>.TraceError(ex)
      <span style="color: blue;">End Try

      If Not </span>(isValid) <span style="color: blue;">Then
          </span>results.AddEntityError(<span style="color: #a31515;">"This is not a valid US address. " </span>&amp; errorDesc)
      <span style="color: blue;">End If
    End Sub
  End Class
End Namespace</span></pre>

<h3>Run it!</h3>

<p>Now that I’ve got this code implemented let’s enter some addresses on our contact screen. Here I’ve entered three addresses, the first two are legal and the last one is not. Also notice that I’ve only specified partial addresses.</p>

<p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/6014.image_5F00_8.png"><img alt="image" border="0" height="299" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/4454.image_5F00_thumb_5F00_3.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="637"/></a></p>

<p>If I try to save this screen, an error will be returned from the service on the last row. LightSwitch won’t let us save until the address is fixed.</p>

<p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/3056.image_5F00_10.png"><img alt="image" border="0" height="323" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/5444.image_5F00_thumb_5F00_4.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="633"/></a></p>

<p>If I delete the bogus address and save again, you will see that the other addresses were verified and all the fields are updated with complete address information.</p>

<p><a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/23602.image_5F00_12.png"><img alt="image" border="0" height="274" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-81-88-metablogapi/3872.image_5F00_thumb_5F00_5.png" style="background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="image" width="631"/></a></p>

<h3/>

<h3>Wrap Up</h3>

<p>I hope this gives you a good idea on how to implement web service calls into the LightSwitch validation pipeline. Even though each service you use will have different requirements on how to call them and what they return, the LightSwitch validation pipeline gives you the necessary hooks to implement complex entity validation easily. </p>

<p>Enjoy!</p><div style="clear: both;"/><img height="1" src="http://blogs.msdn.com/aggbug.aspx?PostID=10261345" width="1"/></div>
    </summary>
    <updated>2012-01-30T14:15:00Z</updated>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/DevCenter/" term="DevCenter"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Article/" term="Article"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/LightSwitch/" term="LightSwitch"/>
    <category scheme="http://blogs.msdn.com/b/bethmassi/archive/tags/Validation/" term="Validation"/>
    <author>
      <name>Beth Massi</name>
    </author>
    <source>
      <id>http://blogs.msdn.com/b/bethmassi/</id>
      <link href="http://blogs.msdn.com/b/bethmassi/" rel="alternate" type="text/html"/>
      <link href="http://blogs.msdn.com/b/bethmassi/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle>Community champion for business application and Visual Basic developers</subtitle>
      <title>Beth Massi - Sharing the goodness that is VB</title>
      <updated>2012-02-09T11:32:24Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-7197690386805415961</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/7197690386805415961/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=7197690386805415961" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/7197690386805415961" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/7197690386805415961" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/01/photo-of-day_30.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Boats/Assorted-Boats/i-5ZFZSMc/0/L/D308839w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Boats/Assorted-Boats/i-5ZFZSMc/0/L/D308839w-M.jpg"/></a><br/>Palmer Johnson 135' Dragon<br/>Seen at Haulover Cut (Miami)<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-7197690386805415961?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-01-30T06:00:01Z</updated>
    <published>2012-01-30T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.29-http://fox.wikis.com/wc.dll?Wiki~MichaelReynolds</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~MichaelReynolds" rel="alternate" type="text/html"/>
    <title>MichaelReynolds</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Michael has been developing in <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> since it was first introduced as <a href="http://fox.wikis.com/wc.dll?Wiki~FoxBASE">Fox BASE</a>, and was using dBASE II and dBASE III+ prior to that. He's been in computers since 1977, and has also developed (or still is) in <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~Perl/CGI" title="Create a topic for this">Perl/CGI</a>, Visual Basic, VBA, ASP, C#, Cognos, HTML, <a href="http://fox.wikis.com/wc.dll?Wiki~JavaScript">Java Script</a>, Assembler, RAMIS, FORTRAN, and COBOL. He spent 10 years in the Air Force as a telecommunications and computer technician.
<br/>
<br/>
Currently, he's the Database Administrator at <a href="http://www.mentorwwllc.com">Mentor Worldwide</a>, a global manufacturer of various healthcare products, where he specializes in office automation. For example, he developed a fully-automated process that pulls numerous sales reports from Oracle via Cognos Impromptu, that are exported to <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a>, which then generates formatted Excel spreadsheets, and emails the reports to the global sales force and upper management. He also developed a web-based system that accepts data queries, retrieves the information, and emails the results to the requester, based on various levels of security.
<br/>
<br/>
Other organizations he has worked for include Sprint, Deckers Outdoor (Teva, Simple, UGG), and Snohomish County (WA).
<br/>
<br/>
Michael's main part-time project is being the Webmaster for his wife, Sue, who is a Master Herbalist. The site is at <a href="http://www.ReynoldsOffice.com">www.ReynoldsOffice.com</a>, and contains several thousand pages, where about 95% of the site is generated by a <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> inventory database, which in turn generates Perl code that provides the web content. The Perl code supports multiple hosted sites, and adjusts the look and feel for each site. He's also a part-time independent developer, and completed a project that assists in Public Works departments throughout the country to become accredited agencies.</div>
    </summary>
    <updated>2012-01-30T04:46:05Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-03T11:43:42Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.29-http://fox.wikis.com/wc.dll?Wiki~ActiveVFP</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~ActiveVFP" rel="alternate" type="text/html"/>
    <title>ActiveVFP</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a href="http://fox.wikis.com/wc.dll?Wiki~ActiveVFP">Active VFP</a> has <i>always</i> been a community effort.
<br/>
Thanks to the following <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> giants for code and/or ideas that has made AVFP what it is today:
<br/>
<br/>
Calvin Hsia
<br/>
Brian Marquis
<br/>
Pandelis Tiritas
<br/>
Rick Strahl
<br/>
Craig Boyd
<br/>
Randy Pearson
<br/>
Maurice De Beijer
<br/>
Paul James
<br/>
Ed Rauh
<br/>
<br/>
If you examine the source code for <a href="http://fox.wikis.com/wc.dll?Wiki~ActiveVFP">Active VFP</a> or visit <a href="http://activevfp.codeplex.com">http://activevfp.codeplex.com</a> you're bound to come across some of their code or influences.</div>
    </summary>
    <updated>2012-01-29T19:33:43Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-02-03T11:43:41Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-230339206176585636</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/230339206176585636/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=230339206176585636" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/230339206176585636" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/230339206176585636" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/01/photo-of-day_29.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Wakodahatchee-Wetlands-Florida/i-P73JR2Z/0/L/D704103w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Wakodahatchee-Wetlands-Florida/i-P73JR2Z/0/L/D704103w-M.jpg"/></a><br/>Triple-breasted cormorant at Wakodahatchee wetlands<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-230339206176585636?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-01-29T06:00:02Z</updated>
    <published>2012-01-29T06:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.28-http://fox.wikis.com/wc.dll?Wiki~BlogWatch</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~BlogWatch" rel="alternate" type="text/html"/>
    <title>BlogWatch</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Editor comments: <b><i>Rick Strahl's <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> RSS feed moves to Feedburner</i></b>
<br/>
<h2>Links to blogs that have something to do with VFP, or by VFP folks</h2>


<br/>
<strong>Active Blogs</strong> See also <a href="http://fox.wikis.com/wc.dll?Wiki~TwitterGallery">Twitter Gallery</a> /
<br/>
<table class="bordertable">
<tbody><tr>
<th>Author</th>
<th>Home Page</th>
<th>Feed</th>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AlexFeldstein">Alex Feldstein</a></td>
<td><a href="http://feeds.feedburner.com/blogspot/alexfeldstein/">http://feeds.feedburner.com/blogspot/alexfeldstein/</a></td>
<td><a href="http://alexfeldstein.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AndrewCoates">Andrew Coates</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.07.13"/> <a href="http://blogs.msdn.com/b/acoat/">http://blogs.msdn.com/b/acoat/</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.07.13"/> <a href="http://blogs.msdn.com/b/acoat/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AndrewMacNeill">Andrew MacNeill</a> - AKSEL Solutions</td>
<td><a href="http://akselsoft.blogspot.com/">http://akselsoft.blogspot.com/</a></td>
<td><a href="http://akselsoft.blogspot.com/rss/akselsoft.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AndrewMacNeill">Andrew MacNeill</a> - Learning <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a></td>
<td><a href="http://learningvfp.blogspot.com/">http://learningvfp.blogspot.com/</a></td>
<td><a href="http://www.learningvisualfoxpro.com/feeds/posts/default?alt=rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AndrewMacNeill">Andrew MacNeill</a> - <a href="http://fox.wikis.com/wc.dll?Wiki~FoxShow">Fox Show</a> <a href="http://fox.wikis.com/wc.dll?Wiki~PodCast">Pod Cast</a></td>
<td><a href="http://www.thefoxshow.com/">http://www.thefoxshow.com/</a></td>
<td><a href="http://akselsoft.libsyn.com/rss/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AndyKramek">Andy Kramek</a> </td>
<td><a href="http://weblogs.foxite.com/andykramek/">http://weblogs.foxite.com/andykramek/</a></td>
<td><a href="http://weblogs.foxite.com/andykramek/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.12.27"/> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ArnonRotem-Gal-Oz" title="Create a topic for this">Arnon Rotem-Gal-Oz</a> </td>
<td><a href="http://www.drdobbs.com/blog/bioPages/author/Arnon/index.jhtml">http://www.drdobbs.com/blog/bioPages/author/Arnon/index.jhtml</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2011.03.08"/> NONE - removed by Dr Dobbs</td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AtoutFox">AtoutFox</a> </td>
<td><a href="http://www.atoutfox.org/">http://www.atoutfox.org/</a></td>
<td><a href="http://www.atoutfox.org/rss_contribs.asp" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~BethMassi">Beth Massi</a></td>
<td><a href="http://blogs.msdn.com/b/bethmassi/">http://blogs.msdn.com/b/bethmassi/</a></td>
<td><a href="http://blogs.msdn.com/b/bethmassi/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~BernardBout">Bernard Bout</a> - Making VFP look cool.</td>
<td><a href="http://weblogs.foxite.com/bernardbout">http://weblogs.foxite.com/bernardbout</a></td>
<td><a href="http://weblogs.foxite.com/bernardbout/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~BoDurban">Bo Durban</a></td>
<td><a href="http://blog.moxiedata.com/">http://blog.moxiedata.com/</a></td>
<td><a href="http://blog.moxiedata.com/SyndicationService.asmx/GetRssCategory?categoryName=General" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~BoudewijnLutgerink">Boudewijn Lutgerink</a></td>
<td><a href="http://weblogs.foxite.com/boudewijnlutgerink/">http://weblogs.foxite.com/boudewijnlutgerink/</a></td>
<td><a href="http://weblogs.foxite.com/boudewijnlutgerink/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~CalvinHsia">Calvin Hsia</a></td>
<td><a href="http://blogs.msdn.com/b/calvin_hsia">http://blogs.msdn.com/b/calvin_hsia</a></td>
<td><a href="http://blogs.msdn.com/b/calvin_hsia/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.11.06"/> <a href="http://fox.wikis.com/wc.dll?Wiki~CathyPountney">Cathy Pountney</a></td>
<td><a href="http://cathypountney.blogspot.com/">http://cathypountney.blogspot.com/</a></td>
<td><a href="http://cathypountney.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~CetinBasoz">Cetin Basoz</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2011.05.17"/> <a href="http://cetinbasoz.wordpress.com/blog">http://cetinbasoz.wordpress.com/blog</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2011.05.17"/> <a href="http://cetinbasoz.wordpress.com/feed/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~ChristofWollenhaupt">Christof Wollenhaupt</a> </td>
<td><a href="http://www.foxpert.com/knowlbits.htm">http://www.foxpert.com/knowlbits.htm</a></td>
<td><a href="http://www.foxpert.com/knowlbits.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~JohnKoziol">John Koziol</a> - Gonzo Maximus Blog - Musings on VFP, SDLC, and whatnot</td>
<td><a href="http://gonzmax.blogspot.com/">http://gonzmax.blogspot.com/</a></td>
<td><a href="http://gonzmax.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~ChrisSainty">Chris Sainty</a> </td>
<td><a href="http://csainty.blogspot.com">http://csainty.blogspot.com</a></td>
<td><a href="http://feeds.feedburner.com/ChrisSainty" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~CraigBailey">Craig Bailey</a> Main blog</td>
<td><a href="http://blog.craigbailey.net/">http://blog.craigbailey.net/</a></td>
<td><a href="http://feeds.feedburner.com/CraigBaileysThoughts" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~CraigBerntson">Craig Berntson</a></td>
<td><a href="http://www.craigberntson.com/blog">http://www.craigberntson.com/blog</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.07.13"/> <a href="http://www.craigberntson.com/blog/?feed=rss2" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~CraigSBoyd">Craig S Boyd</a></td>
<td><a href="http://www.sweetpotatosoftware.com/SPSBlog/">http://www.sweetpotatosoftware.com/SPSBlog/</a></td>
<td><a href="http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetRss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~DaveBernard">Dave Bernard</a></td>
<td><a href="http://davebernard.blogspot.com/">http://davebernard.blogspot.com/</a></td>
<td><a href="http://davebernard.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~DaveCrozier">Dave Crozier</a></td>
<td><a href="http://www.replacement-software.co.uk/blog">http://www.replacement-software.co.uk/blog</a></td>
<td><a href="http://www.replacement-software.co.uk/blog/index.php?/feeds/index.rss2" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~DavidTAnderson">David T Anderson</a></td>
<td><a href="http://detah.blogspot.com/">http://detah.blogspot.com/</a></td>
<td><a href="http://detah.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~DavidStevenson">David Stevenson</a></td>
<td><a href="http://talkingfox.blogspot.com/">http://talkingfox.blogspot.com/</a></td>
<td><a href="http://talkingfox.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.12.21"/> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~DeCiacco.comBlog" title="Create a topic for this">DeCiacco.com Blog</a></td>
<td><a href="http://deciacco.com/blog/">http://deciacco.com/blog/</a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2012.01.17"/> Down for two weeks</td>
<td>was <a href="http://deciacco.com/blog/feed/">http://deciacco.com/blog/feed/</a> </td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.08.08"/> <a href="http://fox.wikis.com/wc.dll?Wiki~DelLee">Del Lee</a></td>
<td><a href="http://deltonlee.blogspot.com/">http://deltonlee.blogspot.com/</a></td>
<td><a href="http://deltonlee.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~DougHennig">Doug Hennig</a></td>
<td><a href="http://doughennig.blogspot.com/">http://doughennig.blogspot.com/</a></td>
<td><a href="http://doughennig.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~EspartaPalma">Esparta Palma</a></td>
<td><a href="http://weblogs.foxite.com/esparta">http://weblogs.foxite.com/esparta</a></td>
<td><a href="http://weblogs.foxite.com/esparta/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FranklinGarz&#xFFFD;n" title="Create a topic for this">Franklin Garz�n</a></td>
<td><a href="http://weblogs.foxite.com/fgarzonhz">http://weblogs.foxite.com/fgarzonhz</a></td>
<td><a href="http://weblogs.foxite.com/fgarzonhz/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~FrankPerez">Frank Perez</a></td>
<td><a href="http://www.pfsolutions-mi.com/blog/default.aspx">http://www.pfsolutions-mi.com/blog/default.aspx</a></td>
<td><a href="http://www.pfsolutions-mi.com/blog/SyndicationService.asmx/GetRss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.05.23"/> <a href="http://fox.wikis.com/wc.dll?Wiki~NancyFolsom">Nancy Folsom</a></td>
<td><a href="http://nancyfolsom.wordpress.com/">http://nancyfolsom.wordpress.com/</a></td>
<td><a href="http://nancyfolsom.wordpress.com/feed/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~FoxiteCommunityBlog">Foxite Community Blog</a> -- All</td>
<td><a href="http://weblogs.foxite.com/">http://weblogs.foxite.com/</a></td>
<td><a href="http://weblogs.foxite.com/feed/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2012.01.06"/> </td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.10.31"/><a href="http://fox.wikis.com/wc.dll?Wiki~Guineu">Guineu</a> Release Blog</td>
<td><a href="http://guineu-blog.blogspot.com/">http://guineu-blog.blogspot.com/</a></td>
<td><a href="http://feeds.feedburner.com/Guineu" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~RichardCameloK.Base" title="Create a topic for this">Richard Camelo K. Base</a> - foxpro.catalyst</td>
<td><a href="http://foxpro.ntsl119.com/scr/">http://foxpro.ntsl119.com/scr/</a></td>
<td><a href="http://foxpro.ntsl119.com/scr/feed" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2008.11.01"/> <a href="http://fox.wikis.com/wc.dll?Wiki~JoelLeach">Joel Leach</a></td>
<td><a href="http://weblogs.foxite.com/joel_leach/default.aspx">http://weblogs.foxite.com/joel_leach/default.aspx</a></td>
<td><a href="http://weblogs.foxite.com/joel_leach/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~KenLevy">Ken Levy</a> </td>
<td><a href="http://blogs.msdn.com/b/klevy/">http://blogs.msdn.com/b/klevy/</a></td>
<td><a href="http://blogs.msdn.com/b/klevy/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~KevinCully">Kevin Cully</a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2007.01.12"/> </td>
<td><a href="http://cully.biz">http://cully.biz</a></td>
<td><a href="http://cully.biz/feed/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~KevinMcNeish">Kevin McNeish</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2011.03.01"/> MIA, was: <a href="http://msmvps.com/kevinmcneish/">http://msmvps.com/kevinmcneish/</a></td>
<td>MIA</td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~KevinRagsdale">Kevin Ragsdale</a></td>
<td><a href="http://kevinragsdale.net/">http://kevinragsdale.net/</a></td>
<td><a href="http://feeds.feedburner.com/feedburner/vfUv" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~JochenKirst&#x4D25;r" title="Create a topic for this">Jochen Kirst䴥r</a> (aka <a href="http://fox.wikis.com/wc.dll?Wiki~JoKi">JoKi</a>) <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.01.26"/> </td>
<td><a href="http://jochen.kirstaetter.name/">http://jochen.kirstaetter.name/</a></td>
<td><a href="http://jochen.kirstaetter.name/index.php?format=feed&amp;type=rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2012.01.10"/> </td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~JuanCalcagno">Juan Calcagno</a></td>
<td><a href="http://blog.jlcconsulting.com/">http://blog.jlcconsulting.com/</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2006.12.17"/> <a href="http://blog.jlcconsulting.com/SyndicationService.asmx/GetRssCategory?categoryName=Foxpro" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~KokKiet" title="Create a topic for this">Kok Kiet</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~JohnJones" title="Create a topic for this">John Jones</a></td>
<td><a href="http://weblogs.foxite.com/kkchan/">http://weblogs.foxite.com/kkchan/</a></td>
<td><a href="http://weblogs.foxite.com/kkchan/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.09.02"/> <a href="http://fox.wikis.com/wc.dll?Wiki~LisaSlaterNicholls">Lisa Slater Nicholls</a></td>
<td><a href="http://spacefold.com/lisa/">http://spacefold.com/lisa/</a></td>
<td><a href="http://spacefold.com/lisa/syndication.axd" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~MartinSalias">Martin Salias</a></td>
<td><a href="http://msalias.blogdrive.com/">http://msalias.blogdrive.com/</a></td>
<td><a href="http://msalias.blogdrive.com/index.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2010.03.12"/> Martin Pirringer MYSQL Blog (VFP -&gt; MYSQL migration)</td>
<td><a href="http://pirringers.com/mysqlblog/">http://pirringers.com/mysqlblog/</a></td>
<td/>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~MattSlay">Matt Slay</a></td>
<td><a href="http://mattslay.com/blog">http://mattslay.com/blog</a></td>
<td><a href="http://mattslay.com/blog" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~MauriceDeBeijer">Maurice De Beijer</a></td>
<td><a href="http://msmvps.com/blogs/theproblemsolver/default.aspx">http://msmvps.com/blogs/theproblemsolver/default.aspx</a></td>
<td><a href="http://msmvps.com/blogs/theproblemsolver/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~NadyaNosonovsky">Nadya Nosonovsky</a></td>
<td><a href="http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;author=218">http://blogs.lessthandot.com/index.php/All/?disp=authdir&amp;author=218</a></td>
<td><a href="http://blogs.lessthandot.com/index.php/All/?tempskin=_rss2&amp;author=218" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~PatrickBibro">Patrick Bibro</a> </td>
<td>BROKEN: <a href="http://bibro.blogspot.com">http://bibro.blogspot.com</a></td>
<td>missing</td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~PaulMcNett">Paul McNett</a></td>
<td><a href="http://paulmcnett.com/cgi-bin/blosxom.cgi">http://paulmcnett.com/cgi-bin/blosxom.cgi</a></td>
<td><a href="http://paulmcnett.com/cgi-bin/blosxom.cgi/index.rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~PaulMrozowski">Paul Mrozowski</a></td>
<td><a href="http://www.rcs-solutions.com/blog">http://www.rcs-solutions.com/blog</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.09.03"/> <a href="http://feeds.feedburner.com/PaulMrozowski" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a>
<br/>
</td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.12.27"/> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~PEMEditor(JimNelson)" title="Create a topic for this">PEM Editor (Jim Nelson)</a> </td>
<td><a href="http://pemeditor.blogspot.com/">http://pemeditor.blogspot.com/</a></td>
<td><a href="http://pemeditor.blogspot.com/feeds/posts/default?alt=rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2008.01.18"/> <a href="http://fox.wikis.com/wc.dll?Wiki~PhiladelphiaVFPUserGroup">Philadelphia VFP User Group</a></td>
<td><a href="http://vfpphilly.blogspot.com/">http://vfpphilly.blogspot.com/</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.07.13"/> <a href="http://vfpphilly.blogspot.com/feeds/posts/default?alt=rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~ProSysPlus" title="Create a topic for this">ProSys Plus</a> ( <a href="http://fox.wikis.com/wc.dll?Wiki~HankFay">Hank Fay</a> )</td>
<td><a href="http://www.prosysplus.net/blog/pspblog.html">http://www.prosysplus.net/blog/pspblog.html</a></td>
<td><a href="http://www.prosysplus.com/blog/pspblog.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2007.03.13"/> Offline</td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RahulDesai">Rahul Desai</a></td>
<td><a href="http://RahulBlog.nationalcom.com">http://RahulBlog.nationalcom.com</a></td>
<td><a href="http://nationalcom.com/wordpress/?feed=rss2" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RickBorup">Rick Borup</a></td>
<td><a href="http://rickborup.blogspot.com/">http://rickborup.blogspot.com/</a></td>
<td><a href="http://feeds.feedburner.com/FiatVolpes" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RickSchummer">Rick Schummer</a> Shedding Some Light v2.0 <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.04.27"/> </td>
<td><a href="http://www.rickschummer.com/blog">http://www.rickschummer.com/blog</a>
<br/>
 <a href="http://rickschummer.com/blog2/index.php">http://rickschummer.com/blog2/index.php</a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2010.04.27"/> </td>
<td><a href="http://www.rickschummer.com/blog/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a>
<br/>
<a href="http://rickschummer.com/blog2/feed" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RickStrahl">Rick Strahl</a> General/.NET</td>
<td><a href="http://www.west-wind.com/WebLog/default.aspx">http://www.west-wind.com/WebLog/default.aspx</a></td>
<td><a href="http://feeds.feedburner.com/RickStrahl" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RickStrahl">Rick Strahl</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~FoxPro/Web" title="Create a topic for this">FoxPro/Web</a> Connection</td>
<td><a href="http://www.west-wind.com/wconnect/WebLog/default.blog">http://www.west-wind.com/wconnect/WebLog/default.blog</a></td>
<td><span class="changed04">[UPDATED]</span> <a href="http://feeds.feedburner.com/RickStrahlsFoxproAndWebConnectionWebLog?format=xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2006.11.21"/> <a href="http://fox.wikis.com/wc.dll?Wiki~RodPaddock">Rod Paddock</a></td>
<td>OLDER: <a href="http://blogs.officezealot.com/rod/">http://blogs.officezealot.com/rod/</a>
<br/>
<br/>
OLD: <a href="http://codebetter.com/blogs/rodpaddock/Default.aspx">http://codebetter.com/blogs/rodpaddock/Default.aspx</a>
<br/>
<br/>
NEW: <a href="http://www.lostechies.com/blogs/rodpaddock/default.aspx">http://www.lostechies.com/blogs/rodpaddock/default.aspx</a></td>
<td><a href="http://www.lostechies.com/blogs/rodpaddock/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RonaldRamirezMoran">Ronald Ramirez Moran</a></td>
<td><a href="http://weblogs.foxite.com/dlanorok">http://weblogs.foxite.com/dlanorok</a></td>
<td><a href="http://weblogs.foxite.com/dlanorok/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~SergeyBerezniker">Sergey Berezniker</a><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2008.11.05"/> </td>
<td><a href="http://sergey.berezniker.com">http://sergey.berezniker.com</a></td>
<td><a href="http://www.berezniker.com/blogs/sergey/feed" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~SimonArnold" title="Create a topic for this">Simon Arnold</a></td>
<td><a href="http://weblogs.foxite.com/simonarnold/">http://weblogs.foxite.com/simonarnold/</a></td>
<td><a href="http://weblogs.foxite.com/simonarnold/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.11.19"/> <a href="http://fox.wikis.com/wc.dll?Wiki~SouthwestFox">Southwest Fox</a> </td>
<td><a href="http://www.swfox.net/blog/">http://www.swfox.net/blog/</a> </td>
<td><a href="http://swfox.net/blog/rss.xml" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~StephenBodnar">Stephen Bodnar</a> </td>
<td><a href="http://www.geeksandgurus.com/blogs/sjb/">http://www.geeksandgurus.com/blogs/sjb/</a> </td>
<td><a href="http://www.geeksandgurus.com/blogs/sjb/atom.xml" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td>Steve Davis</td>
<td><a href="http://foxpro-optimal.blogspot.com">http://foxpro-optimal.blogspot.com</a> </td>
<td><a href="http://foxpro-optimal.blogspot.com/atom.xml" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2006.06.07"/> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~SteveEllenoff" title="Create a topic for this">Steve Ellenoff</a></td>
<td><a href="http://sellenoff.blogspot.com/">http://sellenoff.blogspot.com/</a></td>
<td><a href="http://sellenoff.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~StuartDunkeld">Stuart Dunkeld</a></td>
<td><a href="http://weblogs.foxite.com/stuartdunkeld/">http://weblogs.foxite.com/stuartdunkeld/</a></td>
<td><a href="http://weblogs.foxite.com/stuartdunkeld/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~TedRoche">Ted Roche</a></td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.05.26"/> <a href="http://blog.tedroche.com/">http://blog.tedroche.com/</a></td>
<td><a href="http://blog.tedroche.com/feed/" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~TodMcKenna">Tod McKenna</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TodMeansFox" title="Create a topic for this">TodMeansFox</a></td>
<td><a href="http://blog.todmeansfox.com">http://blog.todmeansfox.com</a>.</td>
<td><img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.07.02"/> <a href="http://blog.todmeansfox.com/feed" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~Visionpace">Visionpace</a> Blog</td>
<td><a href="http://blog.visionpace.com/">http://blog.visionpace.com/</a></td>
<td><a href="http://blog.visionpace.com/index.rdf" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VFPImaging" title="Create a topic for this">VFP Imaging</a> - GDI+ articles and tips</td>
<td><a href="http://weblogs.foxite.com/vfpimaging/">http://weblogs.foxite.com/vfpimaging/</a></td>
<td><a href="http://weblogs.foxite.com/vfpimaging/Rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td>VS DATA Team's Blog</td>
<td><a href="http://blogs.msdn.com/b/vsdata/">http://blogs.msdn.com/b/vsdata/</a></td>
<td><a href="http://blogs.msdn.com/b/vsdata/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~F1Technologies">F 1 Technologies</a></td>
<td><a href="http://f1technologies.blogspot.com/">http://f1technologies.blogspot.com/</a></td>
<td><a href="http://f1technologies.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~RandyJean">Randy Jean</a></td>
<td><a href="http://www.randyjean.com">http://www.randyjean.com</a></td>
<td><a href="http://randyjean.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TomBorgmann" title="Create a topic for this">Tom Borgmann</a> Tom's VFP Blog (in German)</td>
<td><a href="http://tomsvfpblog.blogspot.com/">http://tomsvfpblog.blogspot.com/</a></td>
<td><a href="http://tomsvfpblog.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td>Tom Meeks' Beginning <a href="http://fox.wikis.com/wc.dll?Wiki~VisualFoxPro">Visual FoxPro</a> Tips</td>
<td><a href="http://vfpstart.blogspot.com/">http://vfpstart.blogspot.com/</a></td>
<td><a href="http://vfpstart.blogspot.com/atom.xml" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~WilliamSanders">William Sanders</a> <a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~TerraFox" title="Create a topic for this">TerraFox</a> Publishing</td>
<td><a href="http://www.terrafox.net/">http://www.terrafox.net/</a></td>
<td><a href="http://www.efgroup.net/terrafox/index2.php?option=com_rss&amp;feed=RSS2.0&amp;no_html=1" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2007.03.13"/> </td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~VictorEspina">Victor Espina</a> (in Spanish / en Espanol)</td>
<td><a href="http://vespina.blogspot.com/">http://vespina.blogspot.com/</a></td>
<td>(not available at this time)</td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~YAlanGriver">Y Alan Griver</a></td>
<td><a href="http://blogs.msdn.com/b/yag/">http://blogs.msdn.com/b/yag/</a></td>
<td><a href="http://blogs.msdn.com/b/yag/rss.aspx" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~AlanStevens">Alan Stevens</a></td>
<td><a href="http://netcave.org/">http://netcave.org/</a></td>
<td><a href="http://feeds.feedburner.com/CaveMarkings" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~WaltKrzystek">Walt Krzystek</a></td>
<td><a href="http://wkrzystek.blogspot.com/">http://wkrzystek.blogspot.com/</a></td>
<td><a href="http://wkrzystek.blogspot.com/feeds/posts/default?alt=rss" target="_top"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a class="createtopiclink" href="http://fox.wikis.com/wc.dll?Wiki~Edit~VFPDevelopers" title="Create a topic for this">VFP Developers</a></td>
<td><a href="http://visualfoxpro-developers.com/blog/">http://visualfoxpro-developers.com/blog/</a></td>
<td><a href="http://visualfoxpro-developers.com/blog/wp-rss.php" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a>
<br/>
</td>
</tr>

<tr>
<td>Vassilis Aggelakos</td>
<td><a href="http://weblogs.foxite.com/vassilisaggelakos/">http://weblogs.foxite.com/vassilisaggelakos/</a></td>
<td><a href="http://weblogs.foxite.com/vassilisaggelakos/rss.aspx" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td>Mark Gordon</td>
<td><a href="http://dotbloat.blogspot.com">http://dotbloat.blogspot.com</a></td>
<td><a href="http://dotbloat.blogspot.com" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~PortalFox">Portal Fox</a> (In Spanish) <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="New 2007.03.15"/> </td>
<td><a href="http://www.portalfox.com">http://www.portalfox.com</a></td>
<td><a href="http://feeds2.feedburner.com/Portalfox" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>

<tr>
<td>Planet <a href="http://fox.wikis.com/wc.dll?Wiki~FoxPro">FoxPro</a> <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2009.09.28"/> </td>
<td><a href="http://www.tedroche.com/planetfox/">http://www.tedroche.com/planetfox/</a>
<br/>
 foxpro rss feed agregator</td>
<td/>
</tr>

<tr>
<td><a href="http://fox.wikis.com/wc.dll?Wiki~wOOdy">wOOdy</a>'s Blog (in German) <img alt=" class=" src="http://fox.wikis.com/cal_sm.png" title="Updated 2010.08.16"/> </td>
<td><a href="http://woody-prolib.blogspot.com/">http://woody-prolib.blogspot.com/</a></td>
<td><a href="http://woody-prolib.blogspot.com/atom.xml" target="_blank"><img src="http://fox.wikis.com/xml.gif"/></a></td>
</tr>
</tbody></table></div>
    </summary>
    <updated>2012-01-28T11:23:34Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-01-31T11:42:00Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-1225039792119870438</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/1225039792119870438/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=1225039792119870438" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1225039792119870438" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/1225039792119870438" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/01/photo-of-day_28.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Wakodahatchee-Wetlands-Florida/i-9BV5BjQ/0/L/D704065w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Wakodahatchee-Wetlands-Florida/i-9BV5BjQ/0/L/D704065w-M.jpg"/></a><br/>Triple-breasted cormorant at Wakodahatchee wetlands<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-1225039792119870438?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-01-28T10:00:01Z</updated>
    <published>2012-01-28T10:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.27-http://fox.wikis.com/wc.dll?Wiki~RickStrahl</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~RickStrahl" rel="alternate" type="text/html"/>
    <title>RickStrahl</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Rick Strahl is the owner of <a href="http://fox.wikis.com/wc.dll?Wiki~WestWindTechnologies">West Wind Technologies</a>.
<br/>
<br/>
West Wind Technologies created the following tools:

<ul>
<li><a href="http://www.west-wind.com/webconnection/">West Wind Web Connection</a></li>

<li><a href="http://www.west-wind.com/wwhelp/">West Wind HTML Help Builder</a></li>

<li><a href="http://www.west-wind.com/WestwindWebToolkit/">West Wind Web &amp; AJAX Toolkit for ASP.NET</a></li>

<li><a href="http://www.west-wind.com/wwipstuff.asp">West Wind Internet Protocols</a></li>

<li><a href="http://www.west-wind.com/webconnection/addons/wwstore/">West Wind Web Store</a></li>

<li><a href="http://www.west-wind.com/westwindwebstore/">West Wind Web Store .Net</a></li>

<li><a href="http://www.west-wind.com/webmonitor/">West Wind Web Monitor .Net</a></li>
</ul>


<br/>
Author of: <i><a href="http://fox.wikis.com/wc.dll?Wiki~InternetApplicationsWithVisualFoxPro6">Internet Applications With Visual FoxPro 6</a></i>, Hentzenwerke <a href="http://www.amazon.com/exec/obidos/ISBN=0965509397/stevenblackconsuA/" title="Link to Amazon.com">ISBN 0965509397</a><img src="http://fox.wikis.com/offsitelnk.gif"/>
<br/>
Co Publisher of: <a href="http://www.eps-software.com/code/">Component Developer Magazine</a>
<br/>
<br/>
 Contact: <a href="mailto:rstrahl@west-wind.com">rstrahl@west-wind.com</a>
<br/>
 <a href="http://www.west-wind.com/">http://www.west-wind.com/</a>
<br/>
<br/>
Web Logs:
<br/>
<a href="http://www.west-wind.com/weblog/">Rick Strahl's Main/.NET Blog</a>
<br/>
<a href="http://www.west-wind.com/wconnect/weblog/">Rick Strahl's FoxPro and Web Connection Blog</a>
<br/>
<br/>
Web Development message board:
<br/>
<a href="http://www.west-wind.com/wwThreads/">Message Board</a></div>
    </summary>
    <updated>2012-01-27T11:27:10Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-01-31T11:42:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>2012.01.27-http://fox.wikis.com/wc.dll?Wiki~AnonymousClass</id>
    <link href="http://fox.wikis.com/wc.dll?Wiki~AnonymousClass" rel="alternate" type="text/html"/>
    <title>AnonymousClass</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">(Please, anyone with more Java experience than I have, feel free to make any adjustements here)
<br/>
<br/>
In Java, not all objects must be created from pre-existing, named class definitions. Sometimes it is useful (and convenient) to create an object that is a <a href="http://fox.wikis.com/wc.dll?Wiki~SubClass">Sub Class</a> of some class, but which overrides just a couple of properties or methods.
<br/>
<br/>
Here is an example (quoted from <a href="http://fox.wikis.com/wc.dll?Wiki~SoftwareDevelopmentMagazine">Software Development Magazine</a>):
<br/>
<pre><code>public void testConnectToSMCRemoteServer() throws Exception {
  SocketServer server = new SocketServer(){
    public void server(Socket socket) {
      try { socket.close();
      } catch (IOException e) {
      };
    }
  };
  SocketService smc = new SocketService( SMCPORT, server);
  boolean connection = c.connect();
  assertTrue(connection);
}
</code>
</pre>

This example code is creating an <a href="http://fox.wikis.com/wc.dll?Wiki~AnonymousClass">Anonymous Class</a> that is a <a href="http://fox.wikis.com/wc.dll?Wiki~SubClass">Sub Class</a> of <code>SocketServer</code>, in order to facilitate a test case of the <code>SocketService</code> class.
<br/>
<br/>
In the past, I had recognized that VFP supports the same <a href="http://fox.wikis.com/wc.dll?Wiki~AnonymousClass">Anonymous Class</a> pattern (is it a pattern?), however I had thought of it as an "<a href="http://fox.wikis.com/wc.dll?Wiki~AdHoc">Ad Hoc</a>" class definition. Same meaning, different words. (see <a href="http://fox.wikis.com/wc.dll?Wiki~OOpTerms">OOp Terms</a>, <a href="http://fox.wikis.com/wc.dll?Wiki~ObjectOrientedProgramming">Object Oriented Programming</a>)
<br/>
<br/>
In VFP, you effectively create an <a href="http://fox.wikis.com/wc.dll?Wiki~AnonymousClass">Anonymous Class</a> every time you create a form using <code>MODIFY FORM FormName</code>, since you are able to add and override methods and properties in that form definition; Yet, (even though you could consider the form's .Name property to be the name of an <a href="http://fox.wikis.com/wc.dll?Wiki~AdHoc">Ad Hoc</a> class) you cannot ever <a href="http://fox.wikis.com/wc.dll?Wiki~SubClass">Sub Class</a> that anonymous form class.
<br/></div>
    </summary>
    <updated>2012-01-27T11:25:55Z</updated>
    <source>
      <id>http://fox.wikis.com</id>
      <logo>http://fox.wikis.com/foxpaw.gif</logo>
      <link href="http://fox.wikis.com" rel="alternate" type="text/html"/>
      <link href="http://fox.wikis.com/wc.dll?Wiki~WikiRss" rel="self" type="application/rss+xml"/>
      <rights>Copyright 1999-2012 Steven Black Consulting.</rights>
      <subtitle>Wiki for Microsoft Visual FoxPro development, software engineering, and object-oriented software development using Visual FoxPro.</subtitle>
      <title>VisualFoxProWiki</title>
      <updated>2012-01-31T11:42:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en">
    <id>d67277c4-116b-43f1-b688-e9ef184ea916:1805308</id>
    <link href="http://msmvps.com/blogs/theproblemsolver/archive/2012/01/27/dotned-podcast-koen-zwikstra-over-silverlight-5-en-de-toekomst-van-silverlight.aspx" rel="alternate" type="text/html"/>
    <title>DotNed Podcast: Koen Zwikstra over Silverlight 5 en de toekomst van Silverlight</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Er is weer een <a href="http://dotned.nl/PodCasts.aspx?id=23">nieuwe DotNed podcast</a> online. In deze podcast spreekt Maurice de Beijer met Koen Zwikstra over de recente Silverlight 5 release en hoe de toekomst er voor Silverlight ontwikkelaars uitziet. Verder vertelt hij over Silverlight Spy een runtime inspector waarmee je willekeurige Silverlight applicaties kan inspecteren. Hij kondigt ook nog even aan dat hij druk bezig is met een Spy voor Metro applicaties op Windows 8.</p>
<p>Links:</p>
<ul>
<li>Blog: <a href="http://firstfloorsoftware.com/blog/">http://firstfloorsoftware.com/blog/</a></li>
<li>First Floor Software: <a href="http://firstfloorsoftware.com/">http://firstfloorsoftware.com/</a></li>
<li>Silverlight Spy: <a href="http://firstfloorsoftware.com/silverlightspy/">http://firstfloorsoftware.com/silverlightspy/</a></li>
<li>Balder - 3D engine for Silverlight: <a href="http://balder.codeplex.com/">http://balder.codeplex.com/</a></li>
</ul>
<p> </p>
<p>enjoy!</p>
<p> </p>
<p><a href="http://www.theproblemsolver.nl/">TheProblemSolver</a>   <br/><a href="http://www.dotnetevents.nl/">DotNetEvents</a></p><div style="clear: both;"/><img height="1" src="http://msmvps.com/aggbug.aspx?PostID=1805308" width="1"/></div>
    </summary>
    <updated>2012-01-27T10:39:00Z</updated>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/Silverlight/default.aspx" term="Silverlight"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/Podcast/default.aspx" term="Podcast"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/DotNed/default.aspx" term="DotNed"/>
    <category scheme="http://msmvps.com/blogs/theproblemsolver/archive/tags/dotnetmag/default.aspx" term="dotnetmag"/>
    <author>
      <name>Maurice</name>
    </author>
    <source>
      <id>http://msmvps.com/blogs/theproblemsolver/default.aspx</id>
      <link href="http://msmvps.com/blogs/theproblemsolver/default.aspx" rel="alternate" type="text/html"/>
      <link href="http://msmvps.com/blogs/theproblemsolver/rss.aspx" rel="self" type="application/rss+xml"/>
      <subtitle type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml">Tell me and I will forget<br/>
Show me and I will remember<br/>
Involve me and I will understand<br/>
- Confucius -</div>
      </subtitle>
      <title>The Problem Solver</title>
      <updated>2012-02-09T11:33:50Z</updated>
    </source>
  </entry>

  <entry>
    <id>tag:blogger.com,1999:blog-7613593.post-6466149408065409957</id>
    <link href="http://alexfeldstein.blogspot.com/feeds/6466149408065409957/comments/default" rel="replies" type="application/atom+xml"/>
    <link href="http://www.blogger.com/comment.g?blogID=7613593&amp;postID=6466149408065409957" rel="replies" type="text/html"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6466149408065409957" rel="edit" type="application/atom+xml"/>
    <link href="http://www.blogger.com/feeds/7613593/posts/default/6466149408065409957" rel="self" type="application/atom+xml"/>
    <link href="http://alexfeldstein.blogspot.com/2012/01/photo-of-day_27.html" rel="alternate" type="text/html"/>
    <title>Photo of the day</title>
    <content type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><a border="0" href="http://www.alexfeldsteinphotography.com/Nature/Green-Cay-Wetlands-Delray/i-JsHW94K/0/L/D309119w-L.jpg"><img src="http://www.alexfeldsteinphotography.com/Nature/Green-Cay-Wetlands-Delray/i-JsHW94K/0/L/D309119w-M.jpg"/></a><br/>Same Limpkin as yesterday<br/>Green Cay wetlands<div class="blogger-post-footer"><img alt="" height="1" src="https://blogger.googleusercontent.com/tracker/7613593-6466149408065409957?l=alexfeldstein.blogspot.com" width="1"/></div></div>
    </content>
    <updated>2012-01-27T10:00:09Z</updated>
    <published>2012-01-27T10:00:00Z</published>
    <category scheme="http://www.blogger.com/atom/ns#" term="Photography"/>
    <author>
      <name>Alex Feldstein</name>
      <email>noreply@blogger.com</email>
    </author>
    <source>
      <id>tag:blogger.com,1999:blog-7613593</id>
      <category term="education"/>
      <category term="animals"/>
      <category term="technology"/>
      <category term="cryptography"/>
      <category term="astronomy"/>
      <category term="tools"/>
      <category term="movies"/>
      <category term="books"/>
      <category term="comics"/>
      <category term="NET"/>
      <category term="tribute"/>
      <category term="ads"/>
      <category term="flight"/>
      <category term="web development"/>
      <category term="art"/>
      <category term="skeptics"/>
      <category term="VFP"/>
      <category term="freedom"/>
      <category term="war"/>
      <category term="evolution"/>
      <category term="stupidity"/>
      <category term="creationism"/>
      <category term="travel"/>
      <category term="memories"/>
      <category term="society"/>
      <category term="animation"/>
      <category term="windows"/>
      <category term="aviation"/>
      <category term="Video"/>
      <category term="lesson"/>
      <category term="cars"/>
      <category term="News"/>
      <category term="comments"/>
      <category term="science"/>
      <category term="humor"/>
      <category term="flightsimm"/>
      <category term="anthropology"/>
      <category term="racism"/>
      <category term="Nature"/>
      <category term="business"/>
      <category term="TV"/>
      <category term="Visual FoxPro"/>
      <category term="reviews"/>
      <category term="law"/>
      <category term="Tech news"/>
      <category term="security"/>
      <category term="politics"/>
      <category term="Software Development"/>
      <category term="models"/>
      <category term="economy"/>
      <category term="Photography"/>
      <category term="rationalism"/>
      <category term="Gadgets"/>
      <category term="music"/>
      <category term="language"/>
      <category term="FOX"/>
      <category term="quiz"/>
      <category term="gaming"/>
      <category term="Video. movies"/>
      <category term="writers"/>
      <category term="toys"/>
      <category term="cool"/>
      <category term="copyright"/>
      <category term="economics"/>
      <category term="Rants"/>
      <category term="Trains"/>
      <category term="superstition"/>
      <category term="entertainment"/>
      <category term="history"/>
      <category term="religion"/>
      <category term="geography"/>
      <category term="weird"/>
      <category term="flightsim"/>
      <category term="fun"/>
      <category term="anniversaries"/>
      <category term="nuts"/>
      <category term="writing"/>
      <author>
        <name>Alex Feldstein</name>
        <email>noreply@blogger.com</email>
      </author>
      <link href="http://alexfeldstein.blogspot.com/feeds/posts/default" rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default" rel="self" type="application/atom+xml"/>
      <link href="http://alexfeldstein.blogspot.com/" rel="alternate" type="text/html"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <link href="http://www.blogger.com/feeds/7613593/posts/default?start-index=26&amp;max-results=25" rel="next" type="application/atom+xml"/>
      <title>Alex Feldstein</title>
      <updated>2012-02-09T06:00:00Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://feeds.feedburner.com/rickstrahlsfoxproandwebconnectionweblog/883_20120126</id>
    <link href="http://feedproxy.google.com/~r/RickStrahlsFoxproAndWebConnectionWebLog/~3/BDquaeASlbM/ShowEntry.blog" rel="alternate" type="text/html"/>
    <title>Transparent Bitmaps on Buttons and other Controls</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Overlayed bitmaps in FoxPro have always been a royal pain, but in order to make a UI that looks clean, getting some sort of transparency to work with FoxPro controls is pretty important. Although FoxPro supports most common image formats including GIF and PNG that support transparency, the transparency isn't supported everywhere within the product.</p>  <p>Specifically the FoxPro Image control supports transparency of the various transparent image formats. If you load up an image control with a GIF or PNG file, the transparency is preserved and the image displays correctly.</p>  <p>However, displaying transparent images on other controls that have a Picture property, unfortunately doesn't work as smoothly. Specifically, here's an example of what I've been struggling with, which is buttons with associated icons:</p>  <p><a href="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Transparent-Bitmaps-on-Buttons-and-other_C435/ataleoftwobuttons%5B6%5D.png"><img alt="ataleoftwobuttons[6]" border="0" height="51" src="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Transparent-Bitmaps-on-Buttons-and-other_C435/ataleoftwobuttons%5B6%5D_thumb.png" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="ataleoftwobuttons[6]" width="325"/></a> </p>  <p>The first button doesn't show transparency and looks terrible, while the second button properly shows transparency and appears like it should using one of the approaches mentioned below. Similar situation arises with other controls that have picture properties like OptionButton, Checkboxes. ComboBoxes and Listboxes as well, although it's less of a problem there because the background of lists tend to be white. As a matter of fact all container controls have a picture property and the same rules apply. </p>  <p>By default only the Image control supports transparency properly for all GDI+ image formats.</p>  <p>The good news is that with a bit of trickery you can get FoxPro to render transparent images. The bad news is that there are tradeoffs and extra work required to make it work properly.</p>  <h3>Old School Transparency Support: BMP Image</h3>  <p>GDI+ image support for non-BMP images is actually a relatively new feature in FoxPro. GDI+ support for graphics was introduced with Visual FoxPro 8. Prior to version 8 only BMP images were directly supported in the product and there are a couple of mechanisms used for handling transparency with BMPs.</p>  <p>The most reliable way to get transparency in FoxPro involves <a href="http://msdn.microsoft.com/en-us/library/2zw22dd5(v=vs.80).aspx" target="_blank">using BMP files and a matching BMP Mask file</a>. The mask file basically holds black dots for each of the pixels that should display and white content for anything that should be transparent. As you might imagine creating MASK files is a pain and adds clutter to your image management - anytime the image changes the mask has to be changed too and keeping things in sync is terrible. To me this has always been a non-starter.</p>  <p>You can also get transparency support with only BMP images. By default BMP images display white pixels as transparent, so as long as you can easily represent your transparent content as white it's easy to do. This is not always so cut and dried however because the image 'content' may also contain white pixels. In this case you can fill the white pixels with a slightly off white color like RGB(254,254,254). </p>  <p>Both of these approaches are painful but they are very reliable. Once you got your image set up it always works without fail. But both approaches require that you at the very least convert them to BMP format and potentially tweak your images for transparency or by creating a mask.</p>  <h3>Resource Loading in FoxPro</h3>  <p>There's another approach that works in most situations because of a quirk in FoxPro that I just found out about last week. FoxPro loads images as resources and you can trick FoxPro by loading images with transparency by first loading them into an Image control which as mentioned earlier does support transparency. The trick is that you have to load the image into the image control BEFORE it gets loaded into a picture property of another control. The quirk is that FoxPro caches image data once loaded from a path, so loading it into an image control first caches the transparent image which then gets loaded in subsequent loads that reference the same disk image (or compiled in image resource).</p>  <p>The image control has to only be loaded up and the control can then be released. The key is that this 'pre-load' has to happen BEFORE you load the same image into other controls. The image control doesn't need to stick around, so I use a small function that I only need to pass a file path to, create the Image control and set the picture property:</p>  <pre class="code">************************************************************************
*  LoadImageResource
****************************************
***  Function: Pre-load an image file so transparency is respected
***    Assume:
***      Pass:
***    Return:
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: black;">lcFile</span><span style="color: black;">)
</span><span style="color: blue;">LOCAL </span><span style="color: black;">loImg </span><span style="color: blue;">as Image
</span><span style="color: black;">loImg </span><span style="color: black;">= </span><span style="color: blue;">CREATEOBJECT</span><span style="color: black;">(</span><span style="color: teal;">"Image"</span><span style="color: black;">)
</span><span style="color: black;">loImg</span><span style="color: black;">.</span><span style="color: blue;">Picture </span><span style="color: black;">= </span><span style="color: blue;">FULLPATH</span><span style="color: black;">(</span><span style="color: teal;">"bmps\search_small.png"</span><span style="color: black;">)
</span><span style="color: blue;">ENDFUNC
</span>*   LoadImageResource</pre>

<p>When the function exits the Image control is released, but since the image was effectively loaded into the control the image is now cached inside of VFP's image cache. Now when you load an image that has been called with the function into a Picture property of another control like a button it will display GIF and PNG transparency properly.</p>

<p>In an application I tend to have quite a few image resources I need to load up, so centralize one place when I do all the image pre-loading during startup. I create a function that I call from the application's startup, typically right after I display a startup splash screen.</p>

<p>The method is simply a conglomeration of LoadImageResource() calls:</p>

<pre class="code">************************************************************************
*  LoadImageResources
****************************************
***  Function: Method is used to load up transparent images into
***            UI. This method should be called on startup
***    Assume:
***      Pass:
***    Return:
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">LoadImageResources</span><span style="color: black;">()
</span><span style="color: blue;">LOCAL </span><span style="color: black;">loImg </span><span style="color: blue;">as Image

</span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: teal;">"bmps\search_small.png"</span><span style="color: black;">)
</span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: teal;">"bmps\zipfile.gif"</span><span style="color: black;">)
</span><span style="color: black;">â€¦
</span><span style="color: blue;">ENDFUNC
</span>*   LoadPictureResources</pre>

<p>This is a simple approach that works fine and allows using PNG and GIF images with transparency on buttons and other controls.</p>

<h3>Caveats with Preloading</h3>

<p>In some instances however you can still end up with non-transparent resources. Basically FoxPro caches resources internally, but there are several ways that resources can get un-cached. Explicitly, if your code calls the CLEAR RESOURCES command anywhere, resources will get released and you'll lose any cached resources at that point. If you go back to a form with a transparent image on a control the image will display again with opaque background. Note that CLEAR RESOURCES is not affected by commands like CLEAR ALL or RELEASE ALL.</p>

<p>Implicitly, FoxPro can on certain occasions also unload its image resources internally when memory is really low. This should be very rare but it's possible and I have seen occasions when this does occur. But it's really rare so it's probably OK to ignore that possibility. If you're concerned about this scenario you can either have some code that calls LoadImageResources() or something like it during certain key application points that fire occasionally to explicitly force reloading of the images, or you can load resources as needed everytime a given form is fired up. This will ensure that resources are always fresh, but keep in mind that this causes some extra overhead.</p>

<h3>Summary</h3>

<p>I sure wish this was easier to accomplish or more obvious. For the longest time I didn't even know this hack of image pre-loading. The safest solution is to use BMP files, but it's definitely way more convenient to use Web ready files like PNGs or GIFs that support transparency both for designing the icons and re-using them across applications and platforms (Web/Desktop as I do).</p>

<p>Having to pre-load resources for transparent images in this fashion is a big hassle as opposed just loading up image resources directly. And worse it's an ugly hack that's impossible to discover on your own. I found a vague reference to this on a <a href="http://www.tek-tips.com/viewthread.cfm?qid=1425832" target="_blank">message board message</a> somewhere so it's even hard to search for. Hopefully this blog entry will help clarfiy the subject a little better, even if it's just for me to remember in the future. </p>

<p>What really sucks about this problem is the fact that it DOES works with preloaded image resources. This seems to suggest that transparency actually works on controls but there's a small implementation detail in Visual FoxPro that prevents this from working all the time. It seems this would have been such a minor thing for the Fox team to fix and get working out of the box if the resources to do so had been there. But alas, we're stuck with a few minor and undiscoverable hacks. I take a hack over it not working at all which was what I thought until a week ago. </p>

<p>Thanks to <a href="http://weblogs.foxite.com/vfpimaging/archive/category/187.aspx" target="_blank">Cesar Chalom</a>, <a href="http://weblogs.foxite.com/joel_leach/" target="_blank">Joel Leach</a>, <a href="http://drfairday.blogspot.com/" target="_blank">Dragan Nedeljkovich</a> for providing some ideas for this post and <a href="http://www.tek-tips.com/viewthread.cfm?qid=1425832" target="_blank">Mike Lewis</a> for providing the inspiration to look further into this and getting me to a working solution in <a href="http://west-wind.com/wwhelp" target="_blank">Html Help Builder</a>.</p>
<p><a href="http://feedads.g.doubleclick.net/~a/d6cY5rq0mA1oP0MnX90RQD7QJq8/0/da"><img border="0" ismap="true" src="http://feedads.g.doubleclick.net/~a/d6cY5rq0mA1oP0MnX90RQD7QJq8/0/di"/></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/d6cY5rq0mA1oP0MnX90RQD7QJq8/1/da"><img border="0" ismap="true" src="http://feedads.g.doubleclick.net/~a/d6cY5rq0mA1oP0MnX90RQD7QJq8/1/di"/></a></p><img height="1" src="http://feeds.feedburner.com/~r/RickStrahlsFoxproAndWebConnectionWebLog/~4/BDquaeASlbM" width="1"/></div>
    </summary>
    <updated>2012-01-26T23:19:19Z</updated><feedburner:origLink xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.west-wind.com/wconnect/weblog/ShowEntry.blog?id=883</feedburner:origLink>
    <author>
      <name>Rick Strahl</name>
    </author>
    <source>
      <id>http://www.west-wind.com/wconnect/weblog/</id>
      <link href="http://www.west-wind.com/wconnect/weblog/" rel="alternate" type="text/html"/>
      <link href="http://feeds.feedburner.com/RickStrahlsFoxproAndWebConnectionWebLog" rel="self" type="application/rss+xml"/>
      <link href="http://pubsubhubbub.appspot.com/" rel="hub" type="text/html"/>
      <subtitle>Life, Surf, Code and everything in between</subtitle>
      <title>Rick Strahl's FoxPro and Web Connection Web Log</title>
      <updated>2012-01-27T11:59:12Z</updated>
    </source>
  </entry>

  <entry xml:lang="en-us">
    <id>http://feeds.feedburner.com/883_20120126</id>
    <link href="http://feedproxy.google.com/~r/RickStrahlsFoxproAndWebConnectionWebLog/~3/BDquaeASlbM/ShowEntry.blog" rel="alternate" type="text/html"/>
    <title>Transparent Bitmaps on Buttons and other Controls</title>
    <summary type="xhtml"><div xmlns="http://www.w3.org/1999/xhtml"><p>Overlayed bitmaps in FoxPro have always been a royal pain, but in order to make a UI that looks clean, getting some sort of transparency to work with FoxPro controls is pretty important. Although FoxPro supports most common image formats including GIF and PNG that support transparency, the transparency isn't supported everywhere within the product.</p>  <p>Specifically the FoxPro Image control supports transparency of the various transparent image formats. If you load up an image control with a GIF or PNG file, the transparency is preserved and the image displays correctly.</p>  <p>However, displaying transparent images on other controls that have a Picture property, unfortunately doesn't work as smoothly. Specifically, here's an example of what I've been struggling with, which is buttons with associated icons:</p>  <p><a href="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Transparent-Bitmaps-on-Buttons-and-other_C435/ataleoftwobuttons%5B6%5D.png"><img alt="ataleoftwobuttons[6]" border="0" height="51" src="http://www.west-wind.com/wconnect/weblog/imageContent/2012/Windows-Live-Writer/Transparent-Bitmaps-on-Buttons-and-other_C435/ataleoftwobuttons%5B6%5D_thumb.png" style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px;" title="ataleoftwobuttons[6]" width="325"/></a> </p>  <p>The first button doesn't show transparency and looks terrible, while the second button properly shows transparency and appears like it should using one of the approaches mentioned below. Similar situation arises with other controls that have picture properties like OptionButton, Checkboxes. ComboBoxes and Listboxes as well, although it's less of a problem there because the background of lists tend to be white. As a matter of fact all container controls have a picture property and the same rules apply. </p>  <p>By default only the Image control supports transparency properly for all GDI+ image formats.</p>  <p>The good news is that with a bit of trickery you can get FoxPro to render transparent images. The bad news is that there are tradeoffs and extra work required to make it work properly.</p>  <h3>Old School Transparency Support: BMP Image</h3>  <p>GDI+ image support for non-BMP images is actually a relatively new feature in FoxPro. GDI+ support for graphics was introduced with Visual FoxPro 8. Prior to version 8 only BMP images were directly supported in the product and there are a couple of mechanisms used for handling transparency with BMPs.</p>  <p>The most reliable way to get transparency in FoxPro involves <a href="http://msdn.microsoft.com/en-us/library/2zw22dd5(v=vs.80).aspx" target="_blank">using BMP files and a matching BMP Mask file</a>. The mask file basically holds black dots for each of the pixels that should display and white content for anything that should be transparent. As you might imagine creating MASK files is a pain and adds clutter to your image management - anytime the image changes the mask has to be changed too and keeping things in sync is terrible. To me this has always been a non-starter.</p>  <p>You can also get transparency support with only BMP images. By default BMP images display white pixels as transparent, so as long as you can easily represent your transparent content as white it's easy to do. This is not always so cut and dried however because the image 'content' may also contain white pixels. In this case you can fill the white pixels with a slightly off white color like RGB(254,254,254). </p>  <p>Both of these approaches are painful but they are very reliable. Once you got your image set up it always works without fail. But both approaches require that you at the very least convert them to BMP format and potentially tweak your images for transparency or by creating a mask.</p>  <h3>Resource Loading in FoxPro</h3>  <p>There's another approach that works in most situations because of a quirk in FoxPro that I just found out about last week. FoxPro loads images as resources and you can trick FoxPro by loading images with transparency by first loading them into an Image control which as mentioned earlier does support transparency. The trick is that you have to load the image into the image control BEFORE it gets loaded into a picture property of another control. The quirk is that FoxPro caches image data once loaded from a path, so loading it into an image control first caches the transparent image which then gets loaded in subsequent loads that reference the same disk image (or compiled in image resource).</p>  <p>The image control has to only be loaded up and the control can then be released. The key is that this 'pre-load' has to happen BEFORE you load the same image into other controls. The image control doesn't need to stick around, so I use a small function that I only need to pass a file path to, create the Image control and set the picture property:</p>  <pre class="code">************************************************************************
*  LoadImageResource
****************************************
***  Function: Pre-load an image file so transparency is respected
***    Assume:
***      Pass:
***    Return:
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: black;">lcFile</span><span style="color: black;">)
</span><span style="color: blue;">LOCAL </span><span style="color: black;">loImg </span><span style="color: blue;">as Image
</span><span style="color: black;">loImg </span><span style="color: black;">= </span><span style="color: blue;">CREATEOBJECT</span><span style="color: black;">(</span><span style="color: teal;">"Image"</span><span style="color: black;">)
</span><span style="color: black;">loImg</span><span style="color: black;">.</span><span style="color: blue;">Picture </span><span style="color: black;">= </span><span style="color: blue;">FULLPATH</span><span style="color: black;">(</span><span style="color: teal;">"bmps\search_small.png"</span><span style="color: black;">)
</span><span style="color: blue;">ENDFUNC
</span>*   LoadImageResource</pre>

<p>When the function exits the Image control is released, but since the image was effectively loaded into the control the image is now cached inside of VFP's image cache. Now when you load an image that has been called with the function into a Picture property of another control like a button it will display GIF and PNG transparency properly.</p>

<p>In an application I tend to have quite a few image resources I need to load up, so centralize one place when I do all the image pre-loading during startup. I create a function that I call from the application's startup, typically right after I display a startup splash screen.</p>

<p>The method is simply a conglomeration of LoadImageResource() calls:</p>

<pre class="code">************************************************************************
*  LoadImageResources
****************************************
***  Function: Method is used to load up transparent images into
***            UI. This method should be called on startup
***    Assume:
***      Pass:
***    Return:
************************************************************************
<span style="color: blue;">FUNCTION </span><span style="color: black;">LoadImageResources</span><span style="color: black;">()
</span><span style="color: blue;">LOCAL </span><span style="color: black;">loImg </span><span style="color: blue;">as Image

</span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: teal;">"bmps\search_small.png"</span><span style="color: black;">)
</span><span style="color: black;">LoadImageResource</span><span style="color: black;">(</span><span style="color: teal;">"bmps\zipfile.gif"</span><span style="color: black;">)
</span><span style="color: black;">â€¦
</span><span style="color: blue;">ENDFUNC
</span>*   LoadPictureResources</pre>

<p>This is a simple approach that works fine and allows using PNG and GIF images with transparency on buttons and other controls.</p>

<h3>Caveats with Preloading</h3>

<p>In some instances however you can still end up with non-transparent resources. Basically FoxPro caches resources internally, but there are several ways that resources can get un-cached. Explicitly, if your code calls the CLEAR RESOURCES command anywhere, resources will get released and you'll lose any cached resources at that point. If you go back to a form with a transparent image on a control the image will display again with opaque background. Note that CLEAR RESOURCES is not affected by commands like CLEAR ALL or RELEASE ALL.</p>

<p>Implicitly, FoxPro can on certain occasions also unload its image resources internally when memory is really low. This should be very rare but it's possible and I have seen occasions when this does occur. But it's really rare so it's probably OK to ignore that possibility. If you're concerned about this scenario you can either have some code that calls LoadImageResources() or something like it during certain key application points that fire occasionally to explicitly force reloading of the images, or you can load resources as needed everytime a given form is fired up. This will ensure that resources are always fresh, but keep in mind that this causes
