100 resources for Freemind

October, 27 2009

I’m stealing a post from Marie here, to remind myself of a great list of resources linked to Freemind, that allow for extending the use of the tool: http://www.mindmeister.com/33158470/100-ressources-autour-de-freemind

No time to analyse now, but I will surely need that in the future.


Cal, Chris and Derick changing jobs

October, 27 2009

There seems to be a strange mood going on among a few of the top PHP activists and core developers. Chris Shiflett changed job recently (about two months ago), and today Cal Evans declared he would be leaving ibuildings, almost at the same time Derick Rethans stated he would be leaving eZ Systems.

The latter two indicated they would be looking for positions that really make them enjoy their professional activities. I believe Chris already found a new position (didn’t check that).

For the companies they are leaving, this must be a major concern (even counting on a few months to prepare for the cut), as they represent hugely recognized PHP developers in the face of the community.

This kind of reminds me that one of my personal objectives for the future releases of our solution is to improve the management of talent as a way to both retain key people by planning their needs of change and also make sure that, if people leave, they also leave behind motivated and capable people that will be able to provide continuity of their work.


Be an open-source start-up

October, 27 2009

To be a startup, a company has to be a product business, not a service business. By which I mean not that it has to make something physical, but that it has to have one thing it sells to many people, rather than doing custom work for individual clients. Custom work doesn’t scale. To be a startup you need to be the band that sells a million copies of a song, not the band that makes money by playing at individual weddings and bar mitzvahs.

This is a quote from http://www.paulgraham.com/startupfunding.html

Well… it certainly seems that funding is not considering with a nice eye the open-source start-ups :-D

What about Twitter, Facebook and Google? Their *initial* success was not based on selling (or at least not in the common sense of earning money). However, they are all considered as having been successful start-ups, or aren’t they?


Oracle Spatial with PHP (links)

October, 12 2009

Just to make sure I found this again later…

http://blogs.oracle.com/opal/2008/03/location_awareness_with_oracle.html gives an example of Oracle Spatial queried from PHP

http://www.oracle.com/technology/tech/php/index.html is the Oracle homepage for PHP Developers


Loop11 user testing web application

October, 6 2009

Today I found Loop11.com (through a job advert in the Australian Web Standards Group mailing), an interesting site allowing for user testing (for $350) of your site for up to 1000 users.

The application puts a JavaScript layer on top of your website and requires you to define tasks for your users to complete (without documentation, of course). You then invite users (you have to invite them yourself) to come and test your app.

I’ve tried the demo (takes about 3 minutes for 3 tasks) and I must say I like the idea (although I would love to see some results, which is apparently not possible through this part of the demo, but you can setup a trial account for a short user test). The only missing part would probably be to gather users for you (I don’t know… invite people to test in exchange of one dollar per test or something like that – I’m sure some unemployed people would spend days there.


GMail Sender header problem and using other domains

October, 5 2009

I’ve been using GMail for a while now as an SMTP server to send my e-mails from other domains, no matter where I am going.

What I realized later is that most of the e-mails I send are getting seen as sent by my account @gmail.com, while I’m actually trying to send them as if they were sent from @dokeos.com. Well, apparently the whole thing is quite compromised. There’s an interesting discussion about that here: http://www.google.com/support/forum/p/Google+Apps/thread?tid=2f66ff4e186cdc8a&hl=en#all, and apparently this is the correct way to do it for Google, so not much hope to get improvement there.

Another important point is that it is apparently a problem (in certain circumstances) with Google Apps, as the ‘On behalf of’ header is sent in the e-mail, indicating the e-mail you would have liked to send it from, instead of putting it in the ‘Sender’ header.

Well, that means I’m back to another SMTP server. I don’t want it to show as me@gmail.com to my customers.


Why using partial strings for translations is not a good idea

October, 4 2009

This article is clearly at level “piece of cake” for those of you working day to day with UTF-8 and unicode headaches, but I have plenty of problems with my own team to explain why they should never put a string like this:

$SomeString = “This value must not be inferior to”;

in the Dokeos translations system, but they never learn :-)

