Base16-based Schemes for Komodo

I’ve been working intermittently on a small set of color schemes for ActiveState Komodo based on Chris Kempson’s Base16 color palette. These have reached a point where I feel OK sharing them for others to use, if interested:

I should point out that these are not “pure” Base16 schemes as there are individual settings in each theme which do not hold completely to the Base16 palettes. In most cases, these are settings where I have tuned particular settings for different contrast (e.g., comments, in at least one of them) based on my own preferences. I should also note that, based on my own tuning, I have not looked closely at setting up templates to create these with Mr. Kempson’s related Base16-Builder project but I plan to go down that road in the near future to see if that is workable.

It’s probably also worth pointing out that, for the most part, any language-specific color settings in these schemes are focused primarily on the languages I use (mostly Web-related stuff) so if I’ve missed your languages or your languages don’t seem to follow the Base16 palette, you may want to do some tweaking yourself. I’m also willing to factor those types of changes back into these as they evolve, hopefully both toward use of the Base16-Builder but also so they can be shared via Komodo’s Resources.

Edit 2014-05-14: These schemes specify Adobe’s Source Code Pro for use as the monospaced font. If you don’t have this font installed, you’ll almost certainly want to switch to your font of choice as your first tweak.

Adobe ColdFusion Docs: A better way?

I’m not a fan of the structure the Adobe ColdFusion (ACF) team has moved to for documentation for the recent versions of their product.

A bit of background

With the recent (late May 2014) release of ACFv11, there are now three versions of ACF in which I have varying degrees of interest:

  • v9: we are in the final stages of moving our last app from a shared v9 server to one of our dedicated v10 servers,
  • v10: our entire dev environment is based on v10, and all of our apps with the noted exception above run on v10 in production, and
  • v11: the recent release we’ve watched from a distance as we weigh whether to continue with ACF in the future or shift to Railo as our CFML engine.

My team has used ColdFusion since its Allaire v4 days, and have historically had multiple versions in play across our development and production environments, so the above situation covering three versions is very typical for us. In fact, having all of our dev and production environments based on a single version of ACF as we (almost) do now represents the first time in at least 10 years we’ve been able to achieve this. I don’t believe we are unique in this: any developer moving between versions of the product (or even considering such a migration) will be working with at least two versions of the language and/or the documentation before and during their migration effort.

In addition, I built and continue to maintain a CFML language mode for ActiveState’s Komodo IDE and Edit editors, providing syntax highlighting and tag/tag attribute completion. The tag/tag attribute completion is specific to each CFML version, allowing the user to designate which version of the language is to be used as the basis for which tags and which attributes are to be provided as options to the user. I rely heavily on version-specific documentation to build each of these version-specific implementations.

The problem with the current wiki approach

In recent versions of ACF up through v9, each version had comprehensive documentation sets available both online and as downloadable PDFs. Each of these documentation sets were separate and distinct, and the online versions made it very straightforward to shift between versions. With v10, there is a downloadable PDF version of the documents (thanks to Adam Cameron for pointing me toward those) but the only references to it are not particularly easy to find (search the wiki for “archive” — how obvious is that if you are looking for v10 documentation?). Googling for “adobe coldfusion 10 documentation” does not yield that set of documents in the first page of results. Further, there does not seem to be an online version of some portions of the v10 (such as the tag/function reference). The current online version of the documentation is maintained as part of a wiki that does not contain discrete sections for different versions of the product or language, and for the most part appears to be focused on v11.

The old version-specific implementation of the online docs has the tremendous benefit to the user of being crystal clear as to what capabilities are available in a given version of the language (e.g., which attributes are available for a given tag, what functions/function arguments are available). If I am working on an app currently running on version “x” of ACF, I typically want to see only the version “x” documentation for that tag.

