Wednesday, 5 January 2011

Repost - Creating your own IBM Lotus Connections Wiki client

Rainer Vetter blogged about this earlier: -

Most social networks (Twitter, Blogger, etc.) provide Representational State Transfer (REST) APIs to allow users to extend functionality and interact with their content. In the world of Enterprise Social Networks you, as a Lotus Connections user, can create your own applications and scripts that manipulate Connections content and functionality through the REST / Atom Syndication Format (Atom) API. There are many situations in which you can do smarter work by automating some everyday task, exporting important information to another application, or importing pre-prepared data to your collaborative social web.

One of the most useful features of Lotus Connections is the Wikis application, with which you can collaboratively create pages in rich text, HTML, or Wiki text, sharing them across your network or keeping them as your personal work diaries. Using the REST API you are able to send the data from your selected Wiki page to an external editor or save it as a part of a HTML document. You can also save your Wiki content for off-line editing and synchronize it later with the on-line version.

In this article we demonstrate the possibilities of the Lotus Connections API—specifically, the Wikis application API—and guide you through the process of writing your own REST/Atom client in Python. We introduce some basic scripts, explaining them line by line, and show how to authenticate with Lotus Connections and retrieve and parse a Wiki, or Wiki page Atom entry. You will also learn how to get and post the page content, all of which is made possible by use of the REST/Atom API

Want to know more ? Check out Rainer's post ...

CAT - Lotus Connections Administration Toolkit

This was posted to the Greenhouse Catalog a few weeks back.

Administering Lotus Connections requires editing XML files and sending commands in a case sensitive scripting language using “wsadmin” - the command line interface of the WebSphere Application Server.

Lotus Connections is deployed on WebSphere application server. Many Lotus Connections administrators have a background of administrating Lotus Domino using the Domino Administrator and are not used to the command line interface of the WebSphere Application Server. Domino Administrators might therefore avoid using wsadmin as much as possible.

Executing a single administrative task in Lotus Connections with wsadmin typically requires the following steps: 1. open remote console to Connections Server, 2. open DOS-BOX, 3. launch wsadmin, 4. identify and load relevant Jython scripts separately, 5. store temporary data, 6. check out XML file, 7. edit temporary data in XML file and 8. finally check in XML file.

Sample tasks that challenge even an experienced Lotus Connections administrator include:

  • Assigning community ownership from a user that left the company to another user
  • Reassign content and rights to a user after a name change
  • Recover accidentally deleted activities
  • Assigning the rights of one user to another user
  • Assigning the rights of one user to another user

All of the above and thousands more administrative tasks can be completed using CAT with an intuitive user interface. Administrative tasks that require several consecutive steps are carried out at once.

Want to know more ? Then click here for more details ...

Tuesday, 4 January 2011

Installating IBM DB2 on Ubuntu Linux 10.10

As part of a new everything-on-one-box Lotus Connections 3.0 installation, I've updated my monster PC ( known as Orac ) to Ubuntu 10.10.

Orac has a quad core Intel CPU, 8 GB of RAM and 1.3 TB of storage, so he's a bit of a beast.



Having installed a 32-bit version Ubuntu 10.10, I was ready to go.

Oh, hang on, the free command only shows 3.X GB of RAM, despite my having 8 GB.

Ah, hang on, I forgot to install the PAE kernel - as I'm using the 32-bit distro, I need to use a kernel that can address more than 3.3 GB.

This is easy to fix - I simply ran the following command: -

sudo apt-get install linux-generic-pae

which installed three packages: -

ii  linux-generic-pae                    2.6.35.24.28                                    Complete Generic Linux kernel
ii  linux-image-2.6.35-24-generic-pae    2.6.35-24.42                                    Linux kernel image for version 2.6.35 on x86
ii  linux-image-generic-pae              2.6.35.24.28                                    Generic Linux kernel image

Now, after a quick reboot, the free command returns: -

            total       used       free     shared    buffers     cached
Mem:       8261504    5571908    2689596          0      46396    5081164
-/+ buffers/cache:     444348    7817156
Swap:      6538236          0    6538236

which is rather shiny.

So, on to DB2 ....

*NOTE* This is *NOT* a supported platform - it's merely for me to "play" with  *NOTE*

Once I had overcome my problem with the TAR command, I started the installation program: -

cd /tmp
./db2setup

which immediately failed with: -

