May
13

I just returned from a trip to visit the Chicago and Midwest FoxPro User Group (in Kansas City). It was good seeing my friends and making new ones from the Midwest. Thanks to both groups for their gracious hospitality. These groups have enthusiastic members and I was impressed by the dedication from the folks who drove more than three hours to come hear my presentations. As I do in all my presentations, I learned a bunch of cool techniques and was inspired by the ideas shared.

Both groups went out to dinner and I was thinking during the meals how Robert Scoble keeps blogging about his “geek dinner” concept. This is yet another thing the Fox Community has been doing for a very long time with the user groups. I guess we were trend setting again. Often I learn as much sharing a meal with Fox developers as I do during the sessions I attend.

Fortunately my voice is still intact even after the twelve hour marathon in KC, so I will be able to share this new found knowledge with the Atlanta group next week when I make the next stop on my Deployment Fox 2005 World Tour.

Apr
30

I was talking with some tech friends recently about instant messengers (IM) and their value to me as a geek, businessman, parent, friend and family member. There was some surprise among the group that this technology is anything more than a communication tool for kids, or another instant interruption in the flow of the workday.

I find all of these apps extremely productive and useful in both business and my personal life. For instance, I have AOL IM (AIM) to keep tabs on my kids and to be more accessible when I am not with them. They use instant messenger to talk to their friends and do homework collaboration projects. One huge benefit of them having IM is the pure fact they stay off our family phone. I know when they get home from school because I see them pop up in AIM. I may actually talk to my parents on AOL IM more than I talk to them on the phone. My mom is actually shocked if she cannot contact me in IM, because that means I am away from my computer. I know…shocking.

I use MSN IM to communicate with some friends and family, but mostly to interact with my tech partners and customers. Yes, customers! I have customers who pay me to contact me via IM. Most of these clients are other developers who have hired White Light Computing for mentoring or testing. It is easy for a developer to pop me an instant message with a quick question, and usually get a quick answer so they can continue doing what they are working on. Same for me if I am testing a module for them, I can inquire about a feature or clarification of a requirement. It does not replace phone conversations, but I can say it is easier to send code examples via IM easier than a phone call. Some times a client will just ask if it is a good time to call. It is an additional way to provide good customer service.

When I was a partner at Geeks and Gurus, the Steves and I used IM extensively. Before we had an office we typically worked at home and our homes are in diverse geographic locations around the city of Detroit. It is a long distance phone call so instant messenger saved us from chewing through our cell minutes. Heck, we instant messaged each other while we were in the office and at no point were we ever 20 feet apart {g}. It was not unusual to find us all online at 11:00 at night discussing some business or technical issue we needed to solve, or just chat about how the Red Wings were doing that night. Very convenient, and very productive.

I have not experienced much of the unsolicited interference I have read about (like SPAM, but an IM, not an email). I have in the past with MSN Instant Messenger, but it has been more than a year since the last “attack”. I have very few individuals on my block lists. I believe it depends on your configuration. I have limited my “profile” on AOL IM, MSN IM, and Skype to only get calls from people on my contact list. I also set it up so people can only find me if they know who I am.

Skype is the newest of the IM technologies I am using. Skype is both a voice and instant messenger built into one. Actually, the latest MSN IM also has voice, but I have not used it. Skype is free (as are the other instant messengers) and offers crystal clear voice communications. I swear the clarity makes it sound like the person is sitting across the table from you. This could revolutionize the way I communicate with people I normally use instant messenger. After all, the biggest drawback of IM is my need to type. Typing is much slower than talking so conversations on IM take longer. On the other hand, typing out something allows you to think longer about what you are saying, so you can often eliminate embarrassing statements before you send them.

There are only two issues I have with three different IM technologies. The first is maintaining three sets of contacts, all which are separate from my email and phone contacts. I know there are tools to combine the different IMs together, but it has not been painful enough for me to pursue. The second is the network gods who lock down the ports used by these technologies. I have a customer who blocks MSN IM so I only have access to Skype and AOL IM via the client tools. I know there is Web access available, which I am going to investigate further. I am onsite three days a week and the lack of access is bad for business.

I hear from others how they find all these technologies disruptive. What people often forget is each of the tools have status settings to inform the people who can interrupt you that you are busy. If I do not want to be interrupted I set the status to busy or offline and get my work done. If I forget to set my status and someone contacts me, I apologize and see if we can schedule something for later. It really can be a controlled accessibility.

