Notes About Ongoing Work:

Logging into GridSphere using Login from Shibboleth button

Using Shibbolized GridSphere 3.0.5, if the /gridsphere/login/shib_login url is protected with basic authentication (see BuildGridSphereWithShibboleth), then when the Login from Shibboleth button is clicked a login box will pop up. If a user defined in tomcat-users.xml logs into the box with its tomcat username and password, the simple message "The authentication in Shibboleth is not success!" appears. At that point, an existing GridSphere user can still log in using the regular login boxes, but the tomcat user is not created in GridSphere and instead is a guest user. Shibbolized GridSphere passes SAML attributes to GridSphere by reading headers in GridSphereFilter.java and getting the username, givenname, and other attributes if the header starts with "Shib-". Since that will not happen in our case, I tried adding code to set username = req.getRemoteUser(). If I do just that, then when I log in with the basic authentication I get an error message that a first name is needed (same is true for last name and email) and the user does not get added to the database. If lastname, firstname, and email are provided (surname = givenname = username; email = (username + "@example.edu");), then when the user logs in using the Shibboleth button GridSphere crashes. However, the user DOES get added to the database and can log in with the original login box at a later time. If the lines in ShibbolethLoginPortlet.java that require firstname, lastname, email are commented out and only a username is provided, then the same thing happens - error and GridSphere crashes. In fact, with the code modification to add user information from getRemoteUser(), even an existing GridSphere user that is also a tomcat user can not log in using the Login from Shibboleth button - GridSphere crashes every time, with a "Transaction not successfully started" error. I emailed gridsphere-users@gridsphere.org with this issue, giving the console output - debug and info logs, plus the gridsphere.log.


Jason's response:

Hmm... that's a tough one. Despite your copiuos log data I can't see what exactly is wrong that causes Hibernate to choke. I'm at the point where if I had time I would probably tear out Hibernate in GS 3.1 and use a much simpler ORM framework like iBatis instead ;-) You're probably going to have to play around to narrow down the error. It's a dirty hack but maybe you can just typecast the PortletRequest into a HttpRequest to get access to the header information so you don't have to make this change in GridSphereFilter....

Cheers, Jason


Next I tried this: Make no changes to GridSphereFilter.java. All changes will be to ShibbolethLoginPortlet.java. Typecast PortletRequest req into HttpServletRequest hreq so that username = hreq.getRemoteUser(); Then assigned username, firstname, lastname, email from that getRemoteUser() instead of Shibboleth values which would have been passed from GridSphereFilter.java. This assigned the values as expected, but GridSphere still has the same error when trying to end the transaction.

Next I tried using !MySQL instead of HSQLDB. I got the same errors. Then I tried commenting out a couple of the begin and end transaction statements. Even though there were no longer nested transactions, GridSphere still crashed with a servlet exception. After much trial and error of code modifications then seeing what was/was not changed in the user list, I finally realized that if the user is not already a GridSphere user, the user is being created, like we want. The only problem was just that we did not get directed to a page we like, instead of the Hibernate and servlet exceptions and page that never loaded. And - if a user was already a GridSphere user and I tried to use the Shibboleth button, I still got that big error. So the problem was nothing to do with user creation or the transactions that do that! I made the modifications as described on the BuildGridSphereWithShibboleth page, under Modifications to Shibbolized GridSphere itself for Use With Basic Authentication Instead of Shibboleth. Now if a user logs in using the Login With Shibboleth button, if the user is a Tomcat user and uses the correct password, it will get logged into GridSphere and can then set or change profile attributes such as firstname, lastname, email address, and org. If the user did not already exist, the user account is created at that time.


Using MySQL for Gridsphere:

First, go into Yast and be sure that mysql, mysql-client, mysql-administrator, and mysql-connector-java are installed. The latter will be used to connect to the database from GridSphere. In my case, mysql is installed at /usr/share/mysql. Here is a reference on how to get the mysql server started and add users. http://www-css.fnal.gov/dsg/external/freeware/mysqlAdmin.html. Set your root password for mysql, and add the user that will be administering GridSphere. Use the GRANT ALL...ON *.* statement to grant all rights to your GridSphere admin. In my case, this user is called admin.