The current wiki-based documentation set, however, does not have that clear distinction between versions of the product or language. This makes differentiating between versions for tags, attributes, supported attribute values, functions, etc., in terms of what is valid and supported between versions far more challenging and error-prone than in previous versions. If I care about the v10 implementation of the cfzip tag, for instance, I have to either use the off-line version of the docs or make sure I look at the “history” portion of the relevant tag page and then mentally remove the new attributes added for v11 (“password” and “encryptionalgorithm”, in this particular case) as I scan down through the attribute documentation — particularly given that there is nothing within the description of the individual attributes indicating their recent addition in v11 (and in the case of the “password” attribute, it seems to be missing altogether from the attribute list).

A better approach?

It seems to me that a better approach would be for separate, discrete version-specific sections within the wiki. The language reference — along with the supporting documents identifying additions, removals, and deprecations — is one example of where this would make the documentation much easier to use. The v10 portion of the reference would always be specific to v10 and would not (should not?) need to contain any v11 content. The v11 portion of the reference would presumably start as a clone of the v10 portion of the documentation, and could evolve along with the language as v11 was developed. As work on v12 is started, the v11 portion would be cloned as a draft and evolve independently from the sections covering previous versions.

The current wiki approach is likely to get more and more unwieldy as additional versions of the product and the language are covered within the current wiki structure. Take the page listing deprecations and removals as an example. Besides being in drastic need of updates as of this writing for completeness and currency with v11, this page — based on its current structure — will get more and more unwieldy as additional versions have to be covered: more rows to cover features being deprecated or removed, and more columns for subsequent versions? The current approach just does not seem to scale for pages such as this.

Note that I am not taking issue with the use of a CMS or wiki for the documentation itself as much as what I see as a poor decision of how to structure the documentation within the tool the ACF team selected.

Finding documentation for earlier, but still-supported, versions of a product should not be difficult but in this case it is getting harder. I’d like to believe the ACF documentation team will recognize this and restructure the documentation set before it collapses under its own weight and degenerates even further in terms of being usable and useful.

And the off-line docs?

The current wiki structure — which seems to be focused mostly on the current language version — also raises the question for me as to whether a similar set of downloadable v11 references will be made available now that the product is available or as the wiki gets refocused on v12 (presumably in the near future, immediately after all of the existing v9/10/11 bugs have been resolved). That’s a separate but important and relevant question. I hope they do continue making that format available, as those downloadable PDFs have repeatedly proven valuable for me and my team at various times.

Komodo-TaskJuggler v. 0.1.2

I’ve been using TaskJuggler a bit more at work recently to develop and maintain project schedules, and decided it was time to do a bit more work on my Komodo extension for the TaskJuggler language. This update doesn’t have anything earth-shaking, but does address a few of the more glaring items on my to-do list:

  • User-defined macros are now syntax-highlighted in the same manner as system macros like “projectstart”.
  • More complete highlighting for secondary keywords and column identifiers used in the various types of reports.
  • The “up” and “down” suffixes used to control column sorting in reports are now highlighted.
  • Fixed a couple highlighting oddities related to the overlap between attributes and report column identifiers (where there is a conflict, attributes win).
  • Some minor cleanup in the mode’s UDL file to remove unused kruft leftover from how Komodo sets up projects.

Download the updated version: taskjuggler-0.1.2-ko.xpi

A Gotcha: Adobe ColdFusion 10, Apache Tomcat, J2EE Sessions

I’ve spent a bit of time over the past month or so playing with setting up a couple of my development systems to run both Railo and Adobe ColdFusion 10 concurrently on a stock install of Apache Tomcat 7. In the case of ACF10, my interest in running on stock Tomcat is based on a desire get away from the custom-built and now out-dated version of Tomcat which Adobe (unwisely, in my opinion) bundles with ACF10. This past week I bumped into a bit of a gotcha that took me quite a bit of time to track down and solve. In the hopes of helping others avoid this same problem and so that I don’t forget it, I’ll share what I ran into and how to solve it.

