Two surprising TYPO3 Performance Tips for Extension Developers

I recently did a performance analysis of a TYPO3 installation. Just from looking at the code it could not spot any major performance problems so I dug out the big guns and had a look at the code with xhprof.

As a five year TYPO3 extension developer who has seen quite a few things I was really surprised to find two significant things that I have not known about before.

keep on reading

Fix missing translations in TYPO3 and Snowbabel

For some years the language codes TYPO3 used for translations where based on the ISO country codes - not the ISO language codes! That was changed with TYPO3 4.6. That's why it might happen that translations go missing on the website if you do not move the language files correctly after updating from TYPO3 4.5.

This issue gets even more confusing if you use snowbabel. For some time they also used the faulty language codes from TYPO3 4.5, but then switched to the new labels in version 3.6.2. There you can also lose your translations if you don't take the proper actions.

keep on reading

Check vagrant version in Vagrantfile

To access the used version of vagrant in a vagrant file you can use the (undocumented) Vagrant::VERSIONconstant. Combine this with Ruby's own Gem::Version and you can create a nice switch to handle deprecated configuration in the Vagrantfile.

Here is an example:

if Gem::Version.new(Vagrant::VERSION) >= Gem::Version.new('1.2')
  share_folder_options = {:create => true, :nfs => false, :mount_options => ['dmode=777','fmode=777']}
else
  share_folder_options = {:create => true, :nfs => false, :extra => 'dmode=777,fmode=777'}
end

keep on reading

Empty IRC chat roomlist in Opera

Operas IRC client is not too nice when it comes to error reporting. I tried to connect to freenode using Opera 12.12, but Opera took forever to load the roomlist, then obviously ran into a timeout and showed "0 rooms".

Unfortunately there was no other error message.

keep on reading

InnoDB: 1118 Row size too large

I'm currently working on a project where users can create a quite extensive profile. This contains about 20 free text fields.

When the profiles get too big InnoDB might show the following error:

1118 Row size too large. The maximum row size for the used table type, not counting BLOBs, is 8126. You have to change some columns to TEXT or BLOBs

What seemed to be an easy to fix problem took me quite some time to figure out.

keep on reading

Open "Link to External Url" in new tab by default in TYPO3

In TYPO3 you can create a pages of the type "Link to External Url". Those pages appear just like normal pages in the navigation, but link to the absolute url given configured for the page. Links to those external pages are generated just like any link to a TYPO3-internal page. This leads to the kind of counter-intuitive behavior that these pages are opened in the same browser tab even if config.extTarget = _blank is set.

I was looking for a solution to open all external pages in a new tab. The bad news is: There is no built-in way to do that, but depending on your needs there are some fixes. Here are five solutions I found in order of increasing complexity.

keep on reading

Local mailserver for development

Debugging emails in an application is usually very tedious. Some frameworks and libraries try to help you with debugging, but even the best tools usually fail when it comes to batch sending mails.

The best way to debug emails on your local development machine is having a small mailserver installed that does not actually send mails in the wild, but collects them locally.

keep on reading