To set up GridSphere to use a MySQL database, (reference: http://gridsphere.nbirn.net:8090/display/~wehrens/GridSphere+Installation) edit the hibernate.properties file in /webapps/gridsphere/WEB-INF/CustomPortal/database. It comes configured for HSQL. Lines for MySQL are provided but comnmented out. Simply comment the HSQLDB lines and use the section on MySQL. Put the "=" signs in if missing.

hibernate.dialect=net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=org.gjt.mm.mysql.Driver
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql:///gridsphere
hibernate.connection.username=<USERNAME>
hibernate.connection.password=<PASSWORD>

The username and password above will be the GridSphere database admin created earlier in MySQL.

I used mysqladmin to create a database called gridsphere, but I didn't specify anything else about the database. Reference for mysqladmin: http://dev.mysql.com/doc/refman/5.0/en/mysqladmin.html

Now run the ant install (in Eclipse or at command line) for GridSphere, start Tomcat, and go to http://localhost:8080/gridsphere/gridsphere Select the external database option, using MySQL. Values asked for by the form can be obtained from hibernate.properties. Put in the username/password of your gridsphere database admin, and that should do it.


Creating C++ projects in Eclipse

References: http://www.ibm.com/developerworks/opensource/library/os-eclipse-stlcdt/index.html and Eclipse application Help: C/C++ Development User Guide.

In order to create and work with C++ projects in Eclipse, you must first download the CDT (C/C++ Development Tooling) plugin. In Eclipse, go to Help > Software Updates > Find and Install > Search for new features to install. Click Next, then under Sites to include in search: click New Remote Site and add http://download.eclipse.org/tools/cdt/releases/europa. Then click Finish and install the CDT plugin.

The Help for Eclipse has a lot of information about getting started and creating example applications, as does the IBM site.

Installing mod_shib

  • Install Apache

Reference: http://httpd.apache.org/docs/2.2/dso.html

When installing Apache2, be sure to use the options to enable mod_so and SSL. I tried using the Apache2 from Yast but got errors on when running make for shibboleth 1.3. Download Apache2 from a mirror such as Georgia Tech's: http://www.gtlib.gatech.edu/pub/apache/httpd/ In my case, I downloaded httpd-2.0.63.tar.gz.

tar -xzf httpd-2.0.63.tar.gz
cd httpd-2.0.63
./configure --prefix=/usr/local/apache2 --enable-so --enable-ssl
make
make install

Reference for making Apache and Shibboleth start on startup: http://www.novell.com/coolsolutions/feature/15380.html


  • Install OpenSSL
  • Install Shibboleth 1.3 - see instrux directly below for installing from RPM or from tar files into /usr/local.

Installing Shibboleth 1.3 from RPM

If you want to install Shibboleth from RPM: Reference: http://dev.uabgrid.uab.edu/wiki/UABgridWiki - get all RPMs needed

wget http://shibboleth.internet2.edu/downloads/RPMS/i386/RHE/4/log4shib-1.0-1.i386.rpm
wget http://shibboleth.internet2.edu/downloads/RPMS/i386/RHE/4/opensaml-1.1.1-2.i386.rpm
wget http://shibboleth.internet2.edu/downloads/RPMS/i386/RHE/4/shibboleth-1.3.1-2.i386.rpm
wget http://shibboleth.internet2.edu/downloads/RPMS/i386/RHE/4/xerces-c-2.8.0-1.i386.rpm
wget http://shibboleth.internet2.edu/downloads/RPMS/i386/RHE/4/xml-security-c-1.4.0-1.i386.rpm

Install all at once:

rpm -ivh *.rpm

Installing Shibboleth 1.3 in /usr/local

Reference: http://www.lrz-muenchen.de/~hommel/shibboleth/shib13c_on_SuSE10.0.html#idpinstallation

Comments:

  • Download tar files suggested in reference document above.
  • Extract each file into /usr/local and run configure, make, and make install commands as suggested by document. Be sure to change the paths appropriately, especially where he has /opt/shibboleth-1.3 change it to /usr/local/shibboleth-1.3.
  • Logshib and Xerces installed with no problem.
  • For Xml-security, had to upgrade to 1.3 instead of 1.2 due to a bug which caused an error message:

../../include/xsec/canon/XSECC14n20010315.hpp:127: error: extra qualification 'XSECC14n20010315::' on member 'init

  • To install OpenSAML, had to go back and upgrade Logshib to version 1.0. Then OpenSAML and Shibboleth 1.3 SP installed with no problems.

To have shibd start automatically with apache, add this to the bottom of the apache2 start script (/etc/init.d/apache2) right before the exit $ERROR

case $ARGV in
    start*)
        echo "Starting shibd..."
        /usr/local/shibboleth-1.3/sbin/shibd -fc /usr/local/shibboleth-1.3/etc/shibboleth/shibboleth.xml &
        echo "Starting apache..."
