• Get the Flash Player to see the slideshow.
  • Categories

  • Authors

  • Great Quotes

    Ruby inherited the Perl philosophy of having more than one way to do the same thing. I inherited that philosophy from Larry Wall, who is my hero actually. I want to make Ruby users free. I want to give them the freedom to choose. — Yukihiro Matsumoto - inventor of Ruby

Get in touch...

To have a chat about
your CMS needs...

Call us 0207 193 2014
or
Email us on

Author Archive

Webmonitor and Travelputer iphone apps

Wednesday, September 23rd, 2009

I wanted to thank everyone who we met yesterday at the adtech event and also provide a little more information around a couple of the iphone apps that I would have discussed with you.

We have the pleasure of working with Andrew Rennard, a very gifted iphone craftsman who has recently launched the following two application:

Webmonitor – a website monitoring and alerting application

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=324305556&mt=8

Travelputer – a gps journey tracker specially designed for cyclists

http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=327568760&mt=8

I hope you enjoy these applications as much as we do and I look forward to discussing more about them with you soon!

Tips for Exhibitions

Thursday, July 16th, 2009

As we have done a couple of pretty good exhibitions recently, namely the Internet World and Marketing Week Live,
I wanted to share a couple of learnings we gained from how to best exhit at these events.

Firstly we got these great Roller Banners that are available now, we got ours fromhttp://www.discountdisplays.co.uk/html/budget-rolla.html
and were happy with the quality and delievery.

Take lead capture forms and a stapler to staple a prospects business card to the information you have gathered from them.
Don’t use the electronic readers, they are impersonal and don’t let you freely capture what your prospects requirements are.

A little further note on “Lead capture forms” I found these are useful to be printed in A4 before you attend the exhibition and contain the following fields for capture:

Name,
Company,
Telephone,
Email,
Date you met,
Place of Meeting,
Temperature of Interest with values of  ”Sizzling”, “Hot”, “Warm”, “Cool” and “Cold”.
The agreed next steps from your side
Notes

These sheets are essential and will form a great addition to your CRM system.

Always contact “Sizzling” and “Hot” leads within 24 hours of meeting them.

Smile :)

Always be standing up, it really does not look good to be sat down, far less people will approach and talk to you.

You will definetly get a lot of people trying to sell to you, don’t let them waste your time when you could be speaking to prospects, get rid of them quickly and politely.

Don’t hand out flyers to everyone passing by your stand!

This is a waste of precious materials and also your time. Wait for people who are interested in what your stand has to offer to come over to you.

When someone walks by and appears interested, ask them opening questions to get your prospects talking.
You should prepare some standard questions in advance.

Simple questions like “Do you have a website Sir/Madam?”, “Are you happy with the way your site is currently managed?”.

Once you get someone talking you can then find out their problems and how you can help them.

Once you have had a good discussion with someone, always ask for their contact details to complete in your lead capture form.

Always agree the next steps with someone. For example, “I will drop you an email next week to agree a suitable day to meet in your office…”

Keep conversations short and to the point. Give the person your full attention when speaking with them, don’t be distracted.

Always follow up with hot prospects as soon as possible, the longer you wait the cooler the lead becomes.

Enjoy the show :)

Business Development Tips

Wednesday, June 24th, 2009

I have been doing lots of business development work recently and thought I would share some of the learnings here.

My top learnings, almost in an order :)

1. Listen more than talk
2. Its all about relationships
3. Make someone else successful and you will be successful
4. Be positive everyone likes a winner
5. Be humerous everyone likes to laugh
6. Be memorable, be different, be relevant
7. Be brief and to the point
8. Always suggest next steps
9. Do as you say, follow up
10. Enjoy life and don’t be too hard on yourself

Hope you find them relevant to your life.

How to tell virtual memory on Solaris

Monday, June 15th, 2009

Problem

You want to know how much Virtual Memory is available on your Solaris server.

Solution

You simply need to run the command “ulimit -a”.

This should output something like the below,  in this you can see the reference to the Virtual Memory.

core file size (blocks)     unlimited
data seg size (kbytes)      unlimited
file size (blocks)          unlimited
open files                  1024
pipe size (512 bytes)       10
stack size (kbytes)         8192
cpu time (seconds)          unlimited
max user processes          29995
virtual memory (kbytes)     unlimited

Targeting Content Rule Error

Thursday, March 26th, 2009

A Problem

I came across the error below yesterday when editing a content page and spent some time working out what was wrong.

