The following script will install Alfresco Labs 3.0 on Ubuntu 8.10 JeOS. Just call it and execute it as root. You’ll have to attend to it a bit (MySQL password) but it will take a while. Make sure you are connected to the internet.

# A script to install Alfresco Labs 3.0 Stable on Intrepid Ibex
# Gregory Buchenberger
# 2009/04/10

apt-get install mysql-server \ \ \ \ \
imagemagick \ \
#pdf2swf dependencies
apt-get install libfreetype6-dev \
build-essential \
linux-headers-$(uname -r) \
zlib1g-dev \
tar -zvxf swftools-2009-02-16-1757.tar.gz
cd swftools-2009-02-16-1757
make install
#Configure MySQL
echo " * Creating Alfresco database ..."
echo " * Waiting for  MySQL root password from user..."
mysql -u root -p -e 'create database alfresco;
grant all on alfresco.* to "alfresco"@"localhost" identified by "alfresco" with grant option;
grant all on alfresco.* to "alfresco"@"localhost.localdomain" identified by "alfresco" with grant option;'
echo " * Installing Alfresco ..."
mkdir /opt/alfresco
cd /opt/alfresco
tar -xvf alfresco-labs-tomcat-3Stable.tar.gz
rm ./alfresco-labs-tomcat-3Stable.tar.gz
#MySQL java connector
echo " * Installing MySQL Java Connector ..."
cd /opt/alfresco/tomcat/lib/
tar -xvf mysql-connector-java-5.1.7.tar.gz
cp ./mysql-connector-java-5.1.7/mysql-connector-java-5.1.7-bin.jar ./
rm -rf ./mysql-connector-java-5.1.7/
rm ./mysql-connector-java-5.1.7.tar.gz
mkdir /var/alfresco
mkdir /var/alfresco/alf_data
#Init.d Script
echo " * Creating init scripts ..."
echo '#!/bin/bash
# alfresco      This shell script takes care of starting and stopping alfresco
# chkconfig: - 80 20
# Provides: alfresco
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: Alfresco Enterprise Content Management 2.1.1
# Short-Description: start and stop alfresco
NAME="$(basename $0)"
unset ISBOOT
if [ "${NAME:0:1}" = "S" -o "${NAME:0:1}" = "K" ]; then
# Path to alfresco root dir
# Path to the alfresco launch script
# Alfresco program name
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export PATH=$PATH:/usr/bin
echo $PATH
function checkpid() {
    local i
    for i in $* ; do
        if [ -d "/proc/${i}" ]; then
            return 0
    return 1
function echo_failure() {
    echo -en "\33[60G"
    echo -n "[  "
    echo -n $"FAILED"
    echo -n "  ]"
    echo -ne "\r"
    return 1
function echo_success() {
    echo -en "\33[60G"
    echo -n "[  "
    echo -n $"OK"
    echo -n "  ]"
    echo -ne "\r"
    return 0
function getIP() {
    inet=$(ip addr show dev eth0 | grep "inet")
    if [ "$inet" != "" ]; then
            set -- $inet

        echo ${1%%/*} | grep -E \([0-9]\{1,3\}.\{3\}\)[0-9]\{1,3\} > /dev/null
        if [ $? -ne 1 ]; then
                ipaddr=$(echo ${1%%/*} | sed -e s/[.]/-/g)
    if [ $ipaddr = "" ]; then
        return -1
function updateVirtDomain() {

    if [ -e $virt_server ]; then
        grep -E ^alfresco\.virtserver\.domain=\([0-9]\{1,3\}-\)\{3\}[0-9]\{1,3\} $virt_server
        if [ $? -eq 0 ]; then
            sed -i -r -e s/^${virt_server_property}=\([0-9]\{1,3\}-\)\{3\}[0-9]\{1,3\}/${virt_server_property}=${ipaddr}/ \
            sed -i -r -e s/^${virt_server_property}=/${virt_server_property}=${ipaddr}/ \
# See how we were called.
function start() {
    echo -n "Starting ${_PROG}: "
        if [ -f "/var/run/${NAME}.pid" ]; then
            read kpid < /var/run/${NAME}.pid
                if checkpid $kpid 2>&1; then
                    echo "$NAME process already running"
                        return -1
                        echo "lock file found but no process running for"
                        echo "pid $kpid, continuing"

    ###Insert start script here###
    if [ $? -ne -1 ]; then
    $_SCRIPT start
    if [ "$RETVAL" -eq 0 ]; then
    sleep 3
    pidof -s java > /var/run/${NAME}.pid
    return $RETVAL
function status() {
    if [ -f "/var/run/${NAME}.pid" ]; then
        read kpid < /var/run/${NAME}.pid
        if checkpid $kpid 2>&1; then
            echo "$0 is already running (${kpid})"
            echo "lock file found but no process running for pid $kpid"
        pid="$(pgrep -u root java)"
        if [ -n "$pid" ]; then
            echo "$0 running (${pid}) but no PID file exists"
            echo "$0 is stopped"
    return $RETVAL
function stop() {
    local STOP_VERBOSE="false"
    echo -n "Stopping $_PROG: "

    ###Insert Stop script here###
    $_SCRIPT stop
        if [ "$RETVAL" -eq "0" ]; then
            if [ -f "/var/run/${NAME}.pid" ]; then
                read kpid < /var/run/${NAME}.pid
                until [ "$(ps --pid $kpid | grep -c $kpid)" -eq "0" ] || \
                      [ "$count" -gt "$SHUTDOWN_WAIT" ]; do
                    if [ "$STOP_VERBOSE" = "true" ]; then
                        echo -n -e "\nwaiting for processes $kpid to exit"
                    sleep 1
                    let count="${count}+1"
                if [ "$count" -gt "$SHUTDOWN_WAIT" ]; then
                    if [ "$STOP_VERBOSE" = "true" ]; then
                        echo -n -e "\nkilling processes which did not stop"
                        echo -n -e "after "
                        echo -n "$SHUTDOWN_WAIT seconds"
                    kill -9 $kpid
                if [ "$count" -gt "0" ]; then
                    echo -n -e "\n"
        rm -f /var/run/${NAME}.pid
# See how we were called.
case "$1" in
        sleep 2    
        echo "Usage: $_PROG {start|stop|restart|status}"
        exit 1
exit $RETVAL' > /etc/init.d/alfresco
chmod +x /etc/init.d/alfresco
#update-rc.d alfresco defaults
update-rc.d -f alfresco start 99 2 3 4 5 .
update-rc.d -f alfresco stop 90 0 6 .
#Alfresco launch script
echo " * Creating launch scripts ..."
echo '#!/bin/sh
# Start or stop Alfresco server
# Set the following to where Tomcat is installed
# Set any default JVM values
export JAVA_OPTS="-Xms128m -Xmx512m -XX:MaxPermSize=128m -server"
if [ "$1" = "start" ]; then
elif [ "$1" = "stop" ]; then
fi' > /opt/alfresco/
chmod +x /opt/alfresco/
#Alfresco extention config
echo " * Configuring extentions ..."
echo 'swf.exe=/usr/local/bin/pdf2swf
db.url=jdbc:mysql://localhost/alfresco' > /opt/alfresco/tomcat/shared/classes/alfresco/extension/
echo 'hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect' > /opt/alfresco/tomcat/shared/classes/alfresco/extension/
echo " * Finis!"

Lewes, Delaware (PRWEB) — Wikidot Inc., developer of the popular platform has freed the code for its flagship product under the new GNU Affero General Public License version 3. The company has freed both its current Wikidot product, and the new Wikidot/2.0 product under development.

Wikidot Inc. founder and General Manager Michal Frackowiak explains, “our users want access to the code, and we want our users to get involved in the project. We believe that freeing our software is great for our community, and great for our business.” The Affero license gives users the right to modify, share, and even resell improvements to the code. Michal explains, “it’s like the GPLv3 but also requires service providers who extend our Wikidot code to share their improvements”. is growing popular with smart users who use its wiki functionality to build creative sites, quickly. Pieter Hintjens, founder of iMatix Corporation and CEO of Wikidot Inc., explains, “it used to take weeks to build a website. With Wikidot my team can make new rich sites in a matter of hours. It’s all about doing more with less.”

Through pure word-of-mouth, Wikidot now ranks as one of the most popular wikifarms, and is growing at the rate of 500 users a day. Michal Frackowiak concludes, “we deliver a quality product and a very reliable service. Our users are our best sales people.”

Software is available free of charge to everyone at

I’ve decided to take the leap. Doing business as Eightfold Consulting LLC, I’ll be helping my own clients optimize productivity, communication, collaboration, and compliance. The name “Eightfold” comes from Buddhism and represents, for me, a new way of doing business. More ahead…

After the Digitech Datagroup file is converted to .csv in Access the following code may be used to convert to a Laserfiche Import List (.lst) file.

    1 Imports Microsoft.VisualBasic.FileIO
    2 Imports System.IO.StreamReader
    3 Imports System.Text.Encoding
    4 Imports System.IO
    5 Imports System.Data.OleDb
    6 Imports System.Data.SqlClient
    7 Imports sConverter1.FormsConverter
    8 Module Convert
    9     Dim cnOleDb As OleDbConnection
   10     Dim PathDat As String
   11     Dim PathImg As String
   12     Dim PathLst As String
   13     Dim Dat As String
   14     Dim Lst As String
   15     Dim LstFile As File
   16     Dim filename As String
   17     Dim lstSavePath As String
   18     Dim dumpfile As String
   19     Dim currentRow As String()
   20     Public Function LdgZero(ByVal x)
   21         If x < 10 Then
   22             x = "00000" & x
   23         ElseIf x >= 10 And x < 100 Then
   24             x = "0000" & x
   25         ElseIf x >= 100 And x < 1000 Then
   26             x = "000" & x
   27         ElseIf x >= 1000 And x < 10000 Then
   28             x = "00" & x
   29         ElseIf x >= 10000 And x < 100000 Then
   30             x = "0" & x
   31         Else : MsgBox("Does not compute.")
   32         End If
   33         Return x
   34     End Function
   35     Public Sub OpenCSV()
   36         FormsConverter.OpenFileDialogDat.ShowDialog()
   37         If FormsConverter.OpenFileDialogDat.FileName <> "" Then
   38             PathDat = FormsConverter.OpenFileDialogDat.FileName
   39             Dat = My.Computer.FileSystem.ReadAllText(PathDat)
   40             FormsConverter.TextBoxQC.Text = Dat
   41             FormsConverter.TextBoxDat.Text = PathDat
   42             ' cnOleDb.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & PathDat & "'"
   43         End If
   44     End Sub
   45     Public Sub ConvertCSV()
   46         ' Create an instance of StreamWriter to write text to the dump file.
   47         dumpfile = "C:\dumpfile.lst"
   48         Dim sw As StreamWriter = New StreamWriter(dumpfile, False, ASCII)
   49         ' Create an instance of the TextFieldParser called DatReader
   50         Using DatReader As New Microsoft.VisualBasic.FileIO.TextFieldParser(PathDat)
   51             ' Set the field type to delimited
   52             DatReader.TextFieldType = FileIO.FieldType.Delimited
   53             ' Set the delimiter to comma
   54             DatReader.SetDelimiters(",")
   55             ' Create an array of strings called currentRow
   56             ' The array starts at currentFields(0)
   57             ' Start writng to the dumpfile
   58             sw.WriteLine("LASERFICHE IMPORT LIST")
   59             ' Execute this loop until the end of the file.
   60             While Not DatReader.EndOfData
   61                 Try
   62                     'ReadFields reads all fields on the current line, 
   63                     'returns them as an array of strings,
   64                     'and advances the cursor to the next line 
   65                     'containing data
   66                     currentRow = DatReader.ReadFields()
   67                     sw.WriteLine()
   68                     sw.WriteLine("STARTFIELDS")
   69                     ' The fist line after the STARTFIELDS directive
   70                     ' indicates the template name. The name is provided by the user.
   71                     sw.WriteLine(FormsConverter.TextBoxTemplate.Text)
   72                     ' This is customizable for the csv format
   73                     ' and represents the field values for the template.
   74                     ' For i As Integer = 1 To 2
   75                     sw.WriteLine(currentRow(1))
   76                     ' i = i + 1
   77                     sw.WriteLine(currentRow(2))
   78                     ' Next
   80                     sw.WriteLine(LdgZero(currentRow(6)))
   81                     sw.WriteLine("ENDFIELDS")
   82                     ' The document name is provided by the data file in field 6
   83                     sw.WriteLine("DOCUMENT(" & currentRow(1) & " - " & currentRow(2) & ")")
   84                     sw.WriteLine()
   85                     ' STARTLIST indicates the begining of the image file locations
   86                     sw.WriteLine("STARTLIST")
   87                     ' This loop parses data field 5 and separates the digits by 8, forms the file path and name and etc.
   88                     Do While Len(currentRow(5)) > 0
   89                         Dim PathFlr As String = Format(Int(Val(Mid(currentRow(5), 1, 8)) / 1000), "00000")
   90                         sw.WriteLine(PathImg & "\" & PathFlr & "\" & Mid(currentRow(5), 1, 8) & ".tif")
   91                         currentRow(5) = Mid(currentRow(5), 9)
   92                     Loop
   93                     sw.WriteLine("ENDLIST")
   94                 Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
   95                     MsgBox("Line " & ex.Message & _
   96                     "is not valid and will be skipped.")
   97                 End Try
   98             End While
   99             sw.Close()
  100         End Using
  101         Lst = My.Computer.FileSystem.ReadAllText(dumpfile)
  102         FormsConverter.TextBoxQC.Text = Lst
  103         FormsConverter.ButtonSavelst.Enabled = True
  104         FormsConverter.ProgressBar1.Value = 100
  105     End Sub
  106     Public Sub SaveLst()
  107         FormsConverter.SaveFileDialoglst.ShowDialog()
  108         If FormsConverter.SaveFileDialoglst.FileName <> "" Then
  109             PathLst = FormsConverter.SaveFileDialoglst.FileName()
  110             Dim sw As StreamWriter = New StreamWriter(PathLst, False, ASCII)
  111             sw.Write(Lst)
  112         End If
  113     End Sub
  114     Public Sub ImagesLoc()
  115         FormsConverter.FolderBrowserDialog1.ShowDialog()
  116         PathImg = FormsConverter.FolderBrowserDialog1.SelectedPath
  117         FormsConverter.TextBoxImageFolder.Text = PathImg
  118     End Sub
  119 End Module

Michael zur Muehlen is an Assistant Professor of Information Systems at Stevens Institute of Technology in Hoboken, New Jersey. He has been so kind as to offer a free download of his book, Workflow-based Process Controlling – Foundation, Design, and Application of Workflow-driven Process Information Systems. If you love it, and do not want to go blind reading a 300 page PDF, you can purchase it. The publisher’s site is in German and the book is priced in Euros, so good luck with that.

If you insist on going blind, like me, set your Acrobat zoom settings to “fit visible” and you might make it half way through before you eyes burn out….

It’s 9:58 pm Mountain and Google has been down now for over 30 minutes. At first I thought it was my network. All of my browsers are set to the Google home page. My search bars in both browsers are set to Google. I checked the browser, turned off the firewall (my firewall makes me paranoid), repaired my network connection, cycled the power on my cable modem (did I pay that bill?), rebooted, rebooted to a different OS, changed computers, and as a last feeble attempt to reach humanity, hard-coded the script “; into the browser address bar and….

Google was down. I’m feeling like someone that has first ventured away from AOL (..oof). Congratulations Google, you’ve got me wired in. You were once the Anti-Portal with none of the annoying flashy garbage that was being served on other more “evil” search sites. Now we have iGoogle, Talk, Maps, Documents, Email, Social Networking, the whole nine. It’s not that they weren’t available back then, they just sucked (OK, Orkut kind of sucks). Google just creeped into the scene wearing a sheep jacket and fooled us. They tempted the stalwart hacker types with “Beta” and “Lab” software and services. Gmail was an invite only service for quite a while, and has only just recently “opened” registration. However, getting an invite to Gmail was about as difficult as finding a cracked version of Photoshop.

Certainly, I deserve to feel like a fool. I can recall poking fun at the AOL crowd, the blind lead by the rich, with their “You’ve Got Mail!”, and glowing casino billboards and circus clowns and the lot. Looked more like a virus to me. My elitist sentiments made me feel superior. After all, My Google was devoted to simplicity and functionality. It was my magic carpet. Type a location and zing. What more could you want? Now, with the proliferation of databased (is that one word or two?) websites, or as we are programed to say, “Web 2.0”, I’ve realized the need for customized content, feeds, widgets, social bookmarking, and such. Hell, I’ve even grown a bit fond of the ever changing, cute little, scenes on my iGoogle banner. Did I say banner? I’m going to go shower…

The following question was recently posted on LinkedIn:

What is “Collaboration” and how is it defined relative to “Content Management” or Enterprise Content Management”? Secondarily what are the core components of “Collaboration”?

My answer:

…Enterprise content management is concerned with the efficient management of content with content being defined as any information in any form that is valuable to the enterprise. When an instant messaging session discusses business matters or an email defines policy it becomes enterprise content. Before the current technology of collaboration there were methods of documenting collaboration, such as meeting minutes, which are certainly enterprise records. I also agree that collaboration in it’s truest sense is a social phenomenon. The American Heritage Dictionary defines collaboration as “To work together, especially in a joint intellectual effort.”. The tools we use today to document collaboration are many. It is when the collaboration process produces enterprise content that it becomes a concern of ECM. Just as document capture via a scanner becomes a vital part of an ECM system, so email, IM, web forms, and white board sessions become part of an ECM system.

Our next AIIM meeting is planned for October. Details follow:

Rocky Mountain AIIM Lunch Seminar
Denver, Colorado – Thursday October 4, 2007

Tim Johnson, Director
Gardner Group

About the Presentation

Document management and Collaboration are in the top 10 of the CIO’s investment agenda. The marketplace is shifting from best of breed application vendors to basic content services infrastructure vendors. Find out about the content management topics that are emerging versus those in full productivity. Review the topics that will become important to our careers in managing the future content services.

About the Speaker

Tim Johnson, as a Director at Gartner Consulting, has 25 years of experience in IT and focuses on enterprise content management, IT strategy, application portfolio analysis, and vendor selection at Gartner. Mr. Johnson has a variety of industry vertical experience including: insurance, government, financial services, healthcare, and construction engineering. Mr. Johnson is a member of the Gartner Content Management research community. He joined Gartner in 2000.

About the 2007-2008 Seminar Series

In dozens of informal conversations with participants of prior AIIM seminars, we have heard many organizations, public and private, are considering either beginning an ECM effort from scratch or refreshing the technology for an effort already underway. A common question in these conversations is: “we’re not going to build this ourselves, so how do we do a good job of managing the acquisition and implementation of something this complex?”

Your local AIIM Chapter board has put together a series of seminars to address just this set of topics, from the initial RFP issuance, through award and implementation. This process includes a Technology Trends seminar by Gartner Group to let RFP teams know what is in the market today and what to expect in the near future.

The implementation phase includes policy topics, such as record retention and taxonomy, as well as technology topics on what to look for in archive-quality media, and the all-important change management phase, or bringing staff and customers alike safely and effectively into the brave new world you are creating.

All of the sessions are run by practicing professionals who are and have been deep in the middle of each of the topics presented. No theory here; just practical experience.

Directions to the Sheraton 4 Points Hotel at I-25 and Hampden

From Downtown or the Tech Center, take Exit 201 onto Hampden..
Head EAST on Hampden less than a ¼ mile, then turn NORTH onto Locust.
The Sheraton 4 Points is on your immediate left.

Google It


Registration begins at 11:30AM, with the presentation scheduled for 12 noon.


AIIM non-Members: $30 (Click HERE for PayPal)
AIIM-Members: $20 (Click HERE for PayPal)

(Note that it is now VERY easy to pre-pay using your credit card at our
PayPal Site – See the section ‘Don’t have a PayPal account?’)
(checks and cash accepted at the door)

A buffet lunch will be served
Seating is limited, so please email me for reservations

About AIIM

For over 60 years, AIIM (The Association for Information and Image Management) has been the leading international organization focused on helping users to understand the challenges associated with managing documents, content, and business processes. AIIM is international in scope, independent, implementation-focused, and, as the representative of the entire ECM (Electronic Content Management) industry – including users, suppliers, and the channel – acts as the industry’s intermediary.

The calendar for this and all other Rocky Mountain AIIM meetings can be found on the chapter website.

S Corporation Inc. will be hosting three free morning seminars along the Colorado Front Range in October. The seminars will last from 8am to noon and breakfast will be provided. The dates and locations are as follows:

Colorado Springs – October 3rd, 2007

Holiday Inn Airport
1855 Aeroplaza Drive
Colorado Springs, CO 80916

Fort Collins – October 4th, 2007

Hilton Fort Collins
425 W. Prospect Road
Fort Collins, CO 80526

Denver/ DTC – October 5th, 2007

South Denver Maggiano’s
7401 South Clinton Street
Englewood, CO 80112

If you are interested in attending please email me for a reservation.