If you are interested in joining my “buddy list”, send me an email and we can correspond with the necessary contact details. It does surprise me to see people post them in blogs. I think this opens one up to the hacks and unsolicited interruptions people complain about, but that is just my opinion.

Apr
26

Last weekend was an absolute blast in Atlanta where the Utica Community School’s ThunderChickens (robotics team 217) competed in the FIRST Championships along with 9,000 students at the Georgia Dome. You may recall from an earlier blog posting that my oldest son Chris is a programmer on the team and White Light Computing is a team sponsor. The competition is the best-of-the-best with 466 teams from 19 countries, making it more of a true world championship than a national championship.

After a slow start, the ThunderChickens finished 8th out of 85 teams in the Archimedes division and joined the number one alliance (Adambots from Rochester Michigan, our ThunderChickens, and Menlo Atherton High School team from California). This strong alliance competed in the elimination round where they became the Archimedes Division Champions without losing a single game!

The four divisional alliances (each with three teams) competed against each other for the World Championship. The Archimedes alliance won the first game against the Newton alliance before barely losing the next two games in the semifinals. The alliance they lost to eventually became the World Champions. It was heartbreaking, but the team did a great job and the alliance worked together as if they have been doing it all year long. Still, they made it to the “final four” and we are extremely proud of the gracious professionalism the teams showed throughout the competition. Many people at the competition thought the ThunderChickens had the best robot on the field.

The Woodie Flowers Award, presented by Small Parts, Inc. to an outstanding engineer or teacher participating in the competition who best demonstrates excellence in teaching science, math and creative design was won by Paul Copioli, who is a mentor for the ThunderChickens. This is a huge honor for Paul, his family, and the team.

Dean Kamen, the founder of FIRST (For Inspiration and Recognition of
Science and Technology), provided another inspiring speech to the bright young competitors in between games played during the finals. He is not the most dynamic speaker, but his topic is this year was inventing and protecting intellectual property. It is his opinion people will make oodles of money with intellectual property in the next decade.

Dean invited Jon Dudas, the Under Secretary For Intellectual Property and Director of the United States Patent and Trademark Office (USPTO), to address the crowd about the value of intellectual property. He also discussed some of the complexities of gaining a patent and trademark and how they are granted. This was very interesting. He also noted he was soon embarking on a personal vacation with his family. He is visiting a hall of fame in Ohio. Most people might think about the Rock and Roll Hall of Fame in Cleveland or maybe the Football Hall of Fame in Canton, but his trip is going to the Inventors Hall of Fame in Akron. Very interesting.

The other guest speaker was Larry Page, one of the Google Boys. He talked about engineering and the continuous process of solving problems and making technology better and easier to use. His discussion took us through a brief overview of how he and Sergey Brin started with an idea to search Web pages on the Internet, had it rejected, decided not to quit, and built Google. I would hate to be one of the people who told Larry and Sergey they were not interested in their idea. It is simply a 50 billion dollar bad decision. Larry and Sergey have started Google.org, which is the philanthropic arm of Google. Not only are they making the Internet easier to use, driving the future of computing, and inspiring engineers to solve bigger problems, they are paying it forward by giving back some of their fortune to make the world a better place. They announced they would be contributing to the FIRST organization in the future. Larry is originally from Michigan, which is something I did not know before this weekend.

It was a very exciting weekend. One of those weekends that regenerates the brain cells and at the same time was fun. It also helps restored some faith in the future of our world and the generation we are raising. Therese and I met some brilliant kids who were more than happy to demonstrate and discuss the technology they used in their robots, animations, designs, and Web sites. Cooperative competition, exactly like we have seen in the Fox Community for nearly two decades. In the years ahead the talent pool of programmers and engineers will be stocked with some excellent men and women. I look forward to the day I can hire a few at White Light Computing.

Apr
18

Microsoft is encouraging developers to write productions applications with the new Beta 2 releases of Visual Studio 2005 and SQL Server 2005. From this press release:

“Together, the products provide a deeply integrated development and data management platform, enabling customers to utilize existing skills and familiar tools to harness data in powerful new ways that increase productivity and efficiency. Several early adopters such as ABS-CBN Interactive, ORF and Townsend Analytics Ltd. have deployed these products in their production environments to reap the benefits of close tool and database integration. Because of broad customer demand to work with these prerelease products today, Microsoft also announced the Microsoft Go-Live license program for customers interested in deploying Visual Studio 2005 and SQL Server 2005 Express Edition immediately.”