The symptoms I was seeing were that as soon as I enabled J2EE sessions in the CF administrator and then subsequently stopped Tomcat for any reason, Tomcat would no longer start cleanly, it was no longer bringing up the context running ACF, and because it was not starting cleanly it would also not shutdown cleanly. As weird as this seemed (and sounds, I realize), this was very repeatable. I had it down to something I could reproduce in under 5 minutes: set up a clean new Tomcat install, deploy ACF10 on it via a WAR file, sign into the CF admin, enable J2EE sessions, stop Tomcat… and it would no longer start. There was nothing in the ${CATALINA_BASE}/logs/catalina.out log file indicating what was wrong; it just looked like Tomcat would hang as it was starting. I determined I could install, deploy, and then start/stop Tomcat successfully as many times as I wanted and the problem would not show up until and unless I enabled J2EE sessions in the CF admin. It did not seem to be dependent on whether ACF10 was patched or the specific version of Tomcat.

At one point, I even dug around and figured out how to change the log level used by Catalina, in the hopes that a bit more detail might shed some light on the problem but the bump of one additional level of detail took the log entries on starting Tomcat from under 40 to over 15,000… and while the nature of the problem — in retrospect, of course — might well have been touched on in that blizzard of log entries, I couldn’t find anything even remotely resembling a needle in that sea of haystacks.

It seemed like something specifically related to turning on J2EE sessions in ACF10 was breaking Tomcat. Based on a suggestion from a co-worker, I removed write permissions for the user under which Tomcat was running from all folders under ${CATALINA_BASE} except the ./logs/ and ./webapps/ folders, in an attempt to see if I could determine where the breakage was occurring. On starting Tomcat, I noticed a complaint in the ${CATALINA_BASE}/logs/catalina.out log file about not being able to write to folder ${CATALINA_BASE}/work/Catalina/localhost/_. Looking in that folder, I found a file named SESSIONS.ser. Doing a bit of Googling, I came across a short blog post dealing with session persistence across Tomcat restarts.

I’m not going to pretend that I know why Tomcat would have session persistence enabled across restarts, or why I might want to persist sessions across restarts (I really can’t come up with a scenario where I would want that), or why enabling J2EE sessions in ACF10 would seem to break this persistence… but clearly it does. That file gets written on stopping Tomcat and is then read and removed when Tomcat next starts/restarts. To disable this persistence, the context(s) within Tomcat on which ACF10 is enabled need to include a Tomcat session manager component specifically configured to disable this persistence:

...
<Manager pathname="" />
...

This is touched upon in the Apache Tomcat docs here. That session manager component can occur in any of the supported locations where contexts are configured in Tomcat. Once I confirmed this to solve the problem, I took a quick peek at the context configuration for ACF10 when it is running against the Adobe-provided custom build of Tomcat 7.0.23, and — sure enough — it disables session persistence in precisely this same manner.

The one upside to all of the time I spent tracking this down is that I can now install Tomcat and deploy ACF on it in a matter of just a few minutes in a variety of ways, including multiple virtual hosts under a single Tomcat, multiple Tomcat installs running on different ports, and  a single Tomcat install with multiple instances via use of ${CATALINA_HOME} and ${CATALINA_BASE}. I’m kicking myself for not looking at deploying ACF on stock Tomcat three years ago when I learned of Adobe’s choice with ACF10 to use a non-stock Tomcat that they inexplicably have not updated.

Hey, that’s me!

ActiveState recently stood up a new Web site specifically for Komodo IDE/Edit (which I find encouraging, as I have long felt that it wasn’t featured prominently enough of the ActiveState site) and have been tweeting quite a bit about Komodo the past few weeks (also encouraging). As part of that effort that seems focused on raising the visibility of what I have long felt to be a tremendously powerful general-purpose code IDE/Editor that isn’t horribly bloated and sluggish (yup, that’s looking at you Eclipse!), the Komodo team kicked off a promotion to give away a couple of licenses based on submitting a screenshot of your Komodo set-up.

So I did. And I won…

I am grateful for the license (and their comments about my entry). As a long-time user of Komodo (I use Edit at home, and IDE at work), I have always been impressed by both the product and the quality and level of support provided by the people behind it. And I am glad to see that ActiveState is taking an active role to raise its visibility — that seems to me to bode well for its future.

With some of the recent/upcoming changes to the CFML language from both the Railo and Adobe ColdFusion product updates, I’ll be digging back into my Komodo-CFML language extension for some updates in the coming weeks.