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.

IFTPd

Ran across IFTPd (http://iftpd.sourceforge.net/)today and installed it on my westhost server.  This is great because I can run it on my virtual private server and create accounts for multiple users giving them access to exactly what they need access to.  It has a simple mechanism for defining groups and users, allowing you to create virtual file systems for the users and groups to work on. 

The default FTP daemon on my server was a little more difficult to work with, confining users to only their home ftp directory.  This is insufficient when there are multiple group projects under way.

IFTPd is also written entirely in Java and is distributed with all dependencies, so getting it running was a snap.

Still looking for a similar product for SSH, but for now, this works GREAT! 

 

Dataface 0.6 almost there

OK.. enough talk, already.  I have been using Dataface 0.6 for a couple of months now on development sites (e.g. Science.ca) and now it is time to put my nose to the grindstone and document it so that others can figure out the new features.  I have started a few tutorials but there is a lot of work to do as this version adds mounds of features over the previous one.  New (complete) features include:

  • Improved templating/customization support
  • Addition of an Application delegate class.
  • Fine-grained pluggable permissions framework
  • Modular, extendable actions framework (user can now define custom actions).
  • Integrated authentication support.
  • Multilingual support.
  • More widgets
  • New look and feel for improved usability.
  • more … to many little things to list here…
  • !! More customizable !! 

PHP WebDAV Library

I woke up at 3am Saturday Morning as a result of an epiphany.  I recalled that PEAR has a WebDAV library that will allow me to make any heirarchical structure accessible via webdav.  I downloaded the library and played around with it a bit and found it to work beautifully.  Using webdav, Mac OSX or MS Windows can connect to the script as if it were a network file system and open files directly in the Finder (in Mac OS X’s case). 

 So, I got to thinking…  Using WebDAV and Dataface, it would be possible to build a CMS with MySQL that is completely accessible via webDAV.  In other words, the content could be stored in a database, but editors could access it via webDAV to edit the content in their favorite programs like Word, Dreamweaver, etc…   I slapped away at the keyboard all morning, and finally stopped when I decided that I needed to first complete support for surrogate views in Dataface before I could complete this elegant CMS.  

 

This CMS is hot on my fingertips though, so it will be coming soon. 

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.