I for one would never deploy a production version of my custom applications with beta products at this stage of development, and I have worked with some rock solid beta versions in the past. What happens to your production products when Microsoft decides to pull a feature out of the product because it cannot be tested sufficiently or they decide it was poorly designed or implemented? Now you have to tell your users: sorry, we have to remove this functionality because Microsoft decided to pull it from Visual Studio or SQL Server.

I think this is a really bad idea for a product at this stage of development. Release candidates are usually buttoned down from a feature standpoint, but even those versions have been known to have show-stoppers in them. Early adoption is one thing, but I think this is pushing the envelope too far. The one upside for Microsoft, some of the best bugs are found in shipping products. Maybe this is just a better way to find those hidden bugs (tongue firmly planted in cheek).

Apr
16

Earlier today a fellow FoxPro developer sent me a question about an IntelliSense script Andy Kramek wrote about in MegaFox. Normally I pass along the questions I get on topics I did not write about to the original author, but in this case I had an alternative solution to pass along.

Our reader asked for some help with the InLineGetLocVars script found on page 74. So I looked up the section in MegaFox and re-read the tip. This cool script is designed to drop down a list of declared variables when you type in the first two letters of a memory variable following the standard of a scope letter and data type letter. This is a common code standard adopted by VFP developers. Local character variables start with “lc”, local date variables with “ld”, character parameters start with a “tc”, and so on. Once you type in the second letter and hit the spacebar, a dropdown list appears with all the variables declared in the procedure or method. This is a very power and very productive IntelliSense script.

Reading this section reminded me of a moment a few months ago when I was sitting in Cleveland listening to Andy speak on IntelliSense. Andy demonstrated a script that ships with VFP 8 and 9 that I had never seen. In one of your programs type in the following:

zloc

And press the spacebar. Bingo, all the local variables and any parameters for this procedure are in a dropdown list. You can type zloc anywhere in the code line. There are two advantages of this script compared to the one Andy created for MegaFox. The first advantage is you do not need to know what the variable starts with. The second advantage might not be a practical advantage for many developers, but your variables do not have to conform to the industry variable naming standard. At first this might sound like a bad idea, but I often work with code written by other developers who do not code to the same standards I have established.

Both IntelliSense scripts (the MegaFox example and the native VFP) require you to have your variable declared (which is something everyone should be doing by default anyway – another part of my development standards and best practices I subscribe to in an attempt to retain sanity).

There are a couple of gotchas you have to watch for with this IntelliSense script. The variables in this list are only the variables declared between the beginning of the method/procedure and where your type in zloc. The other gotcha is PRIVATE memory variables are not included (note it is called zLOC).

Now something I did not share with our reader is the cousin script to the zloc script, the zdef script. The zdef script will drop down all the constants you have declared in #DEFINEs. Both of these scripts provide a dramatic increase in productivity and I hope it adds to yours.

The person who sent me the question was slightly embarassed they did not know about the zloc script. I perfer to look at it from a different perspective. One can never know everything about FoxPro, it is impossible. I love the fact I have the opportunity to learn something new about my profession and the tools I use in my profession every single day.

So why did I title this blog entry “Paying It Forward VFP Tips?” It is simple: I don’t want to be the last person to learn the tip so I try to tell others. If every developer passes along this tip to a couple other FoxPro developers, and they pass it along to another couple of developers, and so on, this tip will make the rounds in no time. Pay it forward!

Apr
11

I am going to alert you to a grumpy developer warning in advance. I am back from a restful vacation and finally, after a week of catching up on the various tasks put into the background, I have time for a blog post.

Most people who know me understand that I am usually a fan of Microsoft products. It is not that I automatically adopt all Microsoft technology or that I drink the marketing kool-aid, rather I prefer mature Microsoft products that make my day-to-day computing experience enjoyable. MSN Messenger is one of those products.

I often get pulled into debates with friends on how Microsoft is trying to rule the world, and how Bill Gates is the current incarnation of Satan, and how feeding Microsoft my hard earned cash is the stupidest thing I could do. Normally I thank Bill Gates for the roof over my head, and the Microsoft geeks for providing a stable platform, and more importantly the capability for my software creations to run on hundreds of millions of computers without too much hassle. Today provided me a clearer glimpse into the negative viewpoint so many others have on how Microsoft forces themselves on their customers.

