6.21.2005

Ken Levy's July letter is up

Ken Levy's July Letter from the Editor is up on MSDN. Among other things, Ken offers a few additional comments on Sedna (announced earlier this month in the Visual FoxPro Roadmap) and includes a link to the slides from the Microsoft keynote at DevCon.

6.20.2005

New FeedBurner Feed

Today I set up a FeedBurner feed for this blog. If you use a feed reader that doesn't support the Atom feed supplied by Blogger, you can now subscribe to the RSS feed via FeedBurner. If you're coming at this blog from its index page, you'll notice there are now two separate feed links.

Up until now I have been reluctant to sign up with FeedBurner, out of a vague sense I might be entering into a commitment I didn't fully understand and might not want to continue. But recently, FeedBurner announced that it now offers a graceful way out if you decide to stop using their service, and as a result, I'm much more comfortable with it. A fellow named Tom Coates posted a good analysis of this new FeedBurner service, which I found helpful. Judging from Tom's post and comments posted in response to the announcement on the FeedBurner blog, others have shared similar concerns and are welcoming this new service, too.

6.07.2005

Behavior Changes in VFP 9.0: _TALLY

One of the SQL data engine changes introduced in VFP 9.0 affects the value of _TALLY returned after certain kinds of SQL SELECT statements. This change is not documented in the "Changes in Functionality for the Current Release" topic in the VFP 9.0 Help file, and may therefore have escaped the attention of some VFP developers. It is documented under the "SET ENGINEBEHAVIOR Command" topic, however.

The change is this: In previous versions of VFP, _TALLY returns zero when an aggregate function such as SUM() is used and there are no matching records, while in VFP 9.0, when an aggregate function such as SUM() is used without a GROUP BY clause and there are no matching records, _TALLY returns 1 and the result set contains one record with a null value for the aggregate function.

This change breaks code that tests the value of _TALLY to determine if any matching records were found.

To illustrate this, create a table of ten records with integer values and an ID of "foo".

CREATE TABLE myTable ( cID c(10), nValue I)
LOCAL lni
FOR lni = 1 TO 10
INSERT INTO myTable ( cID, nValue) VALUES ( "foo", lni)
ENDFOR


Now perform a SELECT statement to SUM() the nValue of all records with an cID of "bar". Of course, there are no matching records. Under VFP 7.0 and VFP 8.0, the test for _tally = 0 returns true so Procedure A is performed.

SET ENGINEBEHAVIOR 70
SELECT SUM( nValue) ;
FROM myTable ;
WHERE cID = "bar" ;
INTO CURSOR csrBehavior70
IF _tally = 0 && true
DO Procedure_A && Procedure_A is performed
ELSE
DO Procedure_B
ENDIF

SET ENGINEBEHAVIOR 80
SELECT SUM( nValue) ;
FROM myTable ;
WHERE cID = "bar" ;
INTO CURSOR csrBehavior80
IF _tally = 0 && true
DO Procedure_A && Procedure_A is performed
ELSE
DO Procedure_B
ENDIF


Now perform the same test in VFP 9.0. With no other changes to the code, the test for _tally = 0 returns false so Procedure B is performed instead of Procedure A.

SET ENGINEBEHAVIOR 90
SELECT SUM( nValue) ;
FROM myTable ;
WHERE cID = "bar" ;
INTO CURSOR csrBehavior90
IF _tally = 0 && false
DO Procedure_A
ELSE
DO Procedure_B && Procedure_B is performed
ENDIF


The null value of the aggregate function can be seen in the one record in the result set:
SELECT csrBehavior90
?csrBehavior90.sum_nValue && .NULL.


Although the best solution is probably to stop relying on _tally altogether, for this as well as for other reasons, one workaround in VFP 9.0 is to include a GROUP BY clause in the SELECT statement, which restores the result obtained in VFP 7.0 and 8.0.

SET ENGINEBEHAVIOR 90
SELECT cID, SUM( nValue) ;
FROM myTable ;
WHERE cID = "bar" ;
INTO CURSOR csrBehavior90 ;
GROUP BY cID
IF _tally = 0 && true
DO Procedure_A && Procedure_A is performed
ELSE
DO Procedure_B
ENDIF


