Code by Kevin

Code by Kevin, Programming, code, business, and other pursuits

Your Host
Kevin Walzer, software developer.


Subscribe to RSS Feed
Get a syndicated feed of my weblog.



Privacy Policy

Site design: Skeleton


Tue, 21 Aug 2018

New pricing policy

My applications are all now priced at $10, reduced from $29.99.

For years I've resisted the race to the bottom that seems to be prevalent in software pricing for the Mac and Windows; my attitude is that "price is an indicator of quality" and I did not want to sell my applications short.

It's hard to ignore the market forever, though, and facts are facts: software is lower in price than it was 10 years ago. Users expect it. An application that retails for $50 today might be a "pro" app that would have cost $100-200 a decade ago.

My apps, being fairly simple utilities, are simply not competitive at a $30 price point in today's market. Hence, the reduced price.

I'm hopeful this will result in a few more sales, as most of my apps do not sell well at the higher price point. But I don't expect to see a huge jump in revenue. Instead, this is just a likely-overdue move to bring my products' price to where the market has judged similar products should be placed.

Another pricing model is becoming increasingly common in software: subscriptions. Apple is apparently pushing developers on its platform to adopt this model wholesale. I have a lot of app subscriptions, mainly for Adobe and Microsoft products, so I'm familiar with this approach from a user perspective. I'm not sure at this point how to implement it in my own apps, or whether this even makes sense for small utilities.

So for now, $10 for an initial purchase is where I am. I have no plans to change my free upgrades for life policy.

[/business] permanent link

FileMorph 3.0

I've just released version 3.0 of FileMorph, my file modification tool for macOS and Windows. The biggest changes in this release are the introduction of a scripting API for Windows based on Dynamic Data Exchange, which I am gradually rolling out into all my Windows products. This release also includes an improved UI on Windows (no more console!), and various bug fixes for macOS and Windows.

As always, upgrades to my products are free to registered users.

[/software] permanent link

Thu, 19 Jul 2018

Updated mobile apps

We've released updated versions of our mobile travel apps, The Lake Effect (Great Lakes travel) and Snowbird Shores (Atlantic coast travel). Both feature modest UI updates. Both are free downloads for iPhone and iPad.

[/software] permanent link

Mon, 04 Jun 2018

Stringscan 1.2

Amid the ongoing updates to my apps to reflect my transition to a new server, I've also assembled a more substantial update to Stringscan,, my text search application for Mac and Windows.

