At the of SouthWest Fox 2007, I flew directly from Phoenix (95 degrees) to Denver (25 degrees, blizzard). I was stranded in my hotel all day that Sunday.
I began looking through the conference materials, and happened upon some open source code for 'New Edit Property/Method Dialog' by Marcia Akins. I decided to dig into it for two reasons: first, I was not aware of and did not use the original VFP version (talk about being a newbie!) and I thought I could learn a lot from reading an expert's code. I decided to challenge myself by adding a column to the grid.
I promptly broke it, could not fix it, and could not reverse its installation. This was not a big issue to me, since I had never used it before anyway.
Fast forward to SouthWest Fox 2008. I attended the VFPx session, at which I (uncharacteristically) commented that many of us less experienced developers did not feel that we had really had anything to contribute. Nonetheless, the next day I submitted a suggestion topic for VFPx about the coverage profiler.
While waiting for the response, I happened to notice a post on the UT, from a guy named Matt Slay, a no-name like myself, about the very utility I had looked at the previous year (and had continued to do without). I decided to try digging into it again, to see if I could re-install it, learn how to use it, add in what Matt had done as well, as well making the little modification I had first considered, that of adding a column.
It turned out not to be that difficult to do, so I messaged Matt, telling him what I had done, and commenting that any time I worked with a grid with that many rows, I would certainly add column sorting and probably some filter mechanism (such as property vs. method). That was my mistake. Matt responded with great enthusiasm and we were off to the races. Within a few days, he noted another post on the UT mentioning some issues that we could investigate, which led is to meet Cesar Chalom (Brazil) and Carlos Alloatti (Argentina). Within a week, the four of us had an ER list of over 40 items. I was absolutely sure most of them could not be done (and certainly not by me). I was completely wrong.
A digression here: There were a unique combination of circumstances at work here, a WOO (Window OF Opportunity) not to occur again:
- The project itself was a combination of two parts: a especially simple UI, and a really complicated back end which few, other than Marcia and Doug Hennig, really understood. There were lots of improvements that were made early in the UI (much more flash than substance) which appeared really impressive, but demonstrated only rudimentary VFP skills. This allowed me to get into the back end gradually.
- I had a really enthusiastic and competent co-conspirator, Matt Slay. While it is true he has only written a few lines of code in PEM Editor, it never would have happened without him. Over the course of the next five or six months, we both worked an unbelievable number of hours, as he contributed comments, suggestions, testing, etc .... the perfect partner for a project like this. I must say that he has not been given the proper credit for his part in this project, and I would like to do the best I can to rectify that.
- For possibly the only time in my professional programming career (ahem, going back to 1973), I had an extended period of time where my paid work had pretty much come to a stand-still. As an employee, I did not have to worry about my paycheck. And, I felt perfectly comfortable in getting back some of the long hours I had worked earlier for the same employer.
- Finally, coinciding with my work on PEM Editor, my wife was away from our home, helping our daughter (who was in Palm Springs). For the next three months, I was essentially home alone.
So, this has been a little history behind how PEM Editor started. Why I have continued is the subject of another post.
P.S.: About that suggestion for the coverage profiler. Doug, Rick and Craig dropped the ball on it, and did not respond to the request until I off-handedly mentioned in many months later. We are all glad they did.