;;

    stop)
        echo "Stopping shibd..."
        killall shibd
        echo "Stopping apache..."
;;
esac

Installing Shibboleth SP from Subversion with Eclipse Reference: https://spaces.internet2.edu/display/SHIB/EclipseDevEnv Note - This is for Shibboleth 2 '

  • How to Use Subversion with Eclipse

reference: http://www-128.ibm.com/developerworks/opensource/library/os-ecl-subversion/ In order to get files from Subversion into Eclipse, we need to install Subclipse. In Eclipse, use update manager to add Subclipse to the Eclipse IDE. From the Help menu in Eclipse, choose Software Updates > Find and Install to open the update manager. Select Search for new features to install, then click Next to continue. Deselect the existing sites, then select New Remote Site to display the New Update Site dialog. Enter a name (like Subclipse) and enter the following for the URL: http://subclipse.tigris.org/update_1.0.x . Click OK to add the Subclipse update site to the list in the update manager. Click Finish in the update manager window to begin searching for new features. Once the update manager has found new features, select Subclipse then click Next to view the feature's license terms. Accept the terms, then click Next to review the features you've chosen to install. Click Finish to download and install Subclipse. The update manager downloads the Subversion components. Click Install All to install Subclipse. Eclipse will most likely have to be restarted before Subclipse can be used. Subclipse FAQ: http://subclipse.tigris.org/faq.html

  • In Preferences windows, Team -> SVN pane, ensure that the SVN interface is set to "SVNKit".
  • In Eclipse, open the Subversion (SVN) Perspective.
  • Expand the newly added repository and right click on trunk
  • Select "Check out as a project in the workspace".

Alfresco

To get Alfresco quickly up and running, download the whole bundle including Tomcat from http://sourceforge.net/project/showfiles.php?group_id=143373&package_id=157460&release_id=524558 .

Assuming you download to $HOME/dist :

mkdir $HOME/src/alfresco
cd $HOME/src/alfresco
tar xzvf $HOME/dist/alfresco-community-tomcat-2.1.0.tar.gz  

Edit alfresco.sh to change the APPSERVER= line so that it reads APPSERVER=$HOME/src/alfresco/tomcat
Make sure no other instances of Tomcat are running on port 8080. Then start Alfresco:

./alfresco.sh start

Go to http://localhost:8080/alfresco and you should see the Alfresco dashboard.

To stop Alfresco,

./alfresco.sh stop

Alfresco - where is content actually stored?

http://wiki.alfresco.com/wiki/Content_Store_Configuration

Also - discussion of where content is stored plus future considerations like distributed storage:
http://newton.typepad.com/content/2006/09/content_storage.html

Article on storage and customizing content model:
http://ecmarchitect.com/images/articles/alfresco-content/content-article.pdf

Authentication

http://forge.alfresco.com/projects/syncfilter/ : This project provides a new authentication filter for Alfresco. It performs the additional steps of synchronizing users and groups to the Alfresco repository (from HTTP headers) before authenticating the user.

Here is the readme.odt for syncfilter:


SyncFilter 0.1 for Alfresco 1.4 by Michael Uzquiano

Disclaimer:

This extension is part of the community forge and is not supported by Alfresco.

What is this?