The changes to the SQL engine implemented by the VFP team in versions 8.0 and 9.0 have helped bring VFP's SQL implementation closer in line with SQL standards. This is a good thing, but watch out for changes like this one that might break existing code.

6.03.2005

David Stevenson's Talking Fox

The number of VFP developers who are blogging continues to grow as well-known VFP developer and FoxTalk 2.0 editor David Stevenson launches his new blog called Talking Fox. Welcome aboard, Dave!

InstallShield Express News

Macrovision has announced the end of support for several older versions of InstallShield, effective November 1, 2005. Included in the list is InstallShield Express versions 2.0-3.x. Support will continue for InstallShield Express 5.0 and later. See the Macrovision End-of-Life Policy for the official announcement.

The InstallShield Express Limited Edition for Visual FoxPro that ships with VFP 9.0 is based on InstallShield Express version 5.0 and should therefore still be supported. The InstallShield Express Limited Edition for Visual FoxPro that ships with VFP 8.0 is based on InstallShield Express version 3.54, for which support is apparently ending.

The current version of InstallShield Express is version X (as in 'ten'). The InstallShield Premier and Professional editions are already at version 11. In an InstallShield webinar yesterday, InstallShield Product Manager Bob Corrigan announced that Macrovision will be releasing version 11 of the Express product in "mid-2005".

6.02.2005

Beyond Compare 2.3.1 Released

Scooter Software today released Beyond Compare version 2.3.1. This point update fixes a startup issue under Windows 95, which surfaced in the recently released version 2.3.0, along with a few other miscellaneous fixes and changes. See the change log for a complete list.

It doesn't affect me personally, but kudos to the guys at Scooter Software for still caring about Windows 95. Hard to believe anybody is still running that old horse any more, although I'm sure I'd be surprised to know how many actually still are.

5.31.2005

Insanely Great Software: Beyond Compare

There are a lot of good utilities out there, but every once in a while one comes along that stands out above the rest. Such programs provide a unique combination of usefulness, reliability, quality, value, and a certain "wow" factor that, in my opinion, earns them the title of Insanely Great Software. This is certainly true of one of my long-time favorite utilities, Beyond Compare® from Scooter Software.

At its core, Beyond Compare is a file and folder comparison and synchronization utility. As a developer, I rely on this kind of utility many times a day to sync my backup folders with their corresponding live folders, to update my deployment folders with the files from the latest build, to compare 'before' and 'after' results during testing, and a variety of other such tasks. Beyond Compare quickly became my favorite for its intuitive interface, ease of use, and great features.

Folder Comparison and Synchronization

Beyond Compare's user interface consists of a pair of side-by-side treeviews showing folders, sub-folders and files. The display, which refreshes rapidly even for long lists, drills down the folder hierarchy from whatever drive or folder you have selected as the root on each side. The intelligent use of color makes it easy to quickly spot matches, mismatches, and orphans between the two sides.

You can choose to view all files or only files that are different on one side than on the other. If you choose to view only files that are different, there are several choices involving various combinations of mismatches, orphans, and files newer on one side than on the other. Toolbar buttons enable you to quickly select the desired view and to expand or collapse all the sub-folders in the view, among other things. As you would expect, you can expand and collapse individual folders by double-clicking them in the treeview.

Other buttons on the Beyond Compare toolbar enable you to easily synchronize two folders by copying newer and unmatched files from one side to the other. Synchronization can be done either en masse or for individually selected folders and/or files.

Zip and FTP

Beyond Compare treats Zip files as folders, enabling comparison and synchronization between a folder and a Zip archive, or even between two Zip archives, as though they were all actual folders. It can also connect to an FTP site on one or both sides of the comparison, thereby extending its functionality beyond the local machine or network.

Sessions and Explorer Integration

