Sunday, December 23, 2007

Compaq Presario C500 and Kubuntu wireless networking fun

These instructions on the Ubuntu KNetworkmanager page got my Compaq Presario C500's Broadcom BCM 94311 MCG wlan interface back up and running after I fu-fiddled around with it this afternoon. I made the mistake of clicking the "Manual Configuration" option in KNetworkmanager, after which I lost all wireless connection, and couldn't find my way back out of the wireless woods:
  1. Made a backup of the file /etc/network/interfaces
  2. Delete all configuration settings in the file except the lo interface

    auto lo
    iface lo inet loopback

  3. saved the file then typed /etc/init.d/networking restart
  4. After enabling the laptop's wireless networking hard-button, the wired network reappeared in Networkmanager's Connection Status
  5. Also followed the instructions to enable the connection to survive suspend or hibernate, and bypass the keyring password at every login

Tuesday, December 18, 2007

Setting up a Canon Pixma MP530 on Kubuntu 7.10 (Gutsy)

I started tinkering with Rails again on Vista. Boy, is Mongrel ever slow. That's what prompted me to test-drive Kubuntu in the first place. OK, let's try it again. Download the Gutsy image, repartition, reinstall... wow, it Just Works. After a minor bit of fiddling to get the sound card working, I'm up and running on Kubuntu again. Except the printing thing. Complicating the matter, the printer, a Canon Pixma MP530, is shared out from a whitebox PC running Windows XP Home.

After a bit of googling, this is what I did:

1. Following a tip on the OpenPrinting database MP530 page pointing to Brady Hunsaker's advice I downloaded the .rpm MP500 driver files from Canon's FTP site.
2. Installed alien (what a cool name, not to be confused with alien-arena) then I converted the .rpm's to .deb's and installed them.
3. Brady says create symlinks to old library names... but he doesn't explicitly say _where_, for the sake of beginners like me. After a few minutes of noobiness, I realized the symlinks should be in the same directory as the library files to which they point (`/usr/lib/`, not in the printer driver directory `/usr/share/cups/model`).
4. As a test, I plugged the printer directly into a USB port on my laptop then fired up the CUPS server on the default URL http://localhost:631/. No luck, CUPS couldn't see the printer, even after I power-cycled it.
5. I noticed one of the device options is "Windows printer via SAMBA". Hrm...
6. Followed the instructions on Debian and Windows Shared Printing mini-HOWTO to verify that my lappie can connect to the Winbox via smbclient as `smbclient -I WIN.BOX.IP.ADDRESS -L WINBOXNAME -N`.
7. Plugged the MP530 back into the Winbox, then started going through the new printer install, this time for "Windows printer via SAMBA":
1. Add new printer
2. Fill in the name, etc.
3. Device for printer: select Windows printer via SAMBA
5. Browse to the PPD file in /usr/share/cups/model/canonmp500.ppd
6. When prompted, enter your Linux username and password (like sudo)
7. Configure and enjoy the printer!

I successfully test-printed a couple of pages duplexed from a PDF, then printed a couple of images to 4x6 photo paper from the cassette tray. Looks like the MP500 driver works just great! Cool!

Monday, December 17, 2007

Double-clicking to select text fails in jEdit on Kubuntu Gutsy Gibbon (7.10)