We also found that our Content Deployments to the live website started failing with the errors I mention at the bottom of this page.

Our Solution

You probably have a corrupt Targeting Rule that needs to be removed or fixed.

Check if you have added a new rule to a page in the TeamSite system before you had this error.

Once you find the rule that is most likely causing the issue you need to do the following:

1. Delete or repair the rule concerned

2. If you delete the rule make sure you remove it from all the pages it was implemented it

3. Submit the default.sitemap file – this will promote the changes from step 1

4. Now submit the pages that were failing and you should be successful

It is worth noting that in our case the “broken” rule was one whose definition was “if the user is null”.

The content rule that was at fault was the one below, notice the “User is null”:

If you have this error in your Interwoven Targeting system then I hope this article is of help to you.

If you would like to about Content Targeting in your business please call us on 0207 193 2014 or email info@littleforest.co.uk

Errors seen in logs

The following are the various errors seen in logs at the time:

The JavaScript error seen in the LiveSite page:

“An error occured while saving the page. Contact your system administrator for details.”

In the workflow task screen:

Error during task execution: Production Deployment, message: failed to process segment rule apps *** START STACK TRACE *** com.interwoven.livesite.rules.ilog.RuleAppUtils.getContentRuleAppArchives
(RuleAppUtils.java:239) com.interwoven.livesite.rules.ilog.RuleAppUtils.getContentRuleApps(RuleAppUtils.java:196) com.interwoven.livesite.opendeploy.impl.OpenDeploymentServiceAdapter.buildDeployment(OpenDeploymentServiceAdapter.java:154) com.interwoven.livesite.opendeploy.impl.OpenDeploymentServiceAdapter.buildDeployments(OpenDeploymentServiceAdapter.java:222) com.interwoven.livesite.opendeploy.impl.OpenDeploymentServiceAdapter.buildDeployments(OpenDeploymentServiceAdapter.java:55) com.interwoven.livesite.deployment.impl.BaseDeploymentService.buildDeploymentList(BaseDeploymentService.java:213) com.interwoven.livesite.deployment.impl.BaseDeploymentService.deployFiles(BaseDeploymentService.java:85) com.interwoven.livesite.workflow.task.DeploymentTask.deployFiles(DeploymentTask.java:82)
com.interwoven.livesite.workflow.task.DeploymentTask.handleExecution(DeploymentTask.java:51) com.interwoven.livesite.workflow.task.AbstractUrlExternalTask.execute(AbstractUrlExternalTask.java:83)
*** END STACK TRACE *** [a389045: 3/23/09 12:11:44 PM ]

In the server side /usr/iw-home/ilog/jboss/server/default/log/server.log:

2009-03-20 14:13:02,772 WARN  [org.apache.commons.digester.Digester] [ConverterRule]{faces-config/converter}
Merge(null,java.math.BigDecimal)
2009-03-20 14:13:02,783 WARN  [org.apache.commons.digester.Digester] [ConverterRule]{faces-config/converter}
Merge(null,java.math.BigInteger)
2009-03-20 14:13:02,993 WARN  [org.apache.commons.digester.Digester] [NavigationRuleRule]{faces-config/navigation-rule} Merge(*)
2009-03-20 14:13:51,634 INFO  [STDOUT] Mar 20, 2009 2:13:51 PM ilog.rules.teamserver.model.IlrMessages getString
WARNING: no localized String for this key : RA_description_default_package_key
2009-03-20 14:13:51,711 INFO  [STDOUT] [Fatal Error] :-1:-1: Premature end of file.
2009-03-20 14:13:51,712 INFO  [STDOUT] Mar 20, 2009 2:13:51 PM ilog.rules.shared.util.IlrXmlUtil parseXmlFile
WARNING: Premature end of file.
2009-03-20 14:13:52,622 INFO  [STDOUT] Mar 20, 2009 2:13:52 PM ilog.rules.teamserver.ejb.ruleset.IlrRulesetArchiveGenerator
generateRulesetArchive
INFO: ——————————-
2009-03-20 14:13:52,623 INFO  [STDOUT] Mar 20, 2009 2:13:52 PM ilog.rules.teamserver.ejb.ruleset.IlrRulesetArchiveGenerator
generateRulesetArchive
INFO: ====> Overall time: 32007ms

From the server side servletd_out.log:

select = 0
NULL TASK
2009-03-20 14:22:44,056 ERROR com.interwoven.livesite.workflow.task.DeploymentTask – execute: error during task execution:
Production Deployment, message: failed to process segment rule apps
java.lang.RuntimeException: failed to process segment rule apps
at com.interwoven.livesite.rules.ilog.RuleAppUtils.getContentRuleAppArchives(RuleAppUtils.java:239)

etc etc etc…

Caused by: com.interwoven.livesite.rules.RuleException: java.lang.ClassCastException: ilog.rules.teamserver.brm.ra.IlrRAElementError
at com.interwoven.livesite.rules.ilog.TeamServerDal.getRuleSet(TeamServerDal.java:743)
at com.interwoven.livesite.rules.ilog.TeamServerDal.getRuleAppArchive(TeamServerDal.java:674)
at com.interwoven.livesite.rules.ilog.RuleAppUtils.buildContentRuleAppArchive(RuleAppUtils.java:281)
at com.interwoven.livesite.rules.ilog.RuleAppUtils.getContentRuleAppArchives(RuleAppUtils.java:227)
… 51 more
Caused by: java.lang.ClassCastException: ilog.rules.teamserver.brm.ra.IlrRAElementError
at com.interwoven.livesite.rules.ilog.TeamServerDal.getRuleSet(TeamServerDal.java:725)
… 54 more

If you would like to about Content Targeting in your business please call us on 0207 193 2014 or email info@littleforest.co.uk.

Keeping XML Tags in XSL

Friday, February 27th, 2009

Problem

In your XSL you want to grab an XML document “as is” but the XSL keeps stripping the XML tags and only returning data values to you.

My LiveSite Component was connecting to a XML WebService and in one case I only wanted to retrieve all the XML and return it to my XSL.

I was struggling as the XSL was removing all the tags and leaving just the contents of the tags.

Here is what I did:

Solution

Use XSL Copy – your XSL should look like:

  <xsl:template match="/"> 
          <xsl:copy-of select="/"/> 
  </xsl:template>

Important

You must set your Page Settings to “XML” in order to see this correctly – you will not be able to Preview correctly in the LiveSite component development branch as you have no control over the page settings here.

Setting up Derby for the Interwoven Event SubSystem

Saturday, January 10th, 2009

Problem

You are trying to setup Derby database for use with the Interwoven Event SubSystem.

You have followed the installation instructions manual

You get the following error in the eventsubd.log when starting the Event Subsytem:
“Cannot create PoolableConnectionFactory”.

Potential Solution

Check where the testdb database file has been created as the default in the Interwoven instructions creates the db file in your current working directory. Derby looks for the database by default in it derby/bin

Other possible problems:

1. Check the database exists by connecting to it and doing a “show tables” as per the Interwoven instructions
2. Check the driver exists and is in the correct location (/usr/iw-home/eventsubsystem/lib/derbyclient.jar – is “374965″ in size for TS 6.7.1)

3. Check your configuration in “/usr/iw-home/eventsubsystem/conf/jmsconfignew.xml”

Should be as follows:

<DatabaseConfiguration>
<RdbmsDatabaseConfiguration
driver=”org.apache.derby.jdbc.ClientDriver”
url=”jdbc:derby://localhost:1527/testdb”
user=”usr”
maxActive=”10″
maxIdle=”5″
minIdleTime=”1800″
evictionInterval=”3600″ />
</DatabaseConfiguration>
ERROR

EVENTSUBD_HOME is set to /usr/iw-home/eventsubsystem
OpenJMS 0.7.6.1
The OpenJMS Group. (C) 1999-2004. All rights reserved.
http://openjms.sourceforge.net
org.exolab.jms.server.ServerException: org.exolab.jms.persistence.PersistenceException: org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory, cause:

java.sql.SQLException: The connection was refused because the database testdb was not found.
at org.apache.derby.client.am.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.client.am.SqlException.getSQLException(Unknown Source)
at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
at org.apache.commons.dbcp.DriverConnectionFactory.createConnection
(DriverConnectionFactory.java:82)

Caused by: org.apache.derby.client.am.DisconnectException: The connection was refused because the database testdb was not found.

Solution to – ILOG Teamserver is currently unavailable

Saturday, January 10th, 2009

Problem

You are seeing the following error in the TeamSite user interface and in the server logs:

“ILOG Teamserver is currently unavailable. Contact your system administrator for details.”

Potential Solution 

You may only need to restart the Interwoven Rules Service. 
You can do this on UNIX by the following commands:

 /etc/rc3.d/S15iw.rules stop

 /etc/rc3.d/S15iw.rules start 

Full Error Message 

