Disable SAP GUI sound

If you’ve ever worked with SAP, the chances are you have been “amazed” by its GUI more than once.

Besides a usability experience dating back from the first half of the previous century, the default sounds on every interaction with the GUI can be very anoying (at a minimum).

How to disable it:

  • Fire up the GUI and sign in.
  • On the main toolbar, click the last icon (Adjust local layout – what did you expect).
  • In the dropdown menu, select the second option (Configure New Visual Design… – of course).
  • Select Sound – Off.

Once again, it proved you should really stay away from the alcohol. Looking for something like “Settings” under de main “System” menu… you s*****.

Indexes on multiple columns in MySQL

When optimizing queries, you don’t need to be reminded that indexes play an important role.

Something to remember though: in real-world examples a multi-column index often outperforms multiple indexes.
So it can be worth changing something like:

INDEX `index1`(`column1`),
INDEX `index2`(`column2`)

to

INDEX `index1`(`column1`, `column2`)

MySQL 5.0 introduced an internal method called “Index Merge” which merges multiple indexes when querying a table (if applicable) but I haven’t seen this being used that often. On the contrarry, MySQL often picks one of the indexes and in these scenario’s it is especcialy usefull to have one multi-column index.

As always: use EXPLAIN to see what can be improved.

Search keyword tagcloud

Ever wondered what the prominent keywords were that your visitors use to reach your site?

Google Analytics will happily show you those. With the amount of visitors per keyword of course (amongst many other metrics).