If you find yourself frequently comparing the same pairs of folders, Beyond Compare lets you save each set as a named session, which you can then open from a drop-down list the next time you need it. Integration with Windows Explorer (optional, but recommended IMO) enables you to select two folders in Explorer and launch Beyond Compare from the right-click menu. Although I have several dozen saved sessions I use all the time, I still find the integration with Explorer extremely useful for ad hoc comparisons and synchronizations.

File Compare and Editing

Beyond its core functionality, one of Beyond Compare's most useful features IMO is the built-in file comparison and editing capability. With any two files selected, you can launch a file comparison with a just click or two. This gives you a side-by-side, line-by-line comparison of the two files in a separate window, again using color to highlight the differences. The basic file comparison is designed for text files, which of course also works great for Visual FoxPro® program (PRG) files, INI files, header (.h) files, and the like. Plug-ins are available for viewing and comparing other file types, including a Hex viewer for binary files and an image file viewer for popular graphics file types.

The file comparison window has its own toolbar, which includes one-click buttons to immediately jump to the next or previous difference without scrolling. A visual representation of the file runs down the left-hand side of the file comparison window and uses bands of color to illustrate where areas of difference occur. I find this very intuitive and especially useful when working with large files that have only a few differences. The file comparison utility also enables you to edit the files in situ; you can edit individual lines on either side and/or copy a line or a group of selected lines from one side to the other.

Licensing

Another plus is that Beyond Compare can be licensed to the person, not just the machine. The license states that "One registered copy of the Software may either be used by a single person who uses the software personally on one or more computers, or installed on a single computer used by multiple people, but not both." As an independent developer who works primarily on two machines (a desktop PC and a laptop PC) not shared with anyone else, I value this kind of license agreement a lot.

Automation

Beyond Compare can also be automated -- that is, run without a user interface -- via scripting. Rick Schummer of White Light Computing is currently doing some interesting work in this area. Look for his upcoming Class Compare utility for Visual FoxPro, which takes advantage of Beyond Compare's scripting capability to implement some very cool reporting.

When you add it all up, Beyond Compare is a really great piece of software. Go download the latest version and see for yourself.

Beyond Compare is a registered trademark of Scooter Software, Inc. Visual FoxPro is a registered trademark of Microsoft Corp.

['Insanely Great Software' is an occasional series about some of my favorite programs and utilities.]

Inno Setup 5.1.4 Released

Inno Setup 5.1.4 has just been released and can be downloaded here. The major enhancement in this version is support for installing 64-bit Windows® applications. This version also includes other miscellaneous changes and additions since the previous version 5.0.8. See the Inno Setup 5 Revision History for a complete list.

5.28.2005

BeyondCompare 2.3 Released

Scooter Software has released version 2.3 of Beyond Compare, one of my all-time favorite utilities. After spending a couple of months in beta, this release has been widely anticipated. Judging by the list of changes and enhancements, which runs two printed pages, there's a lot to look forward to. Beyond Compare version 2.3 is available for download here.

Beyond Compare will be featured in the next installment of my Insanely Great Software series here on this blog. Stay tuned.

5.25.2005

What time is it?

I registered for an online 'webinar' today. The confirmation e-mail informed me the event would take place on the specified date at 15:00 BST, 16:00 CEST. Not being sure how to translate this to U.S. time zones, I had to do a search on those terms to find out what they meant. In the process I found a good site at www.computerhope.com/jargon/t/time.htm with a list of several time zone abbreviations and their relationship to GMT. BST in this case is British Summer Time, and CEST is Central Europe Summer Time.

5.17.2005

Newsgator acquires FeedDemon

Straight from the source: Nick Bradbury of Bradbury Software reports on his blog this morning that Newsgator has acquired FeedDemon, Nick's outstanding and highly popular feed reader (see my recent blog), along with Nick's other excellent product, the TopStyle CSS and HTML editor. Given that Nick himself is going to work for Newsgator, the headline should probably read "Newsgator acquires Bradbury Software."

I don't blame Nick in the least for selling out while the market was hot, but I'm not optimistic about this. Main reason? Two words: subscription model. More later after I've had a chance to cool down. Right now I'm not feeling too good about this.

5.16.2005