This project provides a new authentication filter for Alfresco 1.4. This authentication filter authenticates against the Alfresco user store but allows for some pre-processing to occur that will first check to see that the user is "updated' within the Alfresco user store. In other words, it will synchronize the user first. The net effect is that users can arrive to the Alfresco instance for the first time and, if their user information is available within HTTP headers (as per SSO configuration), they will seamlessly authenticate to the Alfresco instance. In addition to user object and user object properties, the Sync Filter will also synchronize group membership information. That is to say, if the user belongs to Groups A, B and C, his or her membership in those groups will be updated to reflect information provided within the HTTP headers. The Sync Filter allows for customization of the synchronization (prior to authentication) by defining handlers within XML for users, groups and user-group assignment. This "handler" framework allows others to write new and interesting handlers. Sync Filter Configuration
Upon initialization, the Sync Filter loads its configuration information from the web-client-config-custom.xml file. A sample is provided below:

Example:

<alfresco-config>
	<config evaluator="string-compare" condition="Filters">
		<filters>
			<filter type="usersync">
				<auth-header>User</auth-header>
				<impersonator-id>admin</impersonator-id>
				<impersonator-password>admin</impersonator-password>
				<handlers>
					<handler type="groups" 											class="org.alfresco.extension.servlet.filter.usersync.GroupsSyncHandler">
						<mappings>
							<property destination="groupIds">
								GroupA,GroupB,GroupC
							</property>
						</mappings>
					</handler>
					<handler type="user" 											class="org.alfresco.extension.servlet.filter.usersync.UserSyncHandler">
						<mappings>
							<property 
								destination="{http://www.alfresco.org/model/content/1.0}userName">
								${headers["User"]}
							</property>
							<property 
								destination="{http://www.alfresco.org/model/content/1.0}name">
								${headers["User"]}
							</property>
							<property
								destination="{http://www.alfresco.org/model/content/1.0}firstName">
								${headers["SSO_first_name_header"]}
							</property>
							<property
								destination="{http://www.alfresco.org/model/content/1.0}lastName">
								${headers["SSO_last_name_header"]}
							</property>
							<property
								destination="{http://www.alfresco.org/model/content/1.0}email">
								${headers["SSO_email_header"]}
							</property>
							<property
								destination="{http://www.alfresco.org/model/content/1.0}organizationId">
								0
							</property>
						</mappings>
					</handler>
					<handler type="usergroups"
						class="org.alfresco.extension.servlet.filter.usersync.UserGroupsSyncHandler">
						<mappings>
							<property destination="groupIds">
								${headers["groupIds_header"]}
							</property>
						</mappings>
					</handler>
				</handlers>
			</filter>
		</filters>
	</config>
</alfresco-config>

The configuration begins by defining properties for the filter known as "usersync". This is the internal name for the sync filter. The property auth-header defines the HTTP header in which the user id is contained (for SSO purposes).

The impersonator-id and impersonator-password properties provide information about the user to impersonate while performing synchronization operations. Usually, this is a user who has adminstrative rights over user and group objects.

The next section defines the handlers. There are three handlers provided by default – groups, user and usergroups. Each handler has an implementation class and a set of mappings (or properties) that it will use during its execution.

The group handler is the simplest in that it has a single property which defines the groups that the sync filter is in charge of working against. Thus, in the example, the sync filter will essentially manage GroupA, GroupB and GroupC. If these groups don't exist, they will be created. At present, the group handler does not sync properties for groups (such as group description).

The user handler is a lot like the group handler except that it will not only assert that the user exists but that the user's properties are also updated. Thus, the mappings for the user handler define the properties on the user object (i.e. properties within the CM object model) that should be assigned to. The values assigned to these properties are derived at runtime from the available HTTP headers.

Thus, a value such as:

${headers["SSO_email_header"]}

will translate at runtime to: uzi@alfresco.com

