<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-24989625</id><updated>2012-01-25T09:41:11.727-06:00</updated><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'/><title type='text'>Doug Hennig</title><subtitle type='html'>Thoughts on software development in general, projects I'm working on, and anything else I feel like writing about.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default?start-index=101&amp;max-results=100'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>299</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-24989625.post-5518570759251032829</id><published>2011-12-08T14:08:00.001-06:00</published><updated>2011-12-08T14:08:51.544-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Translation'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Using Google Translate from VFP</title><content type='html'>&lt;p&gt;&lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; is a localizable application: all strings displayed to the user are stored in a resource file and we provide a &lt;a href="http://www.stonefieldquery.com/OnlineHelp/SDK/_12u0seqqv.htm"&gt;resource editor&lt;/a&gt; that allows a developer to translate the strings into other languages. This means that someone has to do the translation into a particular language and keep it update to date when we release a new version, which as you can guess is a lot of work.&lt;/p&gt;  &lt;p&gt;Inspired by Christof Wollenhaupt’s &lt;a href="http://www.swfox.net/sessions.aspx#Googlefy_Your_Apps"&gt;Googlefy Your Apps&lt;/a&gt; session at Southwest Fox 2011, I looked at using the &lt;a href="https://code.google.com/apis/language/translate/v2/getting_started.html"&gt;Google Translate API&lt;/a&gt; to automate the translation process and allow us to translate into more languages than have currently been done. It actually turned out to be pretty easy.&lt;/p&gt;  &lt;p&gt;First, you have to sign up for a Google account. The Translate API isn’t free but it isn’t very expensive: $20 for 1 million characters. After you’ve enabled the API, you’re assigned a key that has to be passed to the API on every call.&lt;/p&gt;  &lt;p&gt;The API uses REST, which is a fancy of way of saying that the parameters are passed as part of a URL. Here’s an example:&lt;/p&gt;  &lt;p&gt;https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&amp;amp;q=hello%20world&amp;amp;source=en&amp;amp;target=de&lt;/p&gt;  &lt;p&gt;This tells the API to translate “hello world” (the encoded text in the “q” parameter) from English (“en” in the source parameter) to German (“de” in the target parameter). It returns the result as JSON:&lt;/p&gt;  &lt;p&gt;{ &amp;quot;data&amp;quot;: { &amp;quot;translations&amp;quot;: [ { &amp;quot;translatedText&amp;quot;: &amp;quot;Hallo Welt&amp;quot; } ] } } &lt;/p&gt;  &lt;p&gt;To access the API from VFP code, use Craig Boyd’s &lt;a href="http://www.sweetpotatosoftware.com/spsblog/2008/12/05/VFPConnectionUpdateHTTPPostFTPCommandsAndMore.aspx"&gt;VFPConnection&lt;/a&gt; library. Below is a function that does all the work. Pass it the text to translate and the source and target languages (spelled out, such as “English” and “German”) and it returns either the translated text if it succeeded, null if the language is invalid, or blank if the translation failed. This function supports all of the languages the Translate API supports. Note: replace the assignment to lcKey with your Google API key.&lt;/p&gt;  &lt;p&gt;Automatic translation may not be quite as good as manual translation because it doesn’t necessarily use the same colloquialisms a native speaker would. However, it’s an excellent starting point; someone can use the Resource Editor to tweak any strings to the proper translation.&lt;/p&gt;  &lt;p&gt;lparameters tcPhrase, ;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tcFromLanguage, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; tcToLanguage    &lt;br /&gt;local lcKey, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcPhrase, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcFromLanguage, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcToLanguage, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcURL, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcResult, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcTranslate&lt;/p&gt;  &lt;p&gt;* Specify the Google API key.&lt;/p&gt;  &lt;p&gt;lcKey = 'PUT YOUR KEY HERE'&lt;/p&gt;  &lt;p&gt;* HTML encode the phrase to translate.&lt;/p&gt;  &lt;p&gt;lcPhrase = Encode(tcPhrase)&lt;/p&gt;  &lt;p&gt;* Get the language codes.&lt;/p&gt;  &lt;p&gt;lcFromLanguage = GetLanguage(tcFromLanguage)   &lt;br /&gt;if empty(lcFromLanguage)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return .NULL.    &lt;br /&gt;endif empty(lcFromLanguage)    &lt;br /&gt;lcToLanguage = GetLanguage(tcToLanguage)    &lt;br /&gt;if empty(lcToLanguage)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return .NULL.    &lt;br /&gt;endif empty(lcToLanguage)&lt;/p&gt;  &lt;p&gt;* Set up VFPConnection.&lt;/p&gt;  &lt;p&gt;set library to VFPConnection.FLL&lt;/p&gt;  &lt;p&gt;* Call Google Translate and return the result.&lt;/p&gt;  &lt;p&gt;lcURL&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = '&lt;a href="https://www.googleapis.com/language/translate/v2'"&gt;https://www.googleapis.com/language/translate/v2'&lt;/a&gt; + ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; '?key=' + lcKey + ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; '&amp;amp;q=' + lcPhrase + ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; '&amp;amp;source=' + lcFromLanguage + ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; '&amp;amp;target=' + lcToLanguage    &lt;br /&gt;lcResult&amp;#160;&amp;#160;&amp;#160; = HTTPSToStr(lcURL)    &lt;br /&gt;lcTranslate = ''    &lt;br /&gt;if not empty(lcResult)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcTranslate = strconv(strextract(lcResult, '&amp;quot;translatedText&amp;quot;: &amp;quot;', '&amp;quot;'), 11)    &lt;br /&gt;endif not empty(lcResult)    &lt;br /&gt;return lcTranslate&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;function Encode(tcString)    &lt;br /&gt;local lcString    &lt;br /&gt;lcString = strtran(tcString, '&amp;lt;', '&amp;amp;lt;')    &lt;br /&gt;lcString = strtran(lcString, '&amp;gt;', '&amp;amp;gt;')    &lt;br /&gt;lcString = strtran(lcString, '&amp;quot;', '&amp;amp;quot;')    &lt;br /&gt;lcString = strtran(lcString, '&amp;amp;', '&amp;amp;amp;')    &lt;br /&gt;lcString = strtran(lcString, ' ', '%20')    &lt;br /&gt;lcString = strtran(lcString, '?', '%3F')    &lt;br /&gt;return lcString&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;procedure GetLanguage(tcLanguage)    &lt;br /&gt;local laLanguages[52, 2], ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lnLanguage, ;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcLanguage    &lt;br /&gt;laLanguages[ 1, 1] = 'Afrikaans'    &lt;br /&gt;laLanguages[ 1, 2] = 'af'&lt;/p&gt;  &lt;p&gt;laLanguages[ 2, 1] = 'Albanian'   &lt;br /&gt;laLanguages[ 2, 2] = 'sq'&lt;/p&gt;  &lt;p&gt;laLanguages[ 3, 1] = 'Arabic'   &lt;br /&gt;laLanguages[ 3, 2] = 'ar'&lt;/p&gt;  &lt;p&gt;laLanguages[ 4, 1] = 'Belarusian'   &lt;br /&gt;laLanguages[ 4, 2] = 'be'&lt;/p&gt;  &lt;p&gt;laLanguages[ 5, 1] = 'Bulgarian'   &lt;br /&gt;laLanguages[ 5, 2] = 'bg'&lt;/p&gt;  &lt;p&gt;laLanguages[ 6, 1] = 'Catalan'   &lt;br /&gt;laLanguages[ 6, 2] = 'ca'&lt;/p&gt;  &lt;p&gt;laLanguages[ 7, 1] = 'Chinese Simplified'   &lt;br /&gt;laLanguages[ 7, 2] = 'zh-CN'&lt;/p&gt;  &lt;p&gt;laLanguages[ 8, 1] = 'Chinese Traditional'   &lt;br /&gt;laLanguages[ 8, 2] = 'zh-TW'&lt;/p&gt;  &lt;p&gt;laLanguages[ 9, 1] = 'Croatian'   &lt;br /&gt;laLanguages[ 9, 2] = 'hr'&lt;/p&gt;  &lt;p&gt;laLanguages[10, 1] = 'Czech'   &lt;br /&gt;laLanguages[10, 2] = 'cs'&lt;/p&gt;  &lt;p&gt;laLanguages[11, 1] = 'Danish'   &lt;br /&gt;laLanguages[11, 2] = 'da'&lt;/p&gt;  &lt;p&gt;laLanguages[12, 1] = 'Dutch'   &lt;br /&gt;laLanguages[12, 2] = 'nl'&lt;/p&gt;  &lt;p&gt;laLanguages[13, 1] = 'English'   &lt;br /&gt;laLanguages[13, 2] = 'en'&lt;/p&gt;  &lt;p&gt;laLanguages[14, 1] = 'Estonian'   &lt;br /&gt;laLanguages[14, 2] = 'et'&lt;/p&gt;  &lt;p&gt;laLanguages[15, 1] = 'Filipino'   &lt;br /&gt;laLanguages[15, 2] = 'tl'&lt;/p&gt;  &lt;p&gt;laLanguages[16, 1] = 'Finnish'   &lt;br /&gt;laLanguages[16, 2] = 'fi'&lt;/p&gt;  &lt;p&gt;laLanguages[17, 1] = 'French'   &lt;br /&gt;laLanguages[17, 2] = 'fr'&lt;/p&gt;  &lt;p&gt;laLanguages[18, 1] = 'Galician'   &lt;br /&gt;laLanguages[18, 2] = 'gl'&lt;/p&gt;  &lt;p&gt;laLanguages[19, 1] = 'German'   &lt;br /&gt;laLanguages[19, 2] = 'de'&lt;/p&gt;  &lt;p&gt;laLanguages[20, 1] = 'Greek'   &lt;br /&gt;laLanguages[20, 2] = 'el'&lt;/p&gt;  &lt;p&gt;laLanguages[21, 1] = 'Hebrew'   &lt;br /&gt;laLanguages[21, 2] = 'iw'&lt;/p&gt;  &lt;p&gt;laLanguages[22, 1] = 'Hindi'   &lt;br /&gt;laLanguages[22, 2] = 'hi'&lt;/p&gt;  &lt;p&gt;laLanguages[23, 1] = 'Hungarian'   &lt;br /&gt;laLanguages[23, 2] = 'hu'&lt;/p&gt;  &lt;p&gt;laLanguages[24, 1] = 'Icelandic'   &lt;br /&gt;laLanguages[24, 2] = 'is'&lt;/p&gt;  &lt;p&gt;laLanguages[25, 1] = 'Indonesian'   &lt;br /&gt;laLanguages[25, 2] = 'id'&lt;/p&gt;  &lt;p&gt;laLanguages[26, 1] = 'Irish'   &lt;br /&gt;laLanguages[26, 2] = 'ga'&lt;/p&gt;  &lt;p&gt;laLanguages[27, 1] = 'Italian'   &lt;br /&gt;laLanguages[27, 2] = 'it'&lt;/p&gt;  &lt;p&gt;laLanguages[28, 1] = 'Japanese'   &lt;br /&gt;laLanguages[28, 2] = 'ja'&lt;/p&gt;  &lt;p&gt;laLanguages[29, 1] = 'Korean'   &lt;br /&gt;laLanguages[29, 2] = 'ko'&lt;/p&gt;  &lt;p&gt;laLanguages[30, 1] = 'Latvian'   &lt;br /&gt;laLanguages[30, 2] = 'lv'&lt;/p&gt;  &lt;p&gt;laLanguages[31, 1] = 'Lithuanian'   &lt;br /&gt;laLanguages[31, 2] = 'lt'&lt;/p&gt;  &lt;p&gt;laLanguages[32, 1] = 'Macedonian'   &lt;br /&gt;laLanguages[32, 2] = 'mk'&lt;/p&gt;  &lt;p&gt;laLanguages[33, 1] = 'Malay'   &lt;br /&gt;laLanguages[33, 2] = 'ms'&lt;/p&gt;  &lt;p&gt;laLanguages[34, 1] = 'Maltese'   &lt;br /&gt;laLanguages[34, 2] = 'mt'&lt;/p&gt;  &lt;p&gt;laLanguages[35, 1] = 'Norwegian'   &lt;br /&gt;laLanguages[35, 2] = 'no'&lt;/p&gt;  &lt;p&gt;laLanguages[36, 1] = 'Persian'   &lt;br /&gt;laLanguages[36, 2] = 'fa'&lt;/p&gt;  &lt;p&gt;laLanguages[37, 1] = 'Polish'   &lt;br /&gt;laLanguages[37, 2] = 'pl'&lt;/p&gt;  &lt;p&gt;laLanguages[38, 1] = 'Portuguese'   &lt;br /&gt;laLanguages[38, 2] = 'pt'&lt;/p&gt;  &lt;p&gt;laLanguages[39, 1] = 'Romanian'   &lt;br /&gt;laLanguages[39, 2] = 'ro'&lt;/p&gt;  &lt;p&gt;laLanguages[40, 1] = 'Russian'   &lt;br /&gt;laLanguages[40, 2] = 'ru'&lt;/p&gt;  &lt;p&gt;laLanguages[41, 1] = 'Serbian'   &lt;br /&gt;laLanguages[41, 2] = 'sr'&lt;/p&gt;  &lt;p&gt;laLanguages[42, 1] = 'Slovak'   &lt;br /&gt;laLanguages[42, 2] = 'sk'&lt;/p&gt;  &lt;p&gt;laLanguages[43, 1] = 'Slovenian'   &lt;br /&gt;laLanguages[43, 2] = 'sl'&lt;/p&gt;  &lt;p&gt;laLanguages[44, 1] = 'Spanish'   &lt;br /&gt;laLanguages[44, 2] = 'es'&lt;/p&gt;  &lt;p&gt;laLanguages[45, 1] = 'Swahili'   &lt;br /&gt;laLanguages[45, 2] = 'sw'&lt;/p&gt;  &lt;p&gt;laLanguages[46, 1] = 'Swedish'   &lt;br /&gt;laLanguages[46, 2] = 'sv'&lt;/p&gt;  &lt;p&gt;laLanguages[47, 1] = 'Thai'   &lt;br /&gt;laLanguages[47, 2] = 'th'&lt;/p&gt;  &lt;p&gt;laLanguages[48, 1] = 'Turkish'   &lt;br /&gt;laLanguages[48, 2] = 'tr'&lt;/p&gt;  &lt;p&gt;laLanguages[49, 1] = 'Ukrainian'   &lt;br /&gt;laLanguages[49, 2] = 'uk'&lt;/p&gt;  &lt;p&gt;laLanguages[50, 1] = 'Vietnamese'   &lt;br /&gt;laLanguages[50, 2] = 'vi'&lt;/p&gt;  &lt;p&gt;laLanguages[51, 1] = 'Welsh'   &lt;br /&gt;laLanguages[51, 2] = 'cy'&lt;/p&gt;  &lt;p&gt;laLanguages[52, 1] = 'Yiddish'   &lt;br /&gt;laLanguages[52, 2] = 'yi'&lt;/p&gt;  &lt;p&gt;lnLanguage = ascan(laLanguages, tcLanguage, -1, -1, 1, 15)   &lt;br /&gt;if lnLanguage &amp;gt; 0    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcLanguage = laLanguages[lnLanguage, 2]    &lt;br /&gt;else    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; lcLanguage = ''    &lt;br /&gt;endif lnLanguage &amp;gt; 0    &lt;br /&gt;return lcLanguage    &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5518570759251032829?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5518570759251032829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5518570759251032829' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5518570759251032829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5518570759251032829'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/12/using-google-translate-from-vfp.html' title='Using Google Translate from VFP'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8934751517160062608</id><published>2011-12-05T15:58:00.001-06:00</published><updated>2011-12-05T15:58:45.520-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2012</title><content type='html'>&lt;p&gt;Southwest Fox 2011 was a great success. Now we’re trying to figure out what form next year’s event will take. You can help us by answering a few questions about your preferences. Please take the survey at &lt;a href="https://www.surveymonkey.com/s/VCCKNDG"&gt;https://www.surveymonkey.com/s/VCCKNDG&lt;/a&gt;, so we can include your input.&lt;/p&gt;  &lt;p&gt;Whether you attended Southwest Fox this year, or it’s been a few years, or you never attended Southwest Fox, your input will really help us figure out what direction to take next year and in the years to come.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8934751517160062608?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8934751517160062608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8934751517160062608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8934751517160062608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8934751517160062608'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/12/southwest-fox-2012.html' title='Southwest Fox 2012'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6778323183995640484</id><published>2011-11-08T18:13:00.001-06:00</published><updated>2011-11-08T18:13:23.815-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011, Day 4</title><content type='html'>&lt;p&gt;I planned on attending a couple of sessions Saturday morning, but ended up having a long chat with Toni Feltman and Steve Bodnar about .Net development, unit testing, version control, and other stuff. Again, this is one of the special things about conferences in general—discussions with other developers to help get a fresh perspective on things, solve problems, and spark new ideas—but especially SWFox: since we require all speakers to provide detailed white papers for their sessions, you still get the full benefit of all sessions whether you attend them or not. That makes the networking opportunities at SWFox even more valuable.&lt;/p&gt;  &lt;p&gt;The one session I couldn’t miss, of course, was my own: the repeat of my &lt;a href="http://www.swfox.net/sessions.aspx#Creating_ActiveX_Controls_for_VFP_Using_.Net"&gt;ActiveX controls&lt;/a&gt; session. This time, I took special care to not miss any steps in my demo, so the attendees were cheated out of the opportunity to see a speaker squirm and learn from their mistakes. Sorry, guys!&lt;/p&gt;  &lt;p&gt;The closing session was short but sweet. One of the things we discussed was 2012.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-k1joouN50lg/TrnFnno0yTI/AAAAAAAAAXc/aQj6qyBElcs/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-mlGRHW6_lNg/TrnFoq8MG6I/AAAAAAAAAXk/aFbQu_l1ai4/image_thumb.png?imgmax=800" width="244" height="221" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As many people suspected, this was a tough, scary year for us. By mid-August, we were in full panic mode, as we were so far below breakeven that it looked like a five-figure loss for us. Fortunately, a larger-than-usual number of people signed up after September 1; that combined with an increase in sponsorship this year took us over the top. However, we’re really concerned about next year: if the trend of decreasing attendance continues, 2012 could be a disaster.&lt;/p&gt;  &lt;p&gt;So, one of the questions on our conference evaluation form was what type of format would attendees like for a future event: the traditional SWFox format, a less expensive “Code Camp” style (volunteer speakers, no food provided or perhaps sponsored food), an even less expensive one-track format (all sessions in a single room), etc. The reason for asking this question is to try to find out what we can do to minimize our risk. If we get the same number of people registered for 2012 as 2011 but they all register in June or July, there’s no panic and we can have the same format we’ve always had. But if the attendance goes down or people defer registration until fall like happened this year, we have to make adjustments so we don’t face an enormous loss. We don’t know what the answer to this is yet, but the takeaway from the closing session is that we did make a commitment to host an event in 2012.&lt;/p&gt;  &lt;p&gt;Of course, asking people who paid a premium price to attend a premium conference doesn’t necessarily mean you’ll get the same answers as you do from those who didn’t attend for whatever reason. So, in the next month or so, we’re going to ask the community what kind of conference they’d like us to put on. When it comes time, please respond to the survey so we can get an accurate feel for what folks want us to do.&lt;/p&gt;  &lt;p&gt;One other thing I’d ask: if you love SWFox like we do, and want to see it continue, do us a favor and register early next year. That would take out the panic for us and allow us to plan for the type of conference we really want to host.&lt;/p&gt;  &lt;p&gt;I really felt that this was the best SWFox ever. The mood was upbeat, the sessions were amazing, the food was great, the conference center was wonderful … It wasn’t just me: I heard from lots of other people that they felt the same way.&lt;/p&gt;  &lt;p&gt;The closing session ended with us giving away thousands of dollars in prizes provided by our &lt;a href="http://www.swfox.net/sponsors.aspx"&gt;sponsors&lt;/a&gt;, including some goodies like T-shirts that we threw into the audience (Tamar wisely counseled us against throwing the pins!).&lt;/p&gt;  &lt;p&gt;After cleaning up the session rooms, we had lunch with Sharon, our main contact at the hotel and conference center, to do a post-mortem on the conference. We discussed the few things that didn’t work (Internet access and temperature control in the rooms) and the great number of things that did (dedication and hard work of the staff, the food, and the other things that make this a great venue). We also discussed some potential dates for next year.&lt;/p&gt;  &lt;p&gt;After that meeting, Rick, Therese, Tamar, Marshal and I had our own meeting to talk a little about 2012, then met a few others (Bo Burban and his son and Steve Bodnar) for dinner. We went to Kona Grill, where Rick and I had some of the best sushi I’ve ever had.&lt;/p&gt;  &lt;p&gt;Then it was time for the main event: the long-standing tradition of indoor go-kart racing. About 20 of us showed up at Octane Racing (formerly F1 Race Factory) to compete for the title of fastest racer. With Rick Strahl not driving this year, first place was up for grabs. I thought I did really well, but both Paul Mrozowski and my former employee Rob Eisler (just kidding, Rob!) beat me. In the second race, I finished behind Bo but ahead of Paul. See the &lt;a href="http://www.facebook.com/GeeksAndGurus"&gt;Geeks &amp;amp; Gurus Facebook&lt;/a&gt; page for photos.&lt;/p&gt;  &lt;p&gt;We got back to the hotel by about 11:30, too jazzed up to call it a night yet. Besides, there was still two jumbo bottles of champagne to drink. Which we, of course, did, sitting around the pool. I finally called it a night at about 1:30.&lt;/p&gt;  &lt;p&gt;Sunday was kind of anti-climatic, as usual: a nice breakfast with the Schummers and Granors followed by a long day of travel home. I slept almost the entire flight from Phoenix to Minneapolis, something I rarely do.&lt;/p&gt;  &lt;p&gt;Thanks to everyone who came to SWFox and made it the best one ever. We’ll see you next year for sure!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6778323183995640484?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6778323183995640484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6778323183995640484' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6778323183995640484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6778323183995640484'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/11/southwest-fox-2011-day-4.html' title='Southwest Fox 2011, Day 4'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/-mlGRHW6_lNg/TrnFoq8MG6I/AAAAAAAAAXk/aFbQu_l1ai4/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8887039956949178362</id><published>2011-11-08T17:08:00.001-06:00</published><updated>2011-11-08T17:08:30.219-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011, Day 3</title><content type='html'>&lt;p&gt;After breakfast, I presented my session on &lt;a href="http://www.swfox.net/sessions.aspx#Creating_ActiveX_Controls_for_VFP_Using_.Net"&gt;creating ActiveX controls for VFP using .Net&lt;/a&gt;. This was a fun session to do because it shows some cool techniques for greatly expanding the list of controls available to VFP applications. This session is pretty complex, so I started by suggesting folks not worry about the details (the white paper has cookbook-like instructions) but focus more on the overview. The session has a lot of complex steps, and sure enough, I missed a step a couple of times and got myself into a little demo trouble. I figured out the first one myself but thank goodness Paul Mrozowski was there to point out the problem with the second one. The audience was very gracious with my gaffes, and someone even pointed out later that they were glad I’d done that so they could see what to do if they missed a step. Of course, I planned that!&lt;/p&gt;  &lt;p&gt;I next went to see Kevin Ragsdale’s &lt;a href="http://www.swfox.net/sessions.aspx#It's_so,_uh,_"&gt;UI&lt;/a&gt; session. I was a little late because, as usual, I was chatting with folks between sessions. Wow, another great session by Kevin. He showed some UI problems common to VFP applications and then showed how to fix them, resulting in a more comprehensible and easier-to-use application. I have a strong feeling I’ll be handing the Best Speaker trophy to Kevin at next year’s conference.&lt;/p&gt;  &lt;p&gt;I then went to see Jim Nelson’s session on &lt;a href="http://www.swfox.net/sessions.aspx#To_Boldly_go_Where_no_VFP'er_Has_Gone_Before&amp;mdash;the_Tools_of_Thor_(Session_I)"&gt;Thor&lt;/a&gt;. If you haven’t seen Thor, a new &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt; project, you’re missing a huge productivity boost in your development efforts. Thor provides a framework for IDE tools, but even more importantly, provides a huge set of such tools to do things such as rename objects, change base classes, and go to the definition of a class, method, procedure, or constant. Jim did a nice job of showing how to install Thor, how the UI works, how some of the included tools work, and how to add your own tools to Thor.&lt;/p&gt;  &lt;p&gt;After a nice lunch of hamburgers and hotdogs with all the fixings, I went to Rick Borup’s session on &lt;a href="http://www.swfox.net/sessions.aspx#VFP_Version_Control_with_Mercurial"&gt;Mercurial&lt;/a&gt;. I don’t think Rick knows this, but we call him “The Professor” because his sessions are incredibly well-researched, prepared, and presented. I was thinking later on about how I would’ve done this session and I wouldn’t have done half as well as he did. I’ve been using Mercurial for about six months so I went to this session hoping to have some gaps filled and wasn’t disappointed. Afterward, Toni Feltman expressed amazement that I was finally using a version control system, because she’s been after me for years about it. I think Rick also inspired Tamar to give Mercurial a shot.&lt;/p&gt;  &lt;p&gt;Next up was the repeat of my &lt;a href="http://www.swfox.net/sessions.aspx#Developing_VFP_Applications_for_Windows_7"&gt;Windows 7&lt;/a&gt; session. Like the first session, I spent some time going over why virtualization (a misnamed term: it refers to redirecting reads and writes to protected locations to “virtual stores” rather than virtual machines as the term is commonly known today) is bad for your health. This led to one of the most gratifying parts of the conference: helping someone resolve a problem. Steve Bodnar mentioned to me after the session that he had a huge problem with a customer system crashing whenever they tried to output to PDF. He suspected the FFC Report Listener class library had somehow become corrupted but replacing it with a fresh version didn’t resolve the problem. During my discussion of virtualization, he realized that it wasn’t the FFC version of the library that was corrupted but the virtualized copy. Sure enough, as soon as he deleted the copy, the application worked as expected. Steve was so happy he Tweeted that he was going to kiss me full on the lips, so I ducked him the rest of the day and evening (just kidding, Steve).&lt;/p&gt;  &lt;p&gt;I was beat, so rather than attending a session during the last timeslot of the day, I hung out at the Servoy booth drinking wine with Yvo Boom and Jon Madden of Servoy, Ken Levy, Chick Bornheim of MicroMega, and Chick’s friend Gary, who was attending his first SWFox.&lt;/p&gt;  &lt;p&gt;Next it was time for the conference dinner party. Last year, we’d planned on holding the party out on the veranda but a sudden dust storm forced us to quickly move indoors. Fortunately, the weather was in our favor this year, and the dinner was magnificent: superb food and a really nice dark atmosphere. (I would’ve called it “romantic” except my wife wasn’t there and I don’t think Walt Krzystek and the guys from Matrix would’ve appreciated my expressing that point of view.)&lt;/p&gt;  &lt;p&gt;At 8:30, the bonus sessions started. I attended the Show Us Your Apps session, which featured six VFP developers showing the crowd an application they’ve developed that they’re proud of. And proud they should be—there were some very cool apps and techniques on display! I was especially impressed by the fact that for several of the presenters, English was not their native language. It takes a lot of courage to get up and speak before a group of technical people, but even more so in a foreign language! Kudos to all those who took the time to show us what VFP is capable of.&lt;/p&gt;  &lt;p&gt;The other bonus session was for independent developers, an idea that Rick Borup came up with a few months ago. I heard a lot of great comments about this session, so we may have to do it again next year.&lt;/p&gt;  &lt;p&gt;We once again ended up at the hotel bar, this time enjoying some of the leftover cake and champagne from last night’s celebration.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8887039956949178362?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8887039956949178362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8887039956949178362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8887039956949178362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8887039956949178362'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/11/southwest-fox-2011-day-3.html' title='Southwest Fox 2011, Day 3'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2388184588188378419</id><published>2011-11-08T16:22:00.001-06:00</published><updated>2011-11-08T17:11:35.923-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011, Day 2</title><content type='html'>&lt;p&gt;Thursday started at my usual time of 5 am. After setting out sign boards for the session rooms and registering a few newly-arrived attendees, I had breakfast and went to the first session, Eric Selje’s &lt;a href="http://www.swfox.net/sessions.aspx#Flip_the_Switch:_Lightswitch_for_VFP_Developers"&gt;Lightswitch for VFP Developers&lt;/a&gt;. Eric did a great job explaining what Lightswitch is (a tool for rapidly developing Silverlight applications) and showing the basics of developing a Lightswitch application.&lt;/p&gt;  &lt;p&gt;I was going to go to Steve Bodnar’s &lt;a href="http://www.swfox.net/sessions.aspx#jQuery_UI_and_jQuery_Plugins_for_Making_Your_Site_Look_and_Work_Better"&gt;jQueryUI&lt;/a&gt; session next but ended up chatting with a couple of the new exhibitors, Basis and Alpha Five, about their products. Fortunately, I’d seen Steve present this session in January. In fact, his presentation inspired me to add new features to the &lt;a href="http://www.swfox.net/"&gt;SWFox web site&lt;/a&gt;, including the menu and the accordion control on the session pages.&lt;/p&gt;  &lt;p&gt;My &lt;a href="http://www.swfox.net/sessions.aspx#Developing_VFP_Applications_for_Windows_7"&gt;Developing VFP Applications for Windows 7&lt;/a&gt; session was next. The first half of the session was similar to the Windows Vista session I presented four years earlier, but updated for Windows 7 and with more things I’ve learned about Windows security and virtualization since then. The second half focused on how to implement Windows 7 features in your VFP application, especially related to the Windows 7 Taskbar. I showed how I’ve implemented these features in a real-world application (Stonefield Query) using Steve Ellenoff’s Win7TLib &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt; project, including the actual code to implement those features.&lt;/p&gt;  &lt;p&gt;After a very tasty lunch (the food at the Legado is so good, several people commented on Twitter recently about how much weight they gained!), I went to Steve Black’s &lt;a href="http://www.swfox.net/sessions.aspx#Looking_Back:_Techniques_I'm_Glad_We_Used"&gt;Looking Back&lt;/a&gt; session. Although I don’t work on the type of applications Steve does, it was still interesting hearing his perspective on software development and process management techniques.&lt;/p&gt;  &lt;p&gt;At every conference, a common phrase you’ll hear is “that session (or tip) paid for my conference”. Last year, it was Steve Ellenoff’s Win7TLib session for me. This year, it was Kevin Ragsdale’s &lt;a href="http://www.swfox.net/sessions.aspx#Easy_Multi-Threading_with_Visual_FoxPro"&gt;Easy Multi-Threading&lt;/a&gt; session. Kevin is a great speaker: funny, great examples, and well-paced. He showed how to use a DLL created by Christof Wollenhaupt to add multi-threading to VFP applications. Like Steve’s session last year, my mind was abuzz with ideas about where in my applications I can make use of this technique. I know others felt the same way because that was a major point of discussion at every meal I had for the rest of the conference, and even on the taxi ride back to the airport on Sunday. You know you struck a chord when someone as advanced as Rick Strahl is inspired!&lt;/p&gt;  &lt;p&gt;By a very happy coincidence, Jody Meyer’s session on &lt;a href="http://www.swfox.net/sessions.aspx#Wanted:_More_Processing_Speed!"&gt;ParallelFox&lt;/a&gt; immediately followed Kevin’s session. ParallelFox uses a different technique—out-of-process EXE servers rather than in-process COM objects—but has a similar purpose: allowing multiple tasks to be performed simultaneously to take advantage of multi-core processors common in today’s computers. The combination of these two techniques was on everyone’s mind and I saw a lot of very excited people after seeing these two sessions.&lt;/p&gt;  &lt;p&gt;The speaker dinner was Thursday night. It’s our small way of thanking the speakers for the enormous amount of time and effort they put into preparing sessions and white papers. As Tamar pointed out at both the keynote and closing sessions, without them, there would be no conference. I had the pleasure of sitting with Rick Borup and his wife, Eric Selje, Menachem Bazian, Steve Ellenoff, and Kevin Ragsdale. Kevin was uncharacteristically quiet; I think he was still in a daze after the dynamite presentation he did in the afternoon. Menachem and Steve were like a tag-team comedy duo; rumor has it they’ll be playing Vegas soon. The food at the Gordon Biersch Brewery at the San Tan Mall was outstanding, as was the hand-crafted beer I tried. Good company, good food, good times.&lt;/p&gt;  &lt;p&gt;As usual, we headed back to the hotel bar. Toni Feltman had planned an informal party to celebrate Cathy Pountney marrying Jim Knight this summer. However, she also found out that Alan Griver had recently married Allie (hope that’s the correct spelling) so she quickly picked up a second cake. There was tons of champagne and apple cider to celebrate with. I had an 8:30 session to present in the morning so I headed up just before midnight.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2388184588188378419?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2388184588188378419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2388184588188378419' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2388184588188378419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2388184588188378419'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/11/southwest-fox-2011-day-2.html' title='Southwest Fox 2011, Day 2'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8855395807767741299</id><published>2011-11-08T15:43:00.001-06:00</published><updated>2011-11-08T15:43:35.436-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011, Days 0 and 1</title><content type='html'>&lt;p&gt;I was up early on Tuesday, October 25, to catch a 7:00 am flight to Phoenix. Rick Schummer’s wife Therese picked up Rob Eisler, a co-worker, and me at the airport and we met Rick at the hotel to start assembling conference bags. Normally we arrive on Tuesday when the conference starts on Thursday, but with it starting on Wednesday this year, we’re actually a day later because, in our fifth year of hosting this conference, we’ve got the preparation down to a science. Tamar and Marshal Granor arrived a little later, and we all met with the conference center staff late in the afternoon to finalize preparations. After setting up projectors and power strips in the session rooms, we went out for dinner at Brio, a nice Italian restaurant at the nearby San Tan Mall, then came back to the hotel and hung out in the bar for a while with some friends.&lt;/p&gt;  &lt;p&gt;Wednesday morning, I was up at my usual 6 am, only I was in Phoenix, so that made it 5 am. That way pretty much the way the conference went: up really early and to bed late. Definitely in full conference mode. After getting the registration room set up, we were open for business at 8:00. Registration is always a fun time, because it’s a chance to see old friends again and put faces to the names of new attendees. Pre-conference sessions started at 9:00 so we were fairly busy until then. During quiet periods, I chatted with Rick, Tamar, and people coming to register, and catch up on email. During lunch, I had a chance to meet Dimiter from Bulgaria and talk about software development and the economy in his country. To me, that’s one of the best things about going to a conference: meeting new people and finding out what they do and where they’re from, as well as renewing and strengthening friendships.&lt;/p&gt;  &lt;p&gt;The afternoon was similar to the morning: greeting attendees as they came to register and chatting with folks. I had a long chat with Ken Levy about a variety of things, including the fact that he and Randy Brown thought it was a surprise than Randy was coming to SWFox, but in fact Rick had already made up a badge for Randy because he saw his name on the hotel room list. Rick, Tamar, and I also finalized who was going to do what in the keynote that evening.&lt;/p&gt;  &lt;p&gt;After the pre-con sessions ended, we held a short speaker meeting to go over logistics with everyone. This also gave us a chance to meet the new guy, Tuvia Vinitsky, and for everyone to say hi to Steven Black, who hasn’t been a SWFox for several years. (Sorry we didn’t give you a chance to say hi to everyone before we started, Steve, but we were on a tight schedule.)&lt;/p&gt;  &lt;p&gt;Tamar, Marshal, Therese, and I went to Paradise Café at the San Tan Mall for a quick dinner because we had to be back before 7:00 for the keynote. Rick, as usual, did not accompany us because he can’t eat before the conference starts.&lt;/p&gt;  &lt;p&gt;We had a few surprises at the keynote this year. First, we awarded the &lt;a href="http://doughennig.blogspot.com/2011/10/2011-vfpx-administrators-award.html"&gt;VFPX Administrators’ Award&lt;/a&gt; to Joel Leach for his work with FoxTabs and ParallelFox. This turned out to be fortuitous, because ParallelFox ended up being a huge part of SWFox this year. The second surprise was the announcements of the &lt;a href="http://doughennig.blogspot.com/2011/10/2011-lifetime-achievement-award.html"&gt;2011 FoxPro Lifetime Achievement Award&lt;/a&gt; recipients. I almost blew the surprise for this: during the setup, while there were fortunately a small number of people in the room, I connected my laptop to the projector and navigated to the folder where the keynote PowerPoint presentation was located. In that same folder were photos of Drew Speedie, Steven Black, and Toni Feltman, and it wouldn’t take a rocket scientist to figure out why. I was horrified when I realized that (shades of the infamous “Babe of the Day” incident from years past) and quickly pulled the plug before anyone else saw the evidence on the big screen.&lt;/p&gt;  &lt;p&gt;Our part of the keynote went smoothly and quickly. We then introduce Steve to do the keynote presentation on Niche Marketing. What a bang-up job did! I suspect many attendees had never heard Steve speak before and were blown away by his session. That’s OK: the rest of us were too. I heard attendees talk about his session for the rest of the conference.&lt;/p&gt;  &lt;p&gt;After the keynote, we held a reception in the trade show area. It looked like the exhibitors had their hands full with all of the attendees coming to find out about their products. I had a great chat with Frank Perez and Paul Mrozowski over a few Coronas.&lt;/p&gt;  &lt;p&gt;After the reception closed, many people headed to the hotel bar. I had a fun time catching up with Phil Feltman and reliving the good times of past conferences. Joel Leach said his face hurt from laughing so much.&lt;/p&gt;  &lt;p&gt;I hit the bed about midnight and took all of 4 seconds to fall asleep.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8855395807767741299?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8855395807767741299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8855395807767741299' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8855395807767741299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8855395807767741299'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/11/southwest-fox-2011-days-0-and-1.html' title='Southwest Fox 2011, Days 0 and 1'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1056437997707136302</id><published>2011-11-01T09:02:00.001-06:00</published><updated>2011-11-01T09:02:39.566-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield'/><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Anniversary'/><title type='text'>Stonefield 20th Anniversary</title><content type='html'>&lt;p&gt;On November 1, 1991, Glen Crook started Stonefield Systems Group Inc. Over the next several months, I and three others left the company we had all worked for and joined Glen. In 1995, my current business partner Mickey Kupchyk and I bought the other three out and drastically changed the direction of the company. In 2000, we spun the software development side of the company off into Stonefield Software Inc. As I &lt;a href="http://doughennig.blogspot.com/2011/07/mixed-feelings.html"&gt;blogged&lt;/a&gt; earlier this year, Mickey and I sold Stonefield Systems Group to three employees in July, but still retain ownership of Stonefield Software.&lt;/p&gt;  &lt;p&gt;It’s been a great 20 years. Like most things in life, it had a few lows but mostly highs, lots of fun, a little frustration, meeting new people and losing touch with (or sadly losing) a few. I think I’m having as much fun going to work right now as I’ve ever had; learning new techniques and working on new things will do that to you. I’m pretty sure I’ll be retired by the time the next 20 years has gone by, but I may be around for the 30th anniversary.&lt;/p&gt;  &lt;p&gt;Thanks to all of our employees, customers, and business partner for making this ride fun and memorable.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1056437997707136302?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1056437997707136302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1056437997707136302' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1056437997707136302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1056437997707136302'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/11/stonefield-20th-anniversary.html' title='Stonefield 20th Anniversary'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5936772308408171714</id><published>2011-10-31T14:33:00.001-06:00</published><updated>2011-10-31T14:33:02.126-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2011 Lifetime Achievement Award Recipients</title><content type='html'>&lt;p&gt;At the keynote for Southwest Fox 2011, Rick Schummer, Tamar Granor, and I had the pleasure of announcing this year’s recipients of the FoxPro Lifetime Achievement Award.&lt;/p&gt;  &lt;p&gt;First, Tamar announced the award was being given in memoriam to Drew Speedie. Drew spoke at just about every VFP conference and user group, was the first editor of FoxPro Advisor’s Tips column, wrote numerous articles in Advisor, was Technical Editor of the first Hacker’s Guide to Visual FoxPro, and coined the famous “LISA G” mnemonic (Load, Init, Show, Activate, and GotFocus) for the order of events when forms instantiate. Tamar also told a story about how one year Drew, known as a fast speaker, wore out two signers for a hearing-impaired attendee at DevCon. Sadly, we lost Drew and his son Brent in 2005. There were more than a few people with tears in their eyes during Tamar’s presentation.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-DnaDcVJ_A5U/Tq8F9LkR13I/AAAAAAAAAWo/nJVfNibo5ZM/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-mdCC4ju2lX0/Tq8F9bKCisI/AAAAAAAAAWw/otj9sVmwTlo/image_thumb.png?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I was up next to announce the second recipient, Steven Black. Steve is the creator and host of one of the most important VFP sites, the &lt;a href="http://fox.wikis.com"&gt;FoxWiki&lt;/a&gt;. Like Drew, he’s a well-known author and speaker. Steve is one of the world’s leading experts on localization; his famous INTL Toolkit has helped many VFP developers adapt their applications to other languages and cultures. Steve is one of my favorite speakers—his sessions on design patterns introduced that important topic to VFP developers—and it’s been a long time since I’d seen Steve speak, so I was very glad we convinced him to present at this year’s conference. Special thanks to Alan Griver (yag) for roping Steve into what he thought was just a reunion of Fox friends but turned into much more.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-3N1D6HLi7_8/Tq8F91nN_OI/AAAAAAAAAW4/zVevvfKposo/s1600-h/image%25255B5%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/-yeP4LP997Gg/Tq8F-JZoxrI/AAAAAAAAAXA/P6jiUciznNo/image_thumb%25255B1%25255D.png?imgmax=800" width="184" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Rick then announced the final recipient, Toni Feltman. Toni was a Senior Support Tech and Sysop of FoxForum on CompuServe back in the Fox Software days. She is also a well-known speaker and author, co-creator of &lt;a href="http://www.f1tech.com/default.afp"&gt;Visual FoxExpress&lt;/a&gt;, co-creator of DBCX (a data dictionary extension for VFP used in many products, including Visual FoxExpress and &lt;a href="http://www.stonefieldsoftware.com/"&gt;Stonefield Query&lt;/a&gt;), and creator of ProjectHookX. Toni was doubly-surprised when she came up to the front to receive her award and saw her husband Mike and his brother Phil at the back of the room, as she had no idea that either was coming to the conference. It wasn’t easy keeping them hidden from her until that moment!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-ybnDNu7vlF4/Tq8F-pXH-AI/AAAAAAAAAXI/qit5BJxcKtc/s1600-h/image%25255B8%25255D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/-Q1s9beckH4M/Tq8F_HVLuCI/AAAAAAAAAXQ/WfOEDnlu048/image_thumb%25255B2%25255D.png?imgmax=800" width="192" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Congratulations to Steve, Toni, and Drew, where ever you are, for this well-deserved award.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5936772308408171714?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5936772308408171714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5936772308408171714' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5936772308408171714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5936772308408171714'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/10/2011-lifetime-achievement-award.html' title='2011 Lifetime Achievement Award Recipients'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh3.ggpht.com/-mdCC4ju2lX0/Tq8F9bKCisI/AAAAAAAAAWw/otj9sVmwTlo/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6151308486609257409</id><published>2011-10-31T14:09:00.001-06:00</published><updated>2011-11-03T12:02:08.384-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2011 VFPX Administrators’ Award</title><content type='html'>&lt;p&gt;The VFPX Administrators’ Award is an annual award given by the VFPX Administrators (Craig Boyd, Rick Schummer, and Doug Hennig) to recognize those people who made outstanding contributions to the VFP community through their projects on &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt;. The nominees this year were:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Matt Slay for GoFish &lt;/li&gt;    &lt;li&gt;Joel Leach for ParallelFox and FoxTabs &lt;/li&gt;    &lt;li&gt;Jim Nelson for Thor, PEM Editor 7 &lt;/li&gt;    &lt;li&gt;&lt;strike&gt;Alexander Golovlev for FoxBarCode&lt;/strike&gt;&amp;#160; Update: we had the wrong project manager. Sorry about the mix-up.&lt;/li&gt; &lt;/ul&gt;  &lt;p align="left"&gt;At the keynote for Southwest Fox 2011, the award was given to Joel Leach. In hindsight, the award was prescient, because &lt;a href="http://www.swfox.net/JodyMeyer.aspx"&gt;Jody Meyer&lt;/a&gt;’s session on &lt;a href="http://www.swfox.net/sessions.aspx#Wanted:_More_Processing_Speed!"&gt;ParallelFox&lt;/a&gt; and &lt;a href="http://www.swfox.net/KevinRagsdale.aspx"&gt;Kevin Ragsdale&lt;/a&gt;’s session on &lt;a href="http://www.swfox.net/sessions.aspx#Easy_Multi-Threading_with_Visual_FoxPro"&gt;multi-threading&lt;/a&gt; were the buzz of the conference: at every meal, most discussions were about ways to incorporate parallel processing or multi-threading in VFP apps.&lt;/p&gt;  &lt;p&gt;Congratulations to Joel and thanks for all your efforts in making VFPX the future of VFP.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6151308486609257409?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6151308486609257409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6151308486609257409' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6151308486609257409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6151308486609257409'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/10/2011-vfpx-administrators-award.html' title='2011 VFPX Administrators’ Award'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2725838917807085110</id><published>2011-10-20T10:19:00.001-06:00</published><updated>2011-10-20T10:19:35.662-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Icons'/><title type='text'>Axialis Offers Icon Libraries</title><content type='html'>&lt;p&gt;Axialis, makers of my favorite icon editor IconWorkshop, is releasing several libraries of stock icons for developers. The &lt;a href="http://www.axialis.com/stock-icons/ribbon-toolbar.html"&gt;first set&lt;/a&gt; contains 1108 unique icons for ribbon and toolbar controls. They come in a variety of sizes, states (such as normal and disabled), and color depths. Other sets planned for release include database, multimedia, management, and financials.&lt;/p&gt;  &lt;p&gt;Until Nov. 20, 2011, this set is &lt;a href="https://usd.swreg.org/com/shop/47156/cart/2582194101"&gt;available&lt;/a&gt; for $34.30, a savings of 30% off the regular $49.00.&lt;/p&gt;  &lt;p&gt;(Full disclosure: Marc of Axialis was kind enough to provide me a free copy of IconWorkshop as a Microsoft MVP and has been a sponsor of &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; for years. However, that’s not the reason I like the product. I like the fact that it’s powerful yet easy to use for those graphically-challenged like me. It also comes with a ton of images that are easy to combine into the exact icon you want.)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2725838917807085110?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2725838917807085110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2725838917807085110' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2725838917807085110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2725838917807085110'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/10/axialis-offers-icon-libraries.html' title='Axialis Offers Icon Libraries'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5002239663221724431</id><published>2011-09-29T09:08:00.001-06:00</published><updated>2011-09-29T09:08:28.927-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Session Schedule Posted</title><content type='html'>&lt;p&gt;The &lt;a href="http://www.swfox.net/schedule.aspx"&gt;session schedule&lt;/a&gt; for Southwest Fox 2011 is now available. Exhibitor sessions don’t appear but will be added soon. One change you may like this year is the ability to add a session to your calendar on your laptop or smartphone: simply click the calendar icon that appears beside each session.&lt;/p&gt;  &lt;p&gt;Dave Aring’s popular &lt;a href="http://www.swfox.net/kokopelli.aspx"&gt;Kokopelli&lt;/a&gt; session scheduler application will be available soon; watch for an announcement when it’s ready.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5002239663221724431?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5002239663221724431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5002239663221724431' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5002239663221724431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5002239663221724431'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/09/southwest-fox-2011-session-schedule.html' title='Southwest Fox 2011 Session Schedule Posted'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3755686170154834937</id><published>2011-09-21T09:15:00.001-06:00</published><updated>2011-09-21T09:15:13.859-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Steven Black Speaking at Southwest Fox 2011</title><content type='html'>&lt;p&gt;I’m thrilled to announce that &lt;a href="http://www.swfox.net/StevenBlack.aspx"&gt;Steven Black&lt;/a&gt; is speaking at Southwest Fox this year. Rick, Tamar, and I have been trying to get him as a speaker for years, as we felt that with only Steve Bodnar and Steve Ellenoff, we just didn’t have enough Steves. Seriously, Steve Black is one of my favorite speakers of all time. His sessions are lively, thought-provoking, and entertaining, a killer combination. Steve hasn’t been to SWFox since 2005 due to other commitments, so he’s been sorely missed.&lt;/p&gt;  &lt;p&gt;Steve's sessions are &lt;a href="http://www.swfox.net/sessions.aspx#Looking_Back:_Techniques_I'm_Glad_we_Used"&gt;Looking Back: Techniques I'm Glad we Used&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx#Niche_Marketing_for_VFP_Developers,_Revisited"&gt;Niche Marketing for VFP Developers, Revisited&lt;/a&gt;. Both are going to be great sessions, but the Niche Marketing session is particularly timely given the state of VFP development today. Of course, this just makes the problem of deciding which sessions to attend, since I can’t possibly see them all, all the harder.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3755686170154834937?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3755686170154834937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3755686170154834937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3755686170154834937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3755686170154834937'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/09/steven-black-speaking-at-southwest-fox.html' title='Steven Black Speaking at Southwest Fox 2011'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6046232571730977904</id><published>2011-09-19T11:59:00.001-06:00</published><updated>2011-09-19T12:03:23.400-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Charity'/><category scheme='http://www.blogger.com/atom/ns#' term='Fundraising'/><category scheme='http://www.blogger.com/atom/ns#' term='Fun'/><category scheme='http://www.blogger.com/atom/ns#' term='Personal'/><title type='text'>On the Catwalk Again</title><content type='html'>&lt;p&gt;Last week, my wife Peggy and I both modeled in a fashion show fundraiser for Sofia House, a second stage shelter for women and children escaping domestic violence that Peggy used to be the Executive Director of (she now works for the United Way as Director of Community Investment). It was her first time, so she was a little nervous. Fortunately, I’d done it &lt;a href="http://doughennig.blogspot.com/2007/09/i-do-my-little-turn-on-catwalk.html"&gt;before&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;We were both in four sets, although only one together, showing casual, business casual, and business outfits from local shops. Most of the models this year were inexperienced, so we had several practices in the weeks before the show. Things were a little rough even in the dress rehearsal the night before the show, but everyone magically pulled together on the actual night and it went without a hitch. It was likely the beer and wine we had backstage that settled the nerves.&lt;/p&gt;  &lt;p&gt;This year’s theme was “Mamma Mia”, so all of the sets were done to ABBA tunes (I still have several running through my head). We could tell the 500 women (and a few men) in attendance were having fun because of all the smiles and singing along to the familiar songs.&lt;/p&gt;  &lt;p&gt;Here’s the first set Peggy and I were in; she’s on the left. Everyone had to wear glasses for this set (which I normally do, so I didn’t need a fake pair like she did); I guess it made us look more business-like. I also have a wad of (fake) $50 bills in my coat pocket because the ABBA song playing was “It’s a Rich Man’s World”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-ijmLDGcsI4g/TneDA0UTBPI/AAAAAAAAAWY/0kuDlsUAxhw/s1600-h/Sofia%252520House%252520Fashion%252520Show%2525202011%252520010%25255B5%25255D.jpg"&gt;&lt;img 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="Sofia House Fashion Show 2011 010" border="0" alt="Sofia House Fashion Show 2011 010" src="http://lh5.ggpht.com/-u1_pZFCgPKw/TneDBRS0YJI/AAAAAAAAAWc/S0wQr7_85Yw/Sofia%252520House%252520Fashion%252520Show%2525202011%252520010_thumb%25255B2%25255D.jpg?imgmax=800" width="576" height="434" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I had to do another set where I wasn’t actually modeling clothes. In case you can’t tell, we’re all wearing flippers. If you’ve seen the movie, you’ll know why. In addition to doing muscle poses, we also had to do the can-can together. I think this skit got the loudest reaction from the audience.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-S1PFo__hIBw/TneDBzTO64I/AAAAAAAAAWg/u0mfCxzSkXI/s1600-h/Sofia%252520House%252520Fashion%252520Show%2525202011%252520018%25255B4%25255D.jpg"&gt;&lt;img 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="Sofia House Fashion Show 2011 018" border="0" alt="Sofia House Fashion Show 2011 018" src="http://lh3.ggpht.com/-QYRTQv6AnYQ/TneDCWWGwwI/AAAAAAAAAWk/7Zb7lQS4Kwg/Sofia%252520House%252520Fashion%252520Show%2525202011%252520018_thumb%25255B1%25255D.jpg?imgmax=800" width="574" height="432" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’m not sure how much money the fashion show raised this year, but it’s was likely as least $15,000. Since Sofia House gets no government funding, everything they make comes from private donations, organizations like the United Way, and fundraising efforts from the dedicated board, making this a very worthy cause. Plus it was a ton of fun to be involved in.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6046232571730977904?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6046232571730977904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6046232571730977904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6046232571730977904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6046232571730977904'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/09/on-catwalk-again.html' title='On the Catwalk Again'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-u1_pZFCgPKw/TneDBRS0YJI/AAAAAAAAAWc/S0wQr7_85Yw/s72-c/Sofia%252520House%252520Fashion%252520Show%2525202011%252520010_thumb%25255B2%25255D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8730202697927885591</id><published>2011-09-14T16:13:00.001-06:00</published><updated>2011-09-14T16:13:31.034-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Griver and Black Coming to Southwest Fox</title><content type='html'>&lt;p&gt;I have some great news: VFP luminaries Alan Griver (aka yag) and Steven Black are coming to Southwest Fox this year! It’s been a couple of years since Alan last came and 2005 since Steve was last at the conference. This is your chance to hang out with them and find out what they’re up to today. Who knows, maybe with enough beers, Steve will re-tell the infamous Brewster McRooster tale.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8730202697927885591?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8730202697927885591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8730202697927885591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8730202697927885591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8730202697927885591'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/09/griver-and-black-coming-to-southwest.html' title='Griver and Black Coming to Southwest Fox'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3913056919864450057</id><published>2011-09-12T10:40:00.001-06:00</published><updated>2011-09-12T10:41:51.926-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>New Offer for Southwest Fox 2011</title><content type='html'>&lt;p&gt;Alpha Software is offering a free full copy of Alpha Five Developer to every attendee of Southwest Fox 2011, a $349 value. Alpha Five allows you to rapidly develop both web and desktop database applications. Alpha Software is exhibiting at this year’s Southwest Fox, so you’ll have a chance to meet and talk with them about their product. For more information on Alpha Five, please see their web site: &lt;a title="http://www.alphasoftware.com/" href="http://www.alphasoftware.com/"&gt;http://www.alphasoftware.com/&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3913056919864450057?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3913056919864450057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3913056919864450057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3913056919864450057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3913056919864450057'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/09/new-offer-for-southwest-fox-2011.html' title='New Offer for Southwest Fox 2011'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7720819112204644532</id><published>2011-08-23T11:42:00.001-06:00</published><updated>2011-08-23T11:42:40.161-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Presentations'/><category scheme='http://www.blogger.com/atom/ns#' term='PowerPoint'/><title type='text'>Cool PowerPoint Transitions</title><content type='html'>&lt;p&gt;PowerPoint MVP Glenna Shaw created a &lt;a href="http://blogs.msdn.com/b/mvpawardprogram/archive/2011/08/22/mvps-for-office-2010-the-beauty-of-transitions-in-powerpoint-2010.aspx"&gt;cool presentation&lt;/a&gt; showing how transitions work in Microsoft PowerPoint 2010. They may not necessarily be suitable for technical presentations but for general presentations add some excitement to what otherwise might be boring slides.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7720819112204644532?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7720819112204644532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7720819112204644532' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7720819112204644532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7720819112204644532'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/08/cool-powerpoint-transitions.html' title='Cool PowerPoint Transitions'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5537961672493142909</id><published>2011-08-22T13:49:00.001-06:00</published><updated>2011-08-22T13:49:32.270-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 News</title><content type='html'>&lt;p&gt;Anyone who is registered before midnight EDT on September 1st (including those who are already registered) is eligible for one of three drawings for a &lt;a href="http://www.dbi-tech.com/ProductPage_StudioControlsCOM.aspx"&gt;DBi Technologies Studio Controls for COM&lt;/a&gt; license (which sells for $749). Thanks to DBi for their ongoing support of Southwest Fox!&lt;/p&gt;  &lt;p&gt;We're trying to get a better handle both on how many people to expect and the factors in people's decision to attend or not. Please help us by taking a brief anonymous &lt;a href="http://www.surveymonkey.com/s/NWWC5NG"&gt;survey&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5537961672493142909?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5537961672493142909/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5537961672493142909' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5537961672493142909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5537961672493142909'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/08/southwest-fox-2011-news.html' title='Southwest Fox 2011 News'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5522002346522888947</id><published>2011-08-17T11:23:00.001-06:00</published><updated>2011-08-17T11:23:44.832-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2011 FoxPro Lifetime Achievement Award Nominations</title><content type='html'>&lt;p&gt;The FoxPro Lifetime Achievement Award honors those individuals who have contributed a great deal to the FoxPro community over the years: &lt;a href="http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP"&gt;http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP&lt;/a&gt;. The previous recipients have created a committee to select one or more recipients for 2011. The committee consists of Whil Hentzen, Rick Strahl, Doug Hennig, Tamar Granor, Rainer Becker, Rick Schummer, Lisa Slater Nicholls, wOOdy Wondzinski, and Christof Wollenhaupt, as well as Alan Griver (yag) of Microsoft and Naomi Nosonovsky representing the FoxPro community.&lt;/p&gt;  &lt;p&gt;To submit your nominations for the 2011 recipients, please &lt;a href="mailto:dhennig@stonefield.com"&gt;email me&lt;/a&gt; by August 31, 2011.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5522002346522888947?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5522002346522888947/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5522002346522888947' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5522002346522888947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5522002346522888947'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/08/2011-foxpro-lifetime-achievement-award.html' title='2011 FoxPro Lifetime Achievement Award Nominations'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-9157407570567955967</id><published>2011-07-27T10:32:00.001-06:00</published><updated>2011-07-27T10:32:43.589-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ambassador Fund'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2011 Ceil Silver Ambassador Announced</title><content type='html'>&lt;p&gt;Geek Gathering is pleased to announce that the &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;2011 Ceil Silver Ambassador&lt;/a&gt; is Borislav Borissov. Thanks to the many contributors to the Ambassador Fund for once again showing your generosity!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-9157407570567955967?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/9157407570567955967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=9157407570567955967' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/9157407570567955967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/9157407570567955967'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/07/2011-ceil-silver-ambassador-announced.html' title='2011 Ceil Silver Ambassador Announced'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7886596157820834209</id><published>2011-07-21T12:04:00.001-06:00</published><updated>2011-07-21T12:04:01.489-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Deadline Approaching</title><content type='html'>&lt;p&gt;Just a reminder that anyone registering for Southwest Fox by Monday, July 25, is eligible for the Super Saver discount rate of $645. Registering includes entrance to all conference sessions, two lunches, one dinner, access to whitepapers for all regular conference sessions, and much more.&lt;/p&gt;  &lt;p&gt;Check out the list of speakers and sessions at &lt;a href="http://www.swfox.net/speakers.aspx"&gt;http://www.swfox.net/speakers.aspx&lt;/a&gt;. Full registration information and access to our registration application at &lt;a href="http://www.swfox.net/register.aspx"&gt;http://www.swfox.net/register.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7886596157820834209?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7886596157820834209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7886596157820834209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7886596157820834209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7886596157820834209'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/07/southwest-fox-2011-deadline-approaching.html' title='Southwest Fox 2011 Deadline Approaching'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7480530286422362883</id><published>2011-07-08T11:50:00.001-06:00</published><updated>2011-07-08T11:50:33.861-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>Mixed Feelings</title><content type='html'>&lt;p&gt;Later today, my business partner Mickey and I are signing the papers to complete the sale of Stonefield Systems Group Inc. to a group of employees.&lt;/p&gt;  &lt;p&gt;In case you weren’t aware, there are actually two Stonefields: Stonefield Systems Group Inc. (SSG) and Stonefield Software Inc. (SSI). (Actually, there are three: Stonefield Software USA is our U.S. operation.) SSG was created in 1991 (yes, that means the 20th anniversary is this year) by another business partner, and Mickey and I joined a few months later. SSG did all kinds of stuff: custom software development, Accpac (a popular accounting system now owned by Sage) sales and consulting, pharmacy software development and sales, IT stuff … basically, anything for a buck. Over the years, the business structure changed: Mickey and I bought out the other partners in 1995 and we refocused the business to just Accpac and software development. In 2000, we split off the software development side to Stonefield Software so SSG could focus exclusively on Accpac.&lt;/p&gt;  &lt;p&gt;As a result, I’ve had very little to do with the day-to-day operations of SSG for over a decade. Several years ago, Mickey also decided to focus almost entirely on SSI so we handed the management reins to a general manager. So while we owned SSG and oversaw its general operation, neither of us was closely involved for quite some time.&lt;/p&gt;  &lt;p&gt;A few years ago, a couple of long-time employees approached us with the idea of buying SSG from us. It took a while to make it happen, but later today it becomes a reality. Note that we are NOT selling SSI; it’s the business we’ve been focused on for a long time and will continue to do so. I’ve been working on &lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; for more than a decade and will do so for (hopefully) another decade. I still write code every day and get grumpy when I don’t.&lt;/p&gt;  &lt;p&gt;I have mixed feelings about selling SSG. Although it wasn’t my first company (I had a one-man company in the late 80s), it certainly was the one I was associated with the longest. So, there’s a bit of nostalgia at leaving something I spent so much time and effort building. However, I’m also very excited for the new owners, Connie, Bernie, and Rene. They’re young, have a lot of talent, and tons of new ideas about directions to take SSG in. The company is in great hands and the future is very bright. I’ll be watching happily to see how they make my old baby and their new one grow.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7480530286422362883?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7480530286422362883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7480530286422362883' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7480530286422362883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7480530286422362883'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/07/mixed-feelings.html' title='Mixed Feelings'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8068596574498734463</id><published>2011-07-08T10:13:00.001-06:00</published><updated>2011-07-08T10:13:10.821-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Pricing</title><content type='html'>&lt;p&gt;We tried something new for pricing Southwest Fox this year. Instead of using calendar deadlines, we divided the number of attendees we expect into a set of &amp;quot;buckets,&amp;quot; with an increased price for each bucket. We even put the number of seats left in each bucket on the conference home page. &lt;/p&gt;  &lt;p&gt;The reason for the change was to get people to register sooner, which helps us in many different areas of planning. We put 20 seats in the first bucket and they all sold in the first few days after we opened registration. We were thrilled.&lt;/p&gt;  &lt;p&gt;After that, we blew it. We put 60 seats into the second bucket, which failed to create any kind of urgency; as we write this, only 21 of those seats have sold. Even the July 1 deadline for getting a pre-conference session for free didn't light a fire under many people. The result is that registrations are running considerably behind last year's; we're pretty sure it's the pricing mechanism causing the slow registrations, not a lack of interest.&lt;/p&gt;  &lt;p&gt;Since we really do need to know how many people are coming, we're going to adjust the bucket sizes. But before we do, we want to give everyone a chance to get in on the current price of $645 (a discount of $125 off the regular price). &lt;/p&gt;  &lt;p&gt;After Monday, July 25, we're going to reduce the size of the second bucket to a total of 30 seats (or the number of people who've already received the Super Saver price by that date, if that's more than 30), and add a new bucket called just &amp;quot;Saver,&amp;quot; with a price of $690, which is still $80 less than full price, for the other 30. However, anyone who registers on or before July 25 will get the Super Saver price, even if that means we have more than 60 Super Savers. &lt;/p&gt;  &lt;p&gt;So, if you've been waiting for the Super Saver bucket to get close to empty before registering, that time is now. (If company bureaucracy or other factors make this deadline a problem for you, please contact us at &lt;a href="mailto:register@swfox.net"&gt;register@swfox.net&lt;/a&gt;.)&lt;/p&gt;  &lt;p&gt;Thanks for understanding our need to tweak this new approach. We look forward to seeing you in Gilbert in October.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8068596574498734463?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8068596574498734463/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8068596574498734463' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8068596574498734463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8068596574498734463'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/07/southwest-fox-2011-pricing.html' title='Southwest Fox 2011 Pricing'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4992246895538804173</id><published>2011-06-24T16:43:00.001-06:00</published><updated>2011-06-24T16:43:00.835-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox Deadline Coming Up</title><content type='html'>&lt;p&gt;There are only 8 days left to get a free &lt;a href="http://www.swfox.net/register.aspx"&gt;pre-conference session&lt;/a&gt; and chance for &lt;a href="http://www.swfox.net/scholarship.aspx"&gt;scholarships&lt;/a&gt; for Southwest Fox 2011. We’re already ahead of the pace from this time last year so be sure to register before July 1 so you don’t miss out.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4992246895538804173?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4992246895538804173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4992246895538804173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4992246895538804173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4992246895538804173'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/06/southwest-fox-deadline-coming-up.html' title='Southwest Fox Deadline Coming Up'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7589109382389940232</id><published>2011-06-23T12:20:00.001-06:00</published><updated>2011-06-23T12:20:44.207-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML Help'/><title type='text'>Better Online Help Links</title><content type='html'>&lt;p&gt;I’ve been using Rick Strahl’s &lt;a href="http://www.west-wind.com/wwHelp/"&gt;West Wind HTML Help Builder&lt;/a&gt; for more than a decade and still think it’s the best tool for creating help files. One of the many things I like about it is that in addition to creating a CHM file, it also generates files you can upload to a web site. For example, &lt;a title="http://www.stonefieldquery.com/OnlineHelp/EndUser/index.htm" href="http://www.stonefieldquery.com/OnlineHelp/EndUser/index.htm"&gt;http://www.stonefieldquery.com/OnlineHelp/EndUser/index.htm&lt;/a&gt; is the online version of the Stonefield Query end-user help. I didn’t have to do anything after generating my CHM other than uploading the files HTML Help Builder creates.&lt;/p&gt;  &lt;p&gt;There are several reasons why we like having help available online:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Potential customers can review the complete help file before downloading the demo if they wish. &lt;/li&gt;    &lt;li&gt;It’s fully indexed by Google, Bing, etc. so shows up in searches. &lt;/li&gt;    &lt;li&gt;When someone asks a support question, rather than telling them to bring up the help file, open the “How To” heading, and find the “Configuring Stonefield Query” topic, we can send them a link directly to the online version: &lt;a title="Configuring Stonefield Query" href="http://www.stonefieldquery.com/OnlineHelp/EndUser/_04a0xwfxe.htm"&gt;Configuring Stonefield Query&lt;/a&gt;. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;However, one issue with the latter item is that a link like &lt;a href="http://www.stonefieldquery.com/OnlineHelp/EndUser/_04a0xwfxe.htm"&gt;http://www.stonefieldquery.com/OnlineHelp/EndUser/_04a0xwfxe.htm&lt;/a&gt; displays the help topic without the rest of the help system: no table of contents or search mechanism. I discovered today that if instead of specifying the page directly, you use it as a parameter for the index page, like &lt;a href="http://www.stonefieldquery.com/OnlineHelp/EndUser/index.htm?page=_04a0xwfxe.htm"&gt;http://www.stonefieldquery.com/OnlineHelp/EndUser/index.htm?page=_04a0xwfxe.htm&lt;/a&gt;, it displays the full help system with the desired page selected. Learn something new every day!&lt;/p&gt;  &lt;p&gt;Thanks again, Rick, for a great tool that makes documentation almost fun to create! (I did say ALMOST; I’m not crazy!)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7589109382389940232?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7589109382389940232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7589109382389940232' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7589109382389940232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7589109382389940232'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/06/better-online-help-links.html' title='Better Online Help Links'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3451836366836441269</id><published>2011-06-01T15:44:00.001-06:00</published><updated>2011-06-01T15:44:35.810-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Pinning the Southwest Fox Web Site</title><content type='html'>&lt;p&gt;If you’re using Windows 7 and Internet Explorer 9, try this:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Navigate to the Southwest Fox web site: &lt;a href="http://www.swfox.net"&gt;www.swfox.net&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;Drag the icon that appears to the left of the address bar to your Windows Task Bar:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-IKCoWc_E_V0/TeayvDIREmI/AAAAAAAAAWE/qdzByaVX5eY/s1600-h/DragSite%25255B3%25255D.png"&gt;&lt;img 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="DragSite" border="0" alt="DragSite" src="http://lh5.ggpht.com/-vodVo0lgeuY/TeayvhyMChI/AAAAAAAAAWI/eS-VKk3h4KM/DragSite_thumb%25255B1%25255D.png?imgmax=800" width="489" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Notice you now have a Southwest Fox icon in your Task Bar. Click it as a fast way to bring up the Southwest Fox web site.&lt;/li&gt;    &lt;li&gt;Right-click the icon to display the following jump list. The items in the Tasks section take you to the specific page on the web site:&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-bgUWm-gyHn0/TeaywOquY5I/AAAAAAAAAWM/hRJweZ80xG4/s1600-h/JumpList%25255B3%25255D.png"&gt;&lt;img 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="JumpList" border="0" alt="JumpList" src="http://lh3.ggpht.com/-4_MB4bV1qa0/TeaywoXKnnI/AAAAAAAAAWQ/jYvb39vFnCI/JumpList_thumb%25255B1%25255D.png?imgmax=800" width="275" height="309" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now it’s a single mouse click to get to the most popular pages on the web site.&lt;/p&gt;  &lt;p&gt;If your interested in adding this capability to your own web site, it’s really easy: go to &lt;a title="http://buildmypinnedsite.com/" href="http://buildmypinnedsite.com/"&gt;http://buildmypinnedsite.com/&lt;/a&gt; and follow the steps.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3451836366836441269?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3451836366836441269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3451836366836441269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3451836366836441269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3451836366836441269'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/06/pinning-southwest-fox-web-site.html' title='Pinning the Southwest Fox Web Site'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/-vodVo0lgeuY/TeayvhyMChI/AAAAAAAAAWI/eS-VKk3h4KM/s72-c/DragSite_thumb%25255B1%25255D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6281308861248879216</id><published>2011-05-27T15:03:00.001-06:00</published><updated>2011-05-27T15:03:14.889-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='Web Connection'/><title type='text'>Web Connection User Conference</title><content type='html'>&lt;p&gt;Are you a Web Connection Developer looking for an opportunity to expand your skill set and hobnob with other Web Connection experts? Then look no further than this year's &lt;a href="http://www.swfox.net/workshops.aspx"&gt;Web Connection User Conference&lt;/a&gt; at the SanTan Elegante Conference &amp;amp; Reception Center and Legado Hotel, just prior to the Southwest Fox conference there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6281308861248879216?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6281308861248879216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6281308861248879216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6281308861248879216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6281308861248879216'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/05/web-connection-user-conference.html' title='Web Connection User Conference'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1276607929528344813</id><published>2011-05-27T15:00:00.001-06:00</published><updated>2011-05-27T15:00:27.852-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Silverswitch Post-Conference Workshop</title><content type='html'>&lt;p&gt;&lt;b&gt;&lt;/b&gt;The German FoxPro User Group, Visual Extend, and FoxRockX are sponsoring a &lt;a href="http://localhost:47879/workshops.aspx"&gt;free Silverswitch (Silverlight to VFP) workshop&lt;/a&gt; on Saturday and Sunday after Southwest Fox.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1276607929528344813?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1276607929528344813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1276607929528344813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1276607929528344813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1276607929528344813'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/05/silverswitch-post-conference-workshop.html' title='Silverswitch Post-Conference Workshop'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3027787175141986989</id><published>2011-05-27T13:33:00.001-06:00</published><updated>2011-05-28T09:23:18.998-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Speakers and Sessions Announced</title><content type='html'>&lt;p&gt;&lt;a href="http://www.swfox.net/Speakers.aspx"&gt;Speakers&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx"&gt;sessions&lt;/a&gt; for Southwest Fox 2011 have been announced. Continuing our tradition of trying to invite new speakers every year, this year we are pleased to have &lt;a href="http://www.swfox.net/StephenBodnar.aspx"&gt;Steve Bodnar&lt;/a&gt;, &lt;a href="http://www.swfox.net/KevinRagsdale.aspx"&gt;Kevin Ragsdale&lt;/a&gt;, and &lt;a href="http://www.swfox.net/TuviaVinitsky.aspx"&gt;Tuvia Vinitsky&lt;/a&gt; present at SWFox. I’ve had the pleasure of knowing and speaking with both Steve and Kevin for a long time, and look forward to their sessions. We are even supplying Kevin with a set of Depends so he can continue his presentation regardless of any &lt;a href="http://kevinragsdale.net/post/2006/09/18/FoxForward-Day-Three-Part-One.aspx"&gt;emergency&lt;/a&gt; that should arise.&lt;/p&gt;  &lt;p&gt;Once again, the organizers had a very tough time selecting from the excellent submissions. Some sessions I’m personally looking forward to are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Steve Bodnar’s &lt;a href="http://www.swfox.net/sessions.aspx#jQuery_UI_and_jQuery_Plugins_for_Making_Your_Site_Look_and_Work_Better"&gt;jQuery&lt;/a&gt; session. Although I saw Steve present a similar session earlier this year, his infectious enthusiasm for jQuery makes it well worth seeing again. &lt;/li&gt;    &lt;li&gt;Rick Borup’s &lt;a href="http://www.swfox.net/sessions.aspx#VFP_Version_Control_with_Mercurial"&gt;Mercurial&lt;/a&gt; session. We just started using Mercurial here at Stonefield after seeing a session &lt;a href="http://www.swfox.net/2009/AlanStevens.aspx"&gt;Alan Stevens&lt;/a&gt; did on it earlier this year, so we have a lot to learn and Rick is a master at sessions like this. &lt;/li&gt;    &lt;li&gt;Steve Ellenoff’s &lt;a href="http://www.swfox.net/sessions.aspx#FoxPro_on_Your_Smartphone?_A_Complete_Guide_to_Getting_Started"&gt;smartphone&lt;/a&gt; pre-con session. Steve presented what was for me the &lt;a href="http://www.swfox.net/2010/sessions.aspx#Integrating_Windows_7_Taskbar_Functionality_into_VFP_Applications"&gt;coolest session&lt;/a&gt; at SWFox last year, and this session sounds like a killer topic. &lt;/li&gt;    &lt;li&gt;Eric Selje’s &lt;a href="http://www.swfox.net/sessions.aspx#Fox_on_the_Run"&gt;mobile device&lt;/a&gt; session. Not only does this session sound cool, its title is one of my favorite Sweet songs, so you gotta like that. &lt;/li&gt;    &lt;li&gt;Kevin Ragsdale’s &lt;a href="http://www.swfox.net/sessions.aspx#It's_so,_uh,_"&gt;user interface&lt;/a&gt; session. If you’ve seen my sessions at SWFox the past few years, you know that UI is very important topic to me, so I’m really looking forward to Kevin’s take on this. Plus Kevin is a really fun guy so his session is sure to entertain. &lt;/li&gt;    &lt;li&gt;Christof Wollenhaupt’s &lt;a href="http://www.swfox.net/sessions.aspx#Googlefy_Your_Apps"&gt;Googlefy&lt;/a&gt; session. Christof is a speaker’s speaker: he’s the one all speakers attend because his sessions are always so thought-provoking. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I’m very excited by this year’s lineup and think you will be too. &lt;a href="http://www.swfox.net/register.aspx"&gt;Registration&lt;/a&gt; opens June 1. See you in October!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3027787175141986989?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3027787175141986989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3027787175141986989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3027787175141986989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3027787175141986989'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/05/southwest-fox-2011-speakers-and.html' title='Southwest Fox 2011 Speakers and Sessions Announced'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2678335940312349221</id><published>2011-04-15T10:49:00.001-06:00</published><updated>2011-04-15T10:50:05.874-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Press Release'/><category scheme='http://www.blogger.com/atom/ns#' term='Humor'/><title type='text'>Lost in Translation</title><content type='html'>&lt;p&gt;Here is a recent &lt;a href="http://www.freeprnow.com/pr/fast-effective-reporting-and-dashboards-for-frontrange-goldmine-crm"&gt;press release&lt;/a&gt; we sent out about the latest version of Stonefield Query.&lt;a href="http://sangkom.co.cc/fast-effective-reporting-and-dashboards-for-frontrange-goldmine-crm.html"&gt;This one&lt;/a&gt; is the same press release that was obviously translated to another language and then back to English, I suspect by an automated rather than human translator. The translated version is hilarious. Here are some of my favorite quotes:&lt;/p&gt;  &lt;p&gt;“Stonefield Software today declared the stylish promulgation of its database news code tool, Stonefield Query 4.1”&lt;/p&gt;  &lt;p&gt;“The newborn edition includes over 30 newborn enhancements – the most momentous existence the Dashboard Wizard”&lt;/p&gt;  &lt;p&gt;“As a result, they never intend the flooded benefits of what Goldmine CRM crapper do for them and their business.” (Um, we didn’t really call GoldMine “crapper”. It looks like “can” became “crapper” in the re-translation.)&lt;/p&gt;  &lt;p&gt;“They woman opportunities and that effectuation forfeited sales.” (“Miss” became “woman”.)&lt;/p&gt;  &lt;p&gt;“The stylish edition provides an ad hoc news resolution that crapper be utilised direct by modify users as substantially as IT staff.” There’s that word “crapper” again.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2678335940312349221?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2678335940312349221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2678335940312349221' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2678335940312349221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2678335940312349221'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/04/lost-in-translation.html' title='Lost in Translation'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5866911194906545786</id><published>2011-03-24T10:35:00.001-06:00</published><updated>2011-03-24T10:35:03.483-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Session Proposals Due Soon</title><content type='html'>&lt;p&gt;This is just a quick reminder that session proposals for Southwest Fox 2011 are due by next Monday, March 28. For details, read the Call for Speakers document linked at &lt;a href="http://www.swfox.net/callforspeakers.aspx"&gt;http://www.swfox.net/callforspeakers.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5866911194906545786?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5866911194906545786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5866911194906545786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5866911194906545786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5866911194906545786'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/03/southwest-fox-2011-session-proposals.html' title='Southwest Fox 2011 Session Proposals Due Soon'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-749353919604601878</id><published>2011-03-24T10:32:00.001-06:00</published><updated>2011-03-24T10:32:57.149-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>FoxPro MVP Podcast</title><content type='html'>&lt;p&gt;Earlier this month at the MVP Summit, Andrew Duthie and Dane Morgridge of the &lt;a href="http://www.communitymegaphonepodcast.com/Show/26/FoxPro-Reunion"&gt;Community Microphone Podcast&lt;/a&gt; interviewed Tamar Granor, Rick Schummer, Alan Griver and me about a wide range of subjects, mostly around the influence FoxPro and the FoxPro community has had on Microsoft and other communities. Have a listen!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-749353919604601878?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/749353919604601878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=749353919604601878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/749353919604601878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/749353919604601878'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/03/foxpro-mvp-podcast.html' title='FoxPro MVP Podcast'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1913085835128059913</id><published>2011-03-22T09:10:00.001-06:00</published><updated>2011-03-22T09:10:30.773-06:00</updated><title type='text'>Nominations for 2011 Ceil Silver Ambassador</title><content type='html'>&lt;p&gt;The Ceil Silver Ambassador Fund brings a developer to the Southwest Fox conference in the United States as an ambassador for the developers in his or her country. This gives the recipient the opportunity to meet and share experiences with developers attending Southwest Fox and gives other attendees the opportunity to learn about VFP development in the recipient's country. For more information on the Ambassador Fund or to learn how to contribute to it, please see &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;http://www.swfox.net/ambassador.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The Ambassador selection committee consists of Southwest Fox organizers Rick Schummer, Tamar Granor, and Doug Hennig, former Ambassadors Emerson Santon Reed, Cesar Chalom, and Bernard Bout, and VFP community members Christof Wollenhaupt, Rick Bean, and Alex Feldstein.&lt;/p&gt;  &lt;p&gt;We are looking for nominations from the VFP community for the 2011 recipient. To nominate someone you think is deserving to be selected, please email their name and a brief list of their contributions to the VFP community to &lt;a href="mailto:ambassadorfund@swfox.net"&gt;ambassadorfund@swfox.net&lt;/a&gt;. Names must be submitted no later than April 15, 2011.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1913085835128059913?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1913085835128059913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1913085835128059913' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1913085835128059913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1913085835128059913'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/03/nominations-for-2011-ceil-silver.html' title='Nominations for 2011 Ceil Silver Ambassador'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3976282659238868099</id><published>2011-03-14T09:19:00.001-06:00</published><updated>2011-03-14T10:29:41.079-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxCharts'/><category scheme='http://www.blogger.com/atom/ns#' term='Ambassador Fund'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>The Spirit of the Community</title><content type='html'>&lt;p&gt;César once again shows why the VFP community is alive and well. First, he released a new version of his very cool &lt;a href="http://vfpx.codeplex.com/releases/view/18515"&gt;FoxCharts&lt;/a&gt; charting tool. This is a tool that is easily as powerful as many commercial charting tools and yet César has generously donated it and his time to our community. Second, he is actively &lt;a href="http://weblogs.foxite.com/vfpimaging/archive/2011/03/14/13903.aspx"&gt;requesting donations&lt;/a&gt; from FoxCharts users, but not for himself: he asks that donations go to the &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;Ceil Silver Ambassador Fund&lt;/a&gt;. This fund raises money from the VFP community to bring a developer to the Southwest Fox conference as an ambassador for the developers in his or her country. This gives the recipient the opportunity to meet and share experiences with developers attending Southwest Fox and gives other attendees the opportunity to learn about VFP development in the recipient's country.&lt;/p&gt;  &lt;p&gt;Thanks, César, for all you do and for your very strong commitment to the VFP community. César’s generosity and spirit of community should be an inspiration to us all.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3976282659238868099?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3976282659238868099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3976282659238868099' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3976282659238868099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3976282659238868099'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/03/spirit-of-community.html' title='The Spirit of the Community'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7691978291389256815</id><published>2011-03-08T12:56:00.001-06:00</published><updated>2011-03-08T12:56:28.212-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Call For Speakers</title><content type='html'>&lt;p&gt;Today we released the Call for Speakers for Southwest Fox 2011. Anyone interested in presenting should visit the &lt;a href="http://www.swfox.net/callforspeakers.aspx"&gt;Call for Speakers page&lt;/a&gt; on the Southwest Fox website, read the complete Call for Speakers document (linked from that page), and download the proposal submission application. Session proposals are due by March 28.&lt;/p&gt;  &lt;p&gt;As in the past few years, we to offer a good selection of topics in core VFP development, extending VFP, using VFP with other technologies, and VFPX, as well as technology sessions to help VFP developers become better developers, not just more expert at VFP.&lt;/p&gt;  &lt;p&gt;If you think you have something to say to the VFP community, please submit session proposals, even if you’ve never spoken at a conference before. Our community is strengthened when more people take an active role. Do be aware that speaking at a conference is a serious commitment. Even for experienced speakers, preparing a new session takes 40-80 hours. Doing it well at the conference calls for several rehearsals beforehand, too. So make sure you can commit the necessary time; the Call for Speakers lays out all the deadlines.&lt;/p&gt;  &lt;p&gt;We’re looking forward to seeing what you all come up with. Reading through the proposals we receive each year is really exciting, and choosing among them is always a challenge.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7691978291389256815?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7691978291389256815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7691978291389256815' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7691978291389256815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7691978291389256815'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/03/southwest-fox-2011-call-for-speakers.html' title='Southwest Fox 2011 Call For Speakers'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4285459628444230838</id><published>2011-02-02T09:53:00.001-06:00</published><updated>2011-02-02T09:53:22.365-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Running Network Applications on Windows 7</title><content type='html'>&lt;p&gt;Like many developers, I like using Windows Virtual PC for testing applications. Today I needed to test running Stonefield Query from a network share, so I started a virtual machine (VM), connected it to the drive on my host system, ran the Stonefield Query workstation installer to install just required runtime files on the VM, and then ran SFQuery.exe from the “server”. I immediately got a “The application failed to initialize properly (0xc000000F)” error. At first I thought something wasn’t installed properly, but a search found this Microsoft KnowledgeBase article: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/978869"&gt;Error message when you try to open a network-shared application on a client computer that is running Windows 7 or Windows Server 2008 R2: 0xc000000f&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Apparently this is a known issue and you can request a hotfix to resolve it. After installing it, all was well.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4285459628444230838?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4285459628444230838/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4285459628444230838' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4285459628444230838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4285459628444230838'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/02/running-network-applications-on-windows.html' title='Running Network Applications on Windows 7'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5109289385900272783</id><published>2011-01-22T08:40:00.001-06:00</published><updated>2011-01-22T08:40:28.953-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2010 Keynote Videos</title><content type='html'>&lt;p&gt;&lt;a href="http://weblogs.foxite.com/bernardbout/default.aspx"&gt;Bernard Bout&lt;/a&gt; has kindly uploaded &lt;a href="http://www.youtube.com/user/Bernbout"&gt;HD videos&lt;/a&gt; of the Southwest Fox 2010 keynote. Whether you were at the conference or couldn’t make it, you’ll want to watch them. Craig Boyd gives what must be the funniest keynote at any conference ever.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5109289385900272783?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5109289385900272783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5109289385900272783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5109289385900272783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5109289385900272783'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/01/southwest-fox-2010-keynote-videos.html' title='Southwest Fox 2010 Keynote Videos'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1333287909862969189</id><published>2011-01-06T14:13:00.001-06:00</published><updated>2011-01-06T14:13:06.904-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='White Paper'/><category scheme='http://www.blogger.com/atom/ns#' term='Articles'/><title type='text'>Windows Vista Articles</title><content type='html'>&lt;p&gt;Since Advisor is &lt;a href="http://my.advisor.com/pub/DataBasedAdvisor"&gt;closing online access&lt;/a&gt; to their articles, I have put a copy of my “Developing VFP Applications for Windows Vista” white paper, the source material for a couple of articles I wrote for Advisor, on the &lt;a href="http://www.stonefield.com/techpap.aspx"&gt;Technical Papers page&lt;/a&gt; of Stonefield’s web site.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1333287909862969189?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1333287909862969189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1333287909862969189' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1333287909862969189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1333287909862969189'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/01/windows-vista-articles.html' title='Windows Vista Articles'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5589392849557005945</id><published>2011-01-06T11:23:00.001-06:00</published><updated>2011-01-06T11:23:19.414-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2011 Announced</title><content type='html'>&lt;p&gt;Mark your calendars! &lt;a href="http://www.swfox.net"&gt;Southwest Fox 2011&lt;/a&gt; will take place on October 26-29, 2011 with a post-conference event on the afternoon of October 29 and morning of October 30. Note a few changes this year:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The shift not only from the second week in October to the last week (to avoid running into Jewish holy days).&lt;/li&gt;    &lt;li&gt;The shift from our usual Thursday to Sunday dates to Wednesday to Saturday this year (so you can get home in time for Halloween).&lt;/li&gt;    &lt;li&gt;The post-conference starts Saturday afternoon rather than the next day.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;By the way, the post-conference event is guaranteed to blow your socks off, so you'll definitely want to consider staying the extra day. Stay tuned for more details.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5589392849557005945?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5589392849557005945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5589392849557005945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5589392849557005945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5589392849557005945'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2011/01/southwest-fox-2011-announced.html' title='Southwest Fox 2011 Announced'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2050442859583452561</id><published>2010-12-09T17:42:00.001-06:00</published><updated>2010-12-09T17:42:08.099-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Another Windows Virtual PC Gotcha</title><content type='html'>&lt;p&gt;Microsoft Virtual PC, for Windows Vista and earlier, automatically writes changes from the undo disk (VUD file) to the main drive (VHD file) when you shut a virtual machine (VM) down. So, when you’re setting up a VM or otherwise want to make permanent the changes you made while using it, you just shut it down and tell it to save the changes. When you do something where you don’t want the changes saved, such as doing a test install, you shut it down and tell it to discard the changes. Very straightforward.&lt;/p&gt;  &lt;p&gt;Windows Virtual PC, for Windows 7, doesn’t automatically write changes from the VUD to the VHD. When you shut a VM down and don’t tell it to discard changes, it continues to build up changes you make over various sessions to the VUD file. When you want to write the changes to the VHD, you have to specifically edit the settings for the VM, choose the Undo Disks page, and click Apply.&lt;/p&gt;  &lt;p&gt;Until I realized this, I couldn’t understand why a VM I had set up kept reverting to an earlier state. I started the VM, made some changes I wanted permanent, then shut it down, thinking that the changes would be written to the VHD (although I did notice that the shutdown process was a LOT faster than I was expecting). I then fired it up again, did a test install, and shut it down, discarding changes. When I started it back up again, it was at the original state, without the changes I thought I’d made permanent. I also noticed that the datetime stamp on the VHD file hadn’t changed.&lt;/p&gt;  &lt;p&gt;After a couple of rounds of this, I started poking around to see what I had to do to write changes to the VHD. That’s when I discovered the Apply button in the Undo Disks pages of the Settings dialog. Hopefully my pointing this out will save someone else some time.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2050442859583452561?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2050442859583452561/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2050442859583452561' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2050442859583452561'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2050442859583452561'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/12/another-windows-virtual-pc-gotcha.html' title='Another Windows Virtual PC Gotcha'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8790465243152186549</id><published>2010-12-09T13:25:00.001-06:00</published><updated>2010-12-09T13:25:46.605-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Updating Integration Components in a Windows Virtual PC VM</title><content type='html'>&lt;p&gt;I’ve been using Microsoft Virtual PC for several years. It’s great for testing installs, installing applications you don’t want polluting your host system, and lots of other things. I recently bought a new laptop with Windows 7, so I installed the latest version of Virtual PC, renamed to Windows Virtual PC.&lt;/p&gt;  &lt;p&gt;When starting some of my existing virtual machines (VMs), I was prompted to upgrade the integration components. Integration components make it easier to work with a VM because they allow access to resources of the host system including (new to the Windows 7 version) USB devices. In Windows XP VMs, it’s easy: choose Yes when asked and follow the prompts. In Windows Vista and Windows 7 VMs, however, it’s a little tricky:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Choose Yes when asked to update.&lt;/li&gt;    &lt;li&gt;In the dialog that appears allowing you to either run Setup.exe or open a folder, choose Open folder.&lt;/li&gt;    &lt;li&gt;In the Windows Explorer folder that appears, right-click Setup.exe and choose Run as Administrator.&lt;/li&gt;    &lt;li&gt;Follow the prompts until you get a dialog telling you that certain files are in use. Note the process ID for each one.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/TQEtN4ZdDUI/AAAAAAAAAVw/aK69w6ndVUM/s1600-h/image%5B3%5D.png"&gt;&lt;img 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" border="0" alt="image" src="http://lh4.ggpht.com/_xP_SR62fwds/TQEtOV-h3bI/AAAAAAAAAV0/b0KSqeYgdPQ/image_thumb%5B1%5D.png?imgmax=800" width="474" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Click Ctrl+Alt+Del in the VM menu and choose Start Task Manager and select the Processes page.&lt;/li&gt;    &lt;li&gt;If you don’t see a PID column, select the Select Columns function from the View menu, turn on PID, and click OK.&lt;/li&gt;    &lt;li&gt;Click the PID column to sort on process ID.&lt;/li&gt;    &lt;li&gt;Click the Show processes from all users button.&lt;/li&gt;    &lt;li&gt;Select each of the process IDs for the files in use and click End Process.&lt;/li&gt;    &lt;li&gt;Carry on with the rest of the installation process (it’ll require a couple of restarts for your VM).&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;One thing I don’t like about Windows Virtual PC is that it doesn’t support dragging and dropping files from your host system to the VM window and vice versa. Instead, with integration enabled, you have to open Windows Explorer, navigate to the appropriate drive on your host system, and copy files to and from that way. Not a huge problem but more work than with the older Virtual PC.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8790465243152186549?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8790465243152186549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8790465243152186549' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8790465243152186549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8790465243152186549'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/12/updating-integration-components-in.html' title='Updating Integration Components in a Windows Virtual PC VM'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_xP_SR62fwds/TQEtOV-h3bI/AAAAAAAAAV0/b0KSqeYgdPQ/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2172547802865432663</id><published>2010-12-08T16:29:00.001-06:00</published><updated>2010-12-08T16:29:42.883-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='64-bit'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>Microsoft Office 2010 Gotcha</title><content type='html'>&lt;p&gt;I have a nice new shiny toy: an Asus G73JW laptop with an Intel i7-740QM quad core processor, Windows 7 Pro (64-bit), 17.3” LED display, 8 GB of RAM, a 80 GB solid state primary drive, and a 500 GB secondary drive. Of course, the bad thing about getting a new system is the time it takes to get it set up just so, but I have a checklist I work from to make the setup straightforward. Things were going great until today. Emailing from Stonefield Query using MAPI (which means it goes through Outlook) and reading Excel spreadsheets using the Excel ODBC driver no longer work.&lt;/p&gt;  &lt;p&gt;Rick Schummer &lt;a href="http://rickschummer.com/blog2/2010/11/windows-7-gotcha-with-visual-foxpro-apps/"&gt;blogged&lt;/a&gt; about issues with a client who upgraded to Windows 7 and Microsoft Office 2010. My issues aren’t the same, but are related: I foolishly chose to install the 64-bit version of Office rather than the 32-bit version, and now my 32-bit apps no longer work with it. I guess this falls into the DOH! category. Hopefully if you’re setting up a new system or upgrading an existing one, you’ll be a little smarter than me.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2172547802865432663?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2172547802865432663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2172547802865432663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2172547802865432663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2172547802865432663'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/12/microsoft-office-2010-gotcha.html' title='Microsoft Office 2010 Gotcha'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1728300293745698632</id><published>2010-11-26T16:56:00.001-06:00</published><updated>2010-11-26T16:56:02.684-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='PEM Editor'/><title type='text'>PEM Editor Blog</title><content type='html'>&lt;p&gt;As you likely already know, Jim Nelson has created what’s probably the most important and time-saving utility for VFP ever: PEM Editor. PEM Editor, available from &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt;, is an incredible kitchen-sink of a tool. It started life as a replacement for the Edit Property/Method dialog but since then has mushroomed into a complete object editing tool. It can replace not only Edit Property/Method but also New Property/Method, the Properties window, the Document View window, the Beautify functionality, and so much more. It has customizable property editors, filters for the PEM list, and hundreds of other features. Jim did a presentation on PEM Editor at &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; 2009 and several user groups and Cathy Pountney did one at this year’s Southwest Fox as well as the German DevCon and several user groups.&lt;/p&gt;  &lt;p&gt;Recently, Jim started a &lt;a href="http://pemeditor.blogspot.com/"&gt;blog&lt;/a&gt; for all things related to PEM Editor. He’s posted release notes for new versions, tips and tricks, and other ways to get the most out of this tool. Highly recommended reading!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1728300293745698632?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1728300293745698632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1728300293745698632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1728300293745698632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1728300293745698632'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/11/pem-editor-blog.html' title='PEM Editor Blog'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6267887555550175057</id><published>2010-11-16T12:03:00.001-06:00</published><updated>2010-11-16T12:03:28.287-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>More 2010 Lifetime Achievement Award Recipients</title><content type='html'>&lt;p&gt;Last week at the &lt;a href="http://devcon.dfpug.de/"&gt;German DevCon&lt;/a&gt;, two more long-time VFP gurus were given &lt;a href="http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP"&gt;Lifetime Achievement&lt;/a&gt; awards: &lt;a href="http://devcon.dfpug.de/veran/konfprog/konfprog_2010/redner/redner_d.htm#woody"&gt;Jürgen Wondzinski&lt;/a&gt; (aka wOOdy) and &lt;a href="http://devcon.dfpug.de/veran/konfprog/konfprog_2010/redner/redner_d.htm#Christof_Wollenhaupt"&gt;Christof Wollenhaupt&lt;/a&gt;. Congratulations to both! The FoxWiki page hasn’t been updated yet but hopefully will soon.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6267887555550175057?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6267887555550175057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6267887555550175057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6267887555550175057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6267887555550175057'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/11/more-2010-lifetime-achievement-award.html' title='More 2010 Lifetime Achievement Award Recipients'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4668632743975313267</id><published>2010-11-09T15:36:00.001-06:00</published><updated>2010-11-09T15:36:04.721-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2010: Days 3 and 4</title><content type='html'>&lt;p&gt;I woke up Sunday at 4:30 a.m. For reasons I still don’t understand, I was really nervous about the speeches I was to give about Lisa and Rick at the closing session. I had slides showing their bios and photos in the closing session (unbeknownst to Rick, I had slipped in his slide after he, Tamar, and I reviewed them) but wanted to say something personal about both of them, and figured it would work better if Tamar worked the slides while I spoke. It suddenly occurred to me that if Tamar went one slide too far while I was speaking about Lisa, Rick’s slide would appear and spoil the surprise. So, I added a “But wait … there’s more” slide as a buffer between Lisa’s and Rick’s. I think this gives you an idea of how much I was obsessing about this!&lt;/p&gt;  &lt;p align="left"&gt;After what seemed like forever composing the speeches in my head, I went down for breakfast and my last presentation, the second instance of my Cool Controls session. I was chatting with people between sessions, so I was late coming into &lt;a href="http://www.swfox.net/CathyPountney.aspx"&gt;Cathy Pountney’s&lt;/a&gt;&amp;#160;&lt;a href="http://www.swfox.net/sessions.aspx#fxReports_-_Sharing_Custom_Report_Features"&gt;fxReports - Sharing Custom Report Features&lt;/a&gt;, but I’m glad I went. Cathy is working on some very cool stuff: a way for VFP developers to share custom reporting features, including reporting effects and custom Report Designer dialog pages. She’s releasing it as a new VFPX project in the next little while. This actually fits perfectly into work I’ve done with &lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; and a new VFPX project I recently launched, &lt;a href="http://vfpx.codeplex.com/wikipage?title=FRXTabs"&gt;FRXTabs&lt;/a&gt;. After the session, Cathy and I discussed some ways we can integrate the two.&lt;/p&gt;  &lt;p&gt;I then went to &lt;a href="http://www.swfox.net/SteveEllenoff.aspx"&gt;Steve Ellenoff’s&lt;/a&gt;&amp;#160;&lt;a href="http://www.swfox.net/sessions.aspx#Integrating_Windows_7_Taskbar_Functionality_into_VFP_Applications"&gt;Integrating Windows 7 Taskbar Functionality into VFP Applications&lt;/a&gt; session. From its description, it was the session I was most looking forward to seeing because I want to add Windows 7 functionality to Stonefield Query and figured Steve could jumpstart my work. I wasn’t disappointed; as I told Steve afterward, this session paid for the conference for me. He showed how, using a library he’s created and released as a &lt;a href="http://vfpx.codeplex.com/wikipage?title=Win7TLib"&gt;VFPX project&lt;/a&gt;, you can with just a few lines of code support Taskbar jumplists, progress bars, and much more. About every minute in his presentation, I came up with another idea of how to use this library to add new functionality to my apps.&lt;/p&gt;  &lt;p&gt;Finally, it was time for the closing session. Rather than describing it in detail, I suggest you &lt;a href="http://www.youtube.com/user/rschummer?feature=mhum#p/u"&gt;watch it&lt;/a&gt; and you can read &lt;a href="http://spacefold.com/lisa/post/2010/10/17/Legacy-is-a-good-thing.aspx"&gt;Lisa’s&lt;/a&gt; and &lt;a href="http://rickschummer.com/blog2/2010/10/foxpro-lifetime-achievement-award-recipient/"&gt;Rick’s&lt;/a&gt; blogs about it. Lisa’s video was great, even if it started on the wrong foot thanks to Windows Media Player changing its mind and deciding to play a &lt;a href="http://www.swfox.net/videos/tequila.mp3"&gt;comedy audio file&lt;/a&gt; on my system instead of Lisa’s video. It was also great seeing the huge ovation Lisa deservedly got, and I was very pleased that her husband Colin Nicholls could be there to watch her receive the award. But the best part was definitely Rick’s reaction to the award. He was literally speechless and quite choked up. I’m amazed he even managed to get through the next part of the session. Afterward, I saw his Mom come up to him and give him a hug; that was my favorite moment of the entire conference.&lt;/p&gt;  &lt;p&gt;As usual, Sunday afternoon is pretty anti-climactic: tearing down projectors and stands, cleaning up the registration booth, a post-conference briefing with our main hotel contact Sharon, and a Geek Gatherings meeting to discuss 2011 (yes, we actually start planning for next year the day the conference ends). It’s kind of sad in a way, because we’ve had so much fun over the past several days, talking with friends we only see once a year, knowing that’s it’s over for another year.&lt;/p&gt;  &lt;p&gt;However, there was still fun to be had. Shortly after our last meeting ended, we took the speakers out for dinner as a small way of saying thanks for all their hard work preparing and presenting their sessions. This year, we went to &lt;a href="http://www.gordonbiersch.com/locations/gilbert-az"&gt;Gordon Biersch&lt;/a&gt; and had a great meal and some very tasty beer. Afterward, it was out to the poolside again, but I headed to bed about 11:00 exhausted.&lt;/p&gt;  &lt;p&gt;The next day was the &lt;a href="http://www.swfox.net/workshops.aspx"&gt;VFP to Silverlight workshop&lt;/a&gt; presented by &lt;a href="http://www.swfox.net/UweHabermann.aspx"&gt;Uwe Habermann&lt;/a&gt; and &lt;a href="http://www.swfox.net/VenelinaJordanova.aspx"&gt;Venelina Jordanova&lt;/a&gt;. More than half of the attendees stayed for this workshop, which was great to see. Unfortunately, I had a couple of client issues I had to resolve so I didn’t pay as much attention to the presentations as I’d liked. Fortunately, Uwe and Venelina handed out memory sticks with all of the presentations, sample code, and even installers for Microsoft Visual Studio Express and the Silverlight tools, so I can go over the materials when I get a chance. One of the cool things that went on was the back channel of communication using Twitter by some of the attendees. We even picked a place for lunch (In ‘n’ Out Burger, which I hadn’t been to before) without saying a word. That night, a group of about 15 went back to the Mexican restaurant I’d been to Saturday night and we had another fun evening of food, friendship, and margaritas. After we got back to the hotel, a group of us had some drinks, checked out some hilarious but definitely NSFW t-shirts online (I was laughing so hard I almost couldn’t breathe), and checking out some places in Brazil Cesar Chalom showed us on Google Maps.&lt;/p&gt;  &lt;p&gt;So, another year of Southwest Fox is over. Every year, the conference seems to get better and better. We had a few challenges this year—a new hotel at the last minute and finding a speaker to replace Craig Boyd late in the game, which &lt;a href="http://www.swfox.net/JodyMeyer.aspx"&gt;Jody Meyer&lt;/a&gt; did an excellent job of—but it’s always fun and worth all of the effort we put into planning it. Stay tuned for an announcement about Southwest Fox 2011 and I hope to see you there next year!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4668632743975313267?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4668632743975313267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4668632743975313267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4668632743975313267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4668632743975313267'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/11/southwest-fox-2010-days-3-and-4.html' title='Southwest Fox 2010: Days 3 and 4'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2537765828809606114</id><published>2010-11-07T10:04:00.001-06:00</published><updated>2010-11-07T10:04:02.654-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='PEM Editor'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox: Day 2</title><content type='html'>&lt;p&gt;As I hinted at in my previous blog post, sleeping was an issue for me at Southwest Fox this year. I woke up at 5:00 on Saturday, my head buzzing with what I wanted to say at the closing session on Sunday. I read for an hour or so to calm down.&lt;/p&gt;  &lt;p&gt;I had the first timeslot of the day (moving it back from 8:00 to 8:30 last year was a very popular decision!) and presented my &lt;a href="http://www.swfox.net/sessions.aspx#Cool_Controls_for_Your_Applications"&gt;Cool Controls for Your Applications&lt;/a&gt; session. I was even more nervous about this than the ThemedControl session; again, I’d practiced it several times and had it down cold, but would attendees think the controls were as cool as the title promised? Fortunately, that turned out to be the case; the evals were even more positive than for the ThemedControls session and I’ve had several emails from folks afterward who told me they’ve already implemented some of the ideas presented in their applications.&lt;/p&gt;  &lt;p&gt;I started by explaining that this session had the same theme as my ThemedControls session: there’s no excuse for creating boring-looking VFP apps. I presented each of the controls in this session in a similar manner: a demo of what it looks like, a brief discussion of how it works (with a detailed discussion in the white paper for those interested in looking under the hood), and a cookbook-like explanation of how to implement it.&lt;/p&gt;  &lt;p&gt;The first was a simple control I wrote several years ago but is used in lots of places (not only my apps but also in the VFPX PEM Editor): a splitter that allows the user to adjust the relative sizes of the resizable controls (listboxes, editboxes, grids, etc.) in your forms. Next, I showed a control I call a “combotree” because it combines a combobox with a TreeView to provide a control you can use to display hierarchical data or a lot of checkboxes without taking up much screen real estate. This control is also used in PEM Editor and lots of places in my apps. I then showed the &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt; PopMenu project and how it can be used to create Microsoft Office-like menus in your apps. I spent some time showing how to use &lt;a href="http://www.swfox.net/PaulMrozowski.aspx"&gt;Paul Mrozowski’s&lt;/a&gt; RCSDateTimePicker as a replacement for the Microsoft DateTime Picker ActiveX control for date data entry, including some enhancements I added allowing you to select a range of dates. Next up was Ctl32_BalloonTip, one of the many controls in Carlos Alloatti’s definitely cool &lt;a href="http://www.ctl32.com.ar/"&gt;Ctl32&lt;/a&gt; library. Ctl32_BalloonTip replaces plain old boring tooltips with attractive “balloon” tips that you also have more control over. I finished by showing how another of Carlos’s controls, Ctl32_ProgressBar, gives a Vista/Windows 7 appearance to progress bars in your apps. The images below show some of these controls in action:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/TNbN2r4gNHI/AAAAAAAAAVI/LftPrF3LmMg/s1600-h/Office%20PopMenu%5B4%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Office PopMenu" border="0" alt="Office PopMenu" src="http://lh5.ggpht.com/_xP_SR62fwds/TNbN3HSKQ_I/AAAAAAAAAVM/Wx0FjzesUDQ/Office%20PopMenu_thumb%5B2%5D.png?imgmax=800" width="318" height="235" /&gt;&lt;/a&gt; &lt;a href="http://lh3.ggpht.com/_xP_SR62fwds/TNbN3yYNUdI/AAAAAAAAAVQ/e0qPtqMSlzc/s1600-h/RCSDTPicker%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="RCSDTPicker" border="0" alt="RCSDTPicker" src="http://lh5.ggpht.com/_xP_SR62fwds/TNbN4aIFgiI/AAAAAAAAAVU/ceQRn0BY2lw/RCSDTPicker_thumb%5B1%5D.png?imgmax=800" width="234" height="235" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/TNbN48eIT5I/AAAAAAAAAVY/XyoWyKJ-cQ8/s1600-h/Balloon%20Tips%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Balloon Tips" border="0" alt="Balloon Tips" src="http://lh4.ggpht.com/_xP_SR62fwds/TNbN5Q0AAVI/AAAAAAAAAVc/ztbz8bfyv7A/Balloon%20Tips_thumb.png?imgmax=800" width="235" height="244" /&gt;&lt;/a&gt; &lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/TNbN6LRfuXI/AAAAAAAAAVg/KbWsz1m-Wmo/s1600-h/testform1%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="testform1" border="0" alt="testform1" src="http://lh5.ggpht.com/_xP_SR62fwds/TNbN63R_JZI/AAAAAAAAAVk/R3FXL6bsqTo/testform1_thumb%5B1%5D.png?imgmax=800" width="335" height="243" /&gt;&lt;/a&gt; &lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/TNbN7sDYPXI/AAAAAAAAAVo/yYKYvboz-2g/s1600-h/Progress%20Bar%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Progress Bar" border="0" alt="Progress Bar" src="http://lh3.ggpht.com/_xP_SR62fwds/TNbN8f5_8JI/AAAAAAAAAVs/KEJwrnEOMEs/Progress%20Bar_thumb.png?imgmax=800" width="221" height="244" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;I ended up chatting with a few people so I missed a session in the next timeslot. As we told everyone in the keynote, that’s perfectly OK: you often get more out of a conference by the discussions with fellow developers than in the actual sessions, and every session has a white paper so you still have the content. I then presented my ThemedControls session for the second time in the slot before lunch.&lt;/p&gt;  &lt;p&gt;After lunch, I went to watch &lt;a href="http://www.swfox.net/UweHabermann.aspx"&gt;Uwe Habermann&lt;/a&gt; and &lt;a href="http://www.swfox.net/VenelinaJordanova.aspx"&gt;Venelina Jordanova&lt;/a&gt; present their &lt;a href="http://www.swfox.net/sessions.aspx#Silverlight_for_Internet_Applications"&gt;Silverlight for Internet Applications&lt;/a&gt; session. I’ve known Uwe and Venelina for several years, having met them at conferences in Prague and Germany. I liked the way they presented this session: they took turns talking and led the other into the next topic by asking questions an attendee would ask. I didn’t know much about Silverlight but was planning on attending the post-conference &lt;a href="http://www.swfox.net/workshops.aspx"&gt;VFP to Silverlight workshop&lt;/a&gt;, so this was a good overview of Silverlight and even went into details on creating your first project.&lt;/p&gt;  &lt;p&gt;The next session was Tamar’s &lt;a href="http://www.swfox.net/sessions.aspx#Collections:_Managing_Information_the_Object-Oriented_Way"&gt;Collections: Managing Information the Object-Oriented Way&lt;/a&gt;. I’ve worked with collections for years, but I saw Tamar’s session on &lt;a href="http://www.swfox.net/2009/sessions.aspx#Getting_Your_Head_Around_Business_Objects"&gt;business objects&lt;/a&gt; last year and this session was “part 2” of that, plus I enjoy Tamar’s take on things and figured I could pick up a few tips. During the session, I played a trick on Rick Schummer, who was right behind me. He had to leave the room for a couple of minutes, so he left his laptop on the seat and his bag on the floor. As soon as he walked out of the room, I quickly grabbed both and hid them under my chair. Even better, someone came in a moment later and sat on his now abandoned chair. When Rick came in, he looked panic-stricken: he thought the other person was sitting on his laptop, and looked all around for his stuff. I didn’t let him suffer for too long, and he let out a very relieved laugh when I handed him his laptop and bag. Hmm, I hope he doesn’t go all “Boyd” on me for this prank. As for Tamar, she did a nice job explaining the basics of collections and then showed a strong practical example of their use: a VFP version of the popular Sudoku game that uses several collection to manage cells, blocks, rows, columns, and the game itself.&lt;/p&gt;  &lt;p&gt;The last session of the day I attended was &lt;a href="http://www.swfox.net/ToniFeltman.aspx"&gt;Toni Feltman’s&lt;/a&gt;&amp;#160;&lt;a href="http://www.swfox.net/sessions.aspx#The_Pomodoro_Technique_-_A_New_Way_to_Improve_your_Productivity"&gt;The Pomodoro Technique&lt;/a&gt; session. I was looking forward to seeing this; Steve Bodnar had mentioned Pomodoro to me a couple of years ago so I was interested in learning what it was about. Toni discussed the problems of concentration and focus in a world of email, Twitter, Facebook, telephone calls, and teammate interruptions. Pomodoro was designed to allow you to plan your day in advance and focus on a set of tasks in 25-minute intervals, followed by a 3 to 5 minute break to catch up or relax before starting the next one. The idea is to boost your productivity by not letting distractions pull your concentration away from the tasks you need to get done without eliminating them completely. I know several attendees and speakers who’ve started using Pomodoro since seeing Toni’s presentation. I haven’t yet but hope to once I return from the German DevCon next week.&lt;/p&gt;  &lt;p&gt;Rick, his wife Therese, his parents, and I went to a Mexican restaurant at the SanTan mall for an excellent dinner. I had something I’ve never tasted before: a chile relleno enchilada, which was REALLY good. However, the main event of the night was up next: racing at the &lt;a href="http://www.f1racefactory.com/"&gt;F1 Race Factory&lt;/a&gt;. As usual, a good-sized crowd of Southwest Fox folk showed up for fun and competition. You can see photos from F1 taken by Venelina and Therese on the Southwest Fox &lt;a href="http://www.swfox.net/photos.aspx"&gt;photo page&lt;/a&gt;. For the past several years, Cathy Pountney, Rick, and I have had a friendly competition at F1 (“friendly” meaning there’s no exchange of gunfire). Cathy actually started it in 2006 by trashing Rick and I to all who’d listen after she beat us that year. Once again, the competition was fierce. None of us actually came in first (Rick Strahl is the perennial winner, followed this year by Cathy’s boyfriend Jim Knight), but we don’t care: it’s a race within a race for us. I had the fastest lap this year, followed by Rick and then Cathy. Because the F1 printer was down, we couldn’t see who had the fastest average lap (another measurement we use), so we assumed it was Rick since that’s a title he usually wins.&lt;/p&gt;  &lt;p&gt;Afterward, we headed back to the hotel pool to regale the others with our stories: who took who into the wall, who cut off who in the corner, and so on. I called it a night a little after midnight.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2537765828809606114?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2537765828809606114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2537765828809606114' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2537765828809606114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2537765828809606114'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/11/southwest-fox-day-2.html' title='Southwest Fox: Day 2'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_xP_SR62fwds/TNbN3HSKQ_I/AAAAAAAAAVM/Wx0FjzesUDQ/s72-c/Office%20PopMenu_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4759876385393615198</id><published>2010-11-07T08:48:00.001-06:00</published><updated>2010-11-07T09:01:19.695-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows API'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Southwest Fox 2010: Day 1</title><content type='html'>&lt;p&gt;I had an early start Friday, waking up at 5:30 a.m., partly because I was still on Central time and partly because I was going over in my mind the speeches I was to give at Sunday’s closing session for the FoxPro Lifetime Achievement Award presentations. Unfortunately, today was like sleeping in compared to the next two days.&lt;/p&gt;  &lt;p&gt;The first session I attended was &lt;a href="http://www.swfox.net/PaulMrozowski.aspx"&gt;Paul Mrozowski’s&lt;/a&gt;&amp;#160;&lt;a href="http://www.swfox.net/sessions.aspx#jQuery_for_VFP_Developers"&gt;jQuery for VFP Developers&lt;/a&gt;. Although I’ve seen a couple of introductory sessions on jQuery before, I have yet to do anything with it, which I hope to change soon. Paul’s session started by discussing the basics of JavaScript, then quickly moved into the jQuery library. He showed basic jQuery syntax, then discussed more complex uses, and finished the session showing some of the cool add-ons available for jQuery, including date-time controls and grids. This was a very inspiring session and made me wonder why I’ve waited so long to get started with jQuery.&lt;/p&gt;  &lt;p&gt;Next I went to &lt;a href="http://www.swfox.net/sessions.aspx#Extending_VFP_using_the_Web_Browser_Control"&gt;Extending VFP using the Web Browser Control&lt;/a&gt;, presented by &lt;a href="http://www.swfox.net/BoDurban.aspx"&gt;Bo Durban&lt;/a&gt;. Although I’ve used the Web Browser ActiveX control in my apps for several years, I’m always looking for new ideas, and definitely got some in this session. Bo showed a subclass of the control he’s created that adds several behaviors, including disabling the shortcut menu so the user can’t do things like View Source. I got several great tips from this session and have already implemented them in my apps.&lt;/p&gt;  &lt;p&gt;The last session of the morning was &lt;a href="http://www.swfox.net/EricSelje.aspx"&gt;Eric Selje's&lt;/a&gt; &lt;a href="http://www.swfox.net/sessions.aspx#The_Amazing_VFP2C32_Library"&gt;The Amazing VFP2C32 Library&lt;/a&gt;. I wanted to see this session for two reasons: Eric was one of our new speakers and although I’ve had a little exposure to VFP2C32 (it’s used in Carlos Alloatti’s excellent &lt;a href="http://www.ctl32.com.ar/"&gt;Ctl32&lt;/a&gt; library), I didn’t know much about it. Eric started by showing the complexities of calling some Windows API functions in VFP, and then showed how VFP2C32 makes it very easy because it simplifies the calls to those functions through an easy-to-use VFP wrapper. Because he was a little nervous, Eric stumbled on saying “VFP2C32” a couple of times, so he decided to call it “Fred” for the rest of the session. I liked that idea so much that when I mentioned VFP2C32 in my Themed Controls session (because Themed Controls uses Ctl32, which uses VFP2C32) and also stumbled saying it, I called it “Fred” too. Eric classified the various “Fred” functions by functionality and spent the rest of the session showing how it satisfies various needs in typical VFP applications. Eric’s white paper is an excellent resource for “Fred” because he’s documented the library in great detail. I definitely intend to replace some of my ugly Windows API calls with VFP2C32 functions since VFP2C32 is already included in my apps due to my use of Ctl32. Even cooler is thanks to prompting by Eric, the author of VFP2C32, Christian Ehlscheid, has now released it as a &lt;a href="http://vfpx.codeplex.com/wikipage?title=VFP2C32"&gt;VFPX&lt;/a&gt; project.&lt;/p&gt;  &lt;p&gt;After lunch, I presented my &lt;a href="http://www.swfox.net/sessions.aspx#A_Deep_Dive_into_the_VFPX_ThemedControls"&gt;A Deep Dive into the VFPX ThemedControls&lt;/a&gt; session. I was a little nervous about this session: I’d practiced it several times and had it down smooth, but I went over the time limit every time because, typical for me, I tried to jam too much information into the session. Sure enough, I had only five minutes left at the end and still had a couple of the themed controls to cover. Fortunately, because I was prepared for this, I left the ones I consider to be less useful for the end, so I quickly skipped through them. Sorry for anyone who wanted to spend more time on those controls; however, the white paper for the session has lots of details and samples you can play with.&lt;/p&gt;  &lt;p&gt;Although I didn’t plan this, it turned out that both of my sessions this year had a common theme: there’s no excuse for creating boring looking VFP apps. Using colorful modern icons, attractive fonts like Segoe UI (the system font for Windows Vista and 7), and various &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt; projects like GDIPlusX and ThemedControls, you can create applications that are as great looking as anything written in .Net or any other environment. As its name suggests, this session focused on Emerson Reed’s ThemedControls project. ThemedControls allows you to create themed forms in your application that allow the user to change color schemes as easily as they do in Microsoft Outlook. The image below uses several ThemedControls, including ThemedOutlookNavBar (the Outlook-like control at the left) and ThemedTitlePageFrame (the container at the right doesn’t look like a pageframe but it is).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_xP_SR62fwds/TNa8J1CpVhI/AAAAAAAAAVA/8YSC9cXt85U/s1600-h/Northwind%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Northwind" border="0" alt="Northwind" src="http://lh4.ggpht.com/_xP_SR62fwds/TNa8KsVTxSI/AAAAAAAAAVE/eqfu8MmgYa4/Northwind_thumb%5B3%5D.png?imgmax=800" width="462" height="330" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;I went through the basics of the ThemedControls library: how to download and install it, how to add it to your applications, what to deploy to your users, and so on. I then went through each of the controls, starting from the simple ThemedForm and ThemedContainer to the complex ThemedOutlookNavBar and ThemedExplorerBar, blowing through the less useful (in my opinion) ThemedToolbox and ThemedZoomNavBar, and finishing with a demo of the unfinished Ribbon control. Based on the audience feedback during the session and the evals afterward (I love the new online evals Rick, Frank, and Paul implemented this year!), I thought the session went well.&lt;/p&gt;  &lt;p&gt;Because I was chatting with folks after my session, I was late getting to &lt;a href="http://www.swfox.net/ChristofWollenhaupt.aspx"&gt;Christof Wollenhaupt’s&lt;/a&gt;&amp;#160;&lt;a href="http://www.swfox.net/sessions.aspx#How_the_Fox_is_Different"&gt;How the Fox is Different&lt;/a&gt; session. However, as usual, Christof blew me away with his incredibly deep knowledge of the internals of both VFP and .Net. (After the session, Bill Anderson said to me, “I’ve been working with FoxPro for 20 years. I know nothing.” and I felt as equally humbled.) Christof’s take-away point was that if you’re working in VFP, do it the VFP way, and if you’re working in .Net, do it the .Net way. He showed fundamental differences between VFP and .Net, not in terms of language and syntax, which are relatively easy to learn, but in philosophy, which takes much longer to understand. For example, VFP is object based (we do things with instances of classes) while .Net is class based (classes have a much bigger role than instances in .Net). In VFP, we’re used to using a framework and global objects such as an application object; in .Net, the “framework” is built in and there are no global objects in correctly written applications. This is one of these sessions where I’m going to have to read the white paper several times and think about what Christof has said before it truly sinks in.&lt;/p&gt;  &lt;p&gt;The last session of the day was dedicated to “bonus” sessions. I went to the “Show Us Your Apps, Part 1” session and was amazed as everyone else at the cool things people have done using VFP. Among the highlights were Jim Nelson showing his relatively new Code References replacement VFPX project, Cesar Chalom showing his &lt;a href="http://foxypreviewer.codeplex.com/"&gt;FoxyPreviewer&lt;/a&gt; replacement for the VFP report preview toolbar, and Bernard Bout showing some work he’s done recently integrating Silverlight into VFP apps.&lt;/p&gt;  &lt;p&gt;The plan was to have a dinner party out on the veranda of the conference center, but some unusual Phoenix weather—a sandstorm with high winds—nixed that at literally the last minute. Fortunately, the SanTan/Elegante staff quickly pulled together and moved everything inside the ballroom at record speed, so the party only started a few minutes late. The food, as it was at other meals, was fabulous, including two kinds of lasagna and an excellent caprese salad.&lt;/p&gt;  &lt;p&gt;More bonus sessions followed into the evening. I held a &lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; Developer meeting and went over some of the new features in our 4.0 version, including the brand new interface for Stonefield Query Studio (using many of the controls I covered in my ThemedControls and Cool Controls sessions), application views, new output types including Microsoft Excel PivotTable, and so on. I then showed a couple of new features we’re planning for version 4.1, including drilldown charts, dashboards, and % change between columns in a cross-tab. These got a very enthusiastic response!&lt;/p&gt;  &lt;p&gt;The session didn’t wind up until nearly 10:00 p.m., so I was pretty tired by now. I hung out by the pool (the replacement for the “grotto” of the Arizona Golf Resort that became the popular hang-out spot the last couple of years) for a while, but had to call it a night at about 11:30 because I had an 8:30 session.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4759876385393615198?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4759876385393615198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4759876385393615198' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4759876385393615198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4759876385393615198'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/11/southwest-fox-2010-day-1.html' title='Southwest Fox 2010: Day 1'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_xP_SR62fwds/TNa8KsVTxSI/AAAAAAAAAVE/eqfu8MmgYa4/s72-c/Northwind_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3116569266619237438</id><published>2010-10-23T10:43:00.001-06:00</published><updated>2010-10-23T10:43:58.132-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2010: Pre-Conference</title><content type='html'>&lt;p&gt;We had an early start on Thursday because registration opened at 7:45 and pre-conference sessions started at 9:00. Thanks to a streamlined registration process we came up with last year, registration was fast and easy. This year, in addition to the conference bag, sponsor materials, conference t-shirt, and other goodies, attendees could take any or all of three books generously provided by &lt;a href="http://www.hentzenwerke.com/"&gt;Hentzenwerke Publishing&lt;/a&gt;: &lt;a href="http://www.hentzenwerke.com/debugvfp.htm"&gt;Debugging Visual FoxPro Applications&lt;/a&gt;, &lt;a href="http://www.hentzenwerke.com/sdg3.htm"&gt;The Software Developer's Guide, 3rd Edition&lt;/a&gt;, and &lt;a href="http://www.hentzenwerke.com/ftale.htm"&gt;FoxTales: Behind the Scenes at Fox Software&lt;/a&gt;. Registration is a fun time for me, as it’s a chance to meet new attendees and renew acquaintances with previous attendees and friends. We spent most of the day in the registration center, catching up on emails or chatting during slow times. Our first taste of the conference center food was a simple lunch of build-your-own sandwiches and salad, which was very tasty.&lt;/p&gt;  &lt;p&gt;After the last pre-conference session ended, we met all the speakers at 4:30 for an orientation meeting. Many people were wondering how I was going to get even with Craig Boyd after his only mildly provoked Nerf gun assault on me last year (if you haven’t see it, look for “hennig swfox” on &lt;a href="http://www.youtube.com/"&gt;YouTube&lt;/a&gt; for one of the several videos available). For a variety of reasons, including the fact that he and I have both had a fairly challenging year personally and that his was about as close to the perfect prank as it comes and would be tough to top, I decided not to do much to him this year. In fact, he was quite concerned about what he thought I had planned, and that by itself seemed like fun. However, one surprise I had for him regarded the speaker shirt. Rick told him that due to his getting on board as the keynote speaker after we’d submitted the order for shirts, we didn’t have one for him. That, of course, was not true. We placed a special order of pink t-shirts for the female speakers this year, and included one for him in the order (we also ordered a regular shirt for him). It was fun seeing his face when I handed him his pink “speaker shirt”. Fortunately, Craig is a great sport and immediately agreed to wear it at the keynote.&lt;/p&gt;  &lt;p&gt;After a quick bite to eat, it was time to get the conference started. We started the keynote thanking attendees for coming and pointing out that there were 99 attendees from 16 different countries this year, about a 15% increase from last year’s 87 from 7 countries. We then introduced the speakers and thanked sponsors and other folks who helped us out. After going over some logistics for the conference, I invited Cathy Pountney up to the front, where she presented Rick with the trophy for being the #1 ranked speaker last year. Even better, she filled the trophy with Rick’s favorite snack, Ding Dongs. Rick is a very humble person, so he was embarrassed and immediately pointed out that the difference between first and last is fractions of a point, sort of like the hundredths of a second that separates the fastest runners in the world at the Olympics.&lt;/p&gt;  &lt;p&gt;After a few more logistical things, Rick presented the &lt;a href="http://doughennig.blogspot.com/2010/10/2010-vfpx-administrators-award.html"&gt;VFPX Administrators Award&lt;/a&gt; to Jim Nelson and Francis Faure for their contributions to the VFP community through their projects on VFPX. We then introduced the &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;2010 Ceil Silver Ambassadors&lt;/a&gt;, Bernard Bout and Cesar Chalom. As I’m sure is the case for many others, I was thrilled to meet them both, Cesar for the first time (Rick and I had previously met Bernard at OzFox 2007 in Sydney, Australia).&lt;/p&gt;  &lt;p&gt;Finally, the moment everyone was waiting for: Craig Boyd’s keynote. Rick introduced Craig while a couple of funny pictures of Craig, one in bunny ears and the other in a headdress, showed on the screens. In fact, here they are in case you missed them:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_xP_SR62fwds/TMMQvcbvFCI/AAAAAAAAAUw/He0ZH1mEo2I/s1600-h/image%5B6%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_xP_SR62fwds/TMMQwVN_bKI/AAAAAAAAAU0/1VMn7eW71Cg/image_thumb%5B2%5D.png?imgmax=800" width="124" height="184" /&gt;&lt;/a&gt;&amp;#160; &lt;a href="http://lh3.ggpht.com/_xP_SR62fwds/TMMQx0AMS5I/AAAAAAAAAU4/DhXis7icwD4/s1600-h/image%5B5%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_xP_SR62fwds/TMMQy1UHnQI/AAAAAAAAAU8/oFvIcbc0oNI/image_thumb%5B1%5D.png?imgmax=800" width="244" height="185" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Craig did not disappoint. He was his usual manic, hilarious self, showing doctored photos of Tamar as a warrior princess and Rick as an astronaut. However, he saved his best stuff for me, doing a twisted “This is Your Life” presentation. Rather than trying to describe it, it’s probably better if you just watch it: &lt;a href="http://www.ustream.tv/channel/swfoxtv"&gt;http://www.ustream.tv/channel/swfoxtv&lt;/a&gt;. He then got into the real meat of his presentation: the value proposition of VFP. As a vivid demonstration of “value”, Craig and several volunteers blasted the room with thousands of pieces of paper, some of which had prizes written on them. The prizes ranged from an MSDN subscription worth almost $12,000 to “hug from Doug”, which several people did collect on and many of which are hoarding for future reimbursement. Craig did this to point out that although the paper was worthless, there was enough value in the prizes that everyone scrambled to pick them all up. He went on to discuss that although there are alternatives to VFP, you can still make a great living and create great solutions for your clients using this product we know and love. Thanks, Craig, for the best and most entertaining Southwest Fox keynote ever!&lt;/p&gt;  &lt;p&gt;Afterward, we all congregated in the adjacent ballroom for the trade show reception. It gave everyone a chance to chat with the &lt;a href="http://www.swfox.net/exhibitors.aspx"&gt;exhibitors&lt;/a&gt;, a couple of which (Christoph with his Guineu and AFP and Thierry Nivelet of FoxInCloud) were new this year, and hang out with new and old friends. A good-sized group then moved to the bar and pool area for the first of several nights of socializing. I packed it in about midnight after a very long day.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3116569266619237438?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3116569266619237438/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3116569266619237438' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3116569266619237438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3116569266619237438'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/southwest-fox-2010-pre-conference.html' title='Southwest Fox 2010: Pre-Conference'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_xP_SR62fwds/TMMQwVN_bKI/AAAAAAAAAU0/1VMn7eW71Cg/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6550307736377585363</id><published>2010-10-23T09:48:00.001-06:00</published><updated>2010-10-23T09:48:06.055-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2010: Getting Ready</title><content type='html'>&lt;p&gt;As per usual, Rick Schummer, his wife Therese, Tamar Granor, her husband Marshal, and I arrived in Phoenix on Tuesday, Oct. 12 to get ready for this year’s &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; conference. We spent Tuesday doing our usual errands: picking up shirts (speaker shirts, conference t-shirts, and polo shirts for those who’d ordered them), picking up sign boards for the rooms, etc. We also met Harold Wong of Microsoft to pick up some giveaways he offered us: a wireless keyboard and mouse, a copy of Windows 7, pens, etc.&lt;/p&gt;  &lt;p&gt;While it seemed like we were doing our usual things this year, there were some differences. The main one is that I was keeping a big secret from Rick: while I’d previously told him that Lisa Slater Nicholls was the recipient of the &lt;a href="http://doughennig.blogspot.com/2010/10/2010-lifetime-achievement-award.html"&gt;2010 FoxPro Lifetime Achievement Award&lt;/a&gt;, I didn’t tell him that he was also a recipient. This lead to a little bit of anxiety for me: I ordered the awards for the Lifetime Achievement recipients but also for the &lt;a href="http://doughennig.blogspot.com/2010/10/2010-vfpx-administrators-award.html"&gt;VFPX Administrators Award&lt;/a&gt;, which he was going to hand out. All of our materials are shipped to Frank Perez Sr. (the father of Frank Perez, one of Rick’s employees), who lives in the Phoenix area. Frank Sr. usually delivers the items Tuesday night. Last year, Rick didn’t call me when Frank Sr. arrived and instead loaded everything into his room. I was worried that Rick would see the awards box, open it, and spoil the surprise. Fortunately, Rick and Therese’s room was pretty full with boxes of shirts and materials they’d brought, so I innocently volunteered my room to hold the stuff Frank delivered. Besides, I told Rick, I needed to inventory the raffle prizes sent by the various sponsors.&lt;/p&gt;  &lt;p&gt;I was also planning to keep it a secret from Therese, but a golden opportunity presented itself: Rick’s parents, Phil and Carole, were also in Phoenix so they could go to Sedona with Rick and Therese after the conference. It would be perfect if his parents could be there when I presented the award to Rick, so I told Therese about it and she promised to make sure they were at the closing session.&lt;/p&gt;  &lt;p&gt;With all the plans in place, we went for a great dinner at the Cheesecake Factory (becoming a Tuesday night tradition with us), including Rick’s parents and Rick Strahl, who was in town for his pre-conference West Wind Web Connection training. As usual, we all turned in early because we had a long day; in Rick’s case, there was no Monday night as he didn’t sleep at all getting ready to leave.&lt;/p&gt;  &lt;p&gt;We started Wednesday with a very nice breakfast at the hotel, then met the hotel staff for a briefing. I was a little nervous (which as you may start to realize was an ongoing thing for me this year) because we’d changed hotels very late in the game due to financial problems at our previous location. We’d been at the Arizona Golf Resort the past three years and their excellent service and commitment to ensuring things were perfect for us set the bar very high. That coupled with the fact that the new location, the Legado Hotel and SanTan Conference Center, had only been open for two months and we were their first large conference made me wonder how things would turn out. However, I was impressed at our meeting with the staff: in addition to the people we’d be dealing with daily (Monique, the head of catering, Keith, the operations manager, and the chef whose name I unfortunately forget), the general manager of the hotel and the owner of the property were both there.&lt;/p&gt;  &lt;p&gt;We then started organizing for the conference: getting binders put together (we only needed 25 this year because most people went for the green option: the online conference guide), getting projectors set up, assembling bags, going over the opening and closing session contents, and so forth. We also discovered the first benefit of the new location: it’s very close to a large mall with a ton of restaurants, and there’s a free shuttle to and from the mall. We had a very nice lunch at the Paradise Bakery, which specializes in sandwiches, soup, and salads.&lt;/p&gt;  &lt;p&gt;We spent the afternoon continuing our preparations, and started to see how committed the staff was to making sure things went well for us. In fact, over the next few days, we discovered that many of the staff worked longer hours than we did. We joked that they must have cots set up because we’d see Monique and Keith before 7:00 a.m. and after 10:00 p.m. at the conference center.&lt;/p&gt;  &lt;p&gt;That evening, we met some of the attendees and speakers who started to arrive for the pre-conference day. We ended going out for dinner with a fairly large group at the Brio Italian restaurant at the mall. The meal and company were excellent. Thanks to Dave Hanna for being a good sport, making multiple trips between the hotel and mall with his car to accommodate all of us.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6550307736377585363?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6550307736377585363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6550307736377585363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6550307736377585363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6550307736377585363'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/southwest-fox-2010-getting-ready.html' title='Southwest Fox 2010: Getting Ready'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5778192210491047228</id><published>2010-10-22T14:12:00.001-06:00</published><updated>2010-10-22T14:12:27.736-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2010 VFPX Administrators Award</title><content type='html'>&lt;p&gt;The VFPX Administrators Award is an annual award given by the VFPX Administrators (Craig Boyd, Rick Schummer, and Doug Hennig) to recognize those people who made outstanding contributions to the VFP community through their projects on &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt;. The nominees this year were:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Jim Nelson for his work on PEM Editor, Code References, and FoxChart Tools (add-ons) &lt;/li&gt;    &lt;li&gt;David Holden for SubFox &lt;/li&gt;    &lt;li&gt;Andrew Ross MacNeill for Code Analyst &lt;/li&gt;    &lt;li&gt;Emerson Santon Reed for Themed Controls &lt;/li&gt;    &lt;li&gt;Francis Faure for the VFP 9 SP2 Help file and VFP 9.0 Localization in French &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;At the keynote for Southwest Fox 2010, the awards were given to Jim Nelson and Francis Faure (to be delivered by Thierry Nivelet). You can watch a video of the keynote at &lt;a title="http://www.ustream.tv/channel/swfoxtv" href="http://www.ustream.tv/channel/swfoxtv"&gt;http://www.ustream.tv/channel/swfoxtv&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Congratulations to both Jim and Francis and thanks for all your efforts in making VFPX the future of VFP.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5778192210491047228?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5778192210491047228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5778192210491047228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5778192210491047228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5778192210491047228'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/2010-vfpx-administrators-award.html' title='2010 VFPX Administrators Award'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3545490470844369662</id><published>2010-10-20T16:43:00.001-06:00</published><updated>2010-10-20T16:43:07.521-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2010 Lifetime Achievement Award Recipients</title><content type='html'>&lt;p&gt;It was my great pleasure to announce at &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2010&lt;/a&gt; the recipients of the &lt;a href="http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP"&gt;2010 Lifetime Achievement Award&lt;/a&gt;: &lt;a href="http://spacefold.com/lisa/post/2010/10/17/Legacy-is-a-good-thing.aspx"&gt;Lisa Slater Nicholls&lt;/a&gt; and &lt;a href="http://www.whitelightcomputing.com/home.asp"&gt;Rick Schummer&lt;/a&gt;. The stars must have been perfectly aligned because Lisa’s husband, well-known FoxPro guru Colin, and Rick’s wife Therese and parents Phil and Carole were in attendance. I obviously had to tell Lisa in advance so she could come to Phoenix but Rick was taken completely by surprise. In fact, I’ve never seen him speechless before.&lt;/p&gt;  &lt;p&gt;Congratulations, Rick and Lisa; I can’t think of more deserving people and in Lisa’s case, long overdue. Hopefully we'll have some video uploaded soon that shows them receiving their awards; check &lt;a href="http://www.swfox.net/videos.aspx"&gt;http://www.swfox.net/videos.aspx&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3545490470844369662?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3545490470844369662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3545490470844369662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3545490470844369662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3545490470844369662'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/2010-lifetime-achievement-award.html' title='2010 Lifetime Achievement Award Recipients'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3443540874096592163</id><published>2010-10-06T15:55:00.001-06:00</published><updated>2010-10-06T15:55:01.180-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>Southwest Fox is Next Week</title><content type='html'>&lt;p&gt;&lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2010&lt;/a&gt; starts next Thursday, October 14. However, I’m actually heading to Phoenix on Tuesday, as are Rick, Tamar, and their spouses Therese and Marshal, because we have lots of set up and finalizing to do. I’m going to be quite busy during the conference: in addition to my sessions &lt;a href="http://www.swfox.net/sessions.aspx#A_Deep_Dive_into_the_VFPX_ThemedControls"&gt;A Deep Dive into the VFPX ThemedControls&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx#Cool_Controls_for_Your_Applications"&gt;Cool Controls for Your Applications&lt;/a&gt;, I’m also hosting a Stonefield Query Developer Meeting on Friday night at 8:30, showing some cool new features we’ve planned for version 4.1, and am showing a new VFPX project, &lt;a href="http://vfpx.codeplex.com/wikipage?title=FRXTabs"&gt;FRXTabs&lt;/a&gt;, at the Show Us Your Apps session Friday afternoon at 5:15.&lt;/p&gt;  &lt;p&gt;I’m looking forward to seeing old friends, meeting new ones, attending sessions, giving sessions, talking to this year’s &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;Ceil Silver ambassadors&lt;/a&gt;, handing out the 2010 FoxPro Lifetime Achievement Award, and generally having a great time. See you there next week!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3443540874096592163?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3443540874096592163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3443540874096592163' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3443540874096592163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3443540874096592163'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/southwest-fox-is-next-week.html' title='Southwest Fox is Next Week'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7849992505349429623</id><published>2010-10-06T15:44:00.001-06:00</published><updated>2010-10-06T15:44:23.331-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>Final Thoughts on Looking at Stonefield Query</title><content type='html'>&lt;p&gt;George Jensen of CustomerFX has concluded his series of posts about his experience learning Stonefield Query. Check out his articles: &lt;a href="http://customerfx.com/pages/reporting/2010/07/19/looking-at-stonefield-query-for-sage-saleslogix.aspx"&gt;part 1&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/07/27/looking-at-stonefield-query-for-sage-saleslogix-part-2.aspx"&gt;part 2&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/08/03/looking-at-stonefield-query-for-sage-saleslogix-part-3.aspx"&gt;part 3&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/08/11/looking-at-stonefield-query-for-sage-saleslogix-part-4.aspx"&gt;part 4&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/09/01/looking-at-stonefield-query-for-sage-saleslogix-part-5.aspx"&gt;part 5&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/09/23/looking-at-stonefield-query-for-sage-saleslogix-part-6.aspx"&gt;part 6&lt;/a&gt;, and &lt;a href="http://customerfx.com/pages/reporting/2010/10/06/final-thoughts-on-stonefield-query.aspx"&gt;part 7&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7849992505349429623?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7849992505349429623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7849992505349429623' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7849992505349429623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7849992505349429623'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/final-thoughts-on-looking-at-stonefield.html' title='Final Thoughts on Looking at Stonefield Query'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2585260606082921955</id><published>2010-10-01T10:52:00.001-06:00</published><updated>2010-10-01T10:52:33.471-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>MVP Award for 2010</title><content type='html'>&lt;p&gt;I am once again honored to be named a Microsoft Most Valuable Professional (MVP), for the 15th consecutive year. Congratulations to the other 14 award recipients (down significantly from previous years, I’m afraid); see &lt;a href="https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Visual+FoxPro"&gt;https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Visual+FoxPro&lt;/a&gt; for a complete list of VFP MVPs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/SsTgjET8bFI/AAAAAAAAASk/l8I1zQvSjfg/s1600-h/image%5B2%5D.png"&gt;&lt;img title="image" border="0" alt="image" src="http://lh6.ggpht.com/_xP_SR62fwds/SsTgjlTbxcI/AAAAAAAAASo/VL_GhSbMyIk/image_thumb.png?imgmax=800" width="180" height="76" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2585260606082921955?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2585260606082921955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2585260606082921955' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2585260606082921955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2585260606082921955'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/10/mvp-award-for-2010.html' title='MVP Award for 2010'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_xP_SR62fwds/SsTgjlTbxcI/AAAAAAAAASo/VL_GhSbMyIk/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6151837822800361809</id><published>2010-09-16T10:30:00.001-06:00</published><updated>2010-09-16T10:30:29.296-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Rehearsing is for professionals</title><content type='html'>&lt;p&gt;Seth Godin’s recent blog post, &lt;a href="http://sethgodin.typepad.com/seths_blog/2010/09/rehearsing-is-for-cowards.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+typepad%2Fsethsmainblog+%28Seth%27s+Blog%29"&gt;Rehearsing is for cowards&lt;/a&gt;, makes the point that presentations work better when the presenter hasn’t rehearsed but rather “explores” the subject. That’s possibly true for presentations on soft subjects or those given from the heart, although I’d argue that you have to at least have a goal of hitting certain points and moving in a certain direction or else you’re just rambling. However, that’s just wrong for presenters doing technical topics.&lt;/p&gt;  &lt;p&gt;Even those new to technical conferences, such as the upcoming &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt;, can spot the difference between rehearsed and unrehearsed sessions. The former go smoothly, the latter are embarrassing and painful for everyone involved. “Hitches”, as Seth calls them, in a technical session do the opposite of “help[ing] us leap forward”. Instead, they convince the audience that either the presenter didn’t care enough about them or their own reputation to ensure they gave a quality session or that the topic is so difficult that even an expert can’t get it right.&lt;/p&gt;  &lt;p&gt;One of the worst sessions I ever attended was by someone who had spoken before so had no excuse for his shoddy preparation. This clueless speaker spent half of the session looking for the menu items that lead to the dialogs he wanted to show. It was excruciating watching him move the mouse to the first item, move up and down the list, then move to the next one and repeat the process. Practicing the session even once would have eliminated that problem. The result: I got nothing from the session other than the resolution to never hear him speak again.&lt;/p&gt;  &lt;p&gt;Fortunately, that’s not a problem you’ll encounter at Southwest Fox. Every speaker is a professional. By “professional”, I don’t mean someone who gets paid to speak. Rather, I mean someone who cares about their craft and their audience enough to work and polish and tune and hone their session until it’s as good as can be.&lt;/p&gt;  &lt;p&gt;Now, I don’t think rehearsing means you don’t vary your sessions. Every time I present a session, I think of different ways to get the point across, different jokes to tell at certain places, and sometimes (not too often) even different samples to show. After all, you wouldn’t want to see a completely canned session given by a robot. In fact, I’d argue that practicing your session until you have it down cold gives you the freedom to improvise when appropriate because you have the confidence you can stay on track.&lt;/p&gt;  &lt;p&gt;Southwest Fox starts four weeks from today and I can’t wait!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6151837822800361809?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6151837822800361809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6151837822800361809' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6151837822800361809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6151837822800361809'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/09/rehearsing-is-for-professionals.html' title='Rehearsing is for professionals'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-246886019249459893</id><published>2010-09-13T10:16:00.001-06:00</published><updated>2010-09-13T10:16:51.265-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>FoxPro Lifetime Achievement Award</title><content type='html'>&lt;p&gt;The committee has selected multiple &lt;a href="http://doughennig.blogspot.com/2010/07/2010-foxpro-lifetime-achievement-award.html"&gt;FoxPro Lifetime Achievement Award&lt;/a&gt; recipients for 2010. The names will be announced at the closing session (Sunday) of &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; in October and during the &lt;a href="http://devcon.dfpug.de/"&gt;German DevCon&lt;/a&gt; in November. I will post in the various VFP forums (my blog, the &lt;a href="http://www.universalthread.com/"&gt;Universal Thread&lt;/a&gt;, &lt;a href="http://www.foxite.com"&gt;Foxite&lt;/a&gt;, &lt;a href="http://fox.wikis.com/wc.dll?Wiki~RecentChanges"&gt;FoxWiki&lt;/a&gt;, etc.) after each conference. &lt;/p&gt;  &lt;p&gt;Thanks to everyone who submitted nominations. &lt;/p&gt;  &lt;p&gt;Doug&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-246886019249459893?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/246886019249459893/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=246886019249459893' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/246886019249459893'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/246886019249459893'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/09/foxpro-lifetime-achievement-award.html' title='FoxPro Lifetime Achievement Award'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-508924993346279856</id><published>2010-09-08T15:44:00.001-06:00</published><updated>2010-09-08T15:44:26.779-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>More Southwest Fox News</title><content type='html'>&lt;p&gt;We are disappointed that Craig Boyd will be unable to present at Southwest Fox 2010; we look forward to his return in the future. We are delighted that &lt;a href="http://www.swfox.net/JodyMeyer.aspx"&gt;Jody Meyer&lt;/a&gt; has agreed to step in. She'll present two topics: &lt;a href="http://www.swfox.net/sessions.aspx#Web_Development_using_CSS_-_101"&gt;Web Development using CSS - 101&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx#It's_Easy_&amp;amp;_It's_Green:_PDF_Output"&gt;It's Easy &amp;amp; It's Green: PDF Output&lt;/a&gt;. Jody did a terrific job when she presented at last year's Southwest Fox and we're happy to have her back.&lt;/p&gt;  &lt;p&gt;Listen to &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=640000"&gt;FoxShow #6&lt;/a&gt;&lt;a href="http://akselsoft.libsyn.com/index.php?post_id=640000"&gt;8&lt;/a&gt;, in which &lt;a href="http://www.swfox.net/EricSelje.aspx"&gt;Eric Selje&lt;/a&gt; discusses his sessions on extending web applications with VFP and getting into the VFP2C32 library.&lt;/p&gt;  &lt;p&gt;Amongst our more than $65,000 in door prizes are four copies of &lt;a href="http://www.microsoft.com/visualstudio/en-us/products/2010-editions/ultimate"&gt;Visual Studio 2010 Ultimate with MSDN&lt;/a&gt;, worth $11,899 each!&lt;/p&gt;  &lt;p&gt;Kevin Ragsdale has another gem in his series of posts on Southwest Fox, this time discussing the &lt;a href="http://kevinragsdale.net/post/2010/09/03/Ceil-Silver-Ambassador-Fund.aspx"&gt;Ceil Silver Ambassador Fund&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Only five weeks until Southwest Fox!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-508924993346279856?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/508924993346279856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=508924993346279856' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/508924993346279856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/508924993346279856'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/09/more-southwest-fox-news.html' title='More Southwest Fox News'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7854914139404690728</id><published>2010-09-02T10:14:00.001-06:00</published><updated>2010-09-02T10:14:07.753-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>More Southwest Fox Links</title><content type='html'>&lt;p&gt;Kevin Ragsdale has two more excellent blog posts about &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; sessions he’s been at in the past and what he’s looking forward to seeing this year: &lt;a href="http://kevinragsdale.net/post/2010/09/01/Christof-Is-A-Freaking-Genius.aspx"&gt;Christof Is A Freaking Genius&lt;/a&gt; and &lt;a href="http://kevinragsdale.net/post/2010/09/02/My-Favorite-Teacher-Is-Speaking-At-Southwest-Fox.aspx"&gt;My Favorite Teacher Is Speaking At Southwest Fox&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The FoxShow has three episodes related to Southwest Fox: &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=624527"&gt;FoxShow #65&lt;/a&gt;, with Rick Schummer, Tamar Granor, and me discussing this year’s conference, &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=636115"&gt;FoxShow #66&lt;/a&gt;, in which &lt;a href="http://www.swfox.net/ToniFeltman.aspx"&gt;Toni Feltman&lt;/a&gt; discusses her Lean/Agile and Pomodoro sessions, and &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=639242"&gt;FoxShow #67&lt;/a&gt;, in which &lt;a href="http://www.swfox.net/RickBorup.aspx"&gt;Rick Borup&lt;/a&gt; discusses his Design Patterns and Ruby and Rails sessions. Andrew apparently has another one coming up featuring &lt;a href="http://www.swfox.net/EricSelje.aspx"&gt;Eric Selje&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Southwest Fox starts six weeks from today. Have you registered yet?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7854914139404690728?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7854914139404690728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7854914139404690728' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7854914139404690728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7854914139404690728'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/09/more-southwest-fox-links.html' title='More Southwest Fox Links'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5237133666302060401</id><published>2010-09-02T10:10:00.001-06:00</published><updated>2010-09-02T10:10:52.954-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>More Looking at Stonefield Query</title><content type='html'>&lt;p&gt;George Jensen of CustomerFX has added several more posts about his experience learning Stonefield Query. Check out his articles: &lt;a href="http://customerfx.com/pages/reporting/2010/07/19/looking-at-stonefield-query-for-sage-saleslogix.aspx"&gt;part 1&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/07/27/looking-at-stonefield-query-for-sage-saleslogix-part-2.aspx"&gt;part 2&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/08/03/looking-at-stonefield-query-for-sage-saleslogix-part-3.aspx"&gt;part 3&lt;/a&gt;, &lt;a href="http://customerfx.com/pages/reporting/2010/08/11/looking-at-stonefield-query-for-sage-saleslogix-part-4.aspx"&gt;part 4&lt;/a&gt;, and &lt;a href="http://customerfx.com/pages/reporting/2010/09/01/looking-at-stonefield-query-for-sage-saleslogix-part-5.aspx"&gt;part 5&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5237133666302060401?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5237133666302060401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5237133666302060401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5237133666302060401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5237133666302060401'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/09/more-looking-at-stonefield-query.html' title='More Looking at Stonefield Query'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4594791166287651811</id><published>2010-08-31T09:12:00.001-06:00</published><updated>2010-08-31T09:12:01.443-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Quote of the Conference</title><content type='html'>&lt;p&gt;Kevin once again has a &lt;a href="http://kevinragsdale.net/post/2010/08/31/And-Now-You-Can-Run-The-App-From-The-Command-Window.aspx"&gt;great blog post&lt;/a&gt;, this time about Tamar’s &lt;a href="http://www.swfox.net"&gt;Southwest Fox&lt;/a&gt; session on business objects. His “kick me in the gut” moment was when Tamar pointed out that by separating user interface from business logic, you free your application from the limitations of the UI, making redesign and testing much easier (I’m paraphrasing and extrapolating from what Kevin said).&lt;/p&gt;  &lt;p&gt;Like Kevin, I’m looking forward to Tamar’s &lt;a href="http://swfox.net/sessions.aspx#Collections:_Managing_Information_the_Object-Oriented_Way"&gt;Collections: Managing Information the Object-Oriented Way&lt;/a&gt; session at this year’s conference.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4594791166287651811?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4594791166287651811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4594791166287651811' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4594791166287651811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4594791166287651811'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/08/quote-of-conference.html' title='Quote of the Conference'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-715007340847132145</id><published>2010-08-27T15:51:00.001-06:00</published><updated>2010-08-27T15:51:02.966-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Southwest Fox 2010 Early-Bird Deadline Next Week</title><content type='html'>&lt;p&gt;There is still time before September 1st to get in on the Early-Bird Registration for &lt;a href="http://www.swfox.net"&gt;Southwest Fox 2010&lt;/a&gt;! The Early-Bird discount saves you $50 over our regular conference registration.&lt;/p&gt;  &lt;p&gt;This year's conference, held October 14-17, includes 15 &lt;a href="http://www.swfox.net/speakers.aspx"&gt;speakers&lt;/a&gt;, 26 different &lt;a href="http://www.swfox.net/sessions.aspx"&gt;sessions&lt;/a&gt; in the main conference, 4 pre-conference topics, and a free one-day VFP to Silverlight post-conference &lt;a href="http://www.swfox.net/workshops.aspx"&gt;workshop&lt;/a&gt;. Plus, if you're a member of a registered VFP user group, when you attend Southwest Fox, your &lt;a href="http://www.swfox.net/usergroups.aspx"&gt;user group&lt;/a&gt; receives $25.&lt;/p&gt;  &lt;p&gt;In case you haven’t heard, we made a change in venue back in late July. The conference moved to a new location: SanTan Elegante Conference &amp;amp; Reception Center/Legado Hotel. Room rates are &amp;quot;run of the house&amp;quot; at $119 a night. You can find all the details at &lt;a href="http://swfox.net/hotel.aspx"&gt;http://swfox.net/hotel.aspx&lt;/a&gt;. The room block for the conference is held through September 13th; after that room availability and pricing is determined by the hotel.&lt;/p&gt;  &lt;p&gt;We are planning to add a &amp;quot;Show Us Your App&amp;quot; bonus session based on the success of the session the last couple of years.&lt;/p&gt;  &lt;p&gt;Got suggestions? &lt;a href="mailto:info@swfox.net"&gt;info@swfox.net&lt;/a&gt; Got questions? &lt;a href="mailto:info@swfox.net"&gt;info@swfox.net&lt;/a&gt; Got registrations? &lt;a href="mailto:register@swfox.net"&gt;register@swfox.net&lt;/a&gt;, or you can call the Geek Gatherings' World Headquarters at 586.254.2530.&lt;/p&gt;  &lt;p&gt;Read about the registration process and get the registration application here: &lt;a href="http://www.swfox.net/register.aspx"&gt;http://www.swfox.net/register.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Follow the news about the conference on our blog: &lt;a href="http://swfox.net/blog/index.htm"&gt;http://swfox.net/blog/index.htm&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Use our brochure to convince your boss (or spouse or SO) to let you go: &lt;a href="http://www.swfox.net/brochure.pdf"&gt;http://www.swfox.net/brochure.pdf&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Only 48 days until we meet in Gilbert. Hope to see you there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-715007340847132145?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/715007340847132145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=715007340847132145' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/715007340847132145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/715007340847132145'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/08/southwest-fox-2010-early-bird-deadline.html' title='Southwest Fox 2010 Early-Bird Deadline Next Week'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1848215713147819040</id><published>2010-08-18T15:24:00.001-06:00</published><updated>2010-08-18T15:24:57.401-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Two Great Reasons to Attend Southwest Fox</title><content type='html'>&lt;p&gt;Kevin Ragsdale &lt;a href="http://kevinragsdale.net/post/2010/08/12/Two-Great-Reasons-To-Attend-Southwest-Fox-This-Year.aspx"&gt;blogged&lt;/a&gt; about two good reasons to attend &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; this year. His reasons were the previews &lt;a href="http://www.swfox.net/BoDurban.aspx"&gt;Bo Durban&lt;/a&gt; and &lt;a href="http://www.swfox.net/SteveEllenoff.aspx"&gt;Steve Ellenoff&lt;/a&gt; give for their Southwest Fox sessions. I especially liked these comments:&lt;/p&gt;  &lt;p&gt;“During Bo’s session, my mind was spinning with new ways of approaching the web browser control in my apps. I couldn’t wait to get home so I could start working on them. Some of them I’ve already tried, and the speed increase on displaying HTML in my app is incredible. And this means Bo’s session alone is worth the cost of the conference to me.”&lt;/p&gt;  &lt;p&gt;“In short, Steve’s done a &lt;strong&gt;ton&lt;/strong&gt; of work that I have avoided like the plague.”&lt;/p&gt;  &lt;p&gt;Of course, I think there’s a lot more than two good reasons: more like 200! One for each session (you learn a lot in each one), one for each speaker (you get to hang out with and pick the brains of the brightest VFP developers on the planet for free!), one for each attendee (networking with other developers is one of the most important reasons to attend any conference), plus the food, the fun (don’t forget go-karts this year!), and the gorgeous Phoenix weather.&lt;/p&gt;  &lt;p&gt;If you haven’t already registered for Southwest Fox, check out the &lt;a href="http://www.swfox.net/sessions.aspx"&gt;session line-up&lt;/a&gt; and &lt;a href="http://www.swfox.net/whoscoming.aspx"&gt;who else is coming&lt;/a&gt; that you might like to meet or renew acquaintances with, then &lt;a href="http://www.swfox.net/register.aspx"&gt;sign up&lt;/a&gt; for Southwest Fox before the September 1 early-bird deadline.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1848215713147819040?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1848215713147819040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1848215713147819040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1848215713147819040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1848215713147819040'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/08/two-great-reasons-to-attend-southwest.html' title='Two Great Reasons to Attend Southwest Fox'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-9103398265923214107</id><published>2010-08-02T17:56:00.001-06:00</published><updated>2010-08-02T17:56:22.984-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>Looking at Stonefield Query</title><content type='html'>&lt;p&gt;George Jensen of CustomerFX has been blogging about his experience learning Stonefield Query (specifically the SalesLogix version but it’s applicable to all versions). Check out his articles: &lt;a href="http://customerfx.com/pages/reporting/2010/07/19/looking-at-stonefield-query-for-sage-saleslogix.aspx"&gt;part 1&lt;/a&gt; and &lt;a href="http://customerfx.com/pages/reporting/2010/07/27/looking-at-stonefield-query-for-sage-saleslogix-part-2.aspx"&gt;part 2&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-9103398265923214107?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/9103398265923214107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=9103398265923214107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/9103398265923214107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/9103398265923214107'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/08/looking-at-stonefield-query.html' title='Looking at Stonefield Query'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5532091349765383925</id><published>2010-07-13T16:31:00.001-06:00</published><updated>2010-07-13T16:31:43.722-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxPro Lifetime Achievement Award'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>2010 FoxPro Lifetime Achievement Award Nominations</title><content type='html'>&lt;p&gt;The FoxPro Lifetime Achievement Award honors those individuals who have contributed a great deal to the FoxPro community over the years. See &lt;a href="http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP"&gt;http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward~VFP&lt;/a&gt; for previous award recipients.&lt;/p&gt;  &lt;p&gt;These recipients wish to continue the award and have created a committee to select one or more recipients for 2010. The committee consists of previous recipients Whil Hentzen, Rick Strahl, Doug Hennig, Tamar Granor, and Rainer Becker, as well as Alan Griver (yag) of Microsoft and Naomi Nosonovsky representing the FoxPro community.&lt;/p&gt;  &lt;p&gt;To submit your nominations for the 2010 recipients, please email me (dhennig AT stonefield DOT com) by August 15, 2010.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5532091349765383925?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5532091349765383925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5532091349765383925' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5532091349765383925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5532091349765383925'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/07/2010-foxpro-lifetime-achievement-award.html' title='2010 FoxPro Lifetime Achievement Award Nominations'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3462636989581075129</id><published>2010-07-13T14:09:00.001-06:00</published><updated>2010-07-13T14:09:53.290-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><title type='text'>Stonefield Query 4.0 Released</title><content type='html'>&lt;p&gt;We are pleased to announce the immediate release of the Stonefield Query SDK version 4.0. There are lots of new and improved features in version 4.0; see the &lt;a href="http://blog.stonefieldquery.com/2010/07/stonefield-query-sdk-40.html"&gt;Stonefield Query blog&lt;/a&gt; for details.&lt;/p&gt;  &lt;p&gt;We have videos covering the new features in the &lt;a href="http://www.stonefieldquery.com/Videos/WhatsNewInSDK4.0/WhatsNewInSDK4.0.htm"&gt;SDK&lt;/a&gt; and in the &lt;a href="http://www.stonefieldquery.com/Videos/WhatsNewIn4.0/WhatsNewInSQ4.0.htm"&gt;Report Designer&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3462636989581075129?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3462636989581075129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3462636989581075129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3462636989581075129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3462636989581075129'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/07/stonefield-query-40-released.html' title='Stonefield Query 4.0 Released'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8908359042903383120</id><published>2010-07-07T10:41:00.001-06:00</published><updated>2010-07-07T10:41:15.477-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Consulting'/><category scheme='http://www.blogger.com/atom/ns#' term='Community'/><title type='text'>Why Community and Conferences are Important</title><content type='html'>&lt;p&gt;Dave Aring of Visionpace just &lt;a href="http://blog.visionpace.com/2010/07/my-vfp-beliefs-have-been-reenforced-again.html"&gt;blogged&lt;/a&gt; about why community and attending conferences are important (his post is actually about solving a specific problem but the last two paragraphs are the key). Of course, he’s referring specifically to the VFP community, but I think it holds true in any community.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8908359042903383120?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8908359042903383120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8908359042903383120' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8908359042903383120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8908359042903383120'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/07/why-community-and-conferences-are.html' title='Why Community and Conferences are Important'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8682951627607943268</id><published>2010-06-25T14:46:00.001-06:00</published><updated>2010-06-25T14:46:10.034-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Twitter'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP 9 SP2'/><title type='text'>Gotcha with Custom Report Memberdata Attribute Names in VFP 9 SP 2</title><content type='html'>&lt;p&gt;(That must be the longest blog title in history!)&lt;/p&gt;  &lt;p&gt;I’ve been (finally) implementing VFP 9 SP2 features in &lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; (version 4.0 is due to be released next week) and, while doing some final testing, ran into an error when editing a certain object in the Report Designer. The error was 1712, “Field name is a duplicate or invalid”. In tracking the error down, it occurred in the XMLStrToCursor method of _FRXCursor, one of the report helper classes in the FFC. The statement causing the error was ALTER TABLE … ADD COLUMN … It’s not actually a table that columns are being added to but a cursor. The weird thing is that the columns being added didn’t exist in the cursor, so they certain weren’t duplicates.&lt;/p&gt;  &lt;p&gt;I tweeted about this and Frank Perez Jr. responded “I think you also get that error if the field name is invalid (i.e. more than 10 characters in a free table).” Sure enough, that was the problem. Even though cursors can have field names longer than ten characters, ALTER TABLE can’t handle them, and given that there’s no ALTER CURSOR command, we’re stuck with it.&lt;/p&gt;  &lt;p&gt;What lead to the error was that I added custom report memberdata to the specific object causing the problem. The custom memberdata had an attribute named “adjustwidth”, which is more than ten characters long. Changing it to “adjwidth” solved the problem. So, important safety rule (channelling Venkman here): don’t use names more than ten characters for your custom report memberdata attributes.&lt;/p&gt;  &lt;p&gt;Thanks to Frank for pointing me in the right direction. Another reminder of the usefulness of Twitter.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8682951627607943268?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8682951627607943268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8682951627607943268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8682951627607943268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8682951627607943268'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/06/gotcha-with-custom-report-memberdata.html' title='Gotcha with Custom Report Memberdata Attribute Names in VFP 9 SP 2'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3018769186693929057</id><published>2010-06-24T12:22:00.001-06:00</published><updated>2010-06-24T12:22:10.729-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ambassador Fund'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><title type='text'>2010 Ceil Silver Ambassadors</title><content type='html'>&lt;p&gt;Yes, that title is plural: thanks to the generosity of the VFP community, we have enough money to bring &lt;strong&gt;two&lt;/strong&gt; developers to Southwest Fox as &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;2010 Ceil Silver Ambassadors&lt;/a&gt;. Geek Gatherings is pleased to announce that César Chalom and Bernard Bout have been selected as the ambassadors for Brazil and Australia, respectively. We are very excited that César and Bernard can attend Southwest Fox 2010 and know that many attendees are looking forward to meeting them in person.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3018769186693929057?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3018769186693929057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3018769186693929057' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3018769186693929057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3018769186693929057'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/06/2010-ceil-silver-ambassadors.html' title='2010 Ceil Silver Ambassadors'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7817566747877030985</id><published>2010-06-15T15:51:00.001-06:00</published><updated>2010-06-15T15:51:27.913-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FoxShow'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><title type='text'>Southwest Fox on the FoxShow</title><content type='html'>&lt;p&gt;Andrew MacNeill interviews Rick Schummer, Tamar Granor, and I about &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2010&lt;/a&gt; in &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=624527"&gt;FoxShow #65&lt;/a&gt;. As usual, it was a fun interview and he asked lots of interesting questions about what attendees can expect to see.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7817566747877030985?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7817566747877030985/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7817566747877030985' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7817566747877030985'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7817566747877030985'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/06/southwest-fox-on-foxshow.html' title='Southwest Fox on the FoxShow'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1131996461178404699</id><published>2010-06-04T16:05:00.001-06:00</published><updated>2010-06-04T16:05:28.180-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Sedna'/><category scheme='http://www.blogger.com/atom/ns#' term='Books'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP 9 SP2'/><title type='text'>New VFP 9 SP2 and Sedna Book Available</title><content type='html'>&lt;p&gt;After a &lt;em&gt;really&lt;/em&gt; long time in gestation, “Making Sense of Sedna and SP2” has finally been published by dFPUG in both English and German. This book, co-authored by &lt;a href="http://www.hentzenwerke.com/granor_tamar.htm"&gt;Tamar E. Granor&lt;/a&gt;, &lt;a href="http://www.hentzenwerke.com/feltman_toni.htm"&gt;Toni Feltman&lt;/a&gt;, &lt;a href="http://www.hentzenwerke.com/pountney_cathy.htm"&gt;Cathy Pountney&lt;/a&gt;, &lt;a href="http://www.hentzenwerke.com/schummer_rick.htm"&gt;Rick Schummer&lt;/a&gt;, &lt;a href="http://www.hentzenwerke.com/durban_bo.htm"&gt;Bo Durban&lt;/a&gt;, and me, goes into tremendous depth on VFP 9 Service Pack 2 and Sedna, including installation gotchas, things that work, things that &lt;em&gt;almost&lt;/em&gt; work, and how to make the use of the new features in both products. “Making Sense of Sedna and SP2” is available now from &lt;a href="http://www.hentzenwerke.com/catalog/makingsos.htm"&gt;Hentzenwerke Publishing&lt;/a&gt; as an e-book and will be available in printed version in July.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.hentzenwerke.com/catalog/makingsos.htm"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="makingsoscover100" border="0" alt="makingsoscover100" src="http://lh5.ggpht.com/_xP_SR62fwds/TAl4p7uMZ9I/AAAAAAAAAUk/Dy4bOyDyYQ8/makingsoscover100%5B4%5D.png?imgmax=800" width="153" height="212" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1131996461178404699?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1131996461178404699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1131996461178404699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1131996461178404699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1131996461178404699'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/06/new-vfp-9-sp2-and-sedna-book-available.html' title='New VFP 9 SP2 and Sedna Book Available'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_xP_SR62fwds/TAl4p7uMZ9I/AAAAAAAAAUk/Dy4bOyDyYQ8/s72-c/makingsoscover100%5B4%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5776856504489428256</id><published>2010-05-14T10:35:00.001-06:00</published><updated>2010-05-14T10:35:46.027-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>New FoxShow</title><content type='html'>&lt;p&gt;Good news, everyone (any Futurama fans out there?): Andrew MacNeill has a new &lt;a href="http://akselsoft.libsyn.com/index.php?post_id=614815"&gt;FoxShow&lt;/a&gt; discussing integrating VFP and Silverlight with &lt;a href="http://www.swfox.net/UweHabermann.aspx"&gt;Uwe Habermann&lt;/a&gt;. Uwe and &lt;a href="http://www.swfox.net/VenelinaJordanova.aspx"&gt;Venelina Jordanova&lt;/a&gt; are presenting several sessions on this topic at &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2010&lt;/a&gt;, including a free one-day &lt;a href="http://www.swfox.net/workshops.aspx"&gt;post-conference workshop&lt;/a&gt; I’m sure will be very popular (I’m planning on attending it).&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5776856504489428256?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5776856504489428256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5776856504489428256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5776856504489428256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5776856504489428256'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/05/new-foxshow.html' title='New FoxShow'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7421952008689196777</id><published>2010-05-14T10:29:00.001-06:00</published><updated>2010-05-14T10:29:15.171-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Pervasive'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Performing Queries Asynchronously</title><content type='html'>&lt;p&gt;VFP makes it easy to perform asynchronous queries against remote databases such as SQL Server. Why would you want to do that? With a synchronous query (the default), you have to wait until SQLEXEC() returns before you can execute any other code. What if you want to display the progress of record retrieval? What if you want to give the user the opportunity to stop a long query, especially if they realize they made a mistake and don’t want to wait a long time and retrieve a lot of records because of it? Asynchronous queries give you these abilities because execution returns to VFP after retrieving a configurable number of records.&lt;/p&gt;  &lt;p&gt;You can switch to async mode any time, even after opening a connection, using SQLSETPROP(). You likely also want to configure how many records to retrieve at a time using CURSORSETPROP(). Here’s an example (this code assumes the connection handle is stored in lnHandle and lnAsyncRecords contains the number of records to retrieve):&lt;/p&gt;  &lt;pre&gt;sqlsetprop(lnHandle, 'Asynchronous', .T.)&lt;br /&gt;cursorsetprop('FetchSize', lnAsyncRecords, 0) &lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;You might also want to set the packet size; you may have to use trial and error to determine the optimum size for your network:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;sqlsetprop(lnHandle, 'PacketSize', 12288)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;When you’re in async mode, you have to retrieve records in a loop until either the query finishes or you decide to cancel it. You can tell when SQLEXEC() has completed because it returns a non-zero value; positive means it was successful, negative means it failed for some reason. You can also check to see how many records were retrieved on each pass by passing an array to SQLEXEC(); the second element in that array contains the number of records.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here’s an example. This code assumes the SQL statement to execute is in lcSelect, the cursor to put the results into is in lcCursor, and the connection handle is in lnHandle. The commented area is where you’ll put code specific to your application to see if the user wants to cancel, such as if they click the Cancel button in a progress dialog you’ve displayed (such a dialog could also show the total number of records retrieved so far; that value is in lnCount). Once the loop is done, llReturn is .T. if the query succeeded, llCancelled is .T. if the user cancelled the process, and lnCount is the total number of records fetched (which of course you can also get from RECCOUNT(lcCursor)).&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;llDone&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = .F.&lt;br /&gt;&lt;br /&gt;lnCount&amp;#160;&amp;#160;&amp;#160;&amp;#160; = 0&lt;br /&gt;&lt;br /&gt;llCancelled = .F.&lt;br /&gt;llReturn    = .F.&lt;br /&gt;do while not llDone&lt;br /&gt;    lnStatus = sqlexec(lnHandle, lcSelect, lcCursor, laInfo)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if lnStatus &amp;lt;&amp;gt; 0&lt;br /&gt;        llDone&amp;#160;&amp;#160; = .T.&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; llReturn = lnStatus &amp;gt; 0&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; endif lnStatus &amp;lt;&amp;gt; 0&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if laInfo[2] &amp;gt; 0&lt;br /&gt;        lnCount = lnCount + laInfo[2]&lt;br /&gt;* see if user wants to cancel e.g. press Esc or click Cancel&lt;br /&gt;* set llContinue to .F. if we’re supposed to cancel&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if not llContinue&lt;br /&gt;            sqlcancel(lnHandle)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; llDone&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = .T.&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; llReturn&amp;#160;&amp;#160;&amp;#160; = .F.&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; llCancelled = .T.&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; endif not llContinue&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; endif laInfo[2] &amp;gt; 0&lt;br /&gt;enddo while not llDone&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;There’s one caveat to this approach: some database engines don’t like it when you use SQLCANCEL() on the connection handle. With Pervasive, for example, the next time you use SQLEXEC(), you get an “invalid cursor state” error. The only solution in that case is to close and reopen the connection.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Fortunately, there’s a workaround for this. Rather than performing a query on the connection handle, use a new statement handle. To do that, start by making the connection handle sharable by passing .T. as the last parameter in SQLCONNECT() or SQLSTRINGCONNECT(). Then, just before starting the loop, get a new statement handle by calling SQLCONNECT() with the existing connection handle. In the following code, assume the connection handle is stored in lnConnectionHandle rather than in lnHandle:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;lnHandle = sqlconnect(lnConnectionHandle)&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now SQLEXEC() is using a new statement handle shared from the original connection handle.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;At the end of the loop, close the statement handle using SQLDISCONNECT(lnHandle); that doesn’t disconnect the connection, it just frees the resources used by the statement handle.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7421952008689196777?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7421952008689196777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7421952008689196777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7421952008689196777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7421952008689196777'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/05/performing-queries-asynchronously.html' title='Performing Queries Asynchronously'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2443684271099950039</id><published>2010-05-04T11:27:00.001-06:00</published><updated>2010-05-04T11:27:22.728-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2010 News</title><content type='html'>&lt;p&gt;Some exciting news about &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2010&lt;/a&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.swfox.net/Speakers.aspx"&gt;Speakers&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx"&gt;sessions&lt;/a&gt; have been announced. Organizers once again had a very tough time selecting from the excellent submissions. I’m personally really looking forward to the Windows 7 sessions presented by &lt;a href="http://www.swfox.net/CraigBoyd.aspx"&gt;Craig Boyd&lt;/a&gt; and &lt;a href="http://www.swfox.net/SteveEllenoff.aspx"&gt;Steve Ellenoff&lt;/a&gt; and &lt;a href="http://www.swfox.net/BoDurban.aspx"&gt;Bo Durban&lt;/a&gt;’s Direct2D session. Actually, I want to see every session, but of course that’s not possible. Thank goodness one of the requirements of speaking at Southwest Fox is providing white papers so you still get the content from every session, even those you miss.&lt;/li&gt;    &lt;li&gt;New this year is a &lt;a href="http://www.swfox.net/sessionstrack.aspx#Web_Development"&gt;Web Development track&lt;/a&gt; with seven regular sessions, two pre-conference sessions, and four post-conference sessions (see below) in this track alone.&lt;/li&gt;    &lt;li&gt;We also have three new (well, new to Southwest Fox) speakers, continuing our tradition of trying to invite new speakers every year: &lt;a href="http://www.swfox.net/KevinCully.aspx"&gt;Kevin Cully&lt;/a&gt;, &lt;a href="http://www.swfox.net/UweHabermann.aspx"&gt;Uwe Habermann&lt;/a&gt;, and &lt;a href="http://www.swfox.net/VenelinaJordanova.aspx"&gt;Venelina Jordanova&lt;/a&gt;. Kevin is likely familiar to many people, as he has attended Southwest Fox before and hosted a conference himself a few years ago. Although Uwe and Venelina are new to North American conferences, they both are veteran speakers at European conferences, including both German and Prague DevCons.&lt;/li&gt;    &lt;li&gt;A free one-day &amp;quot;VFP to Silverlight&amp;quot; &lt;a href="http://www.swfox.net/workshops.aspx"&gt;workshop&lt;/a&gt; is being held the day after Southwest Fox ends (Monday, October 18), sponsored by the German FoxPro User Group (dFPUG) and presented by Uwe and Venelina. I’m planning on attending this and suspect it’ll be very popular.&lt;/li&gt;    &lt;li&gt;Southwest Fox platinum sponsor Tomorrow's Solutions, LLC is offering a &lt;a href="http://www.swfox.net/scholarship.aspx"&gt;scholarship&lt;/a&gt; of $150 for one new attendee. Also, White Light Computing has changed their scholarship to cover TWO attendees this year.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;See you in Phoenix in October!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2443684271099950039?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2443684271099950039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2443684271099950039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2443684271099950039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2443684271099950039'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/05/southwest-fox-2010-news.html' title='Southwest Fox 2010 News'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-71979174410691399</id><published>2010-03-30T18:28:00.001-06:00</published><updated>2010-03-30T18:28:58.959-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting'/><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Bug Fix'/><title type='text'>Fixing a Report Designer Bug</title><content type='html'>&lt;p&gt;A bug in the VFP Report Designer has always, ahem, bugged me: something seems to turn on the Printer Environment setting for a report. Unless you want a report to always use a certain printer, that setting should be off. Turning it on can make a report much slower to open (for example, if the printer saved with the report isn’t available on your system) and can cause other problems.&lt;/p&gt;  &lt;p&gt;I don’t remember who discovered this (sorry) but the cause turned out to be clicking the font button in the Field or Label Properties dialogs, even if you then choose Cancel. But how would that affect the Printer Environment setting?&lt;/p&gt;  &lt;p&gt;Tired of having to deal with this, I decided to track it down. Fortunately, the source code for the Report Designer dialogs is included with VFP (unzip HOME() + “TOOLS\XSource\XSource.ZIP” and look in the resulting VFPSource\ReportBuilder folder). After some digging, I found the culprit in the ChooseFont method of FRXFormatUtil (in FRXBuilder.VCX), which is called when you click the font button. That method checks whether the TAG memo field in the header record of the FRX is empty or not. If not, it uses SYS(1037, 3) to update TAG and TAG2 from the current printer environment (the code is actually in FRXCursor.PopPrintEnv, which ChooseFont calls). The idea is that if the report has a saved printer environment, that environment should be used since it may impact which fonts are available. However, here’s the bug: TAG may not be empty even when TAG2 (which contains the binary printer environment) is. I’ve seen a single CHR(8) in TAG when TAG2 is empty, which means there is no saved printer environment, but it passes the NOT EMPTY(TAG) check in ChooseFont so the printer environment of the report is overwritten.&lt;/p&gt;  &lt;p&gt;The solution is simple: change the test in ChooseFont from IS NOT EMPTY(TAG) to IS NOT EMPTY(TAG2), then rebuild ReportBuilder.APP. I’ve already made this change in the upcoming &lt;a href="http://www.stonefieldquery.com/"&gt;Stonefield Query&lt;/a&gt; version 4.0.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-71979174410691399?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/71979174410691399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=71979174410691399' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/71979174410691399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/71979174410691399'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/03/fixing-report-designer-bug.html' title='Fixing a Report Designer Bug'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3096593346522233552</id><published>2010-03-17T13:00:00.001-06:00</published><updated>2010-03-17T13:00:21.015-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='TreeView'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveX'/><title type='text'>Taking out the Slow Parts, Again</title><content type='html'>&lt;p&gt;While looking up something else, I came across Brad Martinez’s article on &lt;a href="http://btmtz.mvps.org/treeview/"&gt;extending the functionality of the TreeView control&lt;/a&gt;. One of his points about how to load the TreeView more quickly caught my eye:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Make sure the parent Node's Sorted property is set to False: If Sorted = True, the TreeView must sort every Node as it is added under the parent Node. Make Sorted = True after all child Nodes are added.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I wondered how much of an improvement it would make, so I changed some generic TreeView loading code I use in lots of places to follow his advice. Loading 1,329 nodes dropped from 4.128 to 0.533 seconds, which is almost eight times faster!&lt;/p&gt;  &lt;p&gt;As &lt;a href="http://doughennig.blogspot.com/2007/05/taking-out-slow-parts.html"&gt;I’ve said before&lt;/a&gt;, I love taking out the slow parts!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3096593346522233552?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3096593346522233552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3096593346522233552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3096593346522233552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3096593346522233552'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/03/taking-out-slow-parts-again.html' title='Taking out the Slow Parts, Again'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4774927934327738525</id><published>2010-02-22T16:02:00.001-06:00</published><updated>2010-02-22T16:02:30.641-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Workaround'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><title type='text'>TRY … CATCH and text merge</title><content type='html'>&lt;p&gt;I recently ran into a problem with some text merge code. Under certain conditions, the text merge file contained only the first part of the text being output. I had a hard time tracking it down until I found &lt;a href="http://www.eggheadcafe.com/software/aspnet/32726093/trycatch-et-set-textme.aspx"&gt;this article&lt;/a&gt; in which someone else ran into the same problem. The culprit was a function I called from within the text merge code; that function has a TRY … CATCH structure and under some conditions, an error occurred and the CATCH caught it. The issue is that when CATCH fires, it sets _TEXT, the variable containing the handle for the text merge output file, to –1, preventing further output to the file.&lt;/p&gt;  &lt;p&gt;The solution is to save the current value of _TEXT, set it to –1, execute the code with the TRY … CATCH structure, and reset _TEXT to the saved value at the end. Temporarily setting _TEXT to –1 prevents the file from being closed if an error occurs.&lt;/p&gt;  &lt;pre&gt;lnText = _text&lt;br /&gt;_text  = -1&lt;br /&gt;try&lt;br /&gt;* some code here&lt;br /&gt;catch&lt;br /&gt;* some code here&lt;br /&gt;endtry&lt;br /&gt;_text = lnText&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4774927934327738525?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4774927934327738525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4774927934327738525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4774927934327738525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4774927934327738525'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/02/try-catch-and-text-merge.html' title='TRY … CATCH and text merge'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-5184200444364491885</id><published>2010-02-04T12:23:00.001-06:00</published><updated>2010-02-04T12:23:41.573-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><title type='text'>A Replacement for FULLPATH()</title><content type='html'>&lt;p&gt;Are you as annoyed as I am that FULLPATH() returns the full path for a file as upper-case? That makes it a little hard to respect the case of a user-entered filename. Fortunately, the GetFullPathName Windows API function doesn’t change the case. Here’s a little function that accepts a filename and returns the full path using that API function:&lt;/p&gt;  &lt;pre&gt;lparameters tcName&lt;br /&gt;local lcBuffer1, ;&lt;br /&gt;  lcBuffer2, ;&lt;br /&gt;  lnLen&lt;br /&gt;#define MAX_PATH 260&lt;br /&gt;declare long GetFullPathName in Win32API ;&lt;br /&gt;  string lpFileName, long nBufferLength, string @lpBuffer, ;&lt;br /&gt;  string @lpFilePart&lt;br /&gt;store space(MAX_PATH) to lcBuffer1, lcBuffer2&lt;br /&gt;lnLen = GetFullPathName(tcName, MAX_PATH, @lcBuffer1, @lcBuffer2)&lt;br /&gt;return left(lcBuffer1, lnLen)&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-5184200444364491885?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/5184200444364491885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=5184200444364491885' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5184200444364491885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/5184200444364491885'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/02/replacement-for-fullpath.html' title='A Replacement for FULLPATH()'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7783460844192770608</id><published>2010-02-03T10:31:00.001-06:00</published><updated>2010-02-03T10:31:32.739-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><title type='text'>Multiple Monitor Class</title><content type='html'>&lt;p&gt;Almost three years ago, I wrote a blog post on &lt;a href="http://doughennig.blogspot.com/2007/04/handling-multiple-monitors.html"&gt;handling multiple monitors&lt;/a&gt;. Since then, I’ve refactored the code so all the monitor-handling code is in one place.&lt;/p&gt;  &lt;p&gt;There are actually two classes: SFSize, which simply has properties that represent the dimensions of a monitor, and SFMonitors, which does the work. SFMonitors is actually a subclass of SFSize because it uses those same properties for the virtual desktop (all combined monitors if there’s more than one).&lt;/p&gt;  &lt;p&gt;Here’s the code for SFSize:&lt;/p&gt;  &lt;pre&gt;define class SFSize as Custom&lt;br /&gt;  nLeft   = -1&lt;br /&gt;  nRight  = -1&lt;br /&gt;  nTop    = -1&lt;br /&gt;  nBottom = -1&lt;br /&gt;  nWidth  = 0&lt;br /&gt;  nHeight = 0&lt;br /&gt;&lt;br /&gt;  function nLeft_Assign(tnValue)&lt;br /&gt;    This.nLeft = tnValue&lt;br /&gt;    This.SetWidth()&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;  function nRight_Assign(tnValue)&lt;br /&gt;    This.nRight = tnValue&lt;br /&gt;    This.SetWidth()&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;  function nTop_Assign(tnValue)&lt;br /&gt;    This.nTop = tnValue&lt;br /&gt;    This.SetHeight()&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;  function nBottom_Assign(tnValue)&lt;br /&gt;    This.nBottom = tnValue&lt;br /&gt;    This.SetHeight()&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;  function SetWidth&lt;br /&gt;    with This&lt;br /&gt;      .nWidth  = .nRight - .nLeft&lt;br /&gt;    endwith&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;  function SetHeight&lt;br /&gt;    with This&lt;br /&gt;      .nHeight = .nBottom - .nTop&lt;br /&gt;    endwith&lt;br /&gt;  endfunc&lt;br /&gt;enddefine&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;SFMonitors has several methods. Init sets up the Windows API functions we’ll need and gets the dimensions for the primary monitor:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;define class SFMonitors as SFSize&lt;br /&gt;  nMonitors = 0&lt;br /&gt;    &amp;amp;&amp;amp; the number of monitors available&lt;br /&gt;&lt;br /&gt;  function Init&lt;br /&gt;    local loSize&lt;br /&gt;&lt;br /&gt;* Declare the Windows API functions we'll need.&lt;br /&gt;&lt;br /&gt;    declare integer MonitorFromPoint in Win32API ;&lt;br /&gt;      long x, long y, integer dwFlags&lt;br /&gt;    declare integer GetMonitorInfo in Win32API ;&lt;br /&gt;      integer hMonitor, string @lpmi&lt;br /&gt;    declare integer SystemParametersInfo in Win32API ;&lt;br /&gt;      integer uiAction, integer uiParam, string @pvParam, integer fWinIni&lt;br /&gt;    declare integer GetSystemMetrics in Win32API integer nIndex&lt;br /&gt;&lt;br /&gt;* Determine how many monitors there are. If there's only one, get its size.&lt;br /&gt;* If there's more than one, get the size of the virtual desktop.&lt;br /&gt;&lt;br /&gt;    with This&lt;br /&gt;      .nMonitors = GetSystemMetrics(SM_CMONITORS)&lt;br /&gt;      if .nMonitors = 1&lt;br /&gt;        loSize   = .GetPrimaryMonitorSize()&lt;br /&gt;        .nRight  = loSize.nRight&lt;br /&gt;        .nBottom = loSize.nBottom&lt;br /&gt;        store 0 to .nLeft, .nTop&lt;br /&gt;      else&lt;br /&gt;        .nLeft   = GetSystemMetrics(SM_XVIRTUALSCREEN)&lt;br /&gt;        .nTop    = GetSystemMetrics(SM_YVIRTUALSCREEN)&lt;br /&gt;        .nRight  = GetSystemMetrics(SM_CXVIRTUALSCREEN) - abs(.nLeft)&lt;br /&gt;        .nBottom = GetSystemMetrics(SM_CYVIRTUALSCREEN) - abs(.nTop)&lt;br /&gt;      endif .nMonitors = 1&lt;br /&gt;    endwith&lt;br /&gt;  endfunc&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;GetPrimaryMonitorSize returns an SFSize object for the primary monitor. Note that this takes into account the Windows Taskbar and any other desktop toolbars, which reduce the size of the available space.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  function GetPrimaryMonitorSize&lt;br /&gt;    local lcBuffer, ;&lt;br /&gt;      loSize&lt;br /&gt;    lcBuffer = replicate(chr(0), 16)&lt;br /&gt;    SystemParametersInfo(SPI_GETWORKAREA, 0, @lcBuffer, 0)&lt;br /&gt;    loSize = createobject('SFSize')&lt;br /&gt;    with loSize&lt;br /&gt;      .nLeft   = ctobin(substr(lcBuffer,  1, 4), '4RS')&lt;br /&gt;      .nTop    = ctobin(substr(lcBuffer,  5, 4), '4RS')&lt;br /&gt;      .nRight  = ctobin(substr(lcBuffer,  9, 4), '4RS')&lt;br /&gt;      .nBottom = ctobin(substr(lcBuffer, 13, 4), '4RS')&lt;br /&gt;    endwith&lt;br /&gt;    return loSize&lt;br /&gt;  endfunc&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pass GetMonitorSize X and Y coordinates and it’ll figure out what monitor contains that point and return an SFSize object containing its dimensions, again accounting for the Taskbar.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;  function GetMonitorSize(tnX, tnY)&lt;br /&gt;    local loSize, ;&lt;br /&gt;      lhMonitor, ;&lt;br /&gt;      lcBuffer&lt;br /&gt;    loSize    = createobject('SFSize')&lt;br /&gt;    lhMonitor = MonitorFromPoint(tnX, tnY, MONITOR_DEFAULTTONEAREST)&lt;br /&gt;    if lHMonitor &amp;gt; 0&lt;br /&gt;      lcBuffer = bintoc(40, '4RS') + replicate(chr(0), 36)&lt;br /&gt;      GetMonitorInfo(lhMonitor, @lcBuffer)&lt;br /&gt;      with loSize&lt;br /&gt;        .nLeft   = ctobin(substr(lcBuffer, 21, 4), '4RS')&lt;br /&gt;        .nTop    = ctobin(substr(lcBuffer, 25, 4), '4RS')&lt;br /&gt;        .nRight  = ctobin(substr(lcBuffer, 29, 4), '4RS')&lt;br /&gt;        .nBottom = ctobin(substr(lcBuffer, 33, 4), '4RS')&lt;br /&gt;      endwith&lt;br /&gt;    endif lHMonitor &amp;gt; 0&lt;br /&gt;    return loSize&lt;br /&gt;  endfunc&lt;br /&gt;enddefine&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;SFMonitors uses the following constants:&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;#define MONITOR_DEFAULTTONULL    0 &lt;br /&gt;#define MONITOR_DEFAULTTOPRIMARY 1 &lt;br /&gt;#define MONITOR_DEFAULTTONEAREST 2 &lt;br /&gt;&lt;br /&gt;#define SM_XVIRTUALSCREEN  76  &amp;amp;&amp;amp; virtual left&lt;br /&gt;#define SM_YVIRTUALSCREEN  77  &amp;amp;&amp;amp; virtual top&lt;br /&gt;#define SM_CXVIRTUALSCREEN 78  &amp;amp;&amp;amp; virtual width&lt;br /&gt;#define SM_CYVIRTUALSCREEN 79  &amp;amp;&amp;amp; virtual height&lt;br /&gt;#define SM_CMONITORS       80  &amp;amp;&amp;amp; number of monitors&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Here’s some code that uses SFMonitors. Code (not shown here) before the following code reads a form’s previous Height, Width, Top, and Left from somewhere (such as the Registry) from the last time the user had it open into custom nHeight, nWidth, nTop, and nLeft properties, and then sizes and moves the form (referenced in loForm) to those values. This code makes sure the form isn’t off the screen, which can happen if, for example, the user had the form open on a second monitor but now only has one monitor, such as an undocked laptop. Note that this code uses several SYSMETRIC() functions to determine the height and width of the window border and title bar, since those values aren’t included in a form’s Height and Width. Also note in the comment a workaround for a peculiarity with an “in top-level form” being restored to a different monitor than the top-level form it’s associated with.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;loMonitors = newobject('SFMonitors', 'SFMonitors.prg')&lt;br /&gt;&lt;br /&gt;* For desktop or dockable forms, get the size of the virtual desktop. If&lt;br /&gt;* there's only one monitor, use the primary monitor size. Otherwise, use the&lt;br /&gt;* size of whichever monitor the form is on.&lt;br /&gt;&lt;br /&gt;if pemstatus(loForm, 'Desktop', 5) and (loForm.Dockable = 1 or ;&lt;br /&gt;  loForm.Desktop or loForm.ShowWindow = 2)&lt;br /&gt;  if loMonitors.nMonitors = 1&lt;br /&gt;    loSize = loMonitors&lt;br /&gt;  else&lt;br /&gt;    loSize = loMonitors.GetMonitorSize(.nLeft, .nTop)&lt;br /&gt;  endif loMonitors.nMonitors = 1&lt;br /&gt;  lnMaxLeft   = loSize.nLeft&lt;br /&gt;  lnMaxTop    = loSize.nTop&lt;br /&gt;  lnMaxWidth  = loSize.nWidth&lt;br /&gt;  lnMaxHeight = loSize.nHeight&lt;br /&gt;  lnMaxRight  = loSize.nRight&lt;br /&gt;  lnMaxBottom = loSize.nBottom&lt;br /&gt;&lt;br /&gt;* For any other forms, use the size of _screen.&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;  lnMaxLeft   = 0&lt;br /&gt;  lnMaxTop    = 0&lt;br /&gt;  lnMaxWidth  = _screen.Width&lt;br /&gt;  lnMaxHeight = _screen.Height&lt;br /&gt;  lnMaxRight  = lnMaxWidth&lt;br /&gt;  lnMaxBottom = lnMaxHeight&lt;br /&gt;endif pemstatus(loForm ...&lt;br /&gt;&lt;br /&gt;* Only restore Height and Width if the form is resizable.&lt;br /&gt;&lt;br /&gt;llTitleBar    = pemstatus(loForm, 'TitleBar', 5) and loForm.TitleBar = 1&lt;br /&gt;lnBorderStyle = iif(pemstatus(loForm, 'BorderStyle', 5), ;&lt;br /&gt;  loForm.BorderStyle, 0)&lt;br /&gt;if lnBorderStyle = 3&lt;br /&gt;  loForm.Width  = min(max(.nWidth,  0, loForm.MinWidth),  lnMaxWidth)&lt;br /&gt;  loForm.Height = min(max(.nHeight, 0, loForm.MinHeight), lnMaxHeight)&lt;br /&gt;endif lnBorderStyle = 3&lt;br /&gt;&lt;br /&gt;* Calculate the total width of the form, including the window borders.&lt;br /&gt;&lt;br /&gt;if llTitleBar&lt;br /&gt;  lnTotalWidth = loForm.Width + ;&lt;br /&gt;    iif(loForm.BorderStyle = 3, sysmetric(3), sysmetric(12)) * 2&lt;br /&gt;else&lt;br /&gt;  lnTotalWidth = loForm.Width + ;&lt;br /&gt;    icase(lnBorderStyle = 0, 0, ;&lt;br /&gt;      lnBorderStyle = 1, sysmetric(10), ;&lt;br /&gt;      lnBorderStyle = 2, sysmetric(12), ;&lt;br /&gt;      sysmetric(3)) * 2&lt;br /&gt;endif llTitleBar&lt;br /&gt;do case&lt;br /&gt;&lt;br /&gt;* If we're past the left edge, move it to the left edge.&lt;br /&gt;&lt;br /&gt;  case .nLeft &amp;lt; lnMaxLeft&lt;br /&gt;    loForm.Left = lnMaxLeft&lt;br /&gt;&lt;br /&gt;* If we're past the right edge of the screen, move it to the right edge.&lt;br /&gt;&lt;br /&gt;  case .nLeft + lnTotalWidth &amp;gt; lnMaxRight&lt;br /&gt;    loForm.Left = lnMaxRight - lnTotalWidth&lt;br /&gt;&lt;br /&gt;* We're cool, so put it where it was last time. If this form has ShowWindow&lt;br /&gt;* set to 1-In Top-Level Form and the current top-level form is on a&lt;br /&gt;* different monitor than the saved position, do this code twice; the first&lt;br /&gt;* time, it gives a value that places the form on the wrong monitor but it&lt;br /&gt;* works the second time.&lt;br /&gt;&lt;br /&gt;  otherwise&lt;br /&gt;    loForm.Left = .nLeft&lt;br /&gt;    loForm.Left = .nLeft&lt;br /&gt;endcase&lt;br /&gt;&lt;br /&gt;* Calculate the total height of the form, including the title bar and window&lt;br /&gt;* borders.&lt;br /&gt;&lt;br /&gt;if llTitleBar&lt;br /&gt;  lnTotalHeight = loForm.Height + sysmetric(9) + ;&lt;br /&gt;    icase(lnBorderStyle = 3, sysmetric(4), sysmetric(13)) * 2&lt;br /&gt;else&lt;br /&gt;  lnTotalHeight = loForm.Height + ;&lt;br /&gt;    icase(lnBorderStyle = 0, 0, ;&lt;br /&gt;      lnBorderStyle = 1, sysmetric(11), ;&lt;br /&gt;      lnBorderStyle = 2, sysmetric(13), ;&lt;br /&gt;      sysmetric(4)) * 2&lt;br /&gt;endif llTitleBar&lt;br /&gt;do case&lt;br /&gt;&lt;br /&gt;* If we're past the top edge, move it to the top edge.&lt;br /&gt;&lt;br /&gt;  case .nTop &amp;lt; lnMaxTop&lt;br /&gt;    loForm.Top = lnMaxTop&lt;br /&gt;&lt;br /&gt;* If we're past the bottom edge of the screen, move it to the bottom edge.&lt;br /&gt;* Note that we have to account for the height of the title bar and top and&lt;br /&gt;* bottom window frame.&lt;br /&gt;&lt;br /&gt;  case .nTop + lnTotalHeight &amp;gt; lnMaxBottom&lt;br /&gt;    loForm.Top = lnMaxBottom - lnTotalHeight&lt;br /&gt;&lt;br /&gt;* We're cool, so put it where it was last time.&lt;br /&gt;&lt;br /&gt;  otherwise&lt;br /&gt;    loForm.Top = .nTop&lt;br /&gt;endcase&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7783460844192770608?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7783460844192770608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7783460844192770608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7783460844192770608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7783460844192770608'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/02/multiple-monitor-class.html' title='Multiple Monitor Class'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6909670314379123404</id><published>2010-01-20T10:11:00.001-06:00</published><updated>2010-01-20T10:11:35.859-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='West Wind HTML Help Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML Help'/><title type='text'>My First HTML Help Builder Add-In</title><content type='html'>&lt;p&gt;Although I’ve used &lt;a href="http://www.west-wind.com/"&gt;West Wind HTML Help Builder&lt;/a&gt; to create HTML Help (CHM) files for my applications for more than 10 years, and have done lots of advanced things such as supporting dynamic text and generating help projects programmatically, I haven’t created an add-in for it. HTML Help Builder supports add-ins using a simple mechanism: once you’ve registered an add-in, it appears in the Tools, Add-Ins menu, ready to run whenever you need it.&lt;/p&gt;  &lt;p&gt;The add-in I created does two things:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Fixes the icon for the INDEX topic. Every HTML Help Builder project has one topic of type INDEX, and I use that as the “welcome to this help file” topic. Unfortunately, when it builds the CHM, HTML Help Builder uses the wrong icon for that topic. I always had to manually run HTML Help Workshop, edit the icon for that topic (from “11” to “auto”), and rebuild the CHM file. My add-in does that automatically. &lt;/li&gt;    &lt;li&gt;Turns on searching for the HTML content. In addition to providing CHM files, we post our help files as HTML on our Web site (for example, the &lt;a href="http://www.stonefieldquery.com/OnlineHelp/SDK/index.htm"&gt;Stonefield Query SDK help file&lt;/a&gt;), both so Google can index it and so we can provide links to help topics in support messages without having to say “open the help file, open the “How To” heading, then navigate to the “Whatever” topic”. HTML Help Builder recently added a search function to the HTML files it generates, but the generation of that function is turned off by default and I often forget to turn it on. My add-in automatically changes one of the generated files to enable search. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Add-ins can be VFP code (PRG or APP/EXE), a .Net assembly, or a COM object. You register an add-in using the Tools, Add-In Manager function. This is the only cumbersome part of the process: because the add-ins registry table (AddIns.DBF) is stored in the program folder, under Vista or Windows 7 it’s read-only, so you have to launch HTML Help Builder as administrator. Perhaps in a future release, author Rick Strahl will move this file to a writable folder so this isn’t necessary.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_xP_SR62fwds/S1crNC2LW9I/AAAAAAAAAUY/_OyH2OOEcpY/s1600-h/image%5B4%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://lh5.ggpht.com/_xP_SR62fwds/S1crNt1D2iI/AAAAAAAAAUc/7K-XwpbDY7M/image_thumb%5B2%5D.png?imgmax=800" width="490" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In my case, I created a class named FixHelp in FixHelp.PRG, and put the code for the add-in into the Activate method. Here’s the code for the class (thanks to Chris Wolf for handling the 64-bit stuff). It should be easy enough to follow.&lt;/p&gt;  &lt;pre&gt;#define CSIDL_PROGRAM_FILES 0x0026&lt;br /&gt;#define HKEY_LOCAL_MACHINE  -2147483646&lt;br /&gt;&lt;br /&gt;define class FixHelp as custom&lt;br /&gt;  function Activate(toHelpForm)&lt;br /&gt;    local loHelp, ;&lt;br /&gt;      lcProjectFile, ;&lt;br /&gt;      lcPath, ;&lt;br /&gt;      lcFile, ;&lt;br /&gt;      lcText, ;&lt;br /&gt;      lcProgramFiles, ;&lt;br /&gt;      lcRegVCX, ;&lt;br /&gt;      loRegistry, ;&lt;br /&gt;      lcKey, ;&lt;br /&gt;      llGotPath, ;&lt;br /&gt;      lcLogFile&lt;br /&gt;&lt;br /&gt;* Get a reference to the help object, then figure out the path for the&lt;br /&gt;* current project.&lt;br /&gt;&lt;br /&gt;    loHelp        = toHelpForm.oHelp &lt;br /&gt;    lcProjectFile = loHelp.cFileName&lt;br /&gt;    lcPath        = addbs(justpath(lcProjectFile))&lt;br /&gt;&lt;br /&gt;* Turn on searching in case it wasn't turned on when the files were&lt;br /&gt;* generated.&lt;br /&gt;&lt;br /&gt;    lcFile = lcPath + 'index2.htm'&lt;br /&gt;    lcText = filetostr(lcFile)&lt;br /&gt;    lcText = strtran(lcText, 'var AllowSearch = false;', ;&lt;br /&gt;      'var AllowSearch = true;')&lt;br /&gt;    strtofile(lcText, lcFile)&lt;br /&gt;&lt;br /&gt;* Remove the image number for the root node so it defaults to &amp;quot;auto&amp;quot;.&lt;br /&gt;&lt;br /&gt;    lcFile = forceext(lcProjectFile, 'hhc')&lt;br /&gt;    lcText = filetostr(lcFile)&lt;br /&gt;    lcText = strtran(lcText, '&lt;param value="11" name="ImageNumber" /&gt;' + ;&lt;br /&gt;      chr(13) + chr(10), '', 1, 1)&lt;br /&gt;    strtofile(lcText, lcFile)&lt;br /&gt;&lt;br /&gt;* Find the location of HTML Help Workshop. Try the 32-bit registry key&lt;br /&gt;* first. If that doesn't work, try the 64-bit key.&lt;br /&gt;&lt;br /&gt;    lcProgramFiles = This.GetSpecialFolder(CSIDL_PROGRAM_FILES)&lt;br /&gt;    lcRegVCX       = addbs(lcProgramFiles) + ;&lt;br /&gt;      'Microsoft Visual FoxPro 9\FFC\Registry.vcx'&lt;br /&gt;    loRegistry     = newobject('Registry', lcRegVCX)&lt;br /&gt;    lcPath         = ''&lt;br /&gt;    lcKey          = '\Microsoft\Windows\CurrentVersion\App Paths\hhw.exe'&lt;br /&gt;    llGotPath      = loRegistry.GetRegKey('Path', @lcPath, ;&lt;br /&gt;      'SOFTWARE' + lcKey, HKEY_LOCAL_MACHINE) = 0&lt;br /&gt;    if not llGotPath&lt;br /&gt;      llGotPath = loRegistry.GetRegKey('Path', @lcPath, ;&lt;br /&gt;        '\SOFTWARE\Wow6432Node' + lcKey, HKEY_LOCAL_MACHINE) = 0&lt;br /&gt;    endif not llGotPath&lt;br /&gt;&lt;br /&gt;* Compile the CHM file if we found it. Log the results.&lt;br /&gt;    &lt;br /&gt;    if llGotPath&lt;br /&gt;      lcPath        = This.ShortPath(forcepath('hhc.exe', lcPath))&lt;br /&gt;      lcProjectFile = '&amp;quot;' + forceext(lcProjectFile, 'hhp') + '&amp;quot;'&lt;br /&gt;      lcLogFile     = '&amp;quot;' + addbs(justpath(lcProjectFile)) + 'log.txt&amp;quot;'&lt;br /&gt;      erase (lcLogFile)&lt;br /&gt;      run &amp;amp;lcPath &amp;amp;lcProjectFile &amp;gt; &amp;amp;lcLogFile&lt;br /&gt;      if file(lcLogFile)&lt;br /&gt;        declare integer ShellExecute in SHELL32.DLL ;&lt;br /&gt;          integer nWinHandle, string cOperation, string cFileName, ;&lt;br /&gt;          string cParameters, string cDirectory, integer nShowWindow&lt;br /&gt;        ShellExecute(0, 'Open', lcLogFile, '', '', 1)&lt;br /&gt;      else&lt;br /&gt;        erase (lcLogFile)&lt;br /&gt;      endif file(lcLogFile)&lt;br /&gt;    else&lt;br /&gt;      messagebox('Cannot locate HTML Help Workshop')&lt;br /&gt;    endif llGotPath&lt;br /&gt;    return .T.&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;* Get the short (8.3) path for the specified path.&lt;br /&gt;&lt;br /&gt;  function ShortPath(tcPath)&lt;br /&gt;    local lcPath, ;&lt;br /&gt;      lnLength, ;&lt;br /&gt;      lcBuffer, ;&lt;br /&gt;      lnResult&lt;br /&gt;    declare integer GetShortPathName in Win32API ;&lt;br /&gt;      string @lpszLongPath, string @lpszShortPath, integer cchBuffer&lt;br /&gt;    lcPath   = tcPath&lt;br /&gt;    lnLength = 260&lt;br /&gt;    lcBuffer = space(lnLength)&lt;br /&gt;    lnResult = GetShortPathName(@lcPath, @lcBuffer, lnLength)&lt;br /&gt;    return iif(lnResult = 0, '', left(lcBuffer, lnResult))&lt;br /&gt;  endfunc&lt;br /&gt;&lt;br /&gt;* Get the location of the specified &amp;quot;special&amp;quot; folder.&lt;br /&gt;  &lt;br /&gt;  function GetSpecialFolder(tnFolder)&lt;br /&gt;    local lcSpecialFolderPath, ;&lt;br /&gt;      lcPath&lt;br /&gt;    lcSpecialFolderPath = space(255)&lt;br /&gt;    declare SHGetSpecialFolderPath in shell32.dll ;&lt;br /&gt;      long hwndOwner, string @cSpecialFolderPath, long nWhichFolder&lt;br /&gt;    SHGetSpecialFolderPath(0, @lcSpecialFolderPath, tnFolder)&lt;br /&gt;    lcPath = alltrim(lcSpecialFolderPath)&lt;br /&gt;    return lcPath&lt;br /&gt;  endfunc&lt;br /&gt;enddefine&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Now when I want to generate a help file, I click Build Help, select the “Don’t build Help file” option (since my add-in will generate the CHM, there’s no need to do it twice), and let it run. I then choose Tools, Add-Ins, Generate Help File (my add-in) to tweak the generated files and build the CHM. There’s a couple of less manual tasks for my build process.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6909670314379123404?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6909670314379123404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6909670314379123404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6909670314379123404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6909670314379123404'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2010/01/my-first-html-help-builder-add-in.html' title='My First HTML Help Builder Add-In'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_xP_SR62fwds/S1crNt1D2iI/AAAAAAAAAUc/7K-XwpbDY7M/s72-c/image_thumb%5B2%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6722798639846057215</id><published>2009-12-30T17:30:00.001-06:00</published><updated>2009-12-30T17:30:25.172-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='OLEDB'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>DateTimes Through OLEDB in VFP</title><content type='html'>&lt;p&gt;Rob Eisler wrote an interesting &lt;a href="http://roberteisler.blogspot.com/2009/12/datetimes-through-oledb-in-vfp.html"&gt;blog post&lt;/a&gt; about an issue he ran into dealing with certain DateTime values stored in SQL Server accessed in VFP through OLEDB.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6722798639846057215?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6722798639846057215/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6722798639846057215' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6722798639846057215'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6722798639846057215'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/12/datetimes-through-oledb-in-vfp.html' title='DateTimes Through OLEDB in VFP'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1332354599129129043</id><published>2009-12-29T17:23:00.001-06:00</published><updated>2009-12-29T17:23:58.774-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><title type='text'>Axialis Software Sale</title><content type='html'>&lt;p&gt;I regularly use &lt;a href="http://www.axialis.com/purchase/"&gt;Axialis Software’s&lt;/a&gt; IconWorkshop to create icons and other images. Good news: it (and other Axialis products) are on sale for half-price until the end of the year. That makes IconWorkshop just $34.95!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1332354599129129043?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1332354599129129043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1332354599129129043' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1332354599129129043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1332354599129129043'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/12/axialis-software-sale.html' title='Axialis Software Sale'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3305170931447996283</id><published>2009-12-18T11:58:00.001-06:00</published><updated>2009-12-18T11:58:32.409-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Press Release'/><title type='text'>OEM Agreement with Dydacomp</title><content type='html'>&lt;p&gt;Here’s a link for a press release about an OEM agreement Stonefield Software and Dydacomp recently signed:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://finance.yahoo.com/news/Stonefield-Software-Inc-Maker-bw-2728191172.html?x=0&amp;amp;.v=1" href="http://finance.yahoo.com/news/Stonefield-Software-Inc-Maker-bw-2728191172.html?x=0&amp;amp;.v=1"&gt;http://finance.yahoo.com/news/Stonefield-Software-Inc-Maker-bw-2728191172.html?x=0&amp;amp;.v=1&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3305170931447996283?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3305170931447996283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3305170931447996283' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3305170931447996283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3305170931447996283'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/12/oem-agreement-with-dydacomp.html' title='OEM Agreement with Dydacomp'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3229187923980158605</id><published>2009-11-09T14:22:00.001-06:00</published><updated>2009-11-09T14:22:18.005-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Signing'/><title type='text'>Executable Signing with Inno Setup</title><content type='html'>&lt;p&gt;As I discussed a couple of years ago, &lt;a href="http://doughennig.blogspot.com/2007/12/code-signing-your-vfp-exes.html"&gt;code signing your executables&lt;/a&gt; is important for a variety of reasons. Our installation creation tool of choice is &lt;a href="http://www.jrsoftware.org/"&gt;Inno Setup&lt;/a&gt; and version 5.2.4 released in March 2009 made it easier to sign the setup executable through the new Signtool directive in the [Setup] section.&lt;/p&gt;  &lt;p&gt;This directive works like this (assuming you already have a digital certificate):&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Run the Inno Setup UI and choose Configure Sign Tools in the Tools menu. &lt;/li&gt;    &lt;li&gt;Create a new “sign tool” by clicking Add and specifying a name and the command line to execute your signing application. For example, I created one called “Standard” with the following command line to call Microsoft’s SIGNTOOL.EXE: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;quot;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\signtool.exe&amp;quot; sign /f CertPath\mycert.pfx /p MyPassword&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;where &lt;em&gt;CertPath\mycert.pfx&lt;/em&gt; is the name and location of the PFX file and &lt;em&gt;MyPassword&lt;/em&gt; is the password.&lt;/p&gt; &lt;/blockquote&gt;  &lt;ul&gt;   &lt;li&gt;In the [Setup] section of your Inno Setup script (ISS) file, add the following: &lt;/li&gt; &lt;/ul&gt;  &lt;blockquote&gt;   &lt;p&gt;SignTool=Standard /d $qStonefield Query Installer$q $f&lt;/p&gt; &lt;/blockquote&gt;  &lt;blockquote&gt;   &lt;p&gt;Specify the name of your “sign tool” in place of “Standard” and a descriptive name for your setup program in place of “Stonefield Query Installer.” $q is an Inno Setup constant representing a quote and $f is a constant containing the name and path of the setup EXE created by Inno Setup.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, every time you build your setup using the Inno Setup UI, your setup executable is automatically signed.&lt;/p&gt;  &lt;p&gt;However, I also like to build setups as part of a build process, so I call the Inno Setup compiler via the command line. Once I added the SignTool directive in my ISS files, my command line builds failed.&lt;/p&gt;  &lt;p&gt;Here’s the solution: you need to add the same “sign tool” definition you did to the UI to the command line. For example:&lt;/p&gt;  &lt;p&gt;&amp;quot;C:\Program Files\Inno Setup 5\iscc&amp;quot; &amp;quot;/sStandard=C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\signtool.exe sign /f CertPath\mycert.pfx /p MyPassword $p&amp;quot; sfquery.iss&lt;/p&gt;  &lt;p&gt;Now, whether I build using the UI or through a build process, my setup executable is always signed.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3229187923980158605?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3229187923980158605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3229187923980158605' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3229187923980158605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3229187923980158605'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/11/executable-signing-with-inno-setup.html' title='Executable Signing with Inno Setup'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-932954899998804879</id><published>2009-11-06T15:12:00.001-06:00</published><updated>2009-11-06T15:12:12.620-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PDF'/><category scheme='http://www.blogger.com/atom/ns#' term='Outlook'/><category scheme='http://www.blogger.com/atom/ns#' term='Foxit'/><title type='text'>Previewing PDF Attachments in Outlook 2007</title><content type='html'>&lt;p&gt;One thing that’s always annoyed me about Outlook is that there’s no built-in previewer for PDF attachments on emails. I always had to double-click the attachment to write it out to a temporary file and then open the application (Adobe Reader or whatever) to view it.&lt;/p&gt;  &lt;p&gt;If necessity is the mother of invention, annoyance is the mother of Google (or Bing or whatever) searches. Tim Heuer’s &lt;a href="http://timheuer.com/blog/archive/2007/02/27/14001.aspx#9409"&gt;Foxit PDF Preview Handler&lt;/a&gt; sounded pretty good, so after installing &lt;a href="http://www.foxitsoftware.com/pdf/reader/"&gt;Foxit&lt;/a&gt; (ya gotta love a tool with “Fox” in its name), I installed Tim’s previewer and voila, PDF preview in Outlook. Thanks, Tim!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-932954899998804879?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/932954899998804879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=932954899998804879' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/932954899998804879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/932954899998804879'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/11/previewing-pdf-attachments-in-outlook.html' title='Previewing PDF Attachments in Outlook 2007'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-8304706035180777411</id><published>2009-10-26T11:09:00.001-06:00</published><updated>2009-10-26T11:09:16.254-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Dates for Southwest Fox 2010 Announced</title><content type='html'>&lt;p&gt;At the closing session for Southwest Fox 2009, we announced the dates for Southwest Fox 2010: October 14-17, 2010. Planning for next year’s conference started &lt;strong&gt;before&lt;/strong&gt; Southwest Fox 2009 had even commenced.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_xP_SR62fwds/SuXXucNZD6I/AAAAAAAAAT0/oFOaP3BKmA0/s1600-h/SWFox2010_Animated%5B3%5D.gif"&gt;&lt;img style="display: inline" title="SWFox2010_Animated" alt="SWFox2010_Animated" src="http://lh5.ggpht.com/_xP_SR62fwds/SuXXu3TcxCI/AAAAAAAAAT4/1RLw36N2Axw/SWFox2010_Animated_thumb%5B1%5D.gif?imgmax=800" width="517" height="97" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-8304706035180777411?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/8304706035180777411/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=8304706035180777411' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8304706035180777411'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/8304706035180777411'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/dates-for-southwest-fox-2010-announced.html' title='Dates for Southwest Fox 2010 Announced'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_xP_SR62fwds/SuXXu3TcxCI/AAAAAAAAAT4/1RLw36N2Axw/s72-c/SWFox2010_Animated_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1074082816469511868</id><published>2009-10-23T18:41:00.001-06:00</published><updated>2009-10-23T18:41:20.913-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2009, Day 3</title><content type='html'>&lt;p&gt;I slept in slightly (6:30 a.m.), which was good after several days of sleep deprivation. I went to do my second Stonefield Query vendor session but no one showed up (Duh! It’s 8:30 in the morning on the last day of the conference), so I went to Menachem Bazian’s session on &lt;a href="http://www.swfox.net/sessionstrack.aspx#Open_Source_Tools" target="_blank"&gt;open source tools&lt;/a&gt;. He presented quite a few tools I wasn’t familiar with but want to check out, including SugarCRM.&lt;/p&gt;  &lt;p&gt;Next I went to Jim Nelson’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#PEMEditor:_Swiss_Army_Knife_for_the_Forms_Designer_--_the_What_and_How" target="_blank"&gt;PEM Editor&lt;/a&gt; session. I mostly went because I mentored Jim (not that he needed my help) and worked with him a bit on PEM Editor. However, even though I’ve been using it for almost a year, I learned several things I didn’t know. More importantly, I saw how Jim uses some features I did know about but hadn’t used much, and now I really see how they were intended to be used.&lt;/p&gt; &lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/SuJNJv_UXSI/AAAAAAAAATc/wGwu8ucXMUA/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh6.ggpht.com/_xP_SR62fwds/SuJNKd1-soI/AAAAAAAAATg/pCyjH8cTNas/clip_image002_thumb%5B1%5D.jpg?imgmax=800" width="590" height="253" /&gt;&lt;/a&gt;  &lt;p&gt;In the last timeslot of the conference, I repeated my GDIPlusX session. I must admit I was watching the door to see if a crowd suddenly formed but it was uneventful.&lt;/p&gt;  &lt;p&gt;Mike Feltman and Alan Stevens livened up the last day by doing their sessions wearing kilts. Certainly not something you see at the average conference! Alan’s dad said he liked Alan’s red “dress”.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_xP_SR62fwds/SuJNKgfOu_I/AAAAAAAAATk/e56xTjC8O7g/s1600-h/36989696%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="36989696" border="0" alt="36989696" src="http://lh6.ggpht.com/_xP_SR62fwds/SuJNLOS_5zI/AAAAAAAAATo/HJeenlIVovg/36989696_thumb%5B2%5D.jpg?imgmax=800" width="609" height="458" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;We wound up the official part of the conference with the closing session, including announcing the dates for Southwest Fox 2010 (October 14-17) and drawing prizes. Here’s Tamar presenting an Amazon Kindle, courtesy of Sybase:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuJNLcCGjMI/AAAAAAAAATs/EElhr2XGEAM/s1600-h/Southwest%20Fox%202009%20017%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Southwest Fox 2009 017" border="0" alt="Southwest Fox 2009 017" src="http://lh3.ggpht.com/_xP_SR62fwds/SuJNLztRfBI/AAAAAAAAATw/1xOs6lFhjME/Southwest%20Fox%202009%20017_thumb%5B2%5D.jpg?imgmax=800" width="600" height="452" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After cleaning up for an hour or so, we met with the Arizona Golf Resort staff for a post-conference debriefing (not the Feltman-Stevens kind). We thanked them for all their hard work and especially how they really partnered with us to help fit what we wanted into our budget. We pointed out a few things they can improve, but they were all minor things.&lt;/p&gt;  &lt;p&gt;After a brief rest, I went to the Feltman’s suite for the speaker dinner. Rather than going to a restaurant this year, we took the suggestion of several speakers and had a BBQ (the Arizona Golf Resort provides a couple of Weber grills between groups of rooms, at least in our area). We had NY strips (chicken for those who wanted), sweet potatoes, mixed veggies, salad, and peach crisp. This was definitely the way to go; it was much less formal and a lot more fun (although Therese and Tamar had to spend some time preparing things). About 8:00, other attendees started showing up and the party kicked into high gear. Kevin Ragsdale kept a group of us amused for an hour, doing impressions and hilarious riffs. Mike Feltman figures he should be our keynote speaker for next year. I finally called it a night at about 2:30.&lt;/p&gt;  &lt;p&gt;As I said at the closing session, this was easily the most fun Southwest Fox, or conference of any kind, ever. Everyone seemed to be energetic and full of fun, and the camaraderie was off the charts! As I mentioned in an earlier post, I really think Twitter had a lot to do with it. Like CompuServe of old, Twitter is a place for the conversation to carry on year-round. Thanks to Twitter, people I’d only briefly met at previous conferences (or hadn’t met at all!) seemed like old friends. I’m happy to see that several new people joined the conversation right after the conference ended; more new friends!&lt;/p&gt;  &lt;p&gt;Thanks to everyone who came to Southwest Fox and made it a truly outstanding event: speakers, attendees, Arizona Golf Resort staff, exhibitors. I’d especially like to thank:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Therese Schummer and Marshal Granor, who made it possible for Rick, Tamar, and I to see more sessions than ever, and took a large burden off our shoulders.&lt;/li&gt;    &lt;li&gt;My partners Rick and Tamar for organizing this conference so it ran as smooth as glass.&lt;/li&gt;    &lt;li&gt;Mike and Toni Feltman for opening their room to everyone and creating a memorable night-after-night party.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;See you all next year!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1074082816469511868?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1074082816469511868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1074082816469511868' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1074082816469511868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1074082816469511868'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/southwest-fox-2009-day-3.html' title='Southwest Fox 2009, Day 3'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_xP_SR62fwds/SuJNKd1-soI/AAAAAAAAATg/pCyjH8cTNas/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2818632141061565595</id><published>2009-10-23T18:07:00.001-06:00</published><updated>2009-10-23T18:07:49.322-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='GDIPlusX'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Southwest Fox 2009, Day 2</title><content type='html'>&lt;p&gt;Once again, I was up early but really fired up: today was F1 racing day, something Rick, Cathy, and I have been trashing talking each other over for the past year.&lt;/p&gt;  &lt;p&gt;After breakfast, I presented my &lt;a href="http://www.swfox.net/sessionstrack.aspx#Practical_Uses_for_GDIPlusX" target="_blank"&gt;GDIPlusX&lt;/a&gt; session. This was a fun session to do. I started by going over the basics of GDIPlusX: how to draw, using colors, drawing text and images, etc. Then I dug into practical uses, including measuring strings accurately, creating gradient images, and implement a “lightbox” effect &lt;a href="http://weblogs.foxite.com/bernardbout/archive/2008/09/13/6768.aspx" target="_blank"&gt;Bernard Bout&lt;/a&gt; blogged about. Almost all of the examples I showed came from production code I use in Stonefield Query.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuJFS9L4FmI/AAAAAAAAATE/dkTC8YaZDn0/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh4.ggpht.com/_xP_SR62fwds/SuJFTfn0vjI/AAAAAAAAATI/yGjz8GtqR3I/clip_image002_thumb%5B1%5D.jpg?imgmax=800" width="507" height="408" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Next was my Stonefield Query vendor session. Interestingly, all of the people who showed up were customers or already familiar with Stonefield Query, so rather than doing the usual demo, I covered the same things we discussed at Friday night’s developer meeting. One of the cool new features I showed is “application views”. The problem with most reporting solutions is that they show a database-centric view of the data in an application. Even with nice descriptive names for tables and fields, it still isn’t a natural view of the data for the user. With application views, you can mold the data dictionary so it’s organized exactly like the data entry forms in your application, making it much easier for the user to find exactly which items they want to report on.&lt;/p&gt;  &lt;p&gt;I was going to see Alan Steven’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#Advanced_Principles_of_Solid_Object_Oriented_Design" target="_blank"&gt;OOP&lt;/a&gt; session but started chatting outside with Cathy and Toni (and others who happened by from time to time) and ended up spending the entire session there. That’s one of the nice things about a conference: if you don’t feel like going to a session, you can meet new people, chat with friends, and discuss new solutions to problems.&lt;/p&gt;  &lt;p&gt;Lunch was build your own hamburgers with either meat patties or portobello mushrooms. Like some others, I actually went for both, which was a very tasty combination.&lt;/p&gt;  &lt;p&gt;After lunch, I went to see Jody Meyer’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#Speak_to_Me:_Applying_MS_Office_Automation_to_Real_Business_Needs" target="_blank"&gt;Office Automation&lt;/a&gt; session. Jody is one of our first-time speakers so I wanted to see how she did, plus learn more about Office Automation. One of my developers, Trevor Mansuy, was also in this session and had lots of questions for Jody, as he’s currently working on a couple of new features for Stonefield Query involving Excel.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_xP_SR62fwds/SuJFTo5_7ZI/AAAAAAAAATM/KNN7lncSbPE/s1600-h/Southwest%20Fox%202009%20005%5B3%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="Southwest Fox 2009 005" border="0" alt="Southwest Fox 2009 005" src="http://lh5.ggpht.com/_xP_SR62fwds/SuJFUGWqr6I/AAAAAAAAATQ/FTxd6YCXOYo/Southwest%20Fox%202009%20005_thumb%5B1%5D.jpg?imgmax=800" width="621" height="467" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Next up was Christof’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#Excelporting" target="_blank"&gt;Excelporting&lt;/a&gt; session. Christof did his usual excellent job and was even funnier than usual. Creating Excel documents by outputting XML is not only incredibly fast but doesn’t require a license for Excel. Unfortunately, and this was totally not his fault, the three hours of sleep I was getting for the past several nights finally caught up to me and I dozed off several times. Steve Bodnar was quite impressed with the various angles I managed to twist myself into without actually falling off my chair! Thank goodness Christof’s white paper and samples are on the conference CD so I can see what I missed.&lt;/p&gt;  &lt;p&gt;The last timeslot of the day was the repeat of my VPC session. Shortly after I started, more people started filing into the room. I mentioned that there were open seats near the front, but they seemed content to stand at the back. Then more people came in. Then more. And even more. By this point, there were at least 40 people standing at the back of the room and a lot just outside the room. I knew something was up but had no idea what was going on. Suddenly, Craig Boyd screamed out and the attack began: I was hit by HUNDREDS of darts from the 40 or so Nerf guns these people hid behind their backs. The attack lasted a minute or so, then Craig yelled “Pull back” and they all filed out, leaving me to stand in a pile of darts. If you want to watch for yourself, at least three people recorded it and put it on YouTube:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=rRoKWdG7cV0"&gt;http://www.youtube.com/watch?v=rRoKWdG7cV0&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=jxLKBmhxIvI"&gt;http://www.youtube.com/watch?v=jxLKBmhxIvI&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=VO6MVu1eEJY"&gt;http://www.youtube.com/watch?v=VO6MVu1eEJY&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Talking to Craig later, this was apparently revenge for my thinking about messing with him on Friday. Let me get this straight: you want to get revenge for something I thought about pretending to do? In the words of the immortal Bugs Bunny, “of course you realize this means war”. You should come to Southwest Fox 2010 just to see what I have planned for Craig!&lt;/p&gt;  &lt;p&gt;Rick, Therese, Christof, Emerson, and I were going to meet several others for sushi but couldn’t find the restaurant, so we found a sushi place close to the hotel and settled in there. Wow, was it good! Excellent sushi and large portions.&lt;/p&gt;  &lt;p&gt;Finally, the moment we’d been waiting for: racing at the &lt;a href="http://www.f1racefactory.com/" target="_blank"&gt;F1 Race Factory&lt;/a&gt;. More than 20 people showed up for this year’s event. Rick and I suspected Jody, Toni, and Cathy had something planned: Jody carried a large bag into the building and wouldn’t show us what was in it. Rick and I figured there was a conspiracy against us, with Jody and Toni acting as blockers so Cathy could zoom by. However, what they really planned was WAY cooler:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuJFUd02GsI/AAAAAAAAATU/9FaVTT3cJcs/s1600-h/IMG_4739%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="IMG_4739" border="0" alt="IMG_4739" src="http://lh5.ggpht.com/_xP_SR62fwds/SuJFU9MbmAI/AAAAAAAAATY/0hNQYHtqYns/IMG_4739_thumb%5B2%5D.jpg?imgmax=800" width="601" height="451" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The Pink Ladies and Danny Zuko ride again!&lt;/p&gt;  &lt;p&gt;Unfortunately, it didn’t help Cathy: Paul Mrozowski finished first, I was second, Rick was third, and Cathy was 99th or something like that (it doesn’t really matter once you’re that far down &amp;lt;gd&amp;amp;r&amp;gt;).&lt;/p&gt;  &lt;p&gt;Not as many people were in the second race, and it was a lot more wild (at least for me). I spun out a couple of times and was black-flagged for taking Dave Hanna into a wall. However, it was great fun and we’ll definitely be back next year.&lt;/p&gt;  &lt;p&gt;We got back to the Arizona Golf Resort about 11:30 and proceeded to the Feltman’s suite for another evening of socializing. I called it a night at about 1:00 because I had an 8:30 session.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2818632141061565595?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2818632141061565595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2818632141061565595' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2818632141061565595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2818632141061565595'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/southwest-fox-2009-day-2.html' title='Southwest Fox 2009, Day 2'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_xP_SR62fwds/SuJFTfn0vjI/AAAAAAAAATI/yGjz8GtqR3I/s72-c/clip_image002_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7965711181560043464</id><published>2009-10-23T17:16:00.001-06:00</published><updated>2009-10-23T17:16:26.001-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='Virtual PC'/><title type='text'>Southwest Fox 2009, Day 1</title><content type='html'>&lt;p&gt;I woke up at 5:30 a.m. Friday (pretty much standard for me at conferences), so I did a little email and then went to the conference center to set up room signs, test projectors, and have breakfast.&lt;/p&gt;  &lt;p&gt;I then headed to Jim Nelson’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#FoxCharts_-_Great_Looking,_Modern_Charts_in_Pure_VFP_Code" target="_blank"&gt;FoxCharts&lt;/a&gt; session. Jim started by showing an overview of what you can do with FoxCharts, then went over the basics of creating charts, building example upon example. He went through the majority of the properties and methods to show how easy it is to customize a chart. Finally, he showed a very cool Visual Chart Designer (VCD) he created that acts not just as a builder for developers but a simple tool allowing users to customize their charts visually. VCD isn’t part of the FoxCharts VFPX project yet but it will be soon.&lt;/p&gt; &lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuI5PgcR6HI/AAAAAAAAASs/g8hkL77-mqI/s1600-h/clip_image002%5B4%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh6.ggpht.com/_xP_SR62fwds/SuI5QD4P4II/AAAAAAAAASw/XIQrLyQQqNY/clip_image002_thumb%5B1%5D.gif?imgmax=800" width="599" height="403" /&gt;&lt;/a&gt;  &lt;p&gt;Next I went to Craig Boyd’s &lt;a href="http://www.swfox.net/sessionstrack.aspx#Virtual_Earth_for_Visual_FoxPro" target="_blank"&gt;Virtual Earth&lt;/a&gt; session. Craig showed the basics of Virtual Earth (now called Bing Maps) and discussed the API. Then he showed a wrapper he created for VFP developers making it very easy to incorporate mapping into your own applications. Apparently, this is the most complete wrapper available in any language: he exposes more properties and methods than even .Net developers have. One cool technique he showed is how to use JSON to serialize a VFP object and pass it to JavaScript, something I haven’t seen done before.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuI5Qr_JLHI/AAAAAAAAAS0/mPyb5aeOiCo/s1600-h/clip_image001%5B4%5D.gif"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image001" border="0" alt="clip_image001" src="http://lh6.ggpht.com/_xP_SR62fwds/SuI5RrZBBJI/AAAAAAAAAS4/69Oscg499ws/clip_image001_thumb%5B1%5D.gif?imgmax=800" width="322" height="322" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Part way through Craig’s session, he excused himself to refresh his water glass. I told him I’d do it for him and took his glass into the hallway to refill it. As I was coming back into the room, an evil idea hit me: since he was the only one facing the back of the room, I could do something to mess with him and no one else would be the wiser. I decided to pretend to, ahem, relieve myself in his glass. Unfortunately, I couldn’t catch his eye as he was in his usual Boyd demo zone (if you’ve seen Craig speak, you know what I’m talking about), so I just took it back up to the front. After the session, I told Craig what I’d thought about doing and he thought it would have been really funny. Little did I know this would come back to bite me on Saturday!&lt;/p&gt;  &lt;p&gt;The next timeslot was my session on &lt;a href="http://www.swfox.net/sessionstrack.aspx#Microsoft_Virtual_PC_for_VFP_Developers" target="_blank"&gt;Microsoft Virtual PC&lt;/a&gt;. I showed how to install VFP, how to create a “base” virtual machine with the operating system of your choice, how to create “working” VMs, and how to manage your VMs. I then went through a variety of uses for VMs, including testing installs for missing dependencies, testing applications in different environment (such as Windows regional settings different than your usual ones), demos and presentations, installing beta versions of applications or operating systems, and so on.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_xP_SR62fwds/SuI5R8QEilI/AAAAAAAAAS8/hHOPc3ifnrI/s1600-h/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="clip_image002" border="0" alt="clip_image002" src="http://lh5.ggpht.com/_xP_SR62fwds/SuI5SBICdOI/AAAAAAAAATA/DtO_-a0PHTw/clip_image002_thumb%5B1%5D.jpg?imgmax=800" width="332" height="397" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Lunch was deli-style: make your own sandwiches, potato salad, etc. Very tasty and interesting conversation. One thing we forgot to do was draw for prizes; Tamar remembered after lunch. Oh well, more prizes for the dinner party.&lt;/p&gt;  &lt;p&gt;After lunch, I sat in on Cathy Pountney’s back-to-back &lt;a href="http://www.swfox.net/sessionstrack.aspx#Making_the_Most_of_VFP_9_SP2_Reports_(Part_I)" target="_blank"&gt;reporting sessions&lt;/a&gt;. As usual, Cathy showed very cool techniques, including how to automatically shrink fonts so text fits in the allotted space, how to force page breaks, and adding text and graphic watermarks.&lt;/p&gt;  &lt;p&gt;One of the really interesting things about this year’s Southwest Fox was how many people were on Twitter, tweeting about the sessions they were in. At one point, I was sitting beside Mike Roof of Matrix Imaging and he started laughing. When I leaned over to see what was so funny, he pointed at a tweet Steve Bodnar had just posted about me being on my hands and knees in Cathy’s session (I was plugging in a power bar which had become unplugged). That started some funny back-and-forth comments and even spilled into some “real time” jocularity. I think Twitter is directly responsible for what really feels to me like a strengthening of the VFP community of late. If you aren’t on Twitter, it’s time for you to join the conversation!&lt;/p&gt;  &lt;p&gt;One change we made in the schedule this year was to set aside a “normal” timeslot for bonus sessions, rather than always having them in the evening when people want to socialize. The two sessions at 5:15 were “Show Us Your Apps” and “VFPX Users Meeting”. I sat in about half of the SUYA session, watching Dave Tucker demo KnowItAll, a very interesting, Microsoft OneNote-like application that every Southwest Fox attendee got for free, Paul Mrozowski show his very interesting calendar control, and John Henn show his Web store software. I then moved over to catch the second half of the VFPX session. The VFPX session was &lt;a href="http://www.ustream.tv/channel/swfoxtv" target="_blank"&gt;streamed live&lt;/a&gt;, so you can still watch it even if you weren’t at Southwest Fox.&lt;/p&gt;  &lt;p&gt;Like last year, Friday evening featured a dinner party. This year it was Italian: delicious pasta and chicken dishes. After dinner, we drew names for door prizes, including t-shirts from Red Gate and SnagIt and Camtasia from TechSmith. Servoy donated a gift basket, including a license to their software, and it was presented by one of their staff doing a very funny Borat impression.&lt;/p&gt;  &lt;p&gt;After dinner, it was time for more bonus sessions. I hosted a Stonefield Query developer meeting, in which I went over features we added in version 3.3 (released earlier this year), showed new features planned for 4.0 (due next year), and discussed wish list items with developers using our software.&lt;/p&gt;  &lt;p&gt;By the time we wound up, it was almost 10 p.m. That makes for a very long day, but it wasn’t over yet. Quite a few people went to the Feltman’s suite to socialize and party until the wee hours. After lots of great discussions, more than a couple of beers, and tons of laughs, I headed to my room about 2:00 a.m.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7965711181560043464?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7965711181560043464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7965711181560043464' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7965711181560043464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7965711181560043464'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/southwest-fox-2009-day-1.html' title='Southwest Fox 2009, Day 1'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_xP_SR62fwds/SuI5QD4P4II/AAAAAAAAASw/XIQrLyQQqNY/s72-c/clip_image002_thumb%5B1%5D.gif?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-816113454288449051</id><published>2009-10-20T17:06:00.001-06:00</published><updated>2009-10-20T17:06:47.604-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2009: Pre-Conference</title><content type='html'>&lt;p&gt;On Tuesday, October 13, Rick, his wife Therese, Tamar, her husband Marshal, and I arrived in beautiful sunny Phoenix to start preparing for Southwest Fox. The weather was a pleasant change from home, where it had snowed throughout the Canadian Thanksgiving weekend. We ran some errands, such as picking up the shirts and conference bags, water, and other supplies. We had a great dinner at the Cheesecake Factory and called it an early evening, as most of us had been up since well before sunrise (2:30 a.m. Phoenix time in my case). I slept a much needed eight hours.&lt;/p&gt;  &lt;p&gt;We spent Wednesday meeting with hotel staff, assembling binders and bags, and doing other prep work. This year, we decided to do things a little differently: rather than assembling a bag when an attendee comes to the registration table, we did them before hand, including shirt and name badge. This made a huge different at registration time: it was easily handled by one person, whereas in previous years we needed at least two or even three when it got busy. We were done by about 3:00 so I caught up on some emails until dinner time. That evening, I got to meet the &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;Ceil Silver Ambassador&lt;/a&gt;, Emerson Santon Reed from Brazil. I was thrilled to meet him and found him to be very nice and really excited to be at Southwest Fox. A good-sized group, including Tamar, Marshal, Rick, Therese, Barbara Peisch, Dan Freeman, and Emerson, went to P.F. Chang’s for a really good dinner.&lt;/p&gt;  &lt;p&gt;I got up early Thursday (as I did pretty much every day) to help finalize registration, then for the first time ever, attended a pre-conference session since we didn’t need everyone at the registration table. I saw Walt’s excellent session on &lt;a href="http://www.swfox.net/sessions.aspx#Integrating_VFP_with_SourceGear_Vault" target="_blank"&gt;SourceGear Vault&lt;/a&gt;, as did Trevor Mansuy and Chris Wolf, who both work for me. We’re really fired up now and plan on implementing Vault soon.&lt;/p&gt;  &lt;p&gt;After a tasty Mexican lunch, I spent the afternoon at the registration table. It’s always fun doing that because you can meet up with old friends and put faces to the names of new people. Afterward, several of us went for dinner (BBQ ribs and chicken) at the hotel.&lt;/p&gt;  &lt;p&gt;At 7:00, we started the keynote session. After introducing the speakers, thanking sponsors and others who helped, covering conference logistics, and awarding Cesar Chalom the 2009 &lt;a href="http://doughennig.blogspot.com/2009/10/vfpx-administrators-outstanding-service.html" target="_blank"&gt;VFPX Administrators Award&lt;/a&gt;, &lt;a href="http://swfox.net/blog/2009/09/southwest-fox-2009-keynote-announcement.html" target="_blank"&gt;Sara Ford&lt;/a&gt; began her keynote on CodePlex. You can watch the entire keynote at &lt;a href="http://www.ustream.tv/channel/swfoxtv" target="_blank"&gt;http://www.ustream.tv/channel/swfoxtv&lt;/a&gt;. Afterward, we held a reception in the trade show area so attendees had a chance to talk to the exhibitors.&lt;/p&gt;  &lt;p&gt;After the reception, a group of people went to the hotel bar while others congregated in the “Mike and Toni Feltman Party Suite,” which was to become a very popular place over the next few days.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-816113454288449051?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/816113454288449051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=816113454288449051' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/816113454288449051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/816113454288449051'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/southwest-fox-2009-pre-conference.html' title='Southwest Fox 2009: Pre-Conference'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-915397373658722073</id><published>2009-10-20T16:57:00.001-06:00</published><updated>2009-10-20T16:57:12.372-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ambassador Fund'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='GDIPlusX'/><title type='text'>VFPX Administrator’s Outstanding Service Award</title><content type='html'>&lt;p&gt;At the keynote presentation for &lt;a href="http://www.swfox.net/" target="_blank"&gt;Southwest Fox 2009&lt;/a&gt;, the administrators of &lt;a href="http://www.codeplex.com/VFPX" target="_blank"&gt;VFPX&lt;/a&gt; (Craig Boyd, Rick Schummer, and I) presented &lt;a href="http://weblogs.foxite.com/vfpimaging/default.aspx" target="_blank"&gt;Cesar Chalom&lt;/a&gt; with the 2009 VFPX Administrator’s Outstanding Service Award (you can watch the presentation at &lt;a href="http://www.ustream.tv/channel/swfoxtv" target="_blank"&gt;http://www.ustream.tv/channel/swfoxtv&lt;/a&gt;). Cesar is well-deserving of this award due to his work on the GDIPlusX and FoxCharts projects, both of which were covered in sessions at this year’s conference. Unfortunately, Cesar couldn’t make it to Southwest Fox this year, so the &lt;a href="http://www.swfox.net/ambassador.aspx" target="_blank"&gt;Ceil Silver Ambassador&lt;/a&gt;, Emerson Santon Reed, accepted it on his behalf and will present it to Cesar when he returns to Brazil.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-915397373658722073?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/915397373658722073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=915397373658722073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/915397373658722073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/915397373658722073'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/vfpx-administrators-outstanding-service.html' title='VFPX Administrator’s Outstanding Service Award'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-7931222703584569273</id><published>2009-10-07T13:33:00.001-06:00</published><updated>2009-10-07T13:33:11.478-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2009 is Next Week!</title><content type='html'>&lt;p&gt;We’re only a little more than week from the start of &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; (actually, less for Rick, Tamar, and I because we get there on Tuesday). I’m really pumped up about the conference: great sessions, great people, great weather (anything’s better than the 35F or 2C it is here right now) … what more could you ask for? I’m going to be busy: two sessions presented twice, plus a session demoing &lt;a href="http://www.stonefieldquery.com"&gt;Stonefield Query&lt;/a&gt; presented twice, plus a Stonefield Query Developers meeting. I guess I better try to catch up on my sleep now!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-7931222703584569273?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/7931222703584569273/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=7931222703584569273' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7931222703584569273'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/7931222703584569273'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/southwest-fox-2009-is-next-week.html' title='Southwest Fox 2009 is Next Week!'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4347575881627667952</id><published>2009-10-01T10:59:00.001-06:00</published><updated>2009-10-01T11:02:07.508-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='MVP'/><title type='text'>MVP for 2009-2010</title><content type='html'>&lt;p&gt;I am once again honored to be named a Microsoft Most Valuable Professional (MVP). Congratulations to other award recipients; see &lt;a href="https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Visual+FoxPro"&gt;https://mvp.support.microsoft.com/communities/mvp.aspx?product=1&amp;amp;competency=Visual+FoxPro&lt;/a&gt; for a complete list of VFP MVPs.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/SsTgjET8bFI/AAAAAAAAASk/l8I1zQvSjfg/s1600-h/image%5B2%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_xP_SR62fwds/SsTgjlTbxcI/AAAAAAAAASo/VL_GhSbMyIk/image_thumb.png?imgmax=800" width="180" height="76" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4347575881627667952?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4347575881627667952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4347575881627667952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4347575881627667952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4347575881627667952'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/10/mvp-for-2009-2010.html' title='MVP for 2009-2010'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_xP_SR62fwds/SsTgjlTbxcI/AAAAAAAAASo/VL_GhSbMyIk/s72-c/image_thumb.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4958301333783263281</id><published>2009-09-29T10:31:00.001-06:00</published><updated>2009-09-29T10:31:34.157-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Development'/><category scheme='http://www.blogger.com/atom/ns#' term='Utilities'/><title type='text'>Handy Free Screen Ruler Utility</title><content type='html'>&lt;p&gt;Spadix Software has a free screen ruler utility that makes it easy to measure the sizes of things on your screen: &lt;a title="http://www.spadixbd.com/freetools/index.htm" href="http://www.spadixbd.com/freetools/index.htm"&gt;http://www.spadixbd.com/freetools/index.htm&lt;/a&gt;. This solves the problem of deciding a form needs to be bigger, resizing it at runtime, and then trying to figure out what the new size is. I usually brought up the Debugger and typed something like “_screen.activeform.width” into the Watch window, but this is a lot easier.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4958301333783263281?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4958301333783263281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4958301333783263281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4958301333783263281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4958301333783263281'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/09/handy-free-screen-ruler-utility.html' title='Handy Free Screen Ruler Utility'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-1385979831755958003</id><published>2009-09-24T18:33:00.001-06:00</published><updated>2009-09-24T18:33:45.697-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ListView'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><category scheme='http://www.blogger.com/atom/ns#' term='ActiveX'/><title type='text'>Sizing a ListView to Avoid Scrolling</title><content type='html'>&lt;p&gt;I prefer to avoid horizontal scrollbars if possible. A horizontal scrollbar automatically appears in a ListView ActiveX control if the columns are sized too wide for the width of the ListView. I like to size the columns so they exactly fit within the width of the ListView. However, if the ListView’s Anchor property is set to resize the control when the user resizes the form, at some point a vertical scrollbar appears if the ListView is sized too short for the rows displayed. Since the scrollbar takes up some of the width of the ListView, a horizontal scrollbar also appears.&lt;/p&gt;  &lt;p&gt;The trick is to detect when the vertical scrollbar appears and adjust the width of the columns so they fit within the remaining width. The following code, which goes in the Resize event of the form or container the ListView is in, handles that. This code assumes there’s only two columns and the second column should be resized. Adjust the code as necessary to use different columns&lt;/p&gt;  &lt;pre&gt;with This.oListView&lt;br /&gt;&lt;br /&gt;* See if the ListView has a vertical scrollbar.&lt;br /&gt;&lt;br /&gt;  #define WS_HSCROLL 0x100000&lt;br /&gt;  #define WS_VSCROLL 0x200000&lt;br /&gt;  #define GWL_STYLE -16&lt;br /&gt;  declare integer GetWindowLong in Win32API integer hwnd, integer nIndex&lt;br /&gt;  llScroll = bitand(GetWindowLong(.hWnd, GWL_STYLE), WS_VSCROLL) &amp;lt;&amp;gt; 0&lt;br /&gt;&lt;br /&gt;* Set the width of the second column.&lt;br /&gt;&lt;br /&gt;  lnWidth = .Width - .ColumnHeaders.Item(1).Width - sysmetric(4) - ;&lt;br /&gt;    iif(llScroll, sysmetric(7), 0) + 4&lt;br /&gt;    &amp;amp;&amp;amp; 4 is a fudge factor for width&lt;br /&gt;  .ColumnHeaders.Item(2).Width = max(lnWidth, 0)&lt;br /&gt;endwith&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-1385979831755958003?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/1385979831755958003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=1385979831755958003' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1385979831755958003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/1385979831755958003'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/09/sizing-listview-to-avoid-scrolling.html' title='Sizing a ListView to Avoid Scrolling'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2021114111508412939</id><published>2009-09-22T09:59:00.001-06:00</published><updated>2009-09-22T09:59:17.717-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>.NET Tools Survey</title><content type='html'>&lt;p&gt;Just fill in this quick 10 minute survey about .NET tools and you could win one of five $100 vouchers to spend with Amazon. Take the survey here: &lt;a href="http://www.questionpro.com/akira/TakeSurvey?id=1325041"&gt;http://www.questionpro.com/akira/TakeSurvey?id=1325041&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2021114111508412939?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2021114111508412939/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2021114111508412939' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2021114111508412939'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2021114111508412939'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/09/net-tools-survey.html' title='.NET Tools Survey'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-2945927165378534513</id><published>2009-09-10T10:04:00.001-06:00</published><updated>2009-09-10T10:04:48.458-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox “Recession Buster” Deals</title><content type='html'>&lt;p&gt;Due to the condition of the global economy, we're seeing a drop in registrations for &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2009&lt;/a&gt; this year. So we have a couple of special &amp;quot;recession buster&amp;quot; deals we hope will encourage a few more people to sign up for the best Visual FoxPro conference in North America.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deal #1: &amp;quot;Organizers: please share my deal!&amp;quot;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you already registered and paid for the conference and you know someone who wants to register, you can give them the same deal you got when you registered. If you want to come to the conference and you know someone who got in at the Super Saver ($620) or the Early-bird ($695) registration, you can sign up for the same price they did. Sharing is caring! &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Deal #2: Southwest Fox &amp;quot;Pair Programmer&amp;quot; deal&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Have one or more FoxPro friends who are considering coming to Southwest Fox? Sign up together and take $50 off each of the registrations. &lt;/p&gt;  &lt;p&gt;No matter what deal you take, we will give you your first pre-conference session for free!&lt;/p&gt;  &lt;p&gt;There's only one catch. You have to take advantage of this deal by 11:59 PM September 30, 2009 Eastern time. We have to make some serious commitments on October 1 for various expenses we have for the conference. See the &lt;a href="http://www.swfox.net/register.aspx"&gt;Registration&lt;/a&gt; page for more details.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-2945927165378534513?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/2945927165378534513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=2945927165378534513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2945927165378534513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/2945927165378534513'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/09/southwest-fox-recession-buster-deals.html' title='Southwest Fox “Recession Buster” Deals'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-521866422986736368</id><published>2009-09-04T09:56:00.001-06:00</published><updated>2009-09-04T09:56:07.619-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2009 Keynote</title><content type='html'>&lt;p&gt;For the first time, this year’s edition of &lt;a href="http://www.swfox.net/"&gt;Southwest Fox&lt;/a&gt; will have a real keynote speaker. Sara Ford, Program Manager for CodePlex at Microsoft, is doing a presentation called “Towards a Stronger Open Source Ecosystem on CodePlex.com.” As you likely know, &lt;a href="http://vfpx.codeplex.com"&gt;VFPX&lt;/a&gt;, the premier VFP community site, is hosted on CodePlex. For more details, see the &lt;a href="http://swfox.net/blog/2009/09/southwest-fox-2009-keynote-announcement.html"&gt;Southwest Fox Blog&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I’ve met Sara several times and let me tell you, she is a character. She’s also very interested in VFPX. She gave us several tips early on about how to better organize VFPX (VFPX is unusual for CodePlex in that it’s a collection of many projects rather than just a single one) and even made a tweak to CodePlex to help VFPX work better.&lt;/p&gt;  &lt;p&gt;Between the line-up of speakers, top-notch sessions, great networking opportunities, a chance to talk face-to-face with exhibitors about their products, and now having Sara deliver the keynote, Southwest Fox 2009 is shaping up to be even better than last year. See you next month in Arizona!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-521866422986736368?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/521866422986736368/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=521866422986736368' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/521866422986736368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/521866422986736368'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/09/southwest-fox-2009-keynote.html' title='Southwest Fox 2009 Keynote'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-4768865695342527412</id><published>2009-08-26T14:21:00.001-06:00</published><updated>2009-08-26T14:23:14.151-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='TreeView'/><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Stonefield Query'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><category scheme='http://www.blogger.com/atom/ns#' term='GDIPlusX'/><title type='text'>More on TreeViews and GDIPlusX</title><content type='html'>&lt;p&gt;In my blog post &lt;a href="http://doughennig.blogspot.com/2009/08/disabling-treeview-control.html"&gt;Disabling a TreeView Control&lt;/a&gt;, I showed some code that visually disables a TreeView. It doesn’t really do that; instead, it uses &lt;a href="http://vfpx.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=15083"&gt;GDIPlusX&lt;/a&gt; to take a snapshot of the TreeView, converts the snapshot to have a “disabled” appearance, hides the TreeView, and displays the snapshot in its place.&lt;/p&gt;  &lt;p&gt;I just found another use for this technique. Suppose you want a VFP control to temporarily appear on top of a TreeView control. As you’re likely aware, the TreeView is an ActiveX control, and although it doesn’t visually appear this way, ActiveX controls display in their own window. As a result, any VFP control occupying the same space of a TreeView appears behind the TreeView, regardless of ZOrder.&lt;/p&gt;  &lt;p&gt;Here’s an example. I’m adding a new feature to &lt;a href="http://www.stonefieldquery.com"&gt;Stonefield Query&lt;/a&gt; that allows the developer to display fields organized by screen/form rather than by table. The idea is to make it easier for the user to find the fields they’re interested in because the fields map directly to what the user sees in their application. In this case, the Accounts Receivable module has three sub-modules: A/R Customers, A/R Setup, and A/R Transactions. A/R Customers has four forms: Customer Groups, National Accounts, Customers, and Ship-To Locations. The user chooses the desired form from a drop-down control (the SFComboTree control discussed in my article in the September 2009 issue of &lt;a href="http://www.foxrockx.com"&gt;FoxRockX&lt;/a&gt;) and a TreeView control displays a list of the pages in that form and the fields on each page in a hierarchical view.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_xP_SR62fwds/SpWZM7eQfKI/AAAAAAAAAR8/QPg5LJ5s7fc/s1600-h/one%5B5%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="one" border="0" alt="one" src="http://lh6.ggpht.com/_xP_SR62fwds/SpWZNZQX8gI/AAAAAAAAASA/l3IwTSzXftc/one_thumb%5B3%5D.png?imgmax=800" width="575" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Notice the problem in this screen shot? The border around the dropped down SFComboTree disappears where it overlaps the available fields TreeView control. The drop-down part is a Shape surrounding another TreeView. While the dropped-down TreeView overlaps the fields TreeView as expected (an ActiveX control can overlap another ActiveX control), the Shape disappears behind the fields TreeView.&lt;/p&gt;  &lt;p&gt;Fortunately, there’s an easy solution for this: use the same lightbox technique I discussed earlier but this time don’t make the image appear disabled: just take a snapshot of the TreeView, hide the TreeView, and place the snapshot where the TreeView is. Here’s the result:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_xP_SR62fwds/SpWZNiwosiI/AAAAAAAAASE/hTTU47WLOQo/s1600-h/two%5B3%5D.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="two" border="0" alt="two" src="http://lh6.ggpht.com/_xP_SR62fwds/SpWZOcDPQ_I/AAAAAAAAASI/-hdt61S90xk/two_thumb%5B1%5D.png?imgmax=800" width="575" height="484" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The border for the dropped-down control now appears because the TreeView is temporarily hidden and what you see underneath is a snapshot of the TreeView.&lt;/p&gt;  &lt;p&gt;The code is even simpler than the lightbox code because it doesn’t have to change colors. This is the code used when the SFComboTree is dropped down:&lt;/p&gt;  &lt;pre&gt;with This.Parent&lt;br /&gt;  loTree   = .oTree&lt;br /&gt;  lnWidth  = loTree.Width&lt;br /&gt;  lnHeight = loTree.Height&lt;br /&gt;  with .imgLightBox&lt;br /&gt;    .Top    = loTree.Top&lt;br /&gt;    .Left   = loTree.Left&lt;br /&gt;    .Width  = lnWidth&lt;br /&gt;    .Height = lnHeight&lt;br /&gt;  endwith&lt;br /&gt;  loBmp = _screen.System.Drawing.Bitmap.FromScreen(.imgLightBox)&lt;br /&gt;  with .imgLightBox&lt;br /&gt;    .PictureVal = loBmp.GetPictureValFromHBitmap()&lt;br /&gt;    .ZOrder(0)&lt;br /&gt;    .Visible = .T.&lt;br /&gt;  endwith&lt;br /&gt;  loTree.Visible = .F.&lt;br /&gt;endwith&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;The more I use GDIPlusX, the more I love it! My GDIPlusX session at &lt;a href="http://www.swfox.net/"&gt;Southwest Fox 2009&lt;/a&gt; will cover other interesting uses for GDIPlusX. I’m also doing that session and an introduction to GDIPlusX session at the &lt;a href="http://devcon.dfpug.de/"&gt;2009 German DevCon&lt;/a&gt;. Hope to see you there.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-4768865695342527412?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/4768865695342527412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=4768865695342527412' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4768865695342527412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/4768865695342527412'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/08/more-on-treeviews-and-gdiplusx.html' title='More on TreeViews and GDIPlusX'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_xP_SR62fwds/SpWZNZQX8gI/AAAAAAAAASA/l3IwTSzXftc/s72-c/one_thumb%5B3%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-6831757429413992570</id><published>2009-08-25T10:20:00.001-06:00</published><updated>2009-08-25T10:20:31.937-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Southwest Fox'/><category scheme='http://www.blogger.com/atom/ns#' term='Conferences'/><title type='text'>Southwest Fox 2009 Early-Bird Deadline Next Week</title><content type='html'>&lt;p&gt;Southwest Fox is only seven weeks away. This year’s conference has an incredible line-up of &lt;a href="http://www.swfox.net/speakers.aspx"&gt;speakers&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessionstrack.aspx"&gt;sessions&lt;/a&gt;. Not to pick favorites, but I’m especially looking forward to Christof’s &lt;a href="http://www.swfox.net/sessions.aspx#Excelporting"&gt;Excelporting&lt;/a&gt; session, Paul’s &lt;a href="http://www.swfox.net/sessions.aspx#Full_Text_Search_using_Lucene.NET"&gt;Lucene.NET&lt;/a&gt; presentation, Jim’s sessions on &lt;a href="http://www.swfox.net/sessions.aspx#PEMEditor:_Swiss_Army_Knife_for_the_Forms_Designer_--_the_What_and_How"&gt;PEM Editor&lt;/a&gt; and &lt;a href="http://www.swfox.net/sessions.aspx#FoxCharts_-_Great_Looking,_Modern_Charts_in_Pure_VFP_Code"&gt;FoxCharts&lt;/a&gt;, and both of &lt;a href="http://www.swfox.net/CathyPountney.aspx"&gt;Cathy’s sessions&lt;/a&gt;. I’d also really like to see Toni’s session on &lt;a href="http://www.swfox.net/sessions.aspx#Introduction_to_Subversion_and_Tortoise_SVN"&gt;Subversion&lt;/a&gt; and Walt’s session on &lt;a href="http://www.swfox.net/sessions.aspx#Integrating_VFP_with_SourceGear_Vault"&gt;Vault&lt;/a&gt; (especially after seeing his &lt;a href="http://www.swfox.net/videos.aspx"&gt;video&lt;/a&gt;), but they’re both pre-conference sessions and Thursday is registration day. As an organizer, I’m pretty busy that day.&lt;/p&gt;  &lt;p&gt;If you haven’t registered yet, be sure to do so before September 1 to save $50 on your registration fee. If you’ve been to Southwest Fox before, you know what a great training and networking opportunity it is. If you haven’t, read what &lt;a href="http://www.swfox.net/testimonials.aspx"&gt;attendees&lt;/a&gt; from past years have said. In addition to the usual perks, this year you’ll get a chance to meet and hang out with the &lt;a href="http://www.swfox.net/ambassador.aspx"&gt;Ceil Silver Ambassador&lt;/a&gt; from Brazil.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-6831757429413992570?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/6831757429413992570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=6831757429413992570' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6831757429413992570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/6831757429413992570'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/08/southwest-fox-2009-early-bird-deadline.html' title='Southwest Fox 2009 Early-Bird Deadline Next Week'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-510371258824794254</id><published>2009-08-20T10:23:00.001-06:00</published><updated>2009-08-26T10:27:51.563-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFPX'/><category scheme='http://www.blogger.com/atom/ns#' term='TreeView'/><category scheme='http://www.blogger.com/atom/ns#' term='GDIPlusX'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Samples'/><title type='text'>Disabling a TreeView Control</title><content type='html'>&lt;p&gt;In my post “&lt;a href="http://doughennig.blogspot.com/2008/11/setting-background-color-of-treeview.html"&gt;Setting the Background Color of a TreeView Control&lt;/a&gt;”, I presented some code that sets the background color of a TreeView to make it appear disabled. However, a reader named Alberto pointed out that after running that code, indented nodes have an ugly white background in front of them. I played with this a bit but couldn’t come up with a way to fix it.&lt;/p&gt;  &lt;p&gt;Fortunately, there’s another solution: using a “lightbox”. &lt;a href="http://weblogs.foxite.com/bernardbout/archive/2008/09/13/6768.aspx "&gt;Bernard Bout&lt;/a&gt; blogged about using the &lt;a href="http://vfpx.codeplex.com/"&gt;VFPX&lt;/a&gt; GDIPluxX project to create an image with a darker representation of a form and overlaying the form with the image to make the entire form appear disabled. I adapted his code to do the same thing with a TreeView control. Pass this code up to four parameters:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;A reference to the form the TreeView is on. &lt;/li&gt;    &lt;li&gt;A reference to the TreeView itself. &lt;/li&gt;    &lt;li&gt;.T. to enable the TreeView or .F. to disable it &lt;/li&gt;    &lt;li&gt;Optionally, an RGB value to use as the disabled color. If this isn’t passed, grey—RGB(240, 240, 240)—is used. This parameter isn’t used if the third parameter is .T. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This code creates an image object, takes a snapshot of the TreeView contents, makes the snapshot darker so it appears disabled, and uses the snapshot as the picture for the image. Note that a VFP control can’t cover an ActiveX control, so the code hides the TreeView. Of course, to the user, it looks like the TreeView is still there but disabled because the image is placed exactly where the TreeView is and contains a picture that looks just like a disabled version of the TreeView.&lt;/p&gt;  &lt;p&gt;This code requires System.APP, which comes with GDIPlusX.&lt;/p&gt;  &lt;pre&gt;lparameters toForm, ;&lt;br /&gt;  toTreeView, ;&lt;br /&gt;  tlEnable, ;&lt;br /&gt;  tnColor&lt;br /&gt;local llImage, ;&lt;br /&gt;  lnWidth, ;&lt;br /&gt;  lnHeight, ;&lt;br /&gt;  lnColor, ;&lt;br /&gt;  lnFactor, ;&lt;br /&gt;  lnRed, ;&lt;br /&gt;  lnGreen, ;&lt;br /&gt;  lnBlue, ;&lt;br /&gt;  loClrMatrix, ;&lt;br /&gt;  loBmp, ;&lt;br /&gt;  loGfx, ;&lt;br /&gt;  lcFile&lt;br /&gt;&lt;br /&gt;* See if the specified form has a LightBox image.&lt;br /&gt;&lt;br /&gt;llImage = pemstatus(toForm, 'imgLightBox', 5)&lt;br /&gt;do case&lt;br /&gt;&lt;br /&gt;* It does and we're supposed to enable the TreeView, so hide the image and&lt;br /&gt;* redisplay the TreeView.&lt;br /&gt;&lt;br /&gt;  case tlEnable and llImage&lt;br /&gt;    toForm.imgLightBox.Visible    = .F.&lt;br /&gt;    toForm.imgLightBox.PictureVal = ''&lt;br /&gt;    toTreeView.Visible            = .T.&lt;br /&gt;&lt;br /&gt;* We're supposed to disable the TreeView, so ensure GDIPlusX libraries are&lt;br /&gt;* open and create the image if necessary.&lt;br /&gt;&lt;br /&gt;  case not tlEnable&lt;br /&gt;    do System.app&lt;br /&gt;    if not llImage&lt;br /&gt;      toForm.AddObject('imgLightBox', 'Image')&lt;br /&gt;    endif not llImage&lt;br /&gt;&lt;br /&gt;* Size the image as necessary.&lt;br /&gt;&lt;br /&gt;    lnWidth  = toTreeView.Width&lt;br /&gt;    lnHeight = toTreeView.Height&lt;br /&gt;    with toForm.imgLightBox&lt;br /&gt;      .Top    = toTreeView.Top&lt;br /&gt;      .Left   = toTreeView.Left&lt;br /&gt;      .Width  = lnWidth&lt;br /&gt;      .Height = lnHeight&lt;br /&gt;    endwith&lt;br /&gt;&lt;br /&gt;* If we weren't passed a color to use, use grey.&lt;br /&gt;&lt;br /&gt;    if vartype(tnColor) = 'N'&lt;br /&gt;      lnColor = tnColor&lt;br /&gt;    else&lt;br /&gt;      lnColor = rgb(240, 240, 240)&lt;br /&gt;    endif vartype(tnColor) = 'N'&lt;br /&gt;&lt;br /&gt;* Get the colors we'll need.&lt;br /&gt;&lt;br /&gt;    lnFactor = 0.90  &amp;amp;&amp;amp; 0 = Dark   1 = Bright&lt;br /&gt;    lnRed    = bitand(lnColor, 0x000000FF) / 255 * lnFactor&lt;br /&gt;    lnGreen  = bitrshift(bitand(lnColor, 0x0000FF00), 8) / 255 * lnFactor&lt;br /&gt;    lnBlue   = bitrshift(bitand(lnColor, 0x00FF0000), 16) / 255 * lnFactor&lt;br /&gt;&lt;br /&gt;* Create a BMP of the desired color and use it as the picture for the image.&lt;br /&gt;&lt;br /&gt;    with _Screen.System.Drawing as xfcSystem of Source\System.PRG&lt;br /&gt;      loClrMatrix = .Imaging.ColorMatrix.New( ;&lt;br /&gt;        lnRed,       0,      0, 0, 0, ;&lt;br /&gt;            0, lnGreen,      0, 0, 0, ;&lt;br /&gt;            0,       0, lnBlue, 0, 0, ;&lt;br /&gt;            0,       0,      0, 1, 0, ;&lt;br /&gt;            0,       0,      0, 0, 1)&lt;br /&gt;      loBmp = .Bitmap.FromScreen(toForm.imgLightBox)&lt;br /&gt;      loBmp.ApplyColorMatrix(loClrMatrix)&lt;br /&gt;      loGfx = .Graphics.FromImage(loBmp)&lt;br /&gt;      loGfx.FillRectangle(.SolidBrush.New(.Color.FromARGB(10, 0, 0, 0)), ;&lt;br /&gt;        0, 0, lnWidth, lnHeight)&lt;br /&gt;    endwith&lt;br /&gt;    with toForm.imgLightBox&lt;br /&gt;      .PictureVal = loBmp.GetPictureValFromHBitmap()&lt;br /&gt;      .ZOrder(0)&lt;br /&gt;      .Visible = .T.&lt;br /&gt;    endwith&lt;br /&gt;    toTreeView.Visible = .F.&lt;br /&gt;endcase&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-510371258824794254?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/510371258824794254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=510371258824794254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/510371258824794254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/510371258824794254'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/08/disabling-treeview-control.html' title='Disabling a TreeView Control'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-24989625.post-3430627998893512155</id><published>2009-08-14T11:23:00.001-06:00</published><updated>2009-08-14T11:23:25.228-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VFP'/><category scheme='http://www.blogger.com/atom/ns#' term='RSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Blog'/><title type='text'>New VFP Blogger</title><content type='html'>&lt;p&gt;Welcome to the blogosphere, &lt;a href="http://therealmattslay.blogspot.com/"&gt;Matt Slay&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/24989625-3430627998893512155?l=doughennig.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://doughennig.blogspot.com/feeds/3430627998893512155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=24989625&amp;postID=3430627998893512155' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3430627998893512155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/24989625/posts/default/3430627998893512155'/><link rel='alternate' type='text/html' href='http://doughennig.blogspot.com/2009/08/new-vfp-blogger.html' title='New VFP Blogger'/><author><name>Doug Hennig</name><uri>http://www.blogger.com/profile/00208525487680844022</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://www.stonefield.com/photos/dhennigmvp100x150.JPG'/></author><thr:total>1</thr:total></entry></feed>
