Friday, December 31, 2004

Adios 2004!

While it's been an exciting year for VFP, it hasn't been the greatest year overall and judging by the mayhem all over the world from the beginning of this year (Bam, Iran) to now (tsunami) and everything in between (snow in mexico, hurriances galore) and family issues, I'm sure looking forward to 2005 being a banner year.
Thanks to all the readers and colleagues who have pushed me into better blogging, more accountable writing and overall just letting me hear what you have to say!
Happy New Year to all! See you in 2005!

Reinstalling DotNet/ASPNet on a Windows 2003 Server

So much for getting rid of DLL hell...I've just been through hell and back trying to re-install the DotNet framework to run properly with SourceGear's Dragnet product.

We were experiencing some problems that only popped us running IE (FireFox was fine) and the suggestion was to reinstall DotNet. Oh sure. no problem -just go to Windows Installer right?

Wrong - apparently the service packs don't show up under Add/Remove programs with a good name. Redownloaded DotNetFX again , thinking I should be able to install over it. Sorry - "This has already been installed on your OS." (Win 2003).

Why is that? Because Windows 2003 comes WITH the DotNet framework built in. This means that you can't simply "remove it" and then "reinstall it". But there is a solution. Read on.

Based on some other useful sites, I turned on Windows Installer Logging so I could see that the message was when I tried to install it - maybe I could find out where the culprit was that way. No luck. The log file simply said "Looking for MSI.DLL" and then "Cannot install." Don't bother doing that.

There must be an easier way. So I uninstalled any product I knew that used DotNet, hoping that would get rid of the dependencies. Still no luck. Even went through the Registry, removing entries pointing to DotNet. Still no luck.

Finally came across a useful MSDN KB article about repairing corrupted installs (funny how it didn't turn up on any search engines - Google and MSN have to really start filtering out the sites that simply repeat other KB articles).

C:\DOTNETFX.EXE /t:C:\temp /c:"msiexec /i c:\temp\netfx.msi REINSTALL=ALL ReinstallMODE=vomus"

It said it installed just fine. Full install - no problem. Why wouldn't it simply do this without having wasted the better part of the morning?

Why not? Because it STILL didn't fix it. I still get an internal error 2908 on Microsoft.VisualBasic.VCA,Version="7.0.50000.0",PublicKeyToken="b03f5f7f11d50a3a",Culture="neutral",FileVersion="7.10.3052.4",
Hresult: 0x8002802F. Please refer to Help and Support for more information.

This seems like it should be pretty straight forward to me. I simply want to reinstall the software.

Finally, posted a question on the framework.setup newsgroup and Blair Neumann from Microsoft pointed me to the right KB article.

1. Repair your Windows 2003 server. (that's a nasty piece of work)
2. Hack the registry (just a little) and rerun some installers.

Sure, you have to hack the registry a little but after I did that, everything seemed to be good except for one little thing: my Dragnet app still didn't work.

Somewhere in my adventures, "something" had turned off support for ASP.Net. Where do you fix this?

IIS Manager (INETMGR) - Web Service Extensions - make sure that ASP.Net is Allowed and not prohibited.

It was a frustrating adventure but there was light at the end of the tunnel.

What did I really learn from all this? 1) Sometimes the best searches simply suck at finding the root cause of the problem and 2) a checklist somewhere would be valuable for doing these repairs

Real Checklist for verifying AspNet is working properly on a Windows 2003 server
1. Verify in IIS that ASP.Net web service extension is Allowed.
2. If it is, and something's still not working right, re-register it. Go to the \WINDOWS\Microsoft.NET\Framework\v1.1.4322 folder and run:

aspnet_regiis -i

