phpStorm and documenting JavaScript

I’m awed again and again by phpStorm‘s features. I just came across this one: When I comment my JavaScript methods/functions with the @param, all IDEs I have tried out so far, let you only set a primitive type in curly braces, e.g.:

 * Some method description.
 * @param {Object} deferred dojo.Deferred
someMethod: function(deferrede) {
   // ...

Anything else would be marked as an error. But phpStorm is a lot, lot smarter.  When I’m using dojo it recognizes all classes and I can use them as a type, e.g.:

 * Some method description.
 * @param {dojo.Deferred} deferred
someMethod: function(deferred) {
  // ...

How to create JavaScript documentation in PhpStorm

Update 19.07.2013: This guide is outdated. Read How to Generate JavaScript Documentation with JSDoc 3 and PhpStorm

PhpStorm’s code assist feature nicely displays our own JavaScript code documentation. But what if you wanted to create a separate documentation you can hand out or integrate into your website? Then you should use jsdoc-toolkit. You can configure and run jsdoc-toolkit directly from PhpStorm. Here is what you have to do:

Continue reading “How to create JavaScript documentation in PhpStorm”

How to create PHP documentation in PhpStorm

PhpStorm displays your own code documentation in the code assist. But what if you wanted to create a separate documentation you can hand out or integrate into your website? Then you should use phpDocumentor. You can configure and run phpDocumentor directly from PhpStorm as an external tool. Here is what you have to do:

Continue reading “How to create PHP documentation in PhpStorm”

How to get code assist for dojo in PHPStorm

Update: Since Version 2.0 EAP 98.458 you get JavaScript library support, thus the following is obsolet.

In case you were wondering how you get dojo code support in PHPStorm even if dojo is not in your project folder, here’s the solution:

Install dojo in PHPStorm from external directory.
Make code assist for dojo work if it is in an external directory.

1. Open Project Settings

2. Select Directories

3. Add the path to your dojo folder as a new Content Root.

4. Mark the directories dijit, dojo, dojox as a Resource Root

That’s it.

Why I love PhpStorm: JavaScript code completion with dojo

Just a quick post about the new PHP IDE by JetBrains. So far I’ve been working with Aptana Studio. I also tried NetBeans and Comodo Edit, but none was really satisfying, because either dojo or ftp support was missing (if I find time, I’ll write a post in more detail about the differences between those IDEs).

But now there is PhpStorm. I’m really impressed and enthused by its features, especially code completion for JavaScript. Since JavaScript is a loosely typed language, it’s difficult to write a good code assist. But PhpStorm just picks up everything.¬† For example, if I use dojo.hitch to set the scope of a function, it catches what ‘this’ refers to within the anonymous function !

Code Assist in action
PHPStorm’s amazing code assist in action. Notice that setting the scope with dojo.hitch is reflected in code assist!

More PhpStorm love:
SQL table aliases
SQL GROUP BY handling

Review of Solmeta Geotagger N2 for Nikon

Geotagging your photos is very useful because it allows you to display your pictures on a map helping you remember where you took them. Furthermore, you can use reverse geocoding to automatically add location information (country, nearby places) to your image by using a webservice such as

The good stuff

The Solmeta Geotagger N2 makes it very easy for you to add geographical information to your images. It’s a small GPS that you slide into the flash shoe and connect directly to your camera. Every time you take a photo it writes the coordinates directly into the Exif header. Furthermore, it also records the height and the direction using its contained electronic compass. This works perfectly and the big advantage over a separate GPS device is that you don’t have to synchronize the location data with your photos later with specialized software. The manual is also pretty extensive and helpful.

Continue reading “Review of Solmeta Geotagger N2 for Nikon”

Integration of phpDocumentor into Eclipse or Aptana

You can execute phpDocumentor directly from Aptana or Eclipse. The PHP-project you would like to document with phpDocumentor needs to be open and selected in eclipse before you start the following steps:

Continue reading “Integration of phpDocumentor into Eclipse or Aptana”

Check if node in tree is already selected

It took me a long time to figure out how to check if a node in a dijit.tree is already set to selected, when the user clicks on it. So I thought I share what I found out:

dojo.connect(this.tree, 'onMouseDown', this, function(evt) {
  var node = dijit.getEnclosingWidget(;
  if (node.item == this.tree.attr('selectedItem')) {

Tutorial Part 1: REST with Dojo and PHP

I only started recently to dig into REST, so I’m in no way an expert in this field. There are not that many tutorials on the internet, and the ones I found were only of limited help. They all seemed to miss something or, rather, I missed something. So I decided to write my own tutorial about my findings to help others that might have the same problems. On the client side, I’ll use the Dojo Toolkit, on the server side, PHP.

I will focus mainly on providing and explaining some working code examples including server PHP code. At the end of this article you can find all code as a downloadable zip-file. As an introduction to REST, read some of the tutorials linked at the end of this article, because I’m not going to repeat some of the things you can read there.

Continue reading “Tutorial Part 1: REST with Dojo and PHP”

Mozilla Testcase for DHMTL Performance

It started 2003 as a little project to learn the basics of 3D-programming and with a question on how to improve performance in the mozillaZine Forums. I was asked to file a bug (Bug 229391) and to create the Mozilla Testcase Slow (3D) DHTML performance compared to IE for it . From there it made it into the performance suites Dromaeo, SunSpider and The Betanews Comprehensive Relative Performance Index (CRPI) to measure browser speed.

The test is also mentioned in the article “Surf-Triathlon – Geschwindigkeit und Speicherverbrauch aktueller Browser” in the German computer magazine c’t from 19/2008 on page 182.