com.interwoven.livesite.common.service.ServiceUnavailableException: ilog.rules.teamserver.model.IlrConnectException: javax.naming.CommunicationException: Could not obtain connection to any of these urls: localhost:1099 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to connect to server localhost:1099 [Root exception is javax.naming.ServiceUnavailableException: Failed to connect to server 

LiveSite JCS Cache Settings

Saturday, January 10th, 2009

Thanks to Steve Russell from Realise for the below configurations for JCS Cache.

Here’s the properties you can set in JCS via cache.ccf in “./profiles/base/installedApps/nd_cellname/LiveSite Run Time.ear/iw-runtime.war/WEB-INF/classes/”…

JCS details here (http://jakarta.apache.org/jcs/getting_started/intro.html)

Property

Description

MaxObjects

The maximum number of items allowed in memory. Eviction of elements in excess of this number is determined by the memory cache. By default JCS uses the LRU memory cache.

MemoryCacheName

This property allows you to specify what memory manager you would like to use. You can create your own memory manager by implementing the org.apache.jcs.engine.memory.MemoryCache interface. Alternatively, you can extend the org.apache.jcs.engine.memory.AbstractMemoryCache class. Several different memory caches are available: two LRU implementations, an LFU, and an adaptive replacement algorithm.

UseMemoryShrinker

By default, the memory shrinker is shared by all regions that use the LRU memory cache. The memory shrinker iterates through the items in memory, looking for items that have expired or that have exceeded their max memory idle time.

MaxMemoryIdleTimeSeconds

This is only used if you are using the memory shrinker. If this value is set above -1, then if an item has not been accessed in this number of seconds, it will be spooled to disk if the disk is available. You can register an event handler on this event.

ShrinkerIntervalSeconds

This specifies how often the shrinker should run, if it has been activated. If you set UseMemoryShrinker to false, then this setting has no effect.

DiskUsagePattern

SWAP is the default. Under the swap pattern, data is only put to disk when the max memory size is reached. Since items puled from disk are put into memory, if the memory cache is full and you get an item off disk, the lest recently used item will be spooled to disk. If you have a low memory hit ration, you end up thrashing. The UPDATE usage pattern allows items to go to disk on an update. It disables the swap. This allows you to persist all items to disk. If you are using the JDBC disk cache for instance, you can put all the items on disk while using the memory cache for performance, and not worry about lossing data from a system crash or improper shutdown. Also, since all items are on disk, there is no need to swap to disk. This prevents the possibility of thrashing.

OpenDeploy Error – User name from csContextString is blank

Saturday, January 10th, 2009

Problem

Had a really tricky problem where workflow was not calling OpenDeploy and giving an error “User name from csContextString is blank”.

Potential Solution

Do the following

1. /usr/iw-home/bin/iwsessionkeygen and then check in /usr/iw-home/private/etc that the passphrase file has a recent time stamp

2. Run the new version of this /usr/iw-home/CSF/AccessService/bin/iwsharedkeyfilegen

3. Then re-start the iwaccess service in /etc/init.d/iwaccess stop and /etc/init.d/iwaccess start

4. /usr/iw-home/bin/iwreset -a

Errors

The below was in the workflow errors:

API: 2008-12-03 17:11:35 GMT+00:00 ***WARNING – User name from csContextString is blank or null,
request app: APP_WORKFLOW

OpenDeploy Status Unknown. FAILED. Locating OpenDeploy service. Got OpenDeploy service
***ERROR – Caught exception in runIt(). Details: REQUEST_DENIED message:
REQUEST_DENIED Request denied: NO_USER_NAME Item: ,
Details: Got blank or no user name from CSContextString at
com.interwoven.deployapi.deploy.IWODServerAction.
getODAPIServerVersion(IWODServerAction.java:1437)
at com.interwoven.deployapi.deploy.IWODServerRemoterImpl.
getODAPIServerVersion
(IWODServerRemoterImpl.java:363) at

etc…

com.interwoven.ui.teamsite.workflow.task.URLExternalTaskCommand.execute
(URLExternalTaskCommand.java:109) at com.interwoven.ui.base.impl.command.
CommandHandler.doExecuteCommand(CommandHandler.java:917) at
com.interwoven.ui.base.impl.command.CommandHandler.
tryRunCommandDescriptor
(CommandHandler.java:753) java.lang.Thread.run(Thread.java:595)

Please check that the OpenDeploy server is running. [wasadm: 12/3/08 5:59:20 PM ]

etc…