After a failed attempt to upgrade Feisty, I wiped my Kubuntu partition and reinstalled Gutsy from scratch on my Compaq Presario C506ca. All went well - I managed to get the sound working (can't recall the tweak right now), got Ruby, Rails 2.0 and jEdit installed. Then I discovered I had to double-click real fast to select words or lines of text in jEdit. A little googling around led me at last to this post Bug #55270 in xorg (Ubuntu): “Double-click timeout is not applied to X”, which explained the problem and best of all had a fix: add *multiClickTime: 400 to your .Xdefaults or .Xresources file (not sure which one applies to which environment, but .Xdefaults worked for me).

Wednesday, December 12, 2007

stupid ruby trick #1

Here's why I like dynamic languages. I have a template (function) in an XSLT application that I invoke with the number of columns in an output table. The template then returns a list of integer values separated by carets "^".

Each integer is the width of a column as a percentage of the table width. The ideal width for each column depends on the size of the column header label and text in each row, which is a bit of a subjective fiddle, so I can't really automate setting the proportion of each column, at least not without doing some advanced parsing of the table data.

Of course, all the integers for a given number of columns are supposed to add up to 100 percent, and the list should have only as many integers as there are columns in the table. For tables with 5 or 6 columns, it's pretty easy to eyeball the sum, and make sure there's the right number of values, e.g. "10^20^20^30^20". When the tables get up to 14 or 15 columns, manually adding up all those column widths to 100 for the right number of columns becomes a PITB. Time for a little scripting!

So I whipped up this little one-liner in irb to do the math for me:

>> n = "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"
=> "4^10^10^10^6^6^6^5^6^6^6^5^6^5^6^3"
>> eval(n.gsub("^","+"))
=> 100
>> puts "sum: " + eval(n.gsub("^","+")) + " cols: " + n.split("^").length
TypeError: can''t convert Fixnum into String
from (irb):3:in ''+''
from (irb):3
>> puts "sum: " + eval(n.gsub("^","+")).to_s + " cols: " + n.split("^").length.to_s
sum: 100 cols: 16
=> nil

I made a couple of fumbles and educated guesses, based on my experience with Javascript and Perl, e.g. that eval(n.gsub(...)) would add up the digits. Still, I didn't have to refer to the Pickaxe Book at all!

I'll stick that into a .rb file for future use, passing in the list of column widths as an arg (once I remember how to get it from ARGV [or is it ARGS?!]). Gee, maybe I could put the body in a loop that keeps prompting me if the sum is not 100, so I can keep fiddling the string until it's right... hm...

Monday, October 1, 2007

Getting the Aptana Help Server working on Windows Vista

Overcame a minor irritation - I kept getting an HTTP 500 internal server error from Aptana's built-in help documentation server after installing Aptana on my Windows Vista system. After some fiddling around with the Help Server's host name and port, I found the sweet spot by setting the host name to "localhost" and leaving the port number field blank, allowing Aptana to pick its own value.

Thursday, July 26, 2007

Windows Vista, Wacom and Logitech Woes

**<rant>**I bought a Wacom Graphire4 4x5 tablet for my daughter this week. According to her, the driver and bundled Photoshop Elements3 and Corel Painter Essentials 2 installed with no problem on our Windows XP system.

I however wasted 2 hours attempting to install the bundled apps onto Windows Vista on my laptop this evening. In the end, after googling around a bit, I made an educated guess that Vista just hates the Microsoft Installer packages wrapping the vintage 2004 Photoshop and Corel apps. Also, it appears Adobe has no intention of supporting Vista, so I won't hold my breath waiting for Wacom to upgrade the bundle...

The Vista version of the tablet driver installer freshly downloaded from the Wacom site *also* seemed to hang up partway through the install process. In the end, it appears to have installed itself, however I now have *seven* annoying popup messages to dismiss when I logon to Windows, each popup informing me that it couldn't find a driver for this or that USB device - when in fact the drivers for the Wacom tablet and the Logitech wireless keyboard/mouse are installed *just fine*.

Speaking of the Logitech stuff, I still haven't received a satisfactory answer from them about the annoying popup messages, four months after I first complained about it on their support Web site. Well, at least Logitech attempts to listen to their customers - I found no such avenue for recourse on the Wacom site. Just fire off an email to them and hope for the best.**</rant>**

Monday, July 23, 2007

Andale Mono font for Windows Command Prompt

Andale Mono is one of the nicer monospaced fonts for the command prompt (DOS box) on Windows. Unlike the default Lucida Console, Andale Mono has a dot in the middle of the zero character to distinguish it from the capital O. It also has much nicer proportions than the default Windows raster fonts.

Microsoft dropped Andale Mono as a default font choice from the Windows 2000 and XP DOS prompt configuration. However, some years back, a helpful fellow named Aaron Toponce wrote up a blog page with the gory details on restoring Andale Mono to the DOS prompt font list.

I had the foresight (luck) to bookmark Aaron's instruction page using Yahoo!'s My Web social bookmarking thingy. Aaron's domain has long since reverted to a marketing link farm, but I had the foresight (luck) again to *save a copy* of Aaron's page along with the Yahoo! My Web bookmark. For this feature alone My Web is gold.

As I settled into my latest PC at work, I used Aaron's instructions to restore Andale Mono to my command window. Here for your elucidation is my slightly edited version of Aaron's instructions:

> The Windows command prompt supports monospace TrueType and OpenType fonts. By default, only Lucida Console and Raster Fonts are installed. You can add more monospace fonts using a simple registry hack:

> 1. Navigate to HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows NT/Current Version/Console/TrueTypeFont. As you will notice, the existing Lucida Console is named '0'.
> 2. Add a new string named '00' (I believe only '0' can be used, although I haven't tried anything else),
> 3. Modify the data to be the font name.
> 4. Add as many TrueType and OpenType monospace fonts as you like, just keep adding zeros to the string name.
> 5. Open a DOS Prompt, right-click the title bar then select Properties from the context menu.
> 6. Select the Font tab. Andale Mono should appear in the list of fonts. Select it, then set the size (I like 14).

Tuesday, June 26, 2007

Markdown and Code Highlighting

Added a couple of WordPress plugins:

  1. PHP Markdown: because the default WordPress HTML editor mangled my code examples, and

  2. Dean's Source Code Highlighting Plugin: because I wanted my code snippets to look nice (obscures the lack of quality in my code examples :).

Hats off to Dean and Michel

Ruby script: find duplicate files

A quick google for a script that would find duplicate files by name in a directory tree turned up two promising techniques, one a Ruby script posted to OnJava by Bill Siggelkow and the other a bash script using common Unix tools.

Here's my attempt to reproduce the bash results in Ruby:

#!/usr/bin/env ruby
require 'find'

files = {}
found = {}

# read root directory from command line
ARGV.each do |arg|
Find.find(arg) do |f|
if File.file?(f)
# accumulate the file names
files[f] = File.basename(f)

# count up the number of each file name
files.each_value do |base|
# Ruby doesn't allow this Perl idiom: found[base]++
found[base] = 0 if !found[base]
found[base] += 1

# print the path of each file found more than once,
# prepended with rm command commented out
found.each do |name,count|
if count > 1
files.each do |path,filename|
if name == filename
puts "# rm #{path}"

Given a directory structure containing files with duplicate names in different directories, the output looks something like this:

# rm /market/fruits/tomato.txt
# rm /market/vegetables/tomato.txt
# rm /market/fruits/pea.txt
# rm /market/vegetables/pea.txt

The output could be piped to a shell script, in which you'd uncomment the "rm" statements for the files that should be deleted (if that's what you want).

This is all a bit clunky, if you've found a better or more Rubyesque way to do this, let me know!

Thursday, June 21, 2007

Config files

On a recent project at work, developing a test automation system on top of TestComplete, we tried two ways to store machine-specific configuration data:

  1. One file, shared by all installations, containing a section per machine

  2. One file per machine

At first I had set up a single config file specific to my development PC. When my team mate Alan picked up on the idea, to put some machine-specific data on his system, he created a global config file containing a section per machine. His reasoned that one file, with some common and some machine-specific sections, was more efficient than a collection of files with high redundancy.

The config files contained data specific to each developer or test instance, such as usernames and passwords on the system under test. We needed this data in first place to prevent clashes between developers as we exercised the system.

What we ultimately settled on was separating the single global config file back into one-per-machine. Even though we were following good development practice by using a svn repository, so no-one's edits would get lost or forgotten, we realized that once the project ramped up to 3 or 4 development machines, plus a couple of production servers, that config file would become a pumpkin.

Subverting Aptana

A persistent error in the integration of the Subclipse SVN client with Aptana IDE prevents the initial import of a project into an SVN repository. I don't think the problem lies with Subclipse, the client plugin, as much as a bug somewhere in the guts of the Eclipse IDE. I worked around the problem by using TortoiseSVN to perform the initial repository import, then carrying on with Subclipse in Aptana IDE.

To reproduce the problem, right-click on your project folder in the Navigator panel, then select the "Share Project..." wizard from the "Team" element of the project context menu. Aptana will display an error dialog:


The error message reads " cannot be cast to org.tigris.subversion.subclipse.ui.wizards.sharing.SharingWizard"

A couple of other Aptanans reported encountering the same error after I submitted it to the Aptana user forum, but the Aptana team hasn't come forth with a solution yet.

Here's how I worked around the problem:

  1. Download and install an SVN client, e.g. I use the TortoiseSVN Windows client on my Windows PC

  2. Create the new project in Aptana, e.g. "MyApp"

  3. Import the project to your SVN repository, e.g. "C:\rails\myapp" -> "svn://"

  4. Now that the code is safely tucked up in your repository, delete the contents of the project folder, either in Windows or from Aptana.

  5. Back in Aptana, right-click in the Navigator pane then select "Import..." to open the project import dialog box. Follow the instructions to check out the contents of the trunk/ directory to a new Aptana project. [Note: modified this step to use Aptana instead of TortoiseSVN]

  6. You should now see Aptana's version of the SVN status hints overlaid on the project files and folders. As well, the project name will acquire the SVN repository path, e.g. [rails/myapp/trunk]

  7. That's it, you're good to go! Now you can use Aptana's SVN client to manage the project.

Wednesday, June 13, 2007


According to an article in yesterday's Vancouver Sun, TNS Canadian Facts' survey on social networking revealed that "ten per cent of Canadians have a blog, ranging from a high of 31 per cent among the 13 to 17-year-old age group to three per cent among the 50-plus crowd". Only eight percent of my peers, the forty-something crowd, have their own blog. I guess that makes me a pioneer, even amongst all Canadians.

Why don't more middle-aged and senior Canadians have blogs? Services like make it as simple to write a blog as an email, so it can't be the technology. Even my 83 year-old great aunt has used email for the past 7 years!

Is it the fear of loss of privacy? Lack of anything to say? Perhaps older Canadians don't feel the need to let the whole world know their every thought. Would there be far less blogging amongst teens if they really realized that the whole world, not just the friends they trust, can read everything they put on Facebook?

What do you think?

Tuesday, June 12, 2007

What does phipster mean?

In case you hadn't gleaned it already, "Phipster" is a contraction of the first two and last letters of my first and last names: Philip Steiner.

David Black's explanation of his domain name,, prompted me to explain mine. But my favourite record as a child was Cecil the Seasick Sea Serpent. Go figure.

Monday, June 4, 2007

Moved from MS Windows Vista Home Premium to Ubuntu 7.04 (Fiesty Fawn) this weekend

What: Compaq Presario C506ca

Why: Windows Vista sucks.

When: Yesterday.

How: Ubuntu Live CD + apt-get + Ubuntu Wiki = done.

Ubuntu First Impressions

  • What sucks: fonts, headphone jack doesn't cut out speakers, lousy Palm support

  • What rocks: wireless networking, wireless keyboard/mouse, Aptana, online support/community, resource conservation, no viri (no antivirus yet, either!)

Web 2.0 Design, Dissected

It's all 'splained here. Once you've memorized this page, you can hold your own with any Mac-toting, dressed-all-in-black, goatee'd web designer.

Thursday, May 17, 2007

RailsConf2007 Day 1 - Rails Guidebook Charity All-Day Tutorial

Partook of the all-day tutorial put on by Dave "that's Roootes" Thomas and Mike "it's Rowtes" Clark. It would have been a lot more enjoyable if I'd managed to sleep more than 2 hours last night, probably just keyed up from the 6.5 hour drive from Vancouver, 4 cups of coffee and jitters about how to keep my spand-branking new laptop from disappearing - it's my first one, can you tell?

One key point Dave and Mike emphasized early on was that most of Rails is Ruby code, so the framework should really be called "Rails on Ruby". In short - if you want to understand Rails, you've got to understand Ruby. This point was reiterated at the break by newly-met lunchmates as we ate the not-too-bad box lunch in the cavernous exhibit hall. They agreed that David A. Black's book "Ruby for Rails", while slightly outdated (Ruby 1.8.4, Rails 1.0), demystifies the "magic code" in Rails by explaining the key Ruby concepts and structures underlying Rails.

Some observations:
  • Upon a show of hands, the audience was split about even between those who had written at least one Rails app, and those who were just getting their feet wet. I saw only one hand go up in response to the question as to how many participants were "super-comfortable" coding Ruby.
  • After reading the lively discussion on Ruby and Women following Gregory Brown's post, I was expecting a 90%+ male audience, however the gender split in the tutorial audience was more like 80/20, some improvement over the anecdotes in the discussion.
  • Also well applauded was the news mid-afternoon that the tutorial attendees had raised over $12,000 for the charities nominated on Pragprog's donation page.
  • On a dimmer note, I was pretty chuffed that the organizers didn't do more to provide AC power throughout the room. I managed to piggyback on the third or fourth power bar daisychained from one of the few wall outlets thanks to a generous neighbour.
The Mike 'n Dave show was very well put presented, knitting together a few concepts that had been puzzling me, Nubie that I am, like "where does it all go?" and "how does the view get the data from the controller?". Much of this is explained in Thomas' book "Active Web Development with Rails", but somehow hearing him explain it made it clearer. Somehow.

So what about the tutorial content? The first third of the day was a whirlwind introduction to and overview of Ruby, followed by a dissection of an example Rails app, with a potpourri of topics like migrations, REST and Capistrano rounding out the day.

Monday, May 14, 2007

Railsconf2007 or bust

T minus 3 days and counting! If the wireless network works OK, and my batteries last, I will attempt to post notes and comments from Railsconf2007 in sunny Portland, OR.

Sunday, February 18, 2007

AWebFactory - a helping hand for RadRails

jEdit + RubyPlugin is a great, simple Rails development tool, but I was getting annoyed today by the need to open two console windows (one to run Mongrel, another to do rails config or rake work), a Web browser and jEdit, then cd to the depot application folder and manually fire up the Mongrel server every time I wanted to do a little more work on the AWDWR depot tutorial.

I thought about writing up a Windows batch file to start up all this stuff for me, then I realized that I would be cobbling together more or less the environment RadRails provides out of the box.

Since I was well into the depot demo application I wanted to import it to RadRails. A quick Google search let me to Victor Kane's AWebFactory - an amazing resource if you want to use RadRails while following along in AWDWR. Even more so, Victor illuminates many of the darker corners of MVC, OO and Rails that beginners might struggle with. Thanks for taking the time to write this invaluable guide, Victor!

Update (14 May 2007): Aptana has taken over development of Radrails, slowly integrating it into their Eclipse-based Web development IDE. The Aptana team and community are breathing new life into Radrails.

Thursday, February 15, 2007

Found a sweet spot!

Wolfman has posted some great stuff at the intersection of jEdit, Rails and HAML, especially the set of Superabbrev shortcuts for Rails development!

Sunday, February 11, 2007

Ruby on Rails for enterprise gaining ground?

I work for a big systems engineering firm (big by Canadian standards) with over 30 years of system and software engineering success. Much of that success is attributed to the company's conservative, risk-averse engineering culture. Nonetheless, a few brave souls within the company are embracing and succeeding with Agile ways. Ruby on Rails promises to ratchet Agile productivity up a notch or two, even for conservative, risk-averse enterprise projects.

In December 2005, Quoted-Printable published a link to a thought-provoking article by Obie Fernandez on the business value of Ruby on Rails. Fernandez predicted a big gain for RoR in 2006, thanks to the "productivity arbitrage" gains of RoR . So, did RoR gain ground in 2006? Was Fernandez on the money? Here's my totally unscientific search for the truth:

David Heinemeier Hansson first released Rails to the world in July 2004. According to a graph produced on Google Trends, the phrase "Ruby on Rails" makes its first appearance in Google searches in early 2005, climbs steadily through the rest of the year, then declines in 2006. Google provides no scale for the number of hits in the vertical scale (there must be a more scientific term for this), so all of the comparisons that follow are relative.

Over the same period, the terms "Java" and "J2EE" declined slightly on Google. A search for "Spring framework", representing the latest trend toward lightweight Java, shows a gain through 2005 followed by a marked decline in 2006.

So does this mean RoR is not gaining ground, or that web users are not searching for these terms as much as they first did, sort of a "framework fatigue" setting in?

Currently in a search for the term "Rails" on Google, eight of the first ten results are directly related to Ruby on Rails. The first five results point to Ruby on Rails-related sites, followed by Rails of Sheffield's "New and used model railways." The result may reveal more about Google's indexing algorithms than shifting patterns in the search term, but it provides some insight.

In the mean time, the first Railsconf in mid-June 2006, sponsored by non-profit advocacy group Ruby Central, sold out to an audience of 600. This year Ruby Central partnered with tech publishing behemoth O'Reilly to double the number of seats at Railsconf 2007 in Portland, Oregon.

Prompted by a fevered posting to the Rubyonrails weblog, last Monday, I succumbed to the hype and registered, even before I had the go-ahead from my employer's professional development program coordinator (yes, they have a great training and pro-D program!).

As of this posting, the conference is already three-quarters sold out, one week after registration opened!

Glad I bought my ticket early.

Sunday, February 4, 2007

require_gem is obsolete?

A discussion about the warning "c:0:Warning: require_gem is obsolete. Use gem instead". I couldn't get this one to work on my home box (Rails 1.2.1, Ruby 1.8.5 on Windows XP SP2) so I'm just ignoring it for now, hoping it's not critical. I'm still so new to RoR that I don't know what's important yet. I'm hoping the Ruby and RoR maintainers will fix this one soon?

Update (11 Feb 07): Rails 1.2.2, released on 6 Feb, fixes the problem, along with support for SQLite3 - you'll need gems 0.9.0 or better now.

Saturday, February 3, 2007

jEdit for Ruby on Rails

I received my copy of Agile Web Development with Rails yesterday, and eager to get started, I fired up my long-time favourite code editor, jEdit. Over the past five or six years I've used jEdit for just about every coding task I've ever undertaken, so I decided to try it out for Rails work.

After a couple of hours of downloading plugins and fiddling around with settings, I decided to save my notes here in the hopes that it would save you some time (and so I'd have it written down somewhere for the next time!). I'll assume you're starting from scratch:

  1. Download and install Exuberant Ctags (supports the CTagsSidekick plugin). According to the plugin docs, you need a recent version of this program.

  2. Check the system requirements for jEdit, then download and install the appropriate Java Runtime Environment.

  3. Download and install jEdit.

  4. If all is good, fire up jEdit, then select the menu Plugins -> Plugin Manager.

  5. Select the Install tab, then select and install the following plugins:

    • CodeBrowser: provides a tree view of the document structure

    • Console: integrated command-line with some smarts.

      • Doesn't work so well with applications that don't immediately flush their output buffer, e.g. for tailing WEBrick output.

      • Works well with the ErrorList plugin to highlight runtime errors in Ruby code.

    • CTagsSidekick: another, somewhat slicker document structure browser.

    • ErrorList: as the name implies, displays a list of errors generated by SideKick parsers

    • ProjectViewer: Best of the half-dozen project organization plugins. Some integration with console, e.g. switching the project view as you navigate the source tree in Console, or switch buffers in the main text edit view.

    • RubyPlugin: the big kahuna - makes jEdit a into real Rails locomotive :) I can't say enough about the features it provides, just read up on the author's site.

    • Sidekick: provides the framework for CTagsSidekick to do its magic.

    • XML: provides an HTML parser and tag completion facility for Sidekick

  6. Most of these plugins should install without a hitch. You might have to restart jEdit to let it find and install all of them correctly.

  7. Once all of the plugins are happily installed, select the "Plugin Options..." from the "Plugins" menu, then update the following plugin settings:

    1. Code Browser:

      1. Enter the path to the Ctags executable (e.g. on my system it's C:\Ctags\ctags.exe).

    2. Ctags Sidekick:

      1. Enter the path to the Ctags executable (e.g. on my system it's C:\Ctags\ctags.exe).

      2. Set "Group tags by" to "namespace (multi-level)"

      3. Click "Show icons" if it isn't selected.

    3. SideKick:

      1. In the Parsers section, set "rhtml" mode to the "html" parser, and "ruby" mode to the "ruby" parser.

    4. ProjectViewer:

      1. If you plan to use ProjectViewer to manage your Rails projects, add *.rb, *.rhtml and *.yml to the "Files to import" field of the "General Options" section.

    5. Click "OK" to save the settings and close the Plugin Options window.

  8. Select "Global Options" from the Utilities menu, then update the following settings:

    1. Editing:

      1. Select "html" from the list of modes.

      2. Uncheck "Use default settings".

      3. Add "rhtml" to the "File name glob" field, like so: *.{html,htm,hta,rhtml}

    2. Shortcuts:

      1. Select "Plugin: RubyPlugin" from the "Edit Shortcuts" list, then add the shortcuts as suggested on the jEditPlugin Features Page.

    3. Click "OK" to save the settings and close the "Global Options" window.

  9. Also see the excellent tips on Eadz's Ruby on Rails on jEdit page, and this howto on setting up RoR abbreviations.

  10. Best to restart jEdit so the buffer mode changes take effect.

    • You can confirm the mode is HTML by opening a .rhtml file then checking that HTML mode is displayed in the status bar, e.g. "(html,indent,Cp1252)".

    • Also, select the "Beautify Buffer" command from the menu Plugins -> Beauty. It should tidy up the HTML formatting.

    • Finally, a list of HTML tags should pop up when you type an opening tag bracket "<".

    • Sometimes jEdit "forgets" the mode it's using. Just restart it - it will remember where you were editing the file and which files you had open. Sweet.

That's about it. I welcome any and all corrections or additional tips!