Archive for the ‘Applications’ Category

Typo3 and RealURL

Saturday, October 30th, 2010

I use various sites with Typo3 and RealURL extension. Mysteriously, it sometimes happens that links at the frontend do not work after updating Typo3 itself or any extension. Problem detection is very complicated because RealURL has a very hidden and strange behaviour. Even worse: it seems that there is no rule on what links can be decoded and what not.

Main things you have to do if you get “segement X ist not a postVarSet variable” error:

  1. Make sure you are logged off from the backend
  2. Make sure you give RealURL a chance to fill the path cache by clicking in your frontend from top to bottom!

What internally happens is as follows: Once the path cache is emptied, it will be filled again only when you are logged off from backend. I have no idea why RealURL implemented this feature but it has a special condition check before updating the cache that makes sure the user is not logged into the backend.

Furthermore, cache update happens only when “Encoding” takes place (ID to path translation). That means that you will get the postVarSet error when you try to get a page from your frontend before RealURL did encode it. That’s why you have to click “down” your website from top to bottom, so all links are created before they are ever requested by your browser.

So next time just follow this two simple rules and your RealURL extension will behave as expected.

CSV Utility Package V1.0.2 released

Tuesday, October 20th, 2009

I made some fixes and enhancements to the CSV Utility Package:

  • Bug #9: Spaces before and after a value are treated correctly now
  • Enhancement #10: CSVReader forwards comment lines to callback objects
  • Enhancement #11: A test script was integrated to check major features
  • New Class: CSVUtils offers methods for copying JDBC results and JTable data to CSVWriters

You can download the latest release here.

CSV Utility Package V1.0.1 released

Monday, September 28th, 2009

A new update of my CSV Utility Package was released. It contains some fixes and enhancements:

  • Build system creates tar archive
  • Fixed Bug #2: NullPointerException in CSVReader class
  • Fixed Bug #4: Multiline values fail when a line looks like a comment
  • Enhancement #7: Excel Fix: first column of first row must not start with “ID”
  • Enhancement #8: Add row and column count

You can download the latest release here.

Installing Bugzilla

Wednesday, May 20th, 2009

This was weird. I lately tried to install Bugzilla on one of my virtual hosts but it’s testserver.pl script failed with:

Use of uninitialized value in pattern match (m//) at ./testserver.pl line 110.
Use of uninitialized value in pattern match (m//) at ./testserver.pl line 110.
TEST-FAILED Webserver is not executing CGI files.

The Apache error log told nothing more than

Premature end of script headers: testagent.cgi

All Google lookups failed to solve my problem. Although I had the impression that my CGI setup was somehow wrong, I couldn’t find the reason. Then I intensively checked the VirtualHost directive. The server uses a Plesk 8.0 installation for setting up hosts. The default configuration for virtual hosts with CGI there is to include a “SuexecUserGroup” directive. After removing it, the Bugzilla installation succeeded.

So you might wanna give it a try ;)

Integrating SpamAssassin with qmail: Part 2

Wednesday, December 24th, 2008

This is a series of articles covering integration of SpamAssassin with qmail on a Linux box.

Part 1: Installing and Configuring SpamAssassin
Part 2: Marking email as spam

Part 2: Marking email as spam

Now, that we setup SpamAssassin to run as a continous process, we are able to change the qmail system to feed all emails into the server daemon. We need the root folder of qmail first. This is usually at /var/qmail. However, you better check with your installation first.

Create a file “qmail-queue.spamd” in subfolder bin that contains a single line:

/usr/bin/spamc -U /tmp/spamd_full.sock| /var/qmail/bin/qmail-queue.orig

Adapt the paths if necessary. Next step is to rename the existing qmail-queue program in subfolder bin. Name it “qmail-queue.orig”, as we have already used that pathname in our script. Make sure that all file permissions of qmail-queue.orig and qmail-queue.spamd match exactly the original qmail-queue binary.

Last step is to replace the existing qmail-queue binary by a link to our qmail-queue.spamd script. That’s it. All your emails do now pass the SpamAssassin daemon. You can check this by viewing all headers of emails passing your system. They should now contain additional SpamAssassin lines.

This is not the end of the story. We just marked email so far as spam or not. The will not get filtered out of the boxes, yet. This however is the topic of part 3 of this series.

Integrating SpamAssassin with qmail: Part 1

Sunday, November 23rd, 2008

This is a series of articles covering integration of SpamAssassin with qmail on a Linux box.

Part 1: Installing and Configuring SpamAssassin
Part 2: Marking email as spam

Part 1: Installing and Configuring SpamAssassin

There are quite a few numbers of HOWTOs at the internet about installing the software itself. So I won’t go very much into details but rather point you to some locations where you can find sufficient information.

You’ll find the latest software package at Apache’s SpamAssassin Homepage. Unpack the archive, preferrably at /usr/local/src. It will produce a directory Mail-SpamAssassin-XXXX. Change into that directory and read the INSTALL file to learn about special features when building the spam recognition tool. Usually you need to issue three commands:

perl Makefile.PL
make
make install

That’s it. Be aware that you might need to enhance your Perl distribution by additional modules from CPAN.

The last step to perform is to make a tool called spamd running continously on your box. We will first configure the daemon according to your Linux distribution. On latest SuSE editions this is done by a file /etc/sysconfig/spamd:

## Path:           Network/Mail/Spamassassin
## Description:    Arguments for the spam daemon
## Type:           string
## Default:        "-d -c -L"
## ServiceRestart: spamd
#
# The arguments passed to spamd.
# See spamd(1) man page.
# Default is "-d -c -L"
SPAMD_ARGS="-d -c -u spamd -g spamd --socketpath=/tmp/spamd_full.sock"

We introduced a user and group called “spamd” here. You might need to configure them first on your system.

Finally, you can add according startup commands in your /etc/rc.d directory to make spamd starting at system boot. Here is a script that I use.

Part 2 of this series will concentrate on the issue how to pass each mail into SpamAssassin.

Reset Firefox’ Zoom Settings

Monday, October 27th, 2008

You propably got already used to Firefox’ zoom feature. Firefox 3 introduced a new setting that enables it to remember the zoom value when you visit a website. Whenever you re-visit the domain, the previously used zoom level will be re-applied.

If you don’t like this feature, open the about:config page and toggle the boolean setting browser.zoom.siteSpecific to false.

Of course, you can always use Strg-0 to reset the zoom to the default value.

Firefox 3

Wednesday, June 18th, 2008

It is finally there. You can download the browser’s latest version at Mozilla Homepage. There is also a very good introduction to the new features of Firefox 3.

TYPO3: Getting content from another page

Monday, December 31st, 2007

This is a TYPO3 code snippet that will replace a marker with content from a specific page. I use this for common content on footers and outer columns.

page.10.marks.FOOTER < styles.content.get
page.10.marks.FOOTER {
      select.where = colPos=3
      select.pidInList = 2
}

colPos=3 will get the content from the border column (0 is center, 1 is left, 2 is right column). pidInList identifies the page (or pages) that you want to fetch the content from.

Replacing TYPO3 Marker by Page Title

Friday, December 28th, 2007

This short TYPO3 script snippet will replace a marker in your template by the current page’s title:

page.10.marks.MYMARKER = TEXT
page.10.marks.MYMARKER.field = title