ERROR:
   The required library file libaio.so.1 is not found on the system.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.7
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate 
  Aborting the current installation ...
  Run installation with the option "-f sysreq" parameter to force the installation.

:-(

However, as ever, Google had the answer, Google is my friend.

Antonio Cangiano has blogged here about this - the solution is simple: -

sudo apt-get install libstdc++5
sudo apt-get install libaio-dev
sudo ./db2setup

Once I did this, the DB2 installation worked like  a dream.

I *love* it when a plan comes together :-)

*NOTE* This is *NOT* a supported platform - it's merely for me to "play" with  *NOTE*

Doh!, Error "tar: .: Cannot utime: Operation not permitted" seen when expanding an archive

I saw this exception: -

tar: .: Cannot utime: Operation not permitted
tar: Exiting with failure status due to previous errors

earlier when expanding a TAR file ( DB2  9.7 as a matter of fact ) into the /tmp directory of my Ubuntu 10.10 boxen: -

cd /tmp
tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

Googling about the exception is actually telling me that TAR cannot update the access and modification times of the files within the archive.

I was running this as a non-root user.

You can guess the rest ...

When I checked the permissions of /tmp, I saw: -

drwxrwxrwt  19 root   root     4096 2011-01-04 18:22 tmp/

which suggests, to my simple mind, that I have all the right permissions, although the directory is owned by root.

Needless to say, when I ran the command "as root": -

cd /tmp
sudo tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

all was well.

I reproduced this in my home directory: -

mkdir ~/foo
chown root:root ~/foo
chmod a+w ~/foo
cd ~/foo
tar xvf /media/LenovoExternal/Products/DB297/db297linux32.tar

This suggests to me that, despite the global RWX permissions: -

drwxrwxrwx  6 root root 4096 2011-01-04 18:34 foo/

the TAR command barfs if it's asked to update the utime of files within a directory that the user does not own.

Interesting, que ?

Monday, 3 January 2011

Aide Memoire - Some useful (to me) Linux commands

Want to know what files are open ?

lsof

Want to know what files are opened by a specific process ?

lsof -p <pid>

- as an example, I've identified that WebSphere Portal is running as process ID ( pid ) 7725 so I use lsof -p 7725 to see all the files opened by that process

Want to know how large a file is ?

ls -lh

Want to see a file listing in order of modification ?

ls -ltrc

- shows the most recently modified at the bottom of the list

Want to search a binary file ?

grep --text <pattern> <filename>

or

grep -a <pattern> <filename>

- this gets around the error Binary file /opt/IBM/WebSphere/AppServer/java/bin//java matches
- I needed this to search a couple of logs files that contained some binary characters

Want to see files by type e.g. executable ?

ls -lF <filename>

- for example, this adds an asterisk to the listing to mark executable files

Want to list files without typing ls -alF ?

ll <filename>

- this is a useful little alias, as defined in ~/.bashrc

Want to know more about a process ?

Using the above example of WebSphere Portal running as process ID (pid) 7725, there are a bunch of files under the directory /proc/7725/ including: -

cat /proc/7725/status - shows memory utilisation etc.
cat /proc/7725/limits - shows various ulimits including open files etc.

- the first one was useful in confirming that my addition of ulimits -f 40000 to /opt/IBM/WebSphere/wp_profile/bin/setupCmdLine.sh had "taken" - this helped me overcome a "Too many open files" exception

WebSphere Portal Express v7 on Ubuntu Linux - sloooooooooooooooooooow

Having installed WebSphere Portal Express v7 on Linux a while back, I'd noticed an issue where it'd fail to start, instead filling the logs with exceptions such as: -

[28/12/10 19:09:31:110 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Web Content
[28/12/10 19:11:31:375 GMT] 0000001d TimeoutManage I   WTRN0006W: Transaction 0000012D2E629F6D00000005000000276FACDD0C7C3820993606C63E30166C874E766DD70000012D2E629F6D00000005000000276FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 19:11:31:377 GMT] 0000001d TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
java.util.ArrayList.indexOf(ArrayList.java:448)
java.util.ArrayList.remove(ArrayList.java:556)
java.util.Observable.deleteObserver(Observable.java:78)
org.apache.derby.impl.store.raw.data.BasePage.releaseExclusive(Unknown Source)
...

and: -