Before I go any further, let me state for the record that I fully understand the viewpoint of my friends and clients who would rather use another office suite, different email clients, safer browsers, etc., I just philosophically disagree with them. I refuse to make emotional business decisions, and try to pick technical solutions to my needs based on feature sets, technical support, reliability, stability, and ease-of-use.

Today I got notification that Microsoft released the latest version of MSN IM. I have been using this tool for more than four years now. I read about the new features and because I have not been burned in the past with upgrades I decided to download it and install it. This will not be a story of woe with the product (unlike Andrew MacNeill’s trouble with Windows 2003 SP1), it is working flawlessly so far. My gripe is purely with the installation.

The installation is the typical wizard stepping you through some choices. This is where my complaint is centered. There is a page where you select additional features and settings. I am upgrading, therefore I believe it should respect the settings I made during the last install or upgrade. I might want to change, but why should I have to uncheck the settings I unchecked the last time?? I do not need the MSN Toolbar polluting Internet Explorer (even though I only use IE when exploring Microsoft.com pages). I am perfectly happy with Google Search so I don’t need MSN Search at this time. My browser home page is FoxCentral. I see no single reason to have it automatically changed to MSN Home. Lastly, I already have enough shortcuts to MSN Messenger configured and having the installer add more means I have to delete them later. So instead of hitting the next button, I have to click four times to uncheck these options before proceeding.

It does not end here. After the install I have to explore the MSN IM Options to see what other options it has tweaked on me. Sure enough, despite me turning this off previously, the installer decides I need to see MSN Today every time MSN IM is started. I don’t think so! So I again, uncheck this option.

Come on Microsoft, stop making decisions on my behalf! I am perfectly happy and capable making my own decisions. If I want to switch these options, I can go into the Options Dialog and make the choices. Sheesh! At least the installation did not pollute my desktop with an unnecessary shortcut.

Before all the anti-Microsofties get overly excited by my flirtation with the dark side, I will not be scrapping MSN IM anytime soon because it is an app I am dependent upon. Maybe Microsoft is just trying to be compatible with AOL Instant Messenger. Each time I have upgrade AIM, I have the exact same issues, and it keeps adding several shortcuts to my desktop despite my selection for the installer not to do it. AIM keeps trying to add the Weatherbug applet and other applets each time, and turns on the AIM.com page during startup. These two apps keep ignoring my preferences during upgrades. This is a complete waste of my time. Microsoft and AOL (and other software vendors thinking about tweaking my preferences) need to get their act cleaned up with respect to their software installations. Deployment is supposed to be easy for the end users.

Okay, time to get ungrumpy.

You may be wondering why I use IM, and three of them at that (Skype is the third one). Well I have friends who have asked this question recently and plan on blogging on this topic soon. Stay tuned.

Mar
22

VFP 9 has many major enhancements that make the justification to purchase it a no-brainer. Then there are the many little things the Fox Team threw in the product to make our development lives a little easier. The new beautify directive (note the singular) is not only one of the little things, but until recently it was one of the undocumented gems.

The Beautify feature has been in Visual FoxPro since the beginning. It cleans up code and makes it consistent. One specific function it provides is changing the case of VFP keywords. This works well in most cases and most of the time it does not matter what case the code is because VFP is a case insensitive language. However, there are exceptions when case does matter. For instance, DLL declarations can be case sensitive. If you are unaware of this issue you can break code accidentally by running the beautify feature on your code. The reality of this problem could be spending hours trying to debug code that worked fine until you went to the extra effort to make the code look consistent and meet your company’s coding standards. Not much fun.

In VFP 9 the Fox Team introduces a new directive (the case of the directive does not matter).

*# beautify keyword_nochange
*# beautify