This will then be written to the user property: {http://www.alfresco.org/model/content/1.0}email

Finally, the usergroups handler looks to a single header (in this case, groupIds_header) that defines a comma-delimited list of groups to which the current user should be assigned. This works for the case where a single header defines the ids of the groups to which the current user belongs. The usergroups handler will make sure the current user belongs to those groups.

Also, if the user belongs to "managed groups" (i.e. GroupA, GroupB or GroupC) and should not, as per the header groupIds_header, the user will be removed from these groups.

Additional Configuration

The following entries should be merged into web-client-config-custom.xml to override the plug-in definitions for the Alfresco web application. These settings override those settings defined in web-client-config.xml:

	<plug-ins>
		<evaluators>
			<evaluator id="node-type"
				class="org.alfresco.web.config.NodeTypeEvaluator" />
			<evaluator id="aspect-name"
				class="org.alfresco.web.config.AspectEvaluator" />
		</evaluators>
		<element-readers>
			<element-reader element-name="client"
				class="org.alfresco.web.config.ClientElementReader" />
			<element-reader element-name="property-sheet"
				class="org.alfresco.web.config.PropertySheetElementReader" />
			<element-reader element-name="navigation"
				class="org.alfresco.web.config.NavigationElementReader" />
			<element-reader element-name="languages"
				class="org.alfresco.web.config.LanguagesElementReader" />
			<element-reader element-name="command-servlet"
				class="org.alfresco.web.config.CommandServletElementReader" />
			<element-reader element-name="advanced-search"
				class="org.alfresco.web.config.AdvancedSearchElementReader" />
			<element-reader element-name="views"
				class="org.alfresco.web.config.ViewsElementReader" />
			<element-reader element-name="actions"
				class="org.alfresco.web.config.ActionsElementReader" />
			<element-reader element-name="dialogs"
				class="org.alfresco.web.config.DialogsElementReader" />
			<element-reader element-name="wizards"
				class="org.alfresco.web.config.WizardsElementReader" />
			<element-reader element-name="dashboards"
				class="org.alfresco.web.config.DashboardsElementReader" />
			<element-reader element-name="filters"
				class="org.alfresco.extension.servlet.filter.FiltersElementReader" />
		</element-readers>
	</plug-ins>

The new entry is the element reader for filters. This must be present so that the filters element within web-client-config-custom.xml can be loaded and read.

Installation

1.Add the file syncfilter.jar to the Alfresco web application's WEB-INF/lib directory.

2.Modify the Alfresco web application’s web.xml file so that Alfresco will automatically use the synchronization filter.

Example:

<filter>
	<filter-name>Authentication Filter</filter-name>
	<filter-class>org.alfresco.extension.servlet.filter.usersync.AlfrescoSyncFilter</filter-class>
</filter>

3.Adjust web-client-config-custom.xml so that the <plug-ins> section includes the definition of the element-reader for the filters element. This is described under "Additional Configuration" above.

4.Add your custom filter settings to web-client-config-custom.xml so that the filter knows how to map users and groups from SSO headers to the Alfresco user and group repository. This is covered under "Sync Filter Configuration" above.

5.Restart Alfresco

Google App Engine

Read about it here: http://code.google.com/appengine/docs/whatisgoogleappengine.html

You can download the SDK from http://code.google.com/appengine/downloads.html

Assuming you downloaded to $HOME/dist, unzip the downloaded file:

cd $HOME/src
unzip $HOME/dist/google_appengine_1.0.1.zip

There are tutorials on the Getting Started Guide http://code.google.com/appengine/docs/gettingstarted/ with example apps to create and run.

Once a tutorial or other app is created, since I run tomcat on port 8080, I change the port for googleappengine to 8082 using the --port option and run it (example helloworld) like this:

~/dist/googleappengine>  ./dev_appserver.py helloworld/ --port=8082   

Substitute the name of your app for helloworld. The googleappengine should report that it is running, then if you go to http://localhost:8082 you should see the app you created.

OpenID

Article re how to become an OpenID consumer - http://www.plaxo.com/api/openid_recipe

To create an idp server for one user (he says could easily make it multi- )

http://siege.org/projects/phpMyID/

https://www.siege.org/svn/oss/phpMyID/trunk/README

To create an idp for multi users:

http://wiki.guruj.net/Clamshell!Documentation

Installed according to instructions, but had to add clamshell.php to list of files in httpd.conf

Creating Releases of VMs for Developer Use

After the vm is completely configured, be sure to edit the properties of the vm. Change the networking to NAT instead of bridged. Remove the file path for the CD then change the CD to hardware and not connected. Make sure the floppy is not connected. Shut the vm down.

cd /groups/lab/vmware/vol2/
# then cd <your user name>
# tar -czf filename-versionnumber.tar.gz vmname

To copy the tarball to files.uabgrid.uab.edu, make sure the following has been done on the machine you're using:

Go to http://ca.uabgrid.uab.edu/user Request a grid certificate

Go to manage grid certificate and download userkey.pem and usercert.pem files and put them into your $HOME/.globus

chmod 400 $HOME/.globus/userkey.pem

Also, remove the $HOME/.globus/certificates directory.

rm -rf $HOME/.globus/certificates

Now connect to meter:

ssh -p 1025 meter.lab.ac.uab.edu

Enter your BlazerID password when requested to do so.

Now the copy command is

# gsiscp -P 2222 filename-versionnumber.tar.gz files.uabgrid.uab.edu:/var/www/html/vm

Issues When Installing or Starting VMware Player

  • VMplayer error after installation: when try to launch /usr/bin/vmplayer:
process 3831: Attempt to remove filter function 0xb602d3a0 user data 0x82cdc88, but no such filter has been added 
  D-Bus not built with -rdynamic so unable to print a backtrace

The solution:

killall dbus-daemon    
  • VMplayer error after launching - about incorrect vmmon kernel – mismatch

The solution: This version of VMware Player must be newer than the ones that need the any-any patch. Run installation again WITHOUT any-any patch.


Rough notes for caGrid VM creation: RoughNotes

CaTissue Suite

CaTIES installation - note - Now caTIES is part of the caTissue Suite. First I will add notes about caTissue Suite, beginning with prerequisites: Reference: caTissue Suite Deployment Manual

Download caTissue Suite 1.0 installer from http://gforge.nci.nih.gov/frs/?group_id=18 and extract to the directory of your choice. Do not use a directory with a space in the name, such as Program Files.

Prerequisites:

1. JBoss 4.0.0 Application server. Download JBoss 4.0.0 from jboss.org. Go to the bin directory under the jboss-4.0.0 directory and run run.sh to start the server. To verify that jboss is running and get a live view of the server, go to http://localhost:8080/jmx-console. Reference: Chapter 1. Getting Started - Getting Started with JBoss 4.0 2. JDK 1.5

3. Oracle database - server and client or MySQL database

4. MMTx (Needed for caTIES). Download from http://catissuecore.wustl.edu/caties_datafiles/

Installing caTissue Suite:

1. At CATISSUE_HOME,

ant -f deploy.xml deploy_all

2. The first time I ran this, I got an error message:

java.sql.SQLException: Invalid authorization specification message from server: "Access denied for user 'catissue' (using password: YES)"
Cause: No file privileges were given to the database user. Occurs while importing CA model data of caTissue Suite Application to MySQL Database.

According to the deployment manual, I needed to ensure that the mysql.user table has File_priv = ‘Y’ value for the user catissue. To check whether it’s set to ‘Y’, execute the following query in mysql

SELECT User, file_priv from mysql.user;

If its ‘N’, you need to set the file privilege to ‘Y’ using following sql.

USE mysql;
UPDATE User SET File_priv = 'Y' where User='catissue';
FLUSH PRIVILEGES;

3. I ran the deploy again and got a slightly different error, once again an access denied error.

4. This time in mysql I simply did this command:

grant all on catissue.* to catissue@localhost identified by 'catissue';

5. This time caTissue Suite installed successfully.


(From here to the beginning of the Puppet notes, this is old caTIES stuff - to be used as appropriate in the new notes on caTIES as part of caTissue Suite.)

reference: caTIES 2.0 System Installation & Administration Manual

Version 1.01

This is a collection of items copied and pasted directly from the manual:


User Authorization
For caTIES 2.0, all caTIES user authorization attributes will be maintained within the caTIES central database. In future versions, caTIES will seek to leverage authorization services of the envisioned federated identity management architecture.


Software Dependencies

The caTIES application currently depends on/needs the following software:

1.Java Runtime (JRE) version 1.4.2_04: The Java Runtime Environment is required for running Java programs on a computer. caTIES_V_2_0 currently must have JRE 1.4.2_04. This restriction is due to version conflicts with open source distribution components comprising caTIES.

2.Apache Tomcat version 5.0.28: Tomcat is required to run caTIES’s OGSA services. Version 5.0 is compatible with JRE 1.4.2_04. In general any 5.0 version of Tomcat is JRE 1.4.2_04 compatible. Tomcat version 5.5 is configured for JRE 1.5.x, and will cause caTIES to fail.

3.MySQL version 5.0: MySQL is an Open-Source Database Server. Our caTIES OGSA services use MySQL to store and retrieve data. It is quite probable that the adopter’s data lies on a database technology other than MySQL. We will be running a pipeline that extracts data from the adopter’s database and dumps it into the caTIES MySQL database after formatting it as per our needs. Currently, caTIES uses version 4.0.

4.Globus Toolkit 3.2.1 (GT3): The Globus Toolkit allows people to share computing power, databases, and other on-line tools securely across corporate, institutional, and geographic boundaries without sacrificing local autonomy. GT3 Toolkit includes software services and libraries for resource monitoring, discovery, and management, plus security and file management. Currently, caTIES uses version 3.2.1 (which is required for OGSA-DAI 5.0). This need not be installed separately. It is included in the caTIES Public and private webservices installation.

5.OGSA-DAI version 5.0: The OGSA-DAI project is concerned with constructing middleware to assist with access and integration of data from separate data sources via the grid. Currently, caTIES uses version 5.0. This need not be installed separately. It is included in the caTIES Public and private webservices installation.

6.MetaMap Transfer (MMTx) version 2.4.B: MMTx is an effort to make the MetaMap program available to biomedical researchers in a generic, configurable environment. MetaMap maps arbitrary text to concepts in the UMLS Metathesaurus; or, equivalently, it discovers Metathesaurus concepts in text. Currently, caTIES uses version 2.4.B.

7.DeID 6.1.3: DeID is a software application that de-identifies identifiers such as name, social security, etc. from the reports as per HIPAA specifications. Currently caTIES uses version 6.1.3.

I will document ExploringPuppet with rough notes as I go along, to be revised and clarified.

Joomla

Still in development, our UABgrid landing page/overview site may be implemented with joomla. I am currently exploring Joomla using an existing installation of Joomla 1.5 http://lab.ac.uab.edu/~jpr/projects/rcweb/joomla as a sandbox.

One thing we would like to do is to display feeds from various parts of our wiki and mailing lists on the front page. That way collaborators and other interested parties will be able to see at a glance the status and topic of our current work or "what's going on" in a nutshell. Joomla makes this possible with ease, but currently my attempt to have a display of feeds results in a message: Please make the Cache directory writable. I'm almost sure this is something we can quickly remedy by setting directory permissions. When viewing the properties of this feed in the administrator section, the following message appears at the bottom of the page: Cache Directory /home/jpr/public_html/projects/rcweb/joomla/cache/ Unwritable
The feed display configuration for what is currently shown can be found by going to http://lab.ac.uab.edu/~jpr/projects/rcweb/joomla/administrator and logging in, then selecting Extensions - Module Manager - Feed Display.

Another great feature is the ability to "wrap" an external url with Joomla so that an external page appears to be part of the Joomla page. The Wrapper Item creates a shortcut to a display page that wraps an external web page. The new display page appears as a 'page within a page'. If this is an external web site, all of that site's functions, menus for example, will be operable from within the Wrapper. I currently have a wrapper on the Joomla sandbox page which displays the dev.uabgrid.uab.edu wiki in a window. Clicking the displayed window can navigate through the wiki just as it does on the external site. This wrapper can be found by going to http://lab.ac.uab.edu/~jpr/projects/rcweb/joomla/administrator and logging in, then selecting Extensions - Module Manager - My demo of wrapping external url in Joomla. It is of type mod_wrapper and all I had to do to get the uabgrid page to show up as if it were part of the Joomla site is to add the URL in the blank provided.

The Quick Start Guide is a great place to start - just follow it all the way through. It guides us through the Administrator functions including Sections, Categories, Content, and Users. Also there is context-sensitive Help available from all screens in your Joomla installation, as well as searches and other links on the official Joomla! Help Site.