But what if you wanted to know which separate words were most used throughout all search queries? Create a tagcloud:

  1. Go to the Traffic sources >> Keywords report.
  2. Be sure to select a good amount of visits by stretching the date range to e.g. a year.
  3. Append &limit=50000 at the end of the URL. This is some hack to get all keywords in the export and be sure to append it to the end, not before the hash (#) character or anything.
  4. Click the export button at the top of the report and click CSV.
  5. Open the file in an application that understands the standard CSV-format. I have to open the file in a text-editor and replace all comma’s with semicolon’s before I can open it in Excel.
  6. Copy all keywords (not the numbers behind them or the general data above them).
  7. Visit a tagcloud creation website and paste the data.

You can argue that the number of visitors per keyword is not taken into account but in the end that may not be what you are looking for. In case you want to know which keywords are most often used in different search phrases, this creates a pretty good image.

Below is the result of all searches that reached this website in 2009:


(click on the image to enlarge)

Thanks to Avinash Kaushik for another great post about Analytics Insights.

Take the risk

Want to start your own business and work from home?

Inc.com published a list of 9 examples of people who started a successful business from their home.

One of them is a self employed insurance broker who offers live webcam chat through his website. You do not need to know anything about insurance to imagine this can have a positive effect on customers who do not have time to make an appointment with him.

Enjoy the read!

Looking back on 2009, outlook on 2010

Like everyone has done these days and some (like me) are still doing: a random review of 2009 and a preview on 2010.

2009 (in order of magnitude)

  • My first ever energy-efficient lamp broke (I must have been using it about 7 or 8 years). So these things can die!
  • The basement scene with John Malkovich and the fitness owner in Burn After Reading was probably the best movie scene I ever saw.
  • Together with Jan from JAMA Webcreations I built the most user friendly content management system in the world. Be sure to contact Jan for a demo and partner with us.
  • I got hooked (if I wasn’t already) on a lot of Google applications: Analytics, Apps, AdWords, Mobile Gmail and Wave.

2010

  • While I must admit it isn’t that hard as some people want it to be, I will stop testing projects in Internet Explorer 6. It doesn’t make that big of a difference since IE 7 often has the same quirks.
  • I plan to move all hosting to Linode. Their service just can’t get better. E-mail accounts will probably be handled by Google Apps.
  • I hope to (re)launch a considerable amount of the projects I work on (on a Linode of course).
  • Maybe I should also try to get the Zend Framework certification but I also want to take the Google AdWords and Analytics exams.

Have fun in 2010!

Redirecting in Zend Framework

While working with Zend Framework, you must have asked yourself “Is there an easy way to redirect to another controller/action?”

Well, there is. When redirecting inside a controller, the first method we think about will probably be $this->_redirect(). This is quick, but it only accepts a URL. This means you have to create a URL to a specific route yourself. Either with the $this->view->url() URL view helper (which is not a pretty sight) or by assembling a route.

Yes, there is also $this->_forward() which sends your request to another controller/action, but it also goes through all init() logic again and forwarding isn’t suited for every situation (e.g. after a form POST).

But there is a far more flexible way: the less known Redirector action helper. Actually, $this->_redirect() uses it, but it provides easier ways to redirect to a specific route:

$redirector = $this->getHelper('Redirector');
$params = array(
	'controller' => 'my-controller',
	'action' => 'my-action',
	'other-param' => 'value'
);
$redirector->gotoRoute($params, 'my-route', true);

Its usage will be self explanatory (actually the parameters are the same as the URL view helper), but I want to add a little note about the last parameter (which the URL view helper also accepts): if true, it “resets” your route, meaning all other parameters currently in your Request object are removed. This implies that when setting it to false (which is the default) parameters you have in your “current URL” will be reused (unless overwritten).
This can be particularly useful when passing search query, paging,… parameters from one page to another.

So, next time you need to redirect: pull out the Redirector action helper.

Stay informed on Zend Framework

When developing with Zend Framework, it is difficult to keep track of new versions, new components, changes to components, roadmaps,…

After “Beginning Zend Framework“, you’ll need to stay current too. You can of course read everything on the wiki, but if you use a RSS reader (if not, you really need to) add this feed.

It provides a great overview of all proposals and discussions concerning components. Even if you don’t have time to follow up on this each day (there can be a lot of comments), by looking at the titles of the posts you can have an idea of what is going on.

Beginning Zend Framework

One of the consequences of the huge popularity of Zend Framework is that everyone who is using PHP in one way or another has at least thought about using it (because it all sounds so good and, possibly, easy).

But different people need different approaches to start developing with Zend Framework. And the publishing companies that published the first books about Zend Framework (and apparently also the second wave of books) tend to forget about some groups of users. A little summary (in no way meant to offend):

Developers with a different background (another programming language)

Depending on the background, migration will not be that hard. I can imagine a .NET or Java developer easily gets the principles of a framework (and hopefully also understands OO programming). Ruby or Python will be even easier (but why on earth would they migrate?).

The average PHP developer (not already using Zend Framework of course)

If the Zend Framework manual is not sufficient for this group, there certainly are a lot of books available that eliminate all barriers. Of course look for the most recent books, since a lot of versions have been announced the last 2 years and, to be honest, some of the early books were published in a hurry to benefit from being among the first.

Dreamweaver users (often called “webdesigners“)

Yes, this group is also (willingly or unwillingly) pushed to, at least, have a look at Zend Framework. And to be honest, at the moment, I wouldn’t know how they can prevent themselves from creating something that isn’t maintainable in the years to come.
Zend Framework (or any other framework in this case) promises a lot of good things (which may lack in the current PHP snippets, Smarty templates, open source CMS,… now being used). Starting with the manual certainly is tricky. Getting a thorough grip of PHP/OO concepts may sound boring, but you need it.
As a suggestion: don’t set too high expectations and take your time. It may be useful to force yourself to get a PHP certification. Not because you need it, but because it forces you to learn/refresh the PHP basics.

Also: be honest to yourself. If you notice OO concepts don’t interest you, think about it and maybe try something else. Another lightweight framework like CodeIgniter (there is no such thing as “the best framework”) or no PHP development at all may better suit you. No one has ever been happy forcing themselves in a position doing something they don’t like to do!

Dummies

Belonging to this group is no disadvantage. Ok, you don’t have the experience of someone who has been using PHP since before the dot-com bubble burst, but at least you acknowledge this. Starting from scratch (and knowing it) can eliminate a lot of barriers.
Start by learning PHP and fairly early start with a decent PHP OO book and, again, take your time. In my opinion you don’t have to finish 5 courses and 3 books to start with Zend Framework. When learning Zend Framework (e.g. from the manual) you’ll also learn OO principles and best practices, but you need a basic knowledge first.
Also don’t expect that you can add new Zend Framework components on day 2, it will take time.

Did I forget about someone? I certainly hope this post can help as a starting point for new Zend Framework developers (or people thinking about becoming one).

Gettext translation with Google Translate

Working with gettext as your translation engine your project? In need of a rough translation of your application for a mockup/preview/…?

Paul Dixon offeres a free service that automatically translates a gettext PO file with Google Translate. I personally use gettext a lot because of its speed and ease of use (with poEdit) and this will certainly be of use.

Of course the results should not be used in a production application.

Propel version 1.4.0 released

propel

Although I must admit I didn’t notice it, less than 2 months after it was decided to create a new version for Propel, it was actually released.

Last week, on the 8th of November, the new 1.4.0 version has been released for production use. Additionally they also set up a blog to prove Propel is still very much alive.

Propel 1.4 is a backwards compatible evolution of Propel 1.3. It offers lots of bug fixes, some very interesting new features, speed enhancements, and a very simple upgrade path: rebuild your model after updating Propel, and your application works as always. Except it works better…

It all sounds to good to be true!

A first migration of a project to this new version went smoothly: remember to remove the *-classmap.php file that was generated by 1.3.0 because it has been integrated in the main config file. It’s also recommendable to delete the /map sub-folder in your models folder because 1.4.0 generates newly named *TableMap.php files.

Also good to have: full query logging (Propel 1.3 switched to PDO and lost this feature but it’s back!).

I must also admit I have never actually implemented Doctrine, but that’s also because I haven’t found a reason while using Propel.