[28/12/10 19:38:21:873 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Blog Solo Template v70
[28/12/10 19:40:22:065 GMT] 0000001d TimeoutManage I   WTRN0006W: Transaction 0000012D2E7D07F000000005000000486FACDD0C7C3820993606C63E30166C874E766DD70000012D2E7D07F000000005000000486FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 19:40:22:067 GMT] 0000001d TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
org.apache.derby.impl.store.access.btree.ControlRow.getIsRoot(Unknown Source)
...

and: -

[28/12/10 20:35:31:975 GMT] 0000000f EventLogServi I   Rebuilding event log for library: Wiki Template v70
[28/12/10 20:37:32:087 GMT] 0000001b TimeoutManage I   WTRN0006W: Transaction 0000012D2EB15E7700000005000000D76FACDD0C7C3820993606C63E30166C874E766DD70000012D2EB15E7700000005000000D76FACDD0C7C3820993606C63E30166C874E766DD700000001 has timed out after 120 seconds.
[28/12/10 20:37:32:088 GMT] 0000001b TimeoutManage I   WTRN0124I: When the timeout occurred the thread with which the transaction is, or was most recently, associated was Thread[server.startup : 2,5,main]. The stack trace of this thread when the timeout occurred was:
org.apache.derby.impl.sql.execute.GenericQualifier.getOperator(Unknown Source)
...

etc.

Whilst I didn't actually resolve the issue, I simply left it running ( over the course of two days BUT with a suspend/resume somewhere in the middle ), and it sorted itself out.

Looking at the exceptions relating to org.apache.derby, I suspect that there is an issue with the Apache Derby database - I'm using the out-of-the-box version: -

[28/12/10 19:08:10:059 GMT] 00000008 InternalGener I   DSRA8203I: Database product name : Apache Derby
[28/12/10 19:08:10:068 GMT] 00000008 InternalGener I   DSRA8204I: Database product version : 10.3.3.1 - (883215)
[28/12/10 19:08:10:069 GMT] 00000008 InternalGener I   DSRA8205I: JDBC driver name  : Apache Derby Embedded JDBC Driver
[28/12/10 19:08:10:070 GMT] 00000008 InternalGener I   DSRA8206I: JDBC driver version  : 10.3.3.1 - (883215)

It may be simply that Derby cannot handle the event log rebuild process for the 10 WCM libraries that I have: -

  • Blog Solo Template v70
  • Blog Template v70
  • C_Content
  • C_Resources
  • Sample
  • TB_Catalog
  • TB_Core
  • TB_Shared
  • TB_Top
  • Web Content
I'll keep digging, and see whether I can find any relevant fixes for Derby, and report back. I'm currently looking at exceptions in derby.log in /opt/IBM/WebSphere/wp_profile/PortalServer/derby with exceptions such as: - ERROR XSDG3: Meta-data for Container org.apache.derby.impl.store.raw.data.RAFContainer4@57685768 could not be accessed at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)

*UPDATE* I note that this derby.log file is (a) marked as executable and (b) 2.3 GB ( yes, GIGABYTES ) in size. That'll make pleasant reading ...

In the meantime, if you see this, the best advice is to simply allow the rebuild to finish it's course. PS I even tried forcing a Javacore dump ( using kill -3 ) but WebSphere bravely kept running, even though I did get a Javacore logged to /opt/IBM/WebSphere/wp_profile.

Saturday, 1 January 2011

BlueJ - an interactive Java learning environment

One of my Twitter correspondents posted this a few weeks back, and I've been meaning to blog about it.

"The BlueJ environment was developed as part of a university research project about teaching object-orientation to beginners. The system is being developed and maintained by a joint research group at La Trobe University, Melbourne, Australia, and the University of Kent in Canterbury, UK. The project is supported by Sun Microsystems.

The aim of BlueJ is to provide an easy-to-use teaching environment for the Java language that facilitates the teaching of Java to first year students. Special emphasis has been placed on visualisation and interaction techniques to create a highly interactive environment that encourages experimentation and exploration.

BlueJ is based on the Blue system. Blue is an integrated teaching environment and language, developed at the University of Sydney and Monash University, Australia. BlueJ provides a Blue-like environment for the Java language.

The BlueJ project started at Monash University in Melbourne, and later split and migrated to its current locations.

BlueJ is implemented in Java, and regularly being tested on Solaris, Linux, Macintosh, and various Windows versions. It should run on all platforms supporting a recent Java virtual machine."

Check it out here.

Note to self - Firefox and local connections

 Whilst trying to hit my NAS from Firefox on my Mac, I kept seeing errors such as:- Unable to connect Firefox can’t establish a connection t...