You may notice something a little different about the beautify directive in comparison to a compiler directive. It has a comment character proceeding the “pound” or “sharp” character (#). This is required and has a nice side effect of making the code backwards compatible. What this means is you can include this new directive in any code, use VFP 9 to beautify it, and still compile the code in VFP 8 and earlier.

The directive lines bracket the code you want the beautify process to ignore. The rest of the beautify functionality (indenting comments, continuation lines, procedures and CASE statements, and converting annoying tabs to space) is still applied to the code. The only thing not applied is the casing of the keywords.

The code sample Microsoft provided is a very good example, and one of the more common ones developers could be burned by: the DLL call to ShowWindow. ShowWindow is both a common DLL Declaration and an intrinsic VFP property to specify if a form is a top-level form. If you beautify the code with the DLL Declaration it will respect your preference of upper of lower case and break the code. Here is a code example before beautification:

*# beautify keyword_nochange
PROCEDURE PleasShowWindow
LPARAMETERS tcFormName, tlDoIt
* This is a comment which could be indented or not

DO CASE
CASE PCOUNT() # 2
CASE PCOUNT() # 1
OTHERWISE
ENDCASE

if llSecurityClearance > 30
#DEFINE SW_MINIMIZE 6
DECLARE INTEGER ShowWindow IN WIN32API ;
INTEGER nHWND, ;
INTEGER nCmdShowShowWindow(_VFP.HWND, SW_MINIMIZE)
endif
endproc
*# beautify

Try it out in VFP 9 and one of the eariler versions to see the difference. This example also shows one of the drawbacks you have with this directive. You need to be careful where you place thedirective or you will find other keywords you want cased to your preference getting ignored.

This particular new feature is not documented in the released version of the VFP 9 Help file and was not included in the Hentzenwerke Publishing’s What’s New In Nine: Visual FoxPro’s Latest Hits (disclosure: I am one of the authors on this book).

Mar
19

The ThunderChickens are the team of brilliant students in our school district banding together to build a robot in the FIRST Robotics Competition. The competition for the last couple of days was held at Wayne State University in downtown Detroit. Since White Light Computing is one of many sponsors and I have a vested interested as dad, I decide to play hooky from the office the last couple of days. It was energizing and the team did fantastic, finishing fourth in the qualifying matches, and first overall in the elimination round.

From the FIRST Web site: “FIRST (For Inspiration and Recognition of Science and Technology) is a multinational non-profit organization, that aspires to transform culture, making science, math, engineering, and technology as cool for kids as sports are today.”

This is not robot wars you see on television. This year’s game is a fury of tic-tac-toe with tetrahedrons placed on top and underneath larger tetrahedrons. Stacking them as high as the robot can reach and hopefully having your team’s color on top at the end of the 135 second round. Three teams form an alliance during match and work together to ensure they have the top tetras. The robots work autonomously for the first 15 seconds of each match. Then the students jump in and drive the robots around the playing field.

You can watch a QuickTime animation of the Triple Play game on the FIRST site (check out the “Triple Play Animation” under the downloads), but to see it in person is amazing. Watching our young adults figure out strategy, solve engineering problems, attempt to defy physics, challenge their own limitations, and some how get it all done in six weeks from requirements delivery to shipping a robot is way cool.

My favorite part of this competition is that teams help other teams succeed. Share experiences, share parts, share code, share tools, share ideas, and help each other get better. Sound familiar? Absolutely, much like what the Fox Community is all about. Helping each other be better at what we do. The students really learn first hand about teamwork and collaboration. Each of the teams also takes on a local community service project. They also work with the local elementary schools to build Lego robots for a competition in the Fall. Not only do they learn what it takes to be mechanical, electrical, and software engineers, but they learn about teaching others, giving back, and paying it forward. The skills they learn during the competition will serve them well throughout their lives.

This weekend the ThunderChickens also won the Sportsman Award to add to the collection of awards they won (Entrepreneur and Sportsman) at the Finger Lakes Regional where they finished third in the qualifying matches and were eliminated in the semi-finals.

So the ThunderChickens have accomplished one of their many goals (winning the Detroit Regional). They still have more, like winning a Chairman’s Award, and winning the national competition in Atlanta. Therese and I are hoping to get to Atlanta. After this weekend, I cannot see how we can miss it!

My son Chris is one of the programmers on the team. He tried to explain to me a couple of times how they code this machine to run by itself and respond to the drivers movements of the joystick, and how it will literally spin on a dime. Using code to drive a motor, spin wheels, work with pneumatics to control the arm, and all the other cool stuff they do made my head spin. Databases are so much easier.

Chris, we are very proud of your teamwork, the team accomplishments, and the fun you all had in the regionals. I am continuously amazed how this all works, but I am not amazed how well the team has done knowing the students and mentors involved. I hope you take this energizing experience and expand on it during the national competition.

Now if the ThunderChicken Web site was updated…