Category Archives: Software Development

Posts about software development. Generally I use Java, PHP, and Python for development but occasionally I delve into other things as well.

SSH Tunnelling

SSH Tunnelling has been around forever, but I have finally started using it – and WOW!  SSH Tunnelling is useful when you need to edit content on another machine, but you don’t have direct network access to it.  It can be used when you are in a situation where you have to first SSH into one machine and then SSH from there into your destination machine.  Some examples later.

Dataface 0.6

Since the end of school I have been working feverishly to finish my next release of Dataface.  Version 0.6 will offer some nice internationalization features in addition to improved templating and action support.

One major deficiency , however, was recently pointed out by a Dataface user:  Dataface currently doesn’t support relationships to one-self.  This sort of relationship will be crucial for any future development of a CMS based on Dataface.  It will be a delicate ordeal adding this support as I will have to rewrite much of the relationship code – but I think I’m up to the challenge.  Thank God for the good ol’ SQL Parser.  With that little tool, anything is possible.

 

Internationalization and Multilingualization

I am up to my knees in the entrails of Dataface as I attempt to take it to the next level.  I am currently working on the 0.6 release and hope that it will be available for download in early May.  The big bit that I’m working on right now is Internationalization and Multi-lingualization. 

Internationalization:

I have added a LanguageTool class whose job it is to translate text.  Developers can provide language ini files with translations for multiple languages which the language tool uses for its translations.  Dataface provides a smarty {translate} tag that translates a section of text, so that internationalizing a template is just a matter of wrapping the text sections in {translate} tags and creating the language files.  Once one translation is done, the language file can be translated easily to produce additional translations.

Multilingualization:

 One of the more difficult problems to solve in Data driven applications is how to deal with mult-lingual content in the database.  Dataface will solve this problem by defining conventions for table names.  For example, if we have a ‘Profile’ table with fields "ProfileID", "Name", "Phone", and "Blurb", and we want the "Blurb" field to be multi-lingual,  then we create an additional table for each translation named "Profile_<language_code>" where <language code is the 2 digit code for the language (e.g. Profile_en would contain the english translation, and Profile_fr would contain the french translation).

Then Dataface would be able to load and save records transparently in the proper language according to the language that the user has selected.  Dataface will provide a wrapper db_query() function that can be used in place of any mysql_query() call that will automatically parse and convert the query to extract the proper language translation.  This will make it almost trivial to convert an existing PHP/MySQL application to a bilingual application without even having to change the application structure.  Just swap the mysql_query() calls for the dataface db_query() function.

In addition to this low-level conversion, Dataface will provide a "Translation Form" to translate records from one language to another.  It will be similar to the existing Edit Record Form, but will show one language translation and allow the user to edit another language translation and save the changes.  Good API support will be available so that forms can be created easily programmatically and placed anywhere in the application without having to change the existing application structure.

Anyways.. stay tuned 

SFU Article

Barry Shell wrote an article about me and Dataface for the FAS newsletter and it showed up on the SFU homepage (http://www.sfu.ca) as one of the stories on random rotation.  That was really cool.  It seems like everyone I know saw it because a lot of people have made comments.

Plone 2.0.5 to 2.1 Migration

OK, so the time has come to upgrade a few Plone 2.0.5 sites to Plone 2.1. I am currently working on 3 sites:

  • Dataface
  • GRUVI (A lab in the School of Computing Science at SFU)
  • FAS (Faculty of Applied Sciences Website)

The FAS site is the most difficult migration by far as it contains a number of template and style modifications, and 5 or 6 custom content-types.

Dataface

The Dataface site went pretty smoothly (although there are still a few glitches like the phase ‘Glossary Definitions’ always being displayed as the page name in portal_breadcrumbs). For this site I simply exported the plone site from the old Zope instance (running Plone 2.0.5 and Zope 2.8.5) and imported it into the new zope instance (running Plone 2.1.2 and Zope 2.8.5), copied the products over (upgrading them if necessary), ran the migration tool, updated all of the schemas using archetype_tool, applied a patch to allow Epoz to work properly, and voila! It is now up and running (sort of).

GRUVI

The GRUVI migration went simlar to the Dataface migration except that I had to delete some content because it relied on products that didn’t work with Plone 2.1 (CMFBoard).

FAS

I could be spending a few weeks on this one 🙁

The FAS site is a huge site (over a gigabyte) with 5 or 6 custom content types and multiple changes made to the templates. The process thus far has gone like this:

  • Exported Plone instance from old site (took 3 minutes or so)
  • Copied products from old site to new site
  • Imported Plone instance into new site (took 30 minutes for each attempt — 3 failed attempts before success)
  • Deleted problematic content in a user’s folder that prevented migration tool from working.
  • Ran the migration tool. Took 30 minutes
  • Updated Archetypes schemas using archetype_tool
  • At this point you couldn’t load the site because of site errors.
  • Deleted all custom templates so that customized look and feel are gone — now just using default plone look and feel
  • Still site errors
  • Removed ACASUserFolder and replaced with fresh copy.
  • Now site works but some of the custom content types aren’t showing up

The next obstacle is to find out why none of the custom content types are working. The content types were all generated with ArchGenXML 1.4.1. They seem to work fine when you go to view or edit the objects directly but the folder listings (of multiple objects) display “broken” for each object. Can’t find any documentation that says that ArchGenXML 1.4.1 has compatibility issues with Plone 2.1.2, so I am spinning my tires at this point.

I have now spent 5 hours solid working on the FAS migration. I have checked in at the Plone IRC chatroom but nobody has anything helpful to say other than “Find out what is breaking it”.

Now I must venture into the untamed world of plone documentation to try to find out how to find out what is wrong with the products… argh..

Still getting the feeling that Plone is more trouble than it’s worth right now. This is the pain of being an early adopter, I guess.

Dataface 0.5.2 released

I have added a Javascript calendar widget to Dataface for editing DATE and DATETIME fields. I have also fixed some issues involved with running Dataface on a shared host in safe mode. These changes are part of version 0.5.2. Check out the latest in Dataface at http://fas.sfu.ca/dataface.

On a side note, I have been very happy with the response for Dataface since releasing it to the public on February 28th. I have received a number of comments from developers around the world saying that they really like the software. It is exciting to be able to contribute something useful to the developer community and I hope that I can continue to contribute. I would love to turn Dataface into a household name, but for now I’ll setting for the slow and steady increase in awareness that seems to be happening right now.

Also, I have to express my amazement at the power of freshmeat.net. Every time I release a new version and post it on freshmeat.net, I get an influx of 300 hits or so, and a large amount of downloads. In addition, it seems to pop up all over the internet on other websites that show freshmeat’s new releases. Freshmeat is an awsome solution for open-source software promotion.

To Plone or not to Plone?

Simple Answer: Don’t go there.

Plone, despite its flashy coat of paint, is still a development work in progress. Upgrades from version to version have no guarantee except that they will be problematic. For now, and for many years to come, content management systems based on a relational database are the way to go.

More details later, but save yourself the hassle, unless your a python hobbyist that likes to mess around with code a lot.