aspnet_regiis -c (note the -c didn't seem to work on my version but you can also do it with an -r to reinstall)
3. If it's STILL not working, repair your Windows 2003 server and then recheck.
4. Still not working, go to the KB article (luckily, you'll only have to do the Registry hacking step as you've done the other step (repairing the server)).

Not fun - and very frustrating but at least now it works. Hopefully this post will make it easier for those who come across it again on their own.

Reading MP3/WMA Information in FoxPro

A recent post on a newsgroup was looking for a tool that would let them read MP3 tag information (artist, genre, etc). After doing some looking in the new VFP 9 "Fox Media Player" solution sample, it's simply a matter of working with the Windows Media Player COM component.

oPlayer = createobject("WMPlayer.OCX.7")
loItems = oPlayer.MediaCollection
loSong= loItems.add("c:\what time is it.mp3")
? loSong.duration
? loSong.getItemInfo("Artist")
? loSong.getItemInfo("Title")
? loSong.getItemInfo("Album")

Best of all, you can also set the information back again:

loSong.SetItemInfo("Artist","Kane Gang")

I used to rely on a variety of media tools to help catalog my music but using the WMPlayer OCX, I have placed them all into one big Fox table and from there, I update the tags, refresh my files all in a database format that I'm comfortable with.

The other benefit is that I know I'm changing the actual file instead of just some external database cache (like most players have). This makes my music collection work much better on my AudioTron or other Windows Media Center Extender devices.

There's a lot more to the WMPlayer control as well.

You can drop it onto a form and have your own player right in your application and then manage it programmatically.

CurrentPlaylist returns a collection of what's in the current playlist. There is no Add method here but instead AppendItem and InsertItem to place them at different locations in the player. These methods don't take strings to the music file though. They need to take song pointers.

loPlay= oPlayer.currentPlaylist
loSong = oPlayer.mediaCollection.add("music\what time is it.mp3")

When controlling a song, you use the Controls property

oPlayer.Controls.Play && Play the song

FYI - the PlayState property tells you what's currently happening.

0 - Undefined
1 - Stopped
2 - Paused
3 - Playing
4 - ScanForward
5 - ScanReverse
6 - Buffering
7 - Waiting
8 - MediaEnded
9 - Transitioning
10 - Ready
11 - Reconnecting

Now you can manage your entire music library properly via VFP!

Thursday, December 30, 2004

Power of Blogs in the wake of disaster

Although it's been mentioned in a number of different areas, BBC talks about how some bloggers were doing both rescue work AND blogging it via his cell phone.

Here's the link that BBC didn't put up onto their own web site:

Wednesday, December 29, 2004

Another place for Connection Info

Thanks Alex - another good site for Connection info

Never forget a connection string again...

Great site for those trying to connect to other systems...

Dan Gillmor - Airline Meltdowns

Absolutely right on. And Now US Airways is asking employees to work for free on New Year's Day. You know something? The company is struggling and union action is NOT the way about it. If you want to keep your job, then support the company. Last time I checked, US Airways wasn't splurging millions on useless stuff (like Canadian did) - they're trying to make the company survive.

What's better? A job you enjoy doing and get paid (albeit less than before) for or no job at all in an industry where there are very few jobs.
Silicon Valley - Dan Gillmor's eJournal - Airline Meltdowns

Jim Grisanzio: Successful CEOs don't multi-task

Of course not - that's what they want their computer to do for them.

Case in point: I don't want to have to visit 500 web sites to get my news ; Newsgator - do it for me.

I don't want to worry about downloading this 100MB file; BitTorrent do it for me.

I read my weblogs in the morning and in the evening, when I'm not doing much else and want to catch up on things. During the day, I try to stay focused on one thing at a time (in fact, that's a pretty good new year resolution - and for those who know me , it'll be tough) - staying focused on one thing is hard when you've got IM, support calls, emails amid 10 other projects that need to be worked on.

A few years back, one piece of advice ( I think it was actually in Dynamics of Software Development by Jim McCarthy) was to only check email once every x hours. The big problem now is that there's so much more email than ever before (and that's not including spam)- that it's easy to miss something.

My solution (and it takes a lot of discipline ) is to ignore the emails that don't directly impact me. If it's that important, I'll read it on one of the feeds I get or someone will resend it directly to me. I'm trying to get to that level of "simplicity" where as Bill Jensen suggests, delete 75% of your email.

Thanks Jim, for pointing to that Fortune article and keeping it focused.

Jim Grisanzio: Successful CEOs don't multi-task

Monday, December 27, 2004

Portable Sound: Belkin - TuneCast II Mobile FM Transmitter

I've been looking at one of these (
Welcome to Belkin - TuneCast II Mobile FM Transmitter) for a while with some trepidation: most say that the quality of the FM broadcast isn't that great. But now I have one and I can say: That's not what I found. I now have a 1GB SD card with various podCasts downloaded and plug my TuneCast II into my iPaq 1940 and can now listen to what I want to when driving to and from clients. I go to client office's only sporadically (most I can connect to remotely) and work from home but having this on my PDA, which is my main source of information, makes it an awesome tool.

