<?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:blogger='http://schemas.google.com/blogger/2008' 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-18962598</id><updated>2025-10-14T01:17:08.685-05:00</updated><category term="VFP"/><category term="FoxPro"/><category term=".NET"/><category term="AFP"/><category term="Consonant"/><category term="DebugBar"/><category term="FireFox"/><category term="Firebug"/><category term="FoxExpress"/><category term="Internet Explorer"/><category term="JavaScript"/><category term="Oracle"/><category term="Reports"/><category term="SQL Server"/><category term="SWFOX"/><category term="Sample Data"/><category term="Southwest Fox"/><category term="VFE"/><category term="Visual"/><category term="XML"/><title type='text'>F1 Technologies Blog</title><subtitle type='html'>All the latest happenings at &lt;a href=&quot;http://www.f1tech.com&quot;&gt;F1 Technologies&lt;/a&gt;, Visual FoxPro and other tech info of interest and whatever else we feel like ranting and raving about. :)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default?alt=atom'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default?alt=atom&amp;start-index=26&amp;max-results=25'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>56</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-18962598.post-5170973216314493131</id><published>2011-11-11T07:35:00.003-05:00</published><updated>2011-11-11T08:37:13.813-05:00</updated><title type='text'>Lifetime Achievement</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSJMEqOtUSXC-To2YvbeAQ7YxiAleL7-YJEUB-8Tk1kKZn2lb-lmZi62G9Qb3HatuBN3AyYs9-GoIIQl0f_cf2gMK_V1bG3BU6NZq_wbFFLUgxPWcVCPsLBgPyAnXdDi4os2cKMg/s1600/2011-10-27+08.13.06.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 150px; height: 200px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSJMEqOtUSXC-To2YvbeAQ7YxiAleL7-YJEUB-8Tk1kKZn2lb-lmZi62G9Qb3HatuBN3AyYs9-GoIIQl0f_cf2gMK_V1bG3BU6NZq_wbFFLUgxPWcVCPsLBgPyAnXdDi4os2cKMg/s200/2011-10-27+08.13.06.jpg&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5673731764091142786&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wow... that is all that I could really say, wow!&lt;br /&gt;&lt;br /&gt;On Wednesday October 26, 2011, while I was waiting to hear what I knew would be a fantastic Keynote presentation from &lt;a href=&quot;http://stevenblack.com/&quot;&gt;Steven Black&lt;/a&gt; at Southwest Fox 2011 in Phoenix, AZ, I was awarded the biggest honor in the FoxPro Community. I was awarded the &lt;a href=&quot;http://fox.wikis.com/wc.dll?Wiki~FoxProCommunityLifetimeAchievementAward&quot;&gt;FoxPro Community Lifetime Achievement Award&lt;/a&gt;. Not only that... I was awarded this at the same time as our Keynote speaker. To say the least I was surprised, excited, humbled and thankful. &lt;br /&gt;&lt;br /&gt;A little background for those reading who may not be part of the FoxPro Community... FoxPro is a programming language and database engine. I have been programming in this language and using this database since.... well for a long time. :-) This programming language has a following, &quot;the community&quot; and in my opinion the BEST COMMUNITY of any. The community is made up of the people who, like me, use the language but it is so much more. These people really care about the others in the community. We help each other with technical issues, life issues, job issues... you name it. It is a group that shares and cares! Every year, since 2001, the Lifetime Achievement is awarded to one or more individuals that have made outstanding contributions to the community. This year I was one.&lt;br /&gt;&lt;br /&gt;It was only fitting that my award was presented by &lt;a href=&quot;http://rickschummer.com/&quot;&gt;Rick Schummer&lt;/a&gt;. Rick is a local (Detroit is local to Toledo, right?) FoxPro Community Member and a very good friend of mine. I am at a loss for words to describe Rick because he really is awesome. He gives so much to his family, the FoxPro community and manages to save some for himself too. I am not sure how he does it, but I think with no sleep. :-) Rick and I go back a long time and I was flattered to have him present me with my award. &lt;br /&gt;&lt;br /&gt;When I went up to receive my award, I looked in the back of the audience and lo and behold there was my wonderful husband Mike and my brother-in-law Phil. My first thoughts... &quot;Where are my kids? They are supposed to be home with Mike.&quot; Once past that I was so excited. You see... I would not have been standing up there had it not been for Mike and Phil. I was so glad to share this moment with them. &lt;br /&gt;&lt;br /&gt;There are no speeches when you receive this award which is a good thing as I was not prepared. Now that it has settled in I can offer some thanks. This is not an exhaustive list by any means. There are far too many people who have had an impact on my life to mention here.&lt;br /&gt;&lt;br /&gt;Thank you FIRST and FOREMOST to the FoxPro Community for finding me deserving of this award. This really is the best community to be involved in. There is not another group of people as awesome as we are!&lt;br /&gt;&lt;br /&gt;Thank you God for giving me the talents that allow me to help others and accept the help that they give me.&lt;br /&gt;&lt;br /&gt;Thank you Mike and Phil for giving me the opportunity to learn, grow and improve my skills and by sometimes (ok... a lot of times) pushing beyond what I &quot;could&quot; do.&lt;br /&gt;&lt;br /&gt;Thank you to my family (extended pretty far) for understanding my emotional need to do &quot;freebies&quot; like technical support, presentations, articles, books, free software. Yes, I got paid for some of this but the payment does not cover the time and energy it takes to actually do the work. The personal reward is the payment!&lt;br /&gt;&lt;br /&gt;Thank you &lt;a href=&quot;http://fox.wikis.com/wc.dll?Wiki~YAlanGriver&quot;&gt;YAG&lt;/a&gt; for taking me under your wing at PC Expo in 1990. You were my first face-to-face contact with the FoxPro Community and really started to show me what it was all about. I am so greatful that you and Randy Brown were there to see me receive this award.&lt;br /&gt;&lt;br /&gt;Finally... Thank you to Janet Hurt wherever you are. I went way outside of my comfort zone as a recent college graduate when I called you and asked you if I could still have that interview that I had previously declined. Had you not allowed me that second chance, I would not have worked at Fox Software and would probably be writing COBOL code in some company basement today.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/5170973216314493131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/5170973216314493131' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/5170973216314493131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/5170973216314493131'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2011/11/lifetime-achievement.html' title='Lifetime Achievement'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSJMEqOtUSXC-To2YvbeAQ7YxiAleL7-YJEUB-8Tk1kKZn2lb-lmZi62G9Qb3HatuBN3AyYs9-GoIIQl0f_cf2gMK_V1bG3BU6NZq_wbFFLUgxPWcVCPsLBgPyAnXdDi4os2cKMg/s72-c/2011-10-27+08.13.06.jpg" height="72" width="72"/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-8205002411910058151</id><published>2011-03-28T16:29:00.002-05:00</published><updated>2011-03-29T09:49:33.526-05:00</updated><title type='text'>Embarking on a New Adventure</title><content type='html'>As many know I have been contracting with a local company for the last 3 ½ years working on their custom Visual FoxPro application(s). This system is a beast! It was started around 1992 and worked on by many developers with various different skill sets and levels. So as you can imagine it is a nice big ball of spaghetti. &lt;br /&gt;&lt;br /&gt;I was brought in because of my understanding of Client-Server development. At the time, my experience was with SQL Server and this client chose Oracle. In the last 3+ years I have grown very fond of Oracle but it has been a difficult battle and we had many rocky periods. &lt;br /&gt;&lt;br /&gt;About 2 years ago management realized that in order to compete in their market they needed software that worked correctly every day. They also needed software that was stable and could be easily enhanced to meet the expanding business needs without high risk. They took quite a while to inventory the existing system and evaluate many options. The final decision was made… they were moving to SAP. &lt;br /&gt;&lt;br /&gt;It was not my position to judge if this was a wise choice or not. I did, however, realize that the existing code base was not going to work long term. When you have to fix code every month because monthly sales numbers do not reconcile, there is a big, deep rooted problem. I was very excited that a solution was coming that would stabilize this business. Many of my team members did not have quite the positive outlook I did but I knew it would come over time. For me, the downside was that my contract would probably end after go-live since I know nothing about SAP. &lt;br /&gt;&lt;br /&gt;I worked with the department managers, business process owners and SAP consultants to help define the requirements since the initial try didn’t yield as much detail as was needed. My role was basically to look at the code and figure out what the existing system was doing, talk to the people who use it to make sure all of the functionality was still needed, and relay this information to the BPOs and SAP Functional Consultants. Well, I must have done a pretty good job because just recently they asked me to learn SAP and become the resident expert in MM which is Materials Management. Who can pass up an offer like that?&lt;br /&gt;&lt;br /&gt;This week I start my training with a weeklong emersion in Materials Management. It is going to be very different approaching projects from a non-customized angle. In FoxPro, we can build anything and create data sets any way, anyhow and anytime we need some data. It is not the same when you are working with a very tightly integrated solution. I think I feel like VFE users must feel when they start to build their first application. Things are easy if you do it the “VFE way” but that is not easy when you don’t know what the “VFE way” is. I know, just like our framework users, that once I get the hang of it life will be better.&lt;br /&gt;&lt;br /&gt;I want to share my journey over the next several months with the hopes that my observations and experiences will help someone else on a similar expedition. I hope you will come along for the ride!</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/8205002411910058151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/8205002411910058151' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8205002411910058151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8205002411910058151'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2011/03/embarking-on-new-adventure.html' title='Embarking on a New Adventure'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1787453545409894845</id><published>2010-08-27T15:52:00.002-05:00</published><updated>2010-08-27T16:05:48.365-05:00</updated><title type='text'>VFE: Changing how system settings are stored.</title><content type='html'>Every so often I am still amazed at how awesome the VFE Framework really is. I hear a lot about YAGNI these days (you ain&#39;t going to need it) and how unnecessary features can be very wasteful. The following example illustrates how careful thought and design may save hours and hours of future development time. &lt;br /&gt;&lt;br /&gt;I have a client who is having a lot of trouble with Users who run his app on Windows Vista and Windows 7. The problem is with access to the registry and all of the setting that VFE stores there. So, he asked me to modify the app to store these settings in a table. Now, we are not going to discuss whether a VFP table was the right approach or not. That would need to be a separate discussion. I began looking at the app and what I would need to do in order to change all of the system setting calls to read from and write to a table. I couldn&#39;t believe how easy it was. The following are the three steps. I had this feature completed far faster than I ever thought I would. &lt;br /&gt;&lt;br /&gt;Step 1: Subclass cSystemSetting (or iSystemSetting) into a new class. I chose to put mine in the application layer but it could go in the iLayer just as easily. Get and Set are the key methods.&lt;br /&gt;&lt;br /&gt;Step 2: Modify your new settings class to create the table, read from it and write to it. I also added code to delete and recreate the table/index if there were corruption problems. Since they are just settings, the client was fine with blowing everything away if necessary. &lt;br /&gt;&lt;br /&gt;Step 3: Plug in the new system setting class through your application level factory table using the description of System Setting Manager. &lt;br /&gt;&lt;br /&gt;That is all there was to it. I love this framework!</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1787453545409894845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1787453545409894845' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1787453545409894845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1787453545409894845'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2010/08/vfe-changing-how-system-settings-are.html' title='VFE: Changing how system settings are stored.'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-3989727886785064737</id><published>2009-10-29T05:39:00.000-05:00</published><updated>2009-10-29T05:39:22.149-05:00</updated><title type='text'>What&#39;s up with VFE?</title><content type='html'>Many Visual FoxExpress developers have made inquiries about the status of Visual FoxExpress. It has been quite a while since there was a full release of Visual FoxExpress, in fact, it&#39;s been nearly 2 years. The good news is that we have been working on VFE during that time. We&#39;ve fixed a number of outstanding issues, increased the performance and stability considerably, addressed issues with the IDE on Vista and Windows 7 and added several new features. We&#39;ve also enlisted Bill Anderson the &quot;sharp-eyed Fox anthropologist and xBase archeologist&quot; to help us with framework changes and he&#39;s done an incredible job of fine tuning, cleaning up and ensuring that the framework adheres to our own standards.  It&#39;s time we rolled all that stuff up into a new release and got it out the door.&lt;div&gt;&lt;br /&gt;
Toni and I are working on doing just that. Tonight we posted Visual FoxExpress 2009 Beta 3. This release rolls all of the previous Visual FoxExpress betas into a single download and includes an updated version of the framework. This is a beta and does include a few changes that we have not deployed in live applications ourselves yet, so please take the appropriate caution with your production applications.&lt;br /&gt;
&lt;br /&gt;
The next beta will address a couple of other longtime nagging issues, mostly related to installation. We&#39;re working on eliminating the use of the registry by the VFE IDE and installation programs and instead storing the information we need within the Visual FoxExpress directory structure. These changes will make it easier for developers that need to run multiple versions of VFE on a single machine to do so and also will allow VFE to run regardless of the currently logged in user on a machine. You can expect to see this release before the end of the year.&lt;br /&gt;
&lt;br /&gt;
After we&#39;ve addressed the registry issues, our primary focus for future releases will be on usability. There are two areas that we&#39;d like to work on here; the Sample Application(s) and the documentation. Toni and I are splitting this work and plan to have an updated sample and updated documentation released in the first quarter of 2010.&lt;br /&gt;
&lt;br /&gt;
If you&#39;ve seen Toni speak at any VFP conferences or user groups as of late, chances are you&#39;ve seen her speak about using Subversion with Visual FoxPro. We&#39;re using Subversion for source code control with VFE in-house. We are in the midst of planning changes to Visual FoxExpress to allow Visual FoxExpress users to get the latest version of the framework directly from our repository. We also plan to have those changes as part of our next major release. This will make framework changes available much more quickly than any method we&#39;ve used in the past. Once all of these things are in place we will also consider opening up the repository for changes by current subscribers. When the time comes we will solicit the community for feedback on exactly how this should be implemented, so please hold your feedback on this for now.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/3989727886785064737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/3989727886785064737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3989727886785064737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3989727886785064737'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/10/whats-up-with-vfe.html' title='What&#39;s up with VFE?'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-4530760526198403858</id><published>2009-10-20T14:40:00.004-05:00</published><updated>2009-10-20T15:39:58.023-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Reports"/><category scheme="http://www.blogger.com/atom/ns#" term="SWFOX"/><category scheme="http://www.blogger.com/atom/ns#" term="VFP"/><title type='text'>CXToFRX</title><content type='html'>At &lt;a href=&quot;http://www.swfox.net/&quot;&gt;Southwest Fox 2009&lt;/a&gt; I showed a little utility that allows the creation of a VFP report based on the layout of a form or class. I had a need to do this quickly with several forms, so I whipped this up. All you need to do to use it is select the objects in the form or class designer that you&#39;d like in a report, then run &lt;a href=&quot;http://www.f1tech.com/downloads/cxtofrx.zip&quot;&gt;CXToFrx.prg&lt;/a&gt; and it will quickly create a report that matches the layout of the items you&#39;ve selected in the form or class designer. This is a crude little utility that I whipped up for a specific need and it only supports textboxes, labels and editboxes at this point, but based on the oohs and ahs, thunderous applause and millions of dollars I&#39;ve received in PayPal donations since I demoed it, it apparently has a lot of value. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In order to use it you have first create a report file named blankreport.frx in the folder where you place the CXToFrx.prg file. Enjoy...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/4530760526198403858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/4530760526198403858' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/4530760526198403858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/4530760526198403858'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/10/cxtofrx.html' title='CXToFRX'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1092401130191504815</id><published>2009-10-20T10:23:00.002-05:00</published><updated>2009-10-20T10:36:30.095-05:00</updated><title type='text'>Southwest Fox 2009 Rocked!</title><content type='html'>Toni and I are back from Southwest Fox. I&#39;m physically drained and mentally charged. This was definitely the most fun I&#39;ve had at a conference ever. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This year&#39;s speaker group was awesome and the attendees were awesome as well. There&#39;s no elitism amongst the speaker group. Everyone speaking knows that everyone in the seats is an expert in their own right and that everyone has something to share. New friends were made, 20+ year friendships were renewed and equal amounts of love and knowledge were shared. It&#39;s such a blessing to be a part of such a great community. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Thanks to Doug, Tamar, Marshal, Rick and Therese for taking care of all the details and providing such a wonderful conference. The community is truly in your debt for creating such a wonderful, hassle free, unifying event.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;SW Fox 2010 was announced. I already can&#39;t wait for next October 14th to do it again. SW Fox outdoes itself each and every year and even though this year was by far the best, I fully anticipate next year being even better. SW Fox is a can&#39;t miss event for anyone working in Visual FoxPro. To everyone that was there, I know I&#39;ll see you next year. To those that weren&#39;t you&#39;ve got a year to plan for it. Don&#39;t miss it again and this specifically means you Whil Hentzen, Steve Black, John Harvey, Del Lee and so many others that were missed this year. The one thing you can&#39;t &lt;a href=&quot;http://blameitonrick.rickschummer.com/&quot;&gt;BIOR&lt;/a&gt; is missing Southwest Fox. &lt;/div&gt;</content><link rel="related" href="swfox.net" title="Southwest Fox 2009 Rocked!"/><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1092401130191504815/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1092401130191504815' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1092401130191504815'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1092401130191504815'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/10/southwest-fox-2009-rocked.html' title='Southwest Fox 2009 Rocked!'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1636991378897249116</id><published>2009-10-12T10:55:00.009-05:00</published><updated>2009-10-22T10:06:48.181-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle"/><category scheme="http://www.blogger.com/atom/ns#" term="Sample Data"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server"/><title type='text'>Building a Sample Data Set</title><content type='html'>I had reason recently to build a sample data set for testing purposes. A little bit of background is required before I start showing you the code. We have a field representing a stock number. The first 3 characters of the stock number represent the vendor&#39;s product line. Before you start bashing me about the data design, this is old, old data and I did not design it. I know that we should have a separate field for the product line but we don’t. Anyway, I wanted to have three random records for each product line. &lt;br /&gt;&lt;br /&gt;The data is in Oracle so I used the following as an expression for a column I named rank.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;dense_rank() over (partition by substr(stk_num, 1, 3) order by substr(stk_num, 1, 3), dbms_random.Value) as rank&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The rank() and dense_rank() analytical functions provide a way to rank over a grouping. This statement say rank the data grouped by the first 3 characters of the stock number in order by first those 3 characters and then some random value. &lt;br /&gt;&lt;br /&gt;So, my full select statement looked like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;SELECT id, stk_num, rank&lt;br /&gt;FROM&lt;br /&gt;  (&lt;br /&gt;    SELECT&lt;br /&gt;      product.*, &lt;br /&gt;      dense_rank() over (partition by substr(stk_num, 1, 3) order by substr(stk_num, 1, 3), dbms_random.Value) as rank &lt;br /&gt;    from product &lt;br /&gt;    where format &lt;&gt; &#39;V&#39;&lt;br /&gt;  ) r&lt;br /&gt;where rank &lt;= 3 ;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This yielded the first 3 random records but what I really needed to do is remove all of the records except for these three random ones. So I just tacked this on to a DELETE statement like the following:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;code&gt;DELETE FROM product where id NOT IN &lt;br /&gt;(SELECT id&lt;br /&gt;FROM&lt;br /&gt;  (&lt;br /&gt;    SELECT&lt;br /&gt;      product.*, &lt;br /&gt;      dense_rank() over (partition by substr(stk_num, 1, 3) order by substr(stk_num, 1, 3), dbms_random.Value) as rank &lt;br /&gt;    from product &lt;br /&gt;    where format &lt;&gt; &#39;V&#39;&lt;br /&gt;  ) r&lt;br /&gt;where rank &lt;= 3 );&lt;br /&gt;commit;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This took my test data set from over 222,000 records to less than 3200. This is probably not &quot;technically&quot; a random sampling but it should work much better than what we currently have in place.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1636991378897249116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1636991378897249116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1636991378897249116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1636991378897249116'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/10/building-sample-data-set.html' title='Building a Sample Data Set'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-4321337412989486988</id><published>2009-10-01T08:48:00.002-05:00</published><updated>2009-10-01T08:57:12.605-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Consonant"/><category scheme="http://www.blogger.com/atom/ns#" term="FoxPro"/><category scheme="http://www.blogger.com/atom/ns#" term="Visual"/><title type='text'>IsConsonant Function</title><content type='html'>I wrote this little function for a teammate the other day and could not decide if I should blog about it or not. It is a simple function that I any Visual FoxPro programmer could write. Prior to writing the function, I searched the web to see if someone else had already written it. I could not find anything so I decided to post it hoping that I will save someone else time in the future. &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;FUNCTION IsConsonant&lt;br /&gt; * Purpose...: Returns .T. if the letter passed is a consonant.&lt;br /&gt; * Author....: Toni M. Feltman&lt;br /&gt; * Parameters: tcLetter, The letter to check.&lt;br /&gt; *     tlYIsVowel, When passed .T. the letter Y is considered a vowel. &lt;br /&gt; * Returns...: Boolean&lt;br /&gt; * Added.....: 09/29/2009&lt;br /&gt; LPARAMETERS ;&lt;br /&gt;  tcLetter, ;&lt;br /&gt;  tlYIsVowel&lt;br /&gt;&lt;br /&gt; LOCAL ;&lt;br /&gt;  lcVowelString AS Character, ;&lt;br /&gt;  llReturn AS Boolean &lt;br /&gt;&lt;br /&gt; lcVowelString = IIF(tlYIsVowel, &#39;AEIOUY&#39;, &#39;AEIOU&#39;)&lt;br /&gt; llReturn = ISALPHA(tcLetter) AND NOT UPPER(tcLetter)$lcVowelString&lt;br /&gt; RETURN llReturn&lt;br /&gt;  &lt;br /&gt;ENDFUNC  &lt;br /&gt;&lt;/pre&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/4321337412989486988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/4321337412989486988' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/4321337412989486988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/4321337412989486988'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/10/isconsonant-function.html' title='IsConsonant Function'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-9191591829407726683</id><published>2009-06-16T22:20:00.002-05:00</published><updated>2009-06-16T22:52:07.125-05:00</updated><title type='text'>Instrumenting Menus</title><content type='html'>A week or so ago I was asked about tracking menu hits in the Visual FoxPro application I am working on for a client. This application is vintage late 1990&#39;s so there is no single procedure/object to process menu hits. Each pad/bar has it&#39;s own little procedure that run some code. So, I did what I do anytime I am asked to implement something new... I googled it. I found a wonderful article titled &lt;a href=&quot;http://portal.dfpug.de/dFPUG/Dokumente/FoxTalk/FoxTalk1997/FT19979_4.PDF&quot;&gt;Instrumenting FoxPro Applications&lt;/a&gt; by Rod Paddock. It was written in 1997. So, the article confirmed what I already knew, I was in trouble because there was not a central menu execution object in this application.&lt;br /&gt;&lt;br /&gt;Next I stumbed across the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ms947606.aspx&quot;&gt;Extending the VFP 9 IDE with MENUHIT and MENUCONTEXT &lt;/a&gt;article by Doug Hennig. Ok, so first of all, Intellisense is available at runtime now. I spoke on this a while back. Next, intellisense has exposed &quot;generic&quot; menu events. So, I should be able to use this to instrument my menu without adding code to each menu item.  Yes I could! Here is how I did it:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I opened my FoxCode table and copied it to the application&#39;s data directory and deleted all of the records.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;I added one new record to the application specific FoxCode table with the following field values:&lt;br /&gt;&lt;br /&gt;Type = &#39;S&#39;&lt;br /&gt;Abbrev = &#39;MENUHIT&#39;&lt;br /&gt;Data = The following program code.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;LPARAMETERS ;&lt;br /&gt;   toParameter&lt;br /&gt;&lt;br /&gt;LOCAL ;&lt;br /&gt;   loSelect AS Object, ;&lt;br /&gt;   lcBar AS Character, ;&lt;br /&gt;   lcPad AS Character&lt;br /&gt;&lt;br /&gt;loSelect = CREATEOBJECT(&#39;cSelect&#39;)&lt;br /&gt;lcBar = UPPER(ALLTRIM(toParameter.MenuItem))&lt;br /&gt;lcPad = UPPER(ALLTRIM(toParameter.UserTyped))&lt;br /&gt;&lt;br /&gt;*!* do not track use by developers&lt;br /&gt;IF VERSION(2) &lt;&gt; 0&lt;br /&gt;   RETURN&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;SELECT 0&lt;br /&gt;USE MenuTrack&lt;br /&gt;LOCATE FOR UPPER(cBar)  = lcBar AND UPPER(cPad) = lcPad&lt;br /&gt;&lt;br /&gt;IF NOT FOUND()&lt;br /&gt;   APPEND BLANK&lt;br /&gt;   REPLACE cBar with lcBar, cPad with lcPad&lt;br /&gt;ENDIF&lt;br /&gt;&lt;br /&gt;REPLACE nCount WITH nCount + 1, ;&lt;br /&gt;   dLastHit WITH DATETIME()&lt;br /&gt;&lt;br /&gt;USE IN SELECT(&quot;MenuTrack&quot;)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Then, in my main program I added the following lines of code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;IF FILE(‘FOXCODE.DBF’)&lt;br /&gt;   _FOXCODE = ‘foxcode.dbf’&lt;br /&gt;ENDIF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;It works beautifully and now we are able to track which menu items are called and which ones are called most often. Thanks Rod and Doug!</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/9191591829407726683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/9191591829407726683' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/9191591829407726683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/9191591829407726683'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/06/instrumenting-menus.html' title='Instrumenting Menus'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-3301752898810601127</id><published>2009-05-01T10:44:00.007-05:00</published><updated>2009-05-01T12:28:27.665-05:00</updated><title type='text'>Mike &amp; Toni Feltman Speaking at Southwest Fox 2009</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Speaker announcements were posted for Southwest Fox 2009 today and I&#39;m pleased to announce that Toni and I will both be speaking at Southwest Fox. If you&#39;ve seen us speak before then you know that Toni is one of the best speakers around and that conference organizers can save on hotel expenses by also having me speak. &lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;I&#39;m really excited to be speaking this year and have two fun topics that I think will translate into great sessions. The first one is &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#HTML_and_Visual_FoxPro&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;HTML and Visual FoxPro&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; and the second one is &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#Introducing_ChatterFox&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Introducing  ChatterFox&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;The HTML and Visual FoxPro session is a two parter. First I&#39;m going to go over all of the HTML related features that come in the box with VFP. There&#39;s a lot of them and there&#39;s not one central object or command that they&#39;re based on, so it&#39;s easy to miss some off them. There are also a lot of language features that aren&#39;t HTML specific but that make it easy to both create and consume HTML in VFP. We&#39;ll cover that as well. In the 2nd part, we&#39;re going to take a look at using HTML in desktop applications. HTML isn&#39;t just for the Internet and I&#39;ll show you why in this session. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;My other session, &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#Introducing_ChatterFox&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Introducing ChatterFox&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;, is about some APIs I&#39;ve been developing for enabling social media like features on custom web sites as well as in desktop applications. The abstract on the SW Fox site pretty much tells the whole story on that session, so head over there for all the details. While you&#39;re there, click on the &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/register.aspx&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;register&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; link and get yourself signed up. There are some great early discounts available. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Also, on the topic of SW Fox, a new track has been added this year: &quot;&lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessionstrack.aspx#Technology_for_VFP_Developers&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Technology for VFP Developers&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;.&quot; A brilliant and wise man suggested this topic to the SW Fox organizers although I&#39;m sure plenty of other people had the same thoughts. This track covers subjects that are not specific to VFP but that VFP developers will benefit from by knowing. Here are the topics in the track:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Integrating VFP with SourceGear Vault&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Introduction to Subversion and Tortoise SVN&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Microsoft Virtual PC for VFP Developers&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Open Source Tools&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;The Show Must Go On: Disaster Recovery and Business Continuity Planning&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;I think this track is important for several reasons. First of all, the majority of VFP developers have been working in VFP for over a decade and would be classified as experts in their field. Sometimes it&#39;s hard to justify training expenses for something you&#39;re already an expert on. (My xBase career is at 22 years now and there are indeed sessions in this conference that I know I can learn from though) . So this track provides some training on other topics of interest that will benefit VFP developers directly even if you already &quot;know it all&quot; as far as VFP is concerned. Secondly, a lot of VFP developers live in their own little world. It&#39;s pretty typical for a VFP developer to be either an in-house developer that maintains a single line-of-business application or that has a fixed set of clients. This is a chance to look out the window and see what other VFP developers are doing out there. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;I&#39;m looking forward to the &quot;&lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#Microsoft_Virtual_PC_for_VFP_Developers&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Microsoft Virtual PC for VFP Developers&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&quot; session by Doug Hennig. I know I should be making use of virtual machines but everytime I decide to give it a whirl I run into some show stopper and decide to get back to billable work. I&#39;m counting on Doug to get me up and running eh. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;If you&#39;re not using Source Code Control, well, I think you need to question your sanity. I thought F1 Technologies was somewhat late adopters of source code control when we finally started using it in the 90s. I&#39;m shocked and appalled that there are still developers out there that I consider highly skilled and otherwise brilliant not using version control. There are 2 sessions in this track for you. &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#Introduction_to_Subversion_and_Tortoise_SVN&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Introduction to Subversion and Tortoise SVN&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; given by Toni Feltman and &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;&lt;a href=&quot;http://www.swfox.net/sessions.aspx#Integrating_VFP_with_SourceGear_Vault&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Integrating VFP with SourceGear Vault&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; by Walt Krzystek. Subversion and Vault basically represent both schools of thought in Version Control. If you don&#39;t know what I mean by that, go to the sessions to find out. Then pick one! Both of them are precons, so if you &lt;/span&gt;&lt;a href=&quot;http://www.swfox.net/register.aspx&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;register now&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;, you can attend one of them for free. If you can&#39;t justify the expense for the 2nd precon, just go to Toni&#39;s session - Toni is way better looking than Walt. If you are using version control, if you&#39;re using VSS (or VSS with Source Off Site) and like that approach go to Walt&#39;s session on Vault and see all that you&#39;ll gain by switching to Vault. If you find Vault or VSS too prohibitive or you just want to see what Subversion is all about, go to Toni&#39;s session. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;I&#39;ll be rehearsing one of my sessions at the &lt;/span&gt;&lt;a href=&quot;http://grafug.com/&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Grand Rapids Area FoxPro User Group&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; on October 10th. If there&#39;s a user group out there that would like to see me rehearse the other topic or both in September let me know. Practice makes perfect. &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;Anyway I&#39;m really excited about SW Fox this year. SW Fox is the only major VFP event in North America and I&#39;m looking forward to seeing as many of my VFP friends as possible. Hopefully Toni and I will have the party room again this year. While I can&#39;t promise there&#39;ll be any &lt;/span&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=beBi2avvmho&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;burning guitars&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt; this year I&#39;m sure it&#39;ll be a good time. Maybe Craig Boyd will get his act together and organize a real Texas Hold &#39;em Tourament.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot; -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/3301752898810601127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/3301752898810601127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3301752898810601127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3301752898810601127'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/05/mike-toni-feltman-speaking-at-southwest.html' title='Mike &amp; Toni Feltman Speaking at Southwest Fox 2009'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-8843666671097781138</id><published>2009-04-29T12:19:00.003-05:00</published><updated>2009-04-29T12:49:31.940-05:00</updated><title type='text'>Work Area Manager - Go Green with VFP</title><content type='html'>At my onsite gig I&#39;m maintaining a VFP app that&#39;s been ported from FoxPro DOS to FoxPro Windows to VFP. It has a lot of old code in it, that suffice it to say, is suboptimal. Introducing new, well-written code into it is often challenging. The old code includes very little defensive coding and is full of assumptions about the environment it runs in. It&#39;s really dependant on what cursors are open, filters, indexes, record pointers and so on. The app is modal and there&#39;s a lot of &quot;drill-down&quot; type behavior, so things that the environment is depenendant upon may have longn ago in the call stack. After a lot of messing around with hard coding specfic states I needed to save and restore I finally decided to just create a class that would handle this stuff for me. If you remember the cSelect class from Codebook or VFE this is basically just an extended version of it that handles all open work areas. There&#39;s nothing complex about it, so I&#39;m not going to get into the specifics of the code here. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the &lt;a href=&quot;http://www.f1tech.com/downloads/workareamanager.zip&quot;&gt;zip&lt;/a&gt; I&#39;ve linked here, is a class named WorkAreaManager. Basically before you&#39;re going to do something that tampers with the environment, you just create an instance of it. Then you can go about your merry way messing with the open cursors, opening new cursors, whatever it is you need to do. When the instance is destroyed (either explicitly or by letting it&#39;s variable fall out of scope), any cursors that were not previously opened are closed and the record pointer, filter, index order and alias are restored for any cursors that were previously open. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The only potential gotcha that I&#39;m aware of is it doesn&#39;t handle temporary cursors if your code closes them, but that hasn&#39;t been an issue for me so far. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Give it a try. &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/8843666671097781138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/8843666671097781138' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8843666671097781138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8843666671097781138'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/04/work-area-manager.html' title='Work Area Manager - Go Green with VFP'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-2747012442844791529</id><published>2009-04-29T11:02:00.004-05:00</published><updated>2009-04-29T12:14:32.590-05:00</updated><title type='text'>Clean Bill of Health</title><content type='html'>I&#39;m back home after my surgery. For the millions of readers out there who may not have been privy to the minute details of my health, let me summarize what&#39;s transpired. Back in March I had a tummy ache that persisted long enough for me to visit the ER. It turned out that I had diverticulitis and I ended up being hospitalized for 5 nights. Due to the outstanding healthcare I received from St. Vincent&#39;s Medical Center and the overwhelming support my family and I received from our friends and family the infection cleared up and I was able to avoid emergency surgery and was discharged. My hospital stay included 4 days of nothing but intravenous liquids, followed by a delicious diet of broth and jello.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Last week I returned to St. V&#39;s to have the bad section of my colon removed. The procedure I had was a Lathroscopic Sigmoid Recession for those that want to know the exact medical terminology. The end result is that my belly now looks likes &lt;a href=&quot;http://twitpic.com/41scn&quot;&gt;this&lt;/a&gt;, except the bloating is down considerably. &lt;a href=&quot;http://s3.amazonaws.com/twitpic/photos/full/6801863.jpg?AWSAccessKeyId=0ZRYP5X5F6FSMBCCSE82&amp;amp;Expires=1241022369&amp;amp;Signature=6edxP4PRg%2FDH8M64EBB4%2FsutYzc%3D&quot;&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I&#39;m recovering well. A few things still cause me considerable pain - including laughing, coughing and probably most importantly - pants. I think in another week or so I&#39;ll pretty much be back to normal. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Overall, this has been a tremendously positive experience for me. The love and support I recieved from my friends and family here in Toledo was overwhelming and truly humbling. I&#39;ve always felt tremendously blessed to be a Feltman and marrying into the Taylor-Hass family has really just made me even more blessed. The shawl in the picture was knitted for me by the Prayer Shawl Ministry at our church, &lt;a href=&quot;http://www.saintmartindeporres.com/&quot;&gt;Saint Martin de Porres&lt;/a&gt; and I was really blown away to receive it. We have a lot of people with much worse conditions than mine and I was really, really touched that they took the time to knit a shawl for me. An unexpected number of people took time out to visit, send cards and call with their well wishes also. I guess you never really know how much it means for someone to say they&#39;re praying for you or express their concern until you really need it. When you&#39;re sick, little things really do mean a lot.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So I&#39;d like to take this opportunity to thank everyone for looking out for me, particularly my wife and children, my parents and in-laws, brother and sister, all of my friends on Twitter,  Aunt Marcia and Uncle Don and their wonderful daughters, Uncle Toby, my friend Scott, the Bumpus Clan, everyone at St. Martin de Porres and everyone else that had me in their thoughts and prayers. Your love and support really made this an overall positive experience for. Thank you all so much. It&#39;s really a great honor to know I am loved and cared for by so many. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Going forward, I basically have to maintain a healthy diet. The other bright side of this is I&#39;ve lost 23 lbs and since I was about at my all time heaviest when this happened, that&#39;s a real plus. I was planning on getting down to 200 lbs by August 22nd and now I only have 15 lbs to go. I&#39;m sure there are better diet plans out there, but this one has worked great for me. With any luck I&#39;ll have a relapse after the 4th of July and I&#39;ll make it with basically no effort. :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;My energy level is still pretty low, but mentally I&#39;m recharged and starting to get back into the swing of things. For my Fox friends in particular - who really rock and helped to keep Toni&#39;s spirits up tremendously -  I plan on paying it forward with some long overdue blog posts, some kick ass new features in VFE and rockin&#39; sessions at &lt;a href=&quot;http://swfox.net/&quot;&gt;SW Fox 2009&lt;/a&gt;. Look for the old, enthusiastic Mike of the early 90&#39;s to come out and dazzle you with some technical wizardry, self-depracating humor and of course - frantic pacing! Maybe I&#39;ll dust off the old Foundation Read sessions - those use to be real show stoppers. Hmmm, do I have enough time to regrow the mullet for SW Fox? I figure if I do really, really well, I can move up to 2nd to last in overall speaker ranking!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Again, thanks to everyone. You&#39;re all in my thoughts and prayers and you can count on me being there for you if you ever find yourself in a time of need. &lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/2747012442844791529/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/2747012442844791529' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/2747012442844791529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/2747012442844791529'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/04/clean-bill-of-health.html' title='Clean Bill of Health'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-8900650351230250264</id><published>2009-03-26T08:11:00.010-05:00</published><updated>2009-04-12T20:49:48.878-05:00</updated><title type='text'>How to get your VFP IDE windows to behave.</title><content type='html'>This fall I watched Alan Stevens present at the Southwest Fox conference and I really liked the way he had his Visual FoxPro IDE windows docked so when I got back home I tried it. The layout looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5f6g5lIALrvSQtTaIXdw9f7I1DSngoaObxP0JdRKDSaQgFRD7D3Wv4kYcN5vrwKiAj-wNX1ercJAzFP_1ghp1QddpZ3fBw-6hO1uY-gDUrglIOGux5qVNbtapmKNBh2kcVJZgAg/s1600-h/Docking.bmp&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 125px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5f6g5lIALrvSQtTaIXdw9f7I1DSngoaObxP0JdRKDSaQgFRD7D3Wv4kYcN5vrwKiAj-wNX1ercJAzFP_1ghp1QddpZ3fBw-6hO1uY-gDUrglIOGux5qVNbtapmKNBh2kcVJZgAg/s200/Docking.bmp&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5319929296025609570&quot; /&gt;&lt;/a&gt;&lt;div&gt;The problem that I had is the Visual FoxPro would not remember the position of the windows when exiting. Sometimes on startup it would be close but never totally correct. I asked Alan about it but he had never seen this behavior. &lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Finally after several months I found the solution on Tek-Tips. The original solution can be found here (&lt;a href=&quot;http://www.tek-tips.com/viewthread.cfm?qid=1515817&amp;amp;page=4&quot;&gt;http://www.tek-tips.com/viewthread.cfm?qid=1515817&amp;amp;page=4).&lt;/a&gt; But the basic steps behind this thread are:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;1. DELETE your Resource file &lt;/div&gt;&lt;div&gt;2. Start VFP and SET RESOURCE ON &lt;/div&gt;&lt;div&gt;3. Confirm using ?SET(&quot;Resource&quot;)&lt;/div&gt;&lt;div&gt;4. Very important step: click the button to the left of the Close (X) button so that the VFP IDE is not maximized&lt;/div&gt;&lt;div&gt;5. Open, position, size and dock your windows/toolbars the way you want them.&lt;/div&gt;&lt;div&gt;6. Quit VFP by clicking the Close button (X), not by choosing File - Exit.&lt;/div&gt;&lt;div&gt;7. Restart VFP and the IDE should be the way you want it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;You can now Maximize the IDE and when you restart everything will still be where you want it.&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(0, 0, 238); text-decoration: underline;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/8900650351230250264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/8900650351230250264' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8900650351230250264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8900650351230250264'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/03/this-fall-i-watched-alan-stevens.html' title='How to get your VFP IDE windows to behave.'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5f6g5lIALrvSQtTaIXdw9f7I1DSngoaObxP0JdRKDSaQgFRD7D3Wv4kYcN5vrwKiAj-wNX1ercJAzFP_1ghp1QddpZ3fBw-6hO1uY-gDUrglIOGux5qVNbtapmKNBh2kcVJZgAg/s72-c/Docking.bmp" height="72" width="72"/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-3527467132533528070</id><published>2009-03-20T09:27:00.006-05:00</published><updated>2009-03-20T19:58:30.917-05:00</updated><title type='text'>Don Macintosh</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot;   style=&quot;color: rgb(51, 51, 51);   line-height: 15px; font-family:&#39;Lucida Grande&#39;;font-size:14px;&quot;&gt;&lt;div&gt;Today a friend of mine posted this comment on Twitter:&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&quot;Every so often I practice typing with my nose, just in case I lose my arms in some sort of accident. It pays to be prepared!!&quot;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The comment immediately reminded me of a long time FoxExpress customer named Don Macintosh. Don would call me regularily for technical support. The support questions were really more about custom code than how to use the product. Our receptionists alway knew when it was Don before he identified himself because he was older and spoke louder than most of our other customers. I later found out it was because he was always using handsfree. He always started the call with &quot;Hi, this is Don Macintosh.&quot; Because Don was older, it often took several tries to get my point across which at times could be frustrating. Even though I made sure to put on my happy voice, I didn&#39;t always enjoy talking to Don. But, Don always liked talking to me and never had any issues paying for the support he used. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I don&#39;t remember the details of the application he was writing but I think it may have been church management software. What I do remember is that it was running on Chinese windows which was one thing that I found facinating about the application. He never had any questions about running under Chinese Windows. It just worked. His questions were all about FoxPro and FoxExpress.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One summer Mike and I were presenting at several of the Southern California User Groups and Don came out to meet us face to face at the.LA Fox User group. We knew Don was coming and it was going to be nice to finally put a face with the name. We got far more of a surprise than we ever expected. Don was indeed older. My guess was early 70s, which was ancient when I was not yet 30. However, he had very minimal use of one arm and no use of the other. I think that the proper term is Diplegia. He was accompanied by his lovely wife who was always nearby when we spoke on the phone. Before meeting him, I just assumed that a retired huband and wife spent a lot of time together. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, I bet you are asking how he could possibly program computer in the mid 1990&#39;s (before voice recognition was popular). Well, Don had a wooden dowel with him that he put in his mouth and typed with. He was unbelievably efficient, so efficient that I had no clue when I spoke to him on the phone. Sure, I thought some things took a while, but not that long. He was able to navigate the mouse just enough using his one arm. I was so shocked.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don demoed his application for us and it was nicely done and pretty complex. Of course, our demo was using US Windows but he did show it to us running Chineese windows just so that I could see it. I left that user group meeting with a new respect for Don. When we got back to Toledo, I welcomed each and every call from Don and... I could hear the clicking of that wooden dowel as we spoke. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Don finished his application and we moved on to other FoxPro technologies. I wonder what ever happened to him. I should remember Don more often when I open my mouth to say &quot;I can&#39;t&quot; &lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/3527467132533528070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/3527467132533528070' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3527467132533528070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3527467132533528070'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/03/don-macintosh.html' title='Don Macintosh'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1188552855452079954</id><published>2009-02-27T08:51:00.004-05:00</published><updated>2009-02-27T10:55:19.061-05:00</updated><title type='text'>Where did my FoxPro Application Go?</title><content type='html'>I have been meaning to blog about this for almost a year but kept pushing it to the back burner. A client of mine had an intermittent problem for quite some time. The problem occurred when the users would have the application running and switch to another window like FireFox or Outlook or even another instance of the application. When they would come back to the original application window, it would be gone. No error, just gone.&lt;br /&gt;&lt;br /&gt;Once of the things that I did shortly after I started on this gig was to move the runtime files from the server to the local workstation. The system was already launched from a .BAT file that copied a bunch of junk to the local machine so why not copy something useful? As you might expect, in a company with close to 300 users at any time, this move reduced the network traffic quite a bit.&lt;br /&gt;&lt;br /&gt;Once the runtime files were moved, we started getting intermittent (but frequent)  &quot;Invalid Seek Offset&quot; errors. The network guys insisted that this was an application problem and I insisted that it was a hardware problem. After much Google searching, they network team finally conceded that this was indeed a network issue. It was several network issues actually, NIC cards, bad cables, overloaded hubs... So, my move actually helped make the network stronger.&lt;br /&gt;&lt;br /&gt;Once the &quot;Invalid Seek Offset&quot; errors started, the disappearing application windows went away totally. Interesting... when a network connection (or drive mapping) is lost and VFP has to make a call to the runtime files located on a network share, it just shuts down because it can&#39;t find the necessary files. It shuts down gracefully with no error message. Sure, data in memory is not saved but no data becomes corrupt either.&lt;br /&gt;&lt;br /&gt;On the other hand, Invalid Seek Offset errors are really bad. FoxPro&#39;s error handling does not trap these errors and once you get one, you are not getting out of it without an End Task which can corrupt data. So, which do you choose... High network traffic and low risk for data corruption or low network traffic and high risk for data corruption? Luckily this company chose to use the errors (as horrible as they were for a short time) to correct the network problems and make the infrastructure more sound over all. Now the system runs efficiently with next to no network related errors. I would never have expected FoxPro to just shut down when it couldn&#39;t find the needed internals.&lt;br /&gt;&lt;br /&gt;Have a great weekend!</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1188552855452079954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1188552855452079954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1188552855452079954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1188552855452079954'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/02/where-did-my-foxpro-application-go.html' title='Where did my FoxPro Application Go?'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1157414787589881414</id><published>2009-01-16T10:20:00.006-05:00</published><updated>2009-02-27T08:21:53.381-05:00</updated><title type='text'>Chatty vs. Chunky</title><content type='html'>Most of my client-server experience has led me to believe that a chatty application will perform better than a chunky one. A chatty application will pull, from the server, the smallest amount of data needed to perform a task. If more data is needed for another task another small dataset is retrieved. It is an only pull what you need system.&lt;br /&gt;&lt;br /&gt;While working at GiftRAP, Beth Massi, tried to convince me that a chunky interface is far more scalable and much better when writing distributed applications. Since Beth knows far more about distributed applications than I do I said OK but didn&#39;t really believe her. After all, I was always taught that smaller is better when it comes to getting data from your database server. Well, I now have proof that Beth may have been right, but don&#39;t tell her. :-) &lt;br /&gt;&lt;br /&gt;I am working on a project right now that is experiencing some bottlenecks on our Oracle Server. Some of the long running processes are really blocking the other 250 users of the system. So, I have decided that I need to do what Calvin would do and remove the slow parts. &lt;br /&gt;&lt;br /&gt;So, here is this process that scans through a FoxPro table and retrieves some data from two different Oracle tables based on the FoxPro key field. The first mistake the original developer made was to not create one query to get the data from both Oracle tables at once since they are related. No big deal, this is an honest mistake for someone not well versed in Client-Server techniques. So, I fixed that but the process was still very slow. &lt;br /&gt;&lt;br /&gt;As it turns out, there were about 140,000 records in the one Oracle table and just over 3000 that matched a generic query needed for this process. The Oracle cost of the generic query was like 6703 and the cost of the query specific to the Fox data was 474. The problem is that the query with th 474 cost was executed in a loop more than 15 times. Therefore, it was significantly more efficient to pull all 3000 records down (a small # of fields) and let FoxPro filter the more specific data as it was needed. &lt;br /&gt;&lt;br /&gt;In general the process would take anywhere from 15 minutes to 1 hour to run on a daily basis and consume enough server resources to slow down other processes. Now it runs in under a minute and is barely a bleep on the server&#39;s performance monitor.&lt;br /&gt;&lt;br /&gt;Don&#39;t get caught in old habits when tweaking performance. Chunky can be better than Chatty even in non-distributed (or plain 2 tier) applications.&lt;br /&gt;&lt;br /&gt;Note: Mike and I were discussing this post the other day and he indicated that the point of the blog might not be so evident. So basically here is the point in a nutshell: Pulling down 10 different records 5 times is not always faster than pulling down all 50 records from the start.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1157414787589881414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1157414787589881414' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1157414787589881414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1157414787589881414'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2009/01/chatty-vs-chunky.html' title='Chatty vs. Chunky'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-8000493291144842137</id><published>2008-11-14T17:37:00.003-05:00</published><updated>2008-11-14T17:38:14.597-05:00</updated><title type='text'>UAC Hell</title><content type='html'>I have spoken to several people lately about how I do not like running with UAC turned on under Vista. The concept of UAC is a good one; I just don’t like it for me so I keep UAC turned off. For some reason it seems that Windows wants to keep turning it on for no reason and without prompting. This has been driving me crazy for several months simply because when I turn it off I have to reboot and that takes a little while I my machine. I plan to do a “Freeman” very soon. &lt;br /&gt;&lt;br /&gt;Well, last week UAC again got turned on without prompting. This time it was far worse than any other time. I noticed right away when I went to enter my password that the dialog was different. I just figured that whatever update turned UAC back on must have also changed the login dialog. Then, I figured out that my password did not work. I entered it the same way and the login dialog accepted it but I received a message that I needed elevation. How much more elevation can you get than the administrator? So, I went and looked at my user rights and guess what, I was no longer an administrator on my own computer.  I was just a debugging user. To boot, I had no clue what the password would be for the Administrator account.  All I read about Vista said that the Administrator account was not really one that could be logged on to. Just great!&lt;br /&gt;&lt;br /&gt;After an hour or so of trying to figure out what was going on, I was reminded of a conversation I had with some networks guys I work with. I needed to install a specific version of MSXML on each workstation at a fairly large company (300 machines). The network guys suggested that I allow them to push the install down using Group Policy. Ah ha! So, if they could push down entire installs I bet they push down configurations too. But, I never log on to the domain directly so does Group Policy apply to me? The answer is yes. I log into the network using a VPN connection and that is all that is needed. My login name (rather than machine name) was the key for the Group Policy. Our system admin removed my computer name from the list of computers to update and now all it well again. I just hope that it stays that way. So, when weird things happen, don’t forget to look to the network configurations, all of them.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/8000493291144842137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/8000493291144842137' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8000493291144842137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8000493291144842137'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/11/uac-hell.html' title='UAC Hell'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-9145179201668468512</id><published>2008-07-31T07:43:00.005-05:00</published><updated>2008-08-14T11:14:54.188-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AFP"/><category scheme="http://www.blogger.com/atom/ns#" term="VFP"/><category scheme="http://www.blogger.com/atom/ns#" term="XML"/><title type='text'>Rendering Blog Content to a web page</title><content type='html'>I received an email last night asking about how we render the table of contents from our blog to our home page. I thought this would make a good blog entry itself, so here it is.&lt;br /&gt;&lt;br /&gt;Our home page is an Active FoxPro (AFP) page. It contains the code below to render the blog.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Someone just pointed out to me that this code wasn&#39;t showing up under ie. Bad ie!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; ?BlogFeed([http://feeds.feedburner.com/F1Technologies?id=]+DTOS(DATETIME()))&lt;br /&gt;&lt;/pre&gt;Blogfeed is a function I have defined in the .AFPA.Code file for F1Tech.com. I&#39;ve attached the relevant code in a program named blogfeed in a zip file &lt;a href=&quot;http://www.f1tech.com/downloads/blogfeed.zip&quot;&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;In a nutshell the blogfeed class uses the Microsoft.XMLHTTP COM object to retrieve the URL, creates a cursor from it, locates the first record we want to render and then spits it out into an HTML table. I&#39;ve used various versions of this class for a number of different blogs. The structure of the cursor created from the XMLToCursor call can vary widely and which record you want to start on will also vary, but this should be pretty easy to tweak to deal with that.&lt;br /&gt;&lt;br /&gt;The id=DTOS(DATETIME()) parameter I&#39;m appending to the URL is a dummy parameter. Feedburner doesn&#39;t do anything with this parameter, but I had to append something to force a new read. Without adding this the server (or something at feedburner maybe) seemed to cache the feed and it would take several days before new blog entries would show up. Using a GUID or a SYS(2015) value might be a better approach since those values would change on each call, but for my purposes, I don&#39;t mind if the feed is cached once a day because this should take a load off the server.&lt;br /&gt;&lt;br /&gt;The BlogFeed wrapper function is designed for simple calls. The blogfeed class has a number of properties that are designed to make it possible to work with different blogs, use different styles and so on. Below are the key properties and methods you&#39;ll use to customize the blogfeed class for other content.&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Properties&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;cBlogURL  -  The URL for the blog&lt;/li&gt;&lt;li&gt;cAlias - The alias created when the blog is loaded into a cursor. &lt;/li&gt;&lt;li&gt;nMaxEntries - The maximum number of blog entries to render.&lt;/li&gt;&lt;li&gt;nMaxNew - The maximum number of entries to flag as new. This property can be set to zero to specify no entries should be flagged as new.&lt;/li&gt;&lt;li&gt;nNewDays- The number of days to consider an item new.&lt;/li&gt;&lt;li&gt;cTitleField - The name of the field that contains the title for the blog entry.&lt;/li&gt;&lt;li&gt;cURLField - The name of the field that contains the URL for the blog entry.&lt;/li&gt;&lt;li&gt;cNewStyle - The style to use for items flagged as new.&lt;/li&gt;&lt;li&gt;cArticleStyle - The style to use for links to articles.&lt;/li&gt;&lt;li&gt;cErrorMessage - The error message to display when the blog cannot be read.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;Methods&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Render - Renders the blog as HTML&lt;/li&gt;&lt;li&gt;FindFirstEntry - Finds the first record to be written to the HTML table. Most blog feeds will create some header records that should be ignored.&lt;/li&gt;&lt;li&gt;GetEntryDate - Returns the date of a blog entry. Most feeds will contain a field that contains the date of the blog entry, but the format may vary greatly. This method typically is overridden to parse the date from this field.&lt;/li&gt;&lt;/ul&gt;The blogfeed class is a really simple class to make use of. I&#39;m using AFP. The syntax for Web Connection should be identical. If you&#39;re using another web technology it should be fairly easy to adjust the call to the blog feed function as necessary. Enjoy!  Somewhere around here I  have calls for the VFP Wiki,  VFPX, FoxCentral and a few other fox centric sites. I plan on deploying them all to a single page as a generic VFP portal sometime soon.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/9145179201668468512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/9145179201668468512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/9145179201668468512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/9145179201668468512'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/rendering-blog-content-to-web-page.html' title='Rendering Blog Content to a web page'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-5726309955255382206</id><published>2008-07-28T06:17:00.002-05:00</published><updated>2008-07-28T06:22:40.520-05:00</updated><title type='text'>Our Son was Married on Friday</title><content type='html'>&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzVJV9_E3M_qm0gHRb9Xm_uwuEYmezXgSA7jNipyAFRBTOLv0lfqSBnz8Ls8fSowzzADF4zddAmxXR5jsrFNO-_peA86ZuwnUVtRHkma4QBg1sSHpYVnifHW-ilIwvH_KrJg1tNg/s1600-h/Yuki_and_Yesuel.JPG&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzVJV9_E3M_qm0gHRb9Xm_uwuEYmezXgSA7jNipyAFRBTOLv0lfqSBnz8Ls8fSowzzADF4zddAmxXR5jsrFNO-_peA86ZuwnUVtRHkma4QBg1sSHpYVnifHW-ilIwvH_KrJg1tNg/s400/Yuki_and_Yesuel.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5228022865053817522&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Our son Yuki, from Japan, married his friend Yesuel, from Korea, Friday evening in a mock wedding ceremony at the Toledo Botanical Gardens.&lt;br /&gt;&lt;br /&gt;Yuki is staying with us for a few weeks this summer while attending the International Youth Academy sponsored by the Toledo Sister Cities International. A friend of ours has been trying to talk us into being a host family for several years and this year it fit well with our schedule. We are enjoying learning about Japanese culture as Yuki learns about American culture. It has been an absolute blast and I will be sad to see Yuki go home.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/5726309955255382206/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/5726309955255382206' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/5726309955255382206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/5726309955255382206'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/our-son-was-married-on-friday.html' title='Our Son was Married on Friday'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzVJV9_E3M_qm0gHRb9Xm_uwuEYmezXgSA7jNipyAFRBTOLv0lfqSBnz8Ls8fSowzzADF4zddAmxXR5jsrFNO-_peA86ZuwnUVtRHkma4QBg1sSHpYVnifHW-ilIwvH_KrJg1tNg/s72-c/Yuki_and_Yesuel.JPG" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-8408987336331212447</id><published>2008-07-23T15:55:00.004-05:00</published><updated>2008-07-23T16:13:32.835-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="DebugBar"/><category scheme="http://www.blogger.com/atom/ns#" term="Firebug"/><category scheme="http://www.blogger.com/atom/ns#" term="FireFox"/><category scheme="http://www.blogger.com/atom/ns#" term="Internet Explorer"/><category scheme="http://www.blogger.com/atom/ns#" term="JavaScript"/><title type='text'>IE JavaScript Debugging with DebugBar</title><content type='html'>Virtually every developer I know that&#39;s doing any kind of client-side development for the browser using JavaScript prefers Firefox over Internet Explorer. The main reason for this preference is the availability of &lt;a href=&quot;http://getfirebug.com/&quot;&gt;Firebug&lt;/a&gt; for Firefox. Personally my approach has been to develop using Firefox and then when I have everything working pray that my code will function properly in IE. I make pretty heavy use of &lt;a href=&quot;http://www.prototypejs.org/&quot;&gt;Prototype&lt;/a&gt;, which addresses a lot of cross-browser issues, but there are still plenty of occasions where things work just fine in Firefox but choke in IE.&lt;br /&gt;&lt;br /&gt;A few months ago I stumbled across a tool named &lt;a href=&quot;http://www.debugbar.com/&quot;&gt;DebugBar&lt;/a&gt; - a Firebug like debugger for IE!  DebugBar allows you to inspect the Document Object Model (DOM) for the current page,  view the source for you JavaScript, see the results of AJAX calls, examine styles, provides a JavaScript console and much more. I still prefer Firefox and Firebug for one simple reason, DebugBar does not currently offer JavaScript tracing - although it does work with the MS Script Debugger (which is &quot;deprecated technology and is no longer supported&quot;)  - and the ability to step through code like Firebug does. This is pretty much the only Firebug feature I really miss, but it&#39;s a big one. At any rate, I&#39;ve still found DebugBar to be incredibly useful and can&#39;t imagine developing and testing for IE without it.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/8408987336331212447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/8408987336331212447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8408987336331212447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/8408987336331212447'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/ie-javascript-debugging-with-debugbar.html' title='IE JavaScript Debugging with DebugBar'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-3415911551121561539</id><published>2008-07-18T16:17:00.002-05:00</published><updated>2008-07-18T16:32:35.360-05:00</updated><title type='text'>Thinking Outside the Box</title><content type='html'>As many of you know, right now I am working on a project with a lot of legacy FoxPro code. This week some team members decided to add a primary key to several of our old Fox tables. They chose an auto incrementing integer field for the primary key. Since they thought this change would be fairly harmless, they made it right on production data without running it through testing first.&lt;br /&gt;&lt;br /&gt;A few hours into the work day (data changes are made after hours) people started getting “Field ID is ReadOnly” (2088) errors. The problem was discussed during our morning SCRUM and immediately the developers were ready to drop the field. You see there is SCATTER MEMVAR MEMO and GATHER MEMVAR MEMO code all over the place in the application and no one wanted to find each one and modify it to bypass the new ID field. I figured that we could handle it through the error handler using code like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;IF e_no = 2088 AND &#39;ID&#39;$UPPER(er_mess)&lt;br /&gt;    RELEASE m.id&lt;br /&gt;    on error do err_prg with ;&lt;br /&gt;        error(), ;&lt;br /&gt;        program(), ;&lt;br /&gt;        lineno(), ;&lt;br /&gt;        message(), ;&lt;br /&gt;        message(1)&lt;br /&gt;    RETRY&lt;br /&gt;ENDIF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Releasing the id variable and retrying the command fixes the problem and if anyone&lt;br /&gt;was relying on a different m.id value they were hosed anyway. So, good code in one spot to fix not so good code in many places.&lt;br /&gt;&lt;br /&gt;During the writing of this blog entry, I looked up error 2088 in the help file and stumbled on SET AUTOINCERROR that I probably read about at one time when it didn’t apply to me and promptly forgot about. That would have been a much easier fix but less fun to blog about.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/3415911551121561539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/3415911551121561539' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3415911551121561539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/3415911551121561539'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/thinking-outside-box.html' title='Thinking Outside the Box'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1914858898279868667</id><published>2008-07-18T11:37:00.002-05:00</published><updated>2008-07-18T11:43:13.398-05:00</updated><title type='text'>Buh bye Plaxo</title><content type='html'>I just deleted my Plaxo account. I&#39;ve been on Linked In along time and am much happier with it than Plaxo. Plaxo.com immediately crashes Firefox whenever I log into it and runs painfully slow on IE7. I know these issues probably have more to do with my computer than Plaxo, but I&#39;m not going to invest the time in trying to solve them. So, if you&#39;re looking to connect with me on a social networking site, check me out on Linked In.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.linkedin.com/in/mikefeltman&quot;&gt;&lt;img height=&quot;33&quot; alt=&quot;View Mike Feltman&#39;s profile on LinkedIn&quot; src=&quot;http://www.linkedin.com/img/webpromo/btn_myprofile_160x33.gif&quot; width=&quot;160&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just thought I&#39;d post this here so anyone who has added me as a connection on Plaxo knows I&#39;m no longer there.&lt;br /&gt;&lt;br /&gt;Sometime soon I&#39;ve gotta start twttering though. Toni&#39;s really enjoying cyberstalking all of her friends.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1914858898279868667/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1914858898279868667' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1914858898279868667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1914858898279868667'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/buh-bye-plaxo.html' title='Buh bye Plaxo'/><author><name>Mike Feltman</name><uri>http://www.blogger.com/profile/03174215705395971982</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='http://www.f1tech.com/images/mikef.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-6451214224523919918</id><published>2008-07-11T11:32:00.002-05:00</published><updated>2008-07-11T11:51:10.557-05:00</updated><category scheme="http://www.blogger.com/atom/ns#" term=".NET"/><title type='text'>Microsoft Enterprise Library 4.0</title><content type='html'>I attended a webinar yesterday on Microsoft Enterprise Library 4.0 and I think I wasted my time. Even though it was described as Level 200 – Intro, the presenters assumed that the audience knew something about prior versions of EntLib which I did not.  I was hoping for some pictures of the architecture (which they did provide) and then examples showing how you used to do something and how you can do it better with EntLib. &lt;br /&gt;&lt;br /&gt;I think that the concept is good and similar to what we have being doing with the Factory and Data Dictionary in VFE for years. I want to be able to see the injection side but I just couldn’t see it in the examples provided. I thought maybe it was just me but another person on my team (VB.NET programmer) didn’t really get it either. &lt;br /&gt;&lt;br /&gt;Part II is this afternoon but I think I may pass until I do some more reading on Aspect-Oriented Programming and earlier versions of EntLib.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/6451214224523919918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/6451214224523919918' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/6451214224523919918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/6451214224523919918'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2008/07/microsoft-enterprise-library-40.html' title='Microsoft Enterprise Library 4.0'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-1767451066054844981</id><published>2007-09-20T21:37:00.000-05:00</published><updated>2007-09-20T21:53:06.072-05:00</updated><title type='text'>Little Tidbits</title><content type='html'>I recently starting working with a great group of guys at a local company. I am not so sure that I like actually having to get dressed every day but I do like the work and the people which make it worthwhile.&lt;br /&gt;&lt;br /&gt;The team that I am working with have worked with Fox a long time, two of them go back to our days at Fox Software. The business has grown rapidly over the last few years and the IT department has felt the pain. One of the reasons I was brought in on this project was to help get things on a smoother path. I think we are gettting there. It is so rewarding to see processes implemented and work in a way that takes the pressure down a notch or two.&lt;br /&gt;&lt;br /&gt;Anyway, the reason for this blog entry is to talk about two tips that I learned from my new team.&lt;br /&gt;&lt;br /&gt;1. How many places in your application do you have the following code?&lt;br /&gt;&lt;pre&gt;IF USED(&quot;SomeAlias&quot;)&lt;br /&gt;     USE IN SomeAlias&lt;br /&gt;ENDIF&lt;/pre&gt;&lt;br /&gt;Well, it can be replaced with:&lt;br /&gt;&lt;pre&gt;USE IN SELECT(&quot;SomeAlias&quot;) &lt;/pre&gt;&lt;br /&gt;This code works without error if the cursor is opened or not. Thank you Travis!&lt;br /&gt;&lt;br /&gt;2. Did you know that anytime a Windows MessageBox is open, you can press CTRL+C and paste plain text into a text file? No need to use Shift+PrintScreen and deal with the image. Try it out... Thanks Brad.&lt;br /&gt;&lt;br /&gt;Have a wonderful weekend!</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/1767451066054844981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/1767451066054844981' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1767451066054844981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/1767451066054844981'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2007/09/little-tidbits.html' title='Little Tidbits'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-18962598.post-6232171673490821834</id><published>2007-08-16T16:03:00.000-05:00</published><updated>2007-08-16T16:16:07.158-05:00</updated><title type='text'>Toni is BACK!!!</title><content type='html'>Thank goodness that Mike settled that nasty bit with the SWFox team because it allowed me to once again be a full time part of F1 Technologies.&lt;br /&gt;&lt;br /&gt;I am baaaacccccckkkk! And just wait until you see what I have in store for VFE.</content><link rel='replies' type='application/atom+xml' href='http://f1technologies.blogspot.com/feeds/6232171673490821834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment/fullpage/post/18962598/6232171673490821834' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/6232171673490821834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/18962598/posts/default/6232171673490821834'/><link rel='alternate' type='text/html' href='http://f1technologies.blogspot.com/2007/08/toni-is-back.html' title='Toni is BACK!!!'/><author><name>Toni M. Feltman</name><uri>http://www.blogger.com/profile/07215237972663023252</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry></feed>