Internet Explorer 7 has tabs

From Microsoft's IEBlog: "Yes, IE7 has tabs." Good news, and about time. Tabs make inifinite sense when you want to work with multiple Web pages open at the same time. I hope the tabs are on top of the main content and not at the bottom, or at least that they're moveable to suit individual preferences. I also hope IE7 will implement Ctrl+Tab to move from one tab to the next, Ctrl+PgUp and Ctrl+PgDn to move back and forth among tabs, and Ctrl+T to open a new tab from the keyboard. Keyboard shortcuts sometimes get short shrift; those three ought to be standards, IMO.

5.14.2005

Three Cool Firefox Extensions for Developers

If you design Web pages and write your own HTML/XHTML and CSS, or even if you're just interested in seeing how your favorite Web pages are put together, you'll probably find these tools as useful as I do.

Web Developer Extension
Chris Pederick's Web Developer Extension provides a whole range of useful little tools, many of them focused on helping you work with CSS. Among them is the ability to selectively disable CSS styles -- all styles, embedded styles, inline styles, linked styles, or even individual style sheets -- making it easy to see (and debug) the effect of each style. You can even interactively edit CSS styles and see the effect of your changes immediately, even on public pages. Other groups of tools in this extension help you work with forms and images, outline selected elements on the page, view information about the page, perform various validations, and more. You can find Web Developer Extension at chrispederick.com/work/firefox/webdeveloper/.

View Cookies
This nifty little extension, by Edwin Martin, adds a tab to the Firefox Page Info dialog on which you can view the name, value, domain, path, and scope (duration) of the cookies for any page you're viewing. Very useful when developing and debugging cookie-based pages. View Cookies is available for download from addons.mozilla.org/extensions/moreinfo.php?id=315.

Aardvark
When turned on, Aardvark outlines each page element as you pass over it with your mouse, showing you the associated element type such as div, p, td, h3, etc., along with its CSS class or ID info, if any. A set of keyboard shortcuts enable you to interact with the selected element in various ways. From Karmatics, Inc. at www.karmatics.com/aardvark/.

Others
There are of course many other Firefox extensions, both for developers and for other uses, too. You can find an alphabetical list on mozilla.org at addons.mozilla.org/extensions/?application=firefox. Two that I'll be checking out soon include View Formatted Source and View Rendered Source. Look for them near the bottom of the Developer Tools list.

5.13.2005

Windows Installer 3.1 Redistributable (v2) Now Available

The Windows Installer 3.1 Redistributable is back as 3.1 (v2). This update fixes the problem described in KB #898628, Windows Installer fails silently when trying to update a file protected by Windows File Protection. The release notes for 3.1 (v2) are here, and the download link is here.

5.12.2005

Windows Installer 3.1 Redistributable Temporarily Withdrawn

As reported last week by Stefan Krueger of InstallSite.org, Microsoft has temporarily withdrawn the Windows Installer 3.1 Redistributable due to issues discussed in knowledge base article #898628. The original post with a bit of follow-up discussion is here.

Firefox 1.0.4 now available

Firefox 1.0.4 is now available for download. This update fixes three recently publicized security issues. More information is available in today's mozillaZine article.

5.09.2005

Firefox Security Advisory

Mozilla.org has posted a security advisory for two "potentially critical" vulnerabilities in its Firefox Web browser. The advisory suggests users temporarily disable JavaScript until a fix is published.

4.13.2005

Not new, but still great

Going through CDs and listened to an old favorite this afternoon. Santana's Supernatural is not new but it's still great. This is probably my favorite Santana album since the original, which by the way I still have on LP. (Yeah, I know... what the heck is an LP??) This guy is amazing: even after 35-plus years, still high-energy and cranking out some of the cleanest and most compelling guitar work around. Made my day.

Windows Installer 3.1 Redistributable Now Available

The redistributable for Windows Installer version 3.1 is now available. It is being released through this month's Windows Update service and can also be downloaded from here. KB article 893803 explains what's new. Windows Server 2003 SP1 already contains Windows Installer 3.1 and therefore does not need this update.