In addition to the updates for the source code repository, Stringscan also features a re-worked search algorithm and significant changes to how I deploy it on Windows. Here are the details:

  • New search algorithm. Previous versions used a core Ruby module that inspected a file and attempted to determine its type, and filter out non-text files. This algorithm was fine for filtering out non-text files but also filtered out a lot of readable text files that did not fit is model (script files, for instance, would be registered as applications and not plain text). Thus, searches were very incomplete. I've improved the search algorithm by pulling the large list of standard text file formats that I use in TextSweep, which covers a broader range of file types. The list is probably not exhaustive, but does provide a basis for further incremental refinements.
  • New deployment on Windows. Previous versions of Stringscan shipped with a stub executable that directly linked to the Ruby interpreter and could launch the app. Previously this meant the app would open a Windows DOS-style console when launched, which I judged to be lacking in polish. My recent efforts to remove the console have been successful with TextSweep and another app, but with the Stringscan executable, I found the app crashing on startup. After a fair amount of frustration trying to debug this, I finally decided to use the Ruby GUI executable itself to run the app, and linked to it using a Windows desktop shortcut. The slick thing the Windows shortcut is that I can give it Stringscan's name and icon even as I set its target to run rubyw and Stringscan's main script. In the Windows start menu and taskbar, this looks exactly like a regular application. It's a neat solution, one that I learned from seeing how another app, webGobbler, was installed and presented in the start menu.
  • As always, Stringscan 1.2 is a free update for registered users. If you are looking for an easy-to-use text search tool, give it a try.

    [/software] permanent link

    Sun, 22 Apr 2018

    New source code repository

    Because of Apple's decision to deprecate its product, I've had to move my Internet presence to an external hosting service, and I've migrated my source code repository as a result.

    Here is my new repo:

    I'm in the process of pushing out minor updates to all my apps, mainly containing minor bug fixes and links to the new source code repository. More extensive updates will come later this year.

    [/software] permanent link

    Fri, 29 Dec 2017

    TextSweep 4.0

    I've released version 4.0 of TextSweep, my search-and-replace tool for macOS and Windows.

    The big feature in this release is a new scripting interface, for both Mac and Windows. The scripting interface makes it possible to drive TextSweep from other programs. While the specific nature of TextSweep does not require it to return data to other programs, it can still be called as a helper tool from other applications that need search and replace functionality.

    As with my other apps, Mac scripting support is offered for AppleScript through my aem library. For Windows, after looking at several different API's for inter-application communication, I chose Dynamic Data Exchange (DDE).

    The selection of DDE is not a common one these days, so I wanted to offer a bit of explanation. Like Apple Events on macOS (the underlying mechanism for AppleScript) and the Component Object Model (COM) on Windows, DDE provides a mechanism for communicating data and executing code across applications. DDE is a very old technology on Windows, dating back to Windows 2.0, and is relatively simple compared to the much more powerful COM. In this case, however, simplicity is a virtue--DDE is easy to implement, is supported natively on Windows by Tcl, and can be exposed without issue from other programming languages that incorporate a Tcl/Tk GUI. An excellent extension library, TWAPI, supports COM and greatly simplifies the process of setting up a COM interface--but it is still overkill for my needs.

    As always, TextSweep is a free upgrade for registered users.

    [/software] permanent link

    Thu, 14 Dec 2017

    Tk-Cocoa 2.5

    Nearly three years ago I announced a significant overhaul of Tk on the Mac that amounted to a redesign of major portions of the GUI library. The changes were intended to address flaws that had emerged in the initial, whole-cloth migration of Tk from the Carbon to the Cocoa API by Daniel Steffen. At the time I envisioned that this overhaul would put Tk on sound, stable footing going forward, and would require only routine maintenance and the occasional feature enhancement.

    Ah, the best-laid plans of developers. Tk on the Mac in fact was NOT in a complete place, and later that summer, Marc Culler, who contributed many of the critical patches for Tk-Cocoa 2.0, and I did some additional major refinements. At that point Marc's contributions were so substantial that he essentially became the co-maintainer of Tk on the Mac, and I added his name to the author list.

    Over the past six months, we have gone through an additional heavy round of development on Tk, to the point where I consider this yet another major iteration of the toolkit and not just an incremental set of updates. Should this round be called, informally at least, Tk-Cocoa 2.5? I think so.

    This round of development was led by Christian Gollwitzer, who implemented some long-broken functionality in file dialogs; Marc Culler, who fixed some major crashing bugs on macOS 10.13 and implemented several major, low-level improvements to drawing and image code; and Francois Vogel, who worked closely with Marc on the drawing code specifically with the text widget and who has undertaken an ongoing cleanup of the Tk test suite on macOS.

    Here's a quick overview:

  • Cleanup of clipping regions in drawing code fixes many subtle, low-level drawing bugs especially with embedded windows and in text widget (Culler and Vogel). Marc dove into some very subtle, long-standing bugs with widget rendering in specific contexts--especially with embedded windows and the text widget. Francois assisted with these changes as well as providing guidance on applying them to the text widget, one of Tk's most complex components internally. Francois has also worked at integrating these changes, and fixing other issues, in Tk's test suite.
  • Cleanup, enhancement, and re-organizing of image rendering code to make it easier to develop with (Culler). Marc re-factored Tk's native image-rendering code on the Mac into a separate file to make it simpler to understand and work with (previously it had been in the drawing code). This work also led to the fixing of several bugs related to image rendering especially with transparency.
  • Implementation of wm_iconphoto command to allow setting of custom icons (Walzer). I implemented this command, with assistance from Marc's work on the image code.
  • Overhaul of app initialization code to make it easier to manage (Culler). Marc re-worked Tk's app startup code to conform to Cocoa conventions.
  • Cleanup and simplification of memory management to improve stability (Culler). The episode that triggered this entire round of development was Tk suddenly crashing on macOS 10.13. I'm not sure what caused this to occur when Tk ran stably on older versions, but Marc, who had updated most of the memory management code over the past couple of years, was able to streamline it a bit to avoid crashes.
  • Overhaul of file dialogs on macOS (Gollwitzer). Christian put together a significant update of the file dialog code to provide better filtering of file options and to take full advantage of dialog customization on macOS.
  • Detailed documentation of macOS-specific API design (expose events, clipping regions, HITheme, etc.) in the "Readme" file. (Culler). Marc put together detailed documentation on the design approach to Tk, especially with the recent changes. This documentation will help future developers understand the design of Tk. It formalized many things I understood intuitively, and also made clear portions of the API that eluded me.
  • While I did most of the early heavy lifting on updating Tk-Cocoa and was later joined by Marc, in this round I contributed far less code. Marc has done most of the substantial work, with Christian making a major contribution with the file dialogs, and Francois has provided ongoing consulting on integrating these changes into other aspects of Tk. It's great to have more developers working on Tk on the Mac these days; it has allowed us to make infinitely faster progress on fixing bugs. It also adds far more expertise to specific problems; Marc and Francois have expertise in certain areas that I've never been able to master, and Christian's work would have taken me some time to equal. I'm grateful for their efforts.

    Right now this work can be downloaded from the core-8-6-branch of Tk at its core development site, and it will soon make its way into the next stable point release. Keep an eye out for it, and give it a try.

    [/software] permanent link

    Mon, 04 Dec 2017

    PortAuthority 7.8, Manpower 6.6

    I've released updates of PortAuthority and Manpower. Both apps feature under-the-hood enhancements that result in a smoother, more refined UI. They are free updates for registered users.

    [/software] permanent link

    Sun, 15 Oct 2017

    PortAuthority 7.7

    I've released verison 7.7 of PortAuthority, my GUI for the MacPorts software management system for macOS. This release is primarily for stability and refinement on 10.13/High Sierra, which is now the minimum supported OS version. User reports and developer observation of crashes in PortAuthority led to a great deal of bug fixing work in the underlying Tcl/Tk libraries, which is now complete.

    As always, this release is free to registered users, and I encourage all users of MacPorts to give it a try. PortAuthority is the oldest, longest-developed GUI for MacPorts. If you want to look at the source code, it is available from under the MIT license.

    [/software] permanent link

    Sat, 23 Sep 2017

    Stringscan 1.1

    I've released version 1.1 of Stringscan, my text search tool for Mac and Windows. This release includes a number of UI enhancements to make using it more intuitive and simple. As always, updates are free to registered users.

    [/software] permanent link