This would later appear in the code as something close to:

echo get_lang(‘SomeString’);

and this would make it available in all the supported languages (if translated by a good will in his own language).

So here is an attempt at explaining clearly  what it’s all about, and why this kind of expression should be avoided at all cost in a translation system.

First of all, let’s delve a bit deeper into the string above, to make sure we all start on the same bases. The idea is to have a final string in the user interface which will look like this:

This value must not be inferior to 25

OK, you all get the point?

Now where is the problem in that? Well, the problem is that not all languages work the same or, better said, have the same sentence construction rules. The same sentence would be translated in the following ways:

French: Cette valeur ne peut pas être inférieure à 25

Spanish: Este valor no puede ser inferior a 25

Dutch: Dit waarde macht niet minder dan 25 zijn

Did you see what just happened? Yes, “25″ was not the last word of the sentence! So, how do you fix that now with your string, huh? You’re pretty stuck now, aren’t you? Well, that’s why I’m writing this. Dutch is not the only language with this kind of structural change. Japanese would most probably put 25 (ni-juu-go) right in the middle of that sentence.

Now, I hope you already learnt something right now. And I hope that what you learnt is that you have to think a bit more and be a little less egoistic when programming. A lot of people might use your program (particularly if it’s open-source), and a huge lot of these will not speak a work of English or French or even Spanish, so you will have to find new ways to do things properly.

One of these new ways is to use the nice sprintf() function in PHP (in our case, of course), and pass parameters in the form of %s (string) or %d (decimal) inside your string.

For example, the previous string could now be stored in a language file this way:

$SomeString = “This value must not be inferior to %d”;

When translating this string to Dutch, I would write:

$SomeString = “Deze waarde mag niet minder dan %d zijn”;

Did you see that? Now the translation is completely up to the translator. No more problem of positionning the number at the end of the string.

Then you would call it from your script not this way:

echo sprintf(get_lang(‘SomeString’),’25′);

Et voilà! Now you know why I’m upset when I see a partial string translation… So let’s make it a better world for all translators around! Let’s give them multilingual-ready strings to translate!

Note: Purists will tell me that I should use printf() instead of echo + sprintf(), and also that I should use %d and not %s, and I would agree, but I’m just trying to show a one-simple-step change between the previous form and this one.

Thanks for reading.


PclZip and gzopen64()

September, 30 2009

I have updated my system early to Ubuntu 9.10 (Karmic Koala) and, to my surprise, there is a little change that could cause dramatic problems in Zlib (library dealing with compressed data). The gzopen() function has been changed to gzopen64(). This means that all calls to gzopen() in the PHP bindings for that library should probably be modified to use gzopen64().

In Dokeos, we use PclZip 2.6, which doesn’t use gzopen(), apart from a check to see if the zlib extension is installed or not. I have reported the problem to PHPConcept (the guys in charge of the PclZip development) to report the problem. Meanwhile, if you are using PclZip in your PHP app and it needs to run with a recent version of zlib (I have zlibc  0.9k-4), you will probably have to edit the PclZip library file and change gzopen() to gzopen64().


Software installation on Linux is difficult

September, 28 2009

I can’t resist posting a link to this blog post :-)  Takes around 1 minute to read it all… Great effort from the author. Comparative installation of simple cards game under Ubuntu and under Windows.


Boys with toys…

September, 28 2009

I’m always surprised at what horrible things web developers can actually do in their work just to use AJAX stuff. I won’t hurt anyone because there would be many useless deaths, but guys… use your head! A user wants interfaces to look nice, but not to hide the whole screen while reloading a single block (where’s the point of using AJAX?), and they don’t want to have to click on every single element to extend it just to be able to see data, either.