Great frequency (88.1 to 107.9) and powers on and off automatically and runs on 2 AAA betteries. (I'll find out how long these really work)

Maybe now I'll start PodCasting my own stuff.

Mainstream Coverage of the Asia disaster

I don't know where Scoble found the "mainstream" media but I was completely amazed at the lack of coverage given to this story by television news outlets CNN and MSNBC. (yes, I know the blog coverage was likely far better) - We switched over at BBC World News first thing where they brought nothing but quality coverage the whole day. (first rss feed update came in at 11pm EST on the 25th). Thousands of people are dead and the only thing CNN and MSNBC chose to broadcast (at least on the "north american wide feed") was "Headliners and Legends" and debates on Iraq.

Our daughter has a friend who was vacationing in Thailand and we're still waiting for some kind of "yes, I'm ok" type of conversation.

Thoughts and prayers are with everyone in the region...

Scobleizer: Microsoft Geek Blogger

Saturday, December 25, 2004

Merry Christmas 2004

Just a quick note to say Happy Holidays and Merry Christmas to all my friends, colleagues and blog readers. May this season (and the various celebrations you may enjoy) find you all safe, happy and surrounded by those you love.

Monday, December 20, 2004

Onfolio - RSS in the Browser

Onfolio has a great product here. I'm running the beta but it seems really quite solid.

In particular, because going through my 156 feeds in Outlook seems way too time-consuming in Outlook 2003 (where the Favorite Folders feature seems to have outgrown my entire space available).

If you want to see what RSS Browsing is like, check out OnFolio - very cool.

Taking Heat for a Great Idea

Johnnie Moore's take on Scoble is definitely a bit fresher than the others comments .

Corporate deals with the "what is a blog supposed to be" ramifications.

Some immediate points on Scoble's letter and the comments afterwards:

1. Robert is a microsoftie in the same vein as the Excel 3.0 team : that is, we can create the best ________ possible. You know something? They can. The Fox team does it regularly (despite some comments posted on Channel nine's video). It's not arrogance - it's a challenge. I want my software to run on everyone's computer - I want everyone cool to be using my music player.... the fact that he works for the biggest software company doesn't mean it's going to work. It just means he's laying the challenge: build a "cool" media player. (and some people are responding)

2. Points should be given for anyone who is willing to write an open letter to his boss for everyone to see and also put the steps out there.

3. MS is going after two areas: the business world and the "cool" area. They own the business world but feel some pressure - they've never really made true in-roads in the "cool" area. Very few companies, other than Apple, have. I know Linux is all very good and exciting but come on make a user interface that CHANGES the way we work. "Cool" must be revolutionary not evolutionary and that's a hard step for a company as large as MS to make.

4. MS does have companies making media players - the problem is, it's a consumer market. As they've realized with the xBox, it's hard to be "cool" and make tons of money. Apple knows that -

5. People need to stop looking at companies based on their lawyers. Once a company starts relying on their lawyers for real basic things (like MS does), they need to take a step back. - Robert, this may be the place where you want to START telling BillG to work on. He gets technology - but someone is giving him really bad legal advice if he wants to play nice.

Corporate lawyers believe that everyone is bad, wanting to screw them. Most people don't - they want something that works and want to try it out to get it going right (this is what great customer service is all about). If you aren't happy with it, tell them and if you're reasonable, they will likely take it down.

In a nutshell, arrogant? Hardly - Scoble is throwing down the gauntlet to his own organization. The real issue with MS is whether or not their lawyers will allow anyone to do anything with it.

Saturday, December 18, 2004

Friday, December 17, 2004

Announcing SourceOffSite 4.1

Congratulations to SourceGear for once again improving an already great product!

Any chance for an update to SourceOffSite Collab? Or at least an "upgrade" to Dragnet?

Update - spoke too soon. OF COURSE you can import from SourceOffSite Collab to DragNet!

Announcing SourceOffSite 4.1

Thursday, December 16, 2004

Cool Newsgator Feature: Headlines

Scoble got me started looking at some of the other cool features in NewsGator. I'm a little hesitant to put my blogroll on my site (it's just way too big) but I immediately thought that headlines would be cool. While the NewsGator default is 100, I've limited mine to the top 10 since I link to about 200 different other blogs. I have to clean that up...

What an awesome feature though.

NewsGator really is one of the premier news aggregator tools and the fact that it keeps on adding new features is just awesome! Way to go, Greg!

Wednesday, December 15, 2004

Steve's Transitions Journal

Steve Sawyer has a blog with snippets of wisdom from his many years of fascination with process, patterns, innovation, integration and Getting the Job Done.

Thanks to Ted for pointing it out.

Ted's Radio Weblog

Screen shot of AddInfoX. The numbers beside each method tells you how many lines of code are in each method.

AddInfoX - Very useful Class Browser Add in

I was searching around for some other files and came across AddInfoX at Ed's Downloads area.

Very cool addin for the Class Browser that displays not just the names of the members,etc but also their property values (for anything non-default) and the number of lines of code in each event.

Check out the next post for an image of it.

Sunday, December 12, 2004

Art of the Start: Causation

I recently started reading Art of the Start by Guy Kawasaki. Guy was probably one of the first "recognized" technology evangelists and has written lots of books on the topic. Each of his books always seem to be slightly different variations on the same theme - on how to create something that completely changes lives (loosely: Selling the Dream was on how to sell it, How to Drive Your Competition Crazy was on how to compete with it, Rules for Revolutionaries was on creating it) - so I wasn't too sure how his new Art of the Start would read, especially since his new focus is on helping startups get venture capital. But once again, he's really done a good job.
The first chapter, Causation identifies what you really need to work on: Meaning, Mantra and MAT (Milestones, Assumptions and Timetables).
Instead of all those books that say study this and plan for that, come up with a mission statement and the like, Guy promotes the easier to remember style of a Mantra. Who wants to remember a huge mission statement when a five or six word mantra will do? In fact, one of his first exercises was to write your mantra in the following space: __________________ .  Not a lot of space - but what a GREAT guideline! Now you can actually remember what you do (for all those unclear moments)

Inspirational Ideas from Guy Kawasaki on Starting New Things

I've been reading Guy's new book, Art of the Start for a while now (it's been hard between other projects but I was able to read it on my flight down to NC).

It's a great book for start-ups, filled with Guy's humour and thoughts. If you've read his other stuff, you may find it a little repetitive (he always includes a chapter on how to be a better person - or in this case a Mensch) but I dog-eared a few things that just make it worthwhile. Rather than simply say a page # and tell you to go look it up in the bookstore (yes, Robert, Page 173 talks all about how much every company needs evangelists - not a new concept for Guy), I thought I'd pass on a few quips here.

Pg 73: The worst thing to do is write a "deliberate" plan and then stick to it simply because it is "the plan". Guy notes the difference between a deliberate (which is based on road maps and analysis) and an emergent plan (which is based on reacting to opportunities as they appear).

Pg 96: Bootstrapping a Business - Cost cutting. The enemy of small businesses isn't high spending - it's failing to actually use the spending you currently do, in short, Execution. Dana Epps also mentions it here.

Pg 101: Recruiting - Make the effort to "recruit" your existing employees every day. Make them feel like they WANT to continue working for you, or at least, come back the next day. ("Everyday is a new contract between you and your employer")

Pg 112: The Stanford Shopping Test is an amazing way of testing how you recruit people. If you don't want to "bump" into your employees, prospects, etc in a mall, then don't hire them. Life is too short to work with people you don't like.

Guy's book doesn't just have pages of insight. One of the most valuable pieces of it are the FAQs, where he answers questions that were asked while he was writing it. Everything from forming partnerships, to "getting it" and more.

Guy's big on karma and doing the right thing. And I'll just end the post with his note on patents:

The best protection of an idea is great implementation of the idea.

This book should be on , not just every startup entrepreneur's, but every owners/managers/employee's, desk. Just as Code Complete provided well-thoughtout best practices for programmers, the Art of the Start provides a great guide, not just for startups, but for anyone with an idea who wants to make it last.

Saturday, December 11, 2004

Yet Another Airport To Avoid

I try to give every airport I travel through a chance. But if I spot a trend, be it by location, or service or "do I really want to be stuck here for x hours", then it usually ends up on my list of Airports to Avoid.
I was supposed to get back home Friday morning at 10am, flying through Washington Dulles. Got off from Greensboro ok but when we arrived in Washington airspace, the fog was too thick. (note: never pick an airport near a coastline where fog or bad weather is a possibility).
I finally got home at 10pm, having been rerouted to Harrisburg (for fuel), back to Dulles where our original flight had been canceled and the only other flight was at 4:50, delayed until 5:20 and then stuck on the ground until about 6:30/7.
To their credit, United Airlines staff on the ground were amazing. Just never going through there again....

Thursday, December 09, 2004

What VFP 9's Removal of Array Limits Really Means

Interesting post by John K. about how the limits in VFP 9 have been substantially removed and yet may still rear their ugly head because of machine constraints.

But it explains very well how and why you may want to rethink how your applications may be built.

A great example is the removal of the limitations of an array.

Let's say you have 1,000,000 records in a table named X.

I created this table by listing all of the files in a folder showing two columns: one for the file name and another for the size.

CREATE TABLE x (cField1 C(30), nsize N(10))
lnRow = 1
FOR lni = 1 TO 1000000
IF lnRow+lni>ALEN(la,1)
lnRow = 1
lnRow = lnRow+lni
INSERT INTO X VALUES (la(lnRow,1),la(lnRow,2))

This ensured I had at least some variety of data in my results.

In VFP 7, you couldn't do


You would run out of memory.

However you CAN do it in VFP 9 which means that even though VFP is super fast with tables, it's even faster with memory.

Sorting Data
ASORT(la,2) took .698 seconds on a P IV with 512MB RAM.
INDEX ON nSize TAG t took 4.355 seconds in VFP 9

(note: ASORT(la,1) - which is the field name took approximately 2.5 seconds, the Index took 7 seconds)

Interestingly, not doing the index to a tag but to its own IDX took 1.6 seconds

Looking for Data
ASCAN(la,"WRITE.EXE") took .329 seconds
LOCATE FOR cField1="WRITE.EXE" took close to 1 second

(Note: If you do a SELECT * FROM X INTO CURSOR y and try the same things, the locate statement only takes about .600 seconds)

See where this is leading? If you have to process data in memory, it makes far more sense to put it into a cursor or better yet into an array.

And you can even put these arrays into objects for quick retrieval:

loCustomers = CREATEOBJECT("Custom")
SELECT * FROM X INTO ARRAY loCustomers.myData

All the same performance benefits apply.

As database developers, we often think of things as tables for storing temporary data, but now with VFP 9, we can store them as memory variables and wow! the performance gets instantly better.

If performance is your thing, then VFP 9 is definitely king.

The Limits of Architecture vs. The Architecture of Limits (by John Koziol)

Intellisense: inspecting live objects

Intellisense: inspecting live objects

Wednesday, December 08, 2004

Joel / Tamir on problems with MSF

Joel comments from Tamir about MSF :
"The trouble with MSF is that it starts with a group of successful developers, who are successful because they are resourceful, intelligent, experienced, well-meaning,...."

Actually, what I've found is the biggest problem with MSF is lack of buy-in from all partners. A good project is only as good as its weakest link because if there is one person who isn't motivated to follow the best practices concept, then the whole project will eventually fall apart, despite the best intentions of everyone.

It isn't so much about unskilled developers as much as it is about someone who's attitude becomes "why bother?" or a manager who decides "this little R&D effort isn't as important as my critical issue" so "everyone do what I say instead". The end result is the impression is that MSF didn't work when in fact, it's more the implementation that failed. Classic problem with any project and any methodology.

It's an interesting post though because it covers all kinds of things from unit testing and more.

Joel on Software - Monday, December 06, 2004

Tuesday, December 07, 2004

FW: SQL Server Presentation

 Val Matison will be in Ottawa on the  December 15th doing a SQL Server 2005 overview presentation for Microsoft.
You can sign up here:
Matison Information Architects

Kok Kiet's Blog: New FoxPro WebRAD Tool : FoxFusion

Yes the actual site is in French but hey! here's a great example of FoxPro running with COM, IIS and more. The sample apps are quite interesting (I can't get the Timer working but the FoxChat is fun to look at - note IE Only - no firefox support there)

Brought to you apparently by Ikoonet

Thanks to Kok Kiet for pointing this one out.
Kok Kiet's Blog: New FoxPro WebRAD Tool : FoxFusion

How does VFP create objects so fast?

Find out from this link to Calvin's post.

Kok Kiet's Blog: Why VFP create object so fast?

Eqeus - Project Documenting System

A Very cool tool that generates HTML based documentation on your entire project - very customizable and very cool. From Eqeus - makers of XFRX.

Eqeus PDM

Working with Edit Boxes in Visual FoxPro

I had a circumstance where I wanted to show a potentially large piece of text in a read-only edit box in VFP.
I was changing the height of the box to only show the actual content therefore if I only had one line, I wanted the edit box to only take up one line in height.
Sounds simple, right?
Not quite. My other requirement was that the user should be able to change the alignment of the text in the box. Left Align worked beautifully but whenever I switched the Alignment to Center or Right, the text disappeared.
What was going on?
When using alignments other than Left, Edit boxes have to be at least a certain height to display properly. What is the magic number? As it turns out, it's 34.
Try it yourself:

= 8
= "Here is my text"
x.editbox.width = x.
= 0
= 0
= 2
= 30    && Text disappears
x.editbox.height = 34    && Text Appears

Note: this is true in most versions of Visual FoxPro.

Saturday, December 04, 2004

The Red Couch: Announcing a corporate blogging book: the Red Couch project

This will be an interesting project to see how it takes flight... I can't honestly see publishers lining up for the rights to a new book that technically will have already been "published" but there are certainly enough ways of adding value that will make it worthwhile.

And as Scoble puts in, people who don't read the blogs will buy it to better understand it. The only issue? Timing. It needs to be out soon. Good luck Robert!
The Red Couch: Announcing a corporate blogging book: the Red Couch project

Friday, December 03, 2004

MSN Messenger Beta - Can't Send Feedback yet

FYI - if you're trying to send the MSN team feedback, you may need to wait a bit....Choosing Send Feedback from the Help menu gives you a "This Service is Currently Not Available" page.

It's nice to know that even larger companies go through what every other developer else tries to avoid as well.

So here's what I want:
- support for multiple logins (yes, login with two passports)
- custom status messages (MSN Messenger Plus has had it for a while now)

And why is there a menu option called Billing Information sending me to Blue Mountain? Seems like it should be called Add-Ons ($) or something else. Billing Information makes me feel like I'm going to start getting charged for Messenger.

MSN Messenger Beta: "Send Feedback: Tell us what you think. Send the MSN Messenger team feedback right from the MSN Messenger Help menu."

MSN Blogging service: still a beta service

It's up and running but " Part of the fun in using a beta service as a platform for communication"

So the MSN Blog is simply a beta (like the MSN Search?).

You would think from the other posts that it was ready for primetime.

Granted - it's on the web and we'll likely start seeing it improve but I wish the press (and other bloggers) would be a little clearer about its status. At least Mike was and of course there is that big "Beta" sign right above every note.

And on the MSN Messenger 7 beta - when are we finally going to be able to log in with multiple accounts?

I know it's tricky - I know it's tough - but it certainly would make my life easier (and isn't that what should be priority? :))
Mike's Space: Hiccups

Wednesday, December 01, 2004

Why does someone have to HOLD a device to listen to music?

Maybe I'm wrong....but I just saw a U2 iTunes/iPod ad where they are essentially saying "buy an iPod - dance around listening to great music but hold a silly device in your hand while doing it"

Is it just me or is there something wrong with that picture?

Joel on What a webcast is! funny

VFP 9.0 Release Date

(from foxblog but I can't ref its archives so...)

December 15!!!!! That appears to be the official release date for Visual
FoxPro 9.0, barring any unforseen showstoppers. Andew Coates, a former VFP
developer and now Microsoft employee, blogs
that Ken Levy
announced the date at OzFox . MSDN subscribers
should be able to download the bits a few days after release (RTM in
Microsoft speak). If you absolutely must have it in the CD case, it
generally takes 6-8 weeks after RTM.

Dell Woes Again...

Companies shouldn't be too happy about being including in posts entitled Customer Service Nightmares - solution? Do something about it!!

Sourcegear releases Vault 3.0
, eric et al!!

Vault is a Source Safe replacement that uses sql server --i currently
use their source offsite (collab) product and it rocks! !

VFP 9 to be released on 15th of December

Congrats Fox Team!

Visual FoxPro 9 is a great evolution of the best desktop database around. I'll be posting individual how to's in a new series of posts coming soon.

Ted's Radio Weblog