Sunday, November 28, 2010

OpenSuse in VirtualBox

I had to install an OpenSuse 11.2 in VirtualBox. Host machine is a Windows 7. I used the Gnome desktop for OpenSuse.
I wanted to have smooth integration: copy/paste, auto resize of the guest, etc.

Things you need to keep in mind.
1. Run VirtualBox->Devices->Install Guest Additions
2. In Suse go to /media/VBOXADDITIONS
and run the script you need. This does not means the vbox additions are up an running
Check this with

/etc/init.d/vboxadd status

3. As the upper command will tell you that that service is not running, you need to run

/etc/init.d/vboxadd setup

4. As that command will also not work it's time to add from Yast:
  • all modules in "Development" package related to kernel
  • and also all related to 'make' (yes C++ tool) tool.

5. Now run again

/etc/init.d/vboxadd setup

6. Now restart machine. It should work.

Friday, November 5, 2010

Interesting books

My 1.2 year old girl has recently made a passion to pull out books from the shelve.

We placed a special shelve with kids book just she will "focus" her destroying efforts toward her books.

But she got bored and she went to my IT books. It was funny as she started to pull out Oreilly books. Why?

Well, I sneak behind her and watched her silently. She went to the shelve, look for a while and put her little finger on the small animal figure each oreilly books has - and then she pulled out the book.

Ok, so that is the reason Oreilly IT books are appealing to kids - they have animal pictures on them :)

My question is, how much of the decision to buy such a book is due to the fact we like those pictures too?

Wednesday, September 22, 2010

HTML nested forms

To my surprise it seems that HTML does not support nested forms in form or

<form action="" method="POST">
<br/>Outer Age <input type="text" name="age">
<form action="" method="POST">
<br/>Inner Age <input type="text" name="age">
<br/><input type="submit" value="Inner" id="inner">

<br/><input type="submit" value="Outer" id="outer">

The guys from are saying:

"There can be several forms in a single document, but the FORM element can't be nested."

Well, I tried to do it and to my surprise the outer form submit is completely ignored.

Sunday, September 19, 2010

Find your SuSE version

From time to time I need to find the SuSE version for the box I'm connected to.
So all I need to do is type the following command into a console:

cat /etc/SuSE-release

Another option is to use the following command:

lsb_release -a

Good to know.

Thursday, August 26, 2010

Files in BLOGS or Filesystem

Almost all SQL based projects (ex: LAMP) require a way to store files.

I've encounter this problem so many times and so many times I had to think about pros (+) and cons (-) that I decided to put them down into this post so anytime I will encounter this problem I will be fast updated :D

There are 2 ways to store files:
  1. into the SQL as BLOBS
  2. into the file system as normal files
Store them as BLOBS
(+) avoid file system permissions nightmare
(+) all CRUD operations can be transactional (if your database supports transactions)
(+) can be replicated
(-) bigger databases (dumps will take longer and will be bigger)
(-) if you want to use rsync or similar tool to backup your web app the whole database will be backed (unless rsync has a way to save only delta of a .sql file)
(-) JOINS with BLOB tables will take longer

BLOB Hybrid solution
A hybrid solution might be to store the BLOB/files into a separate table and use foreign keys to it.

Store as normal file
Usually the file is stored
(+) database is way more smaller
(+) rsync will generate a smaller network traffic (less bandwidth consumption)
(+) database backups will be faster (only the data in the SQL database)
(-) you need to take care of file permissions
(-) it can not be replicated
(-) all CRUD SQL operations will be more complicated as you will need to take care of the files too
(-) need to take care of orphaned files (a cron job to detect them and then to solve the problem)

Links: - How to use the hybrid solution

Thursday, July 15, 2010

Run JavaScript from SciTE

SciTE is a fantastic text editor. I used it for small and fast prototyping of code.

Lately I had some important project to code ( and I needed to test some JavaScript codes and I thought it might be handy to run the code from within the SciTE.

Here is the solution:
1. First you need to install the latest Java SDK and after install see that jrunscript (JavaScript interpreter - based on Rhino) is in you path

2. Go to Scite's folder and open and add the following line:
command.go.*.js=jrunscript $(FileNameExt)


Now every time you press F5 in SciTE your code will run be executed and the results displayed in the Output window.


Monday, May 17, 2010

PHP broken email

There are cases when an email might end up showing the headers inside the email's body. This means that headers are usually.

We had a big headache with a PHP project lately as all the emails were broken ("butchered" as someone said).

Here is how a test the email looked like:

MIME-Version: 1.0
Content-type: text/html; charset=utf-8
Message-Id: <...........>
Date: Mon, 17 May 2010 10:52:35 +0300 (EEST)
From: (root)

Yes, a simple HTML email test
Now we took a look at the raw email and here is what we saw:
Received: (qmail 9464 invoked from network); 17 May 2010 07:51:47 -0000
Received: from unknown (HELO ([])
(envelope-sender )
by (qmail-1.03) with SMTP
for ; 17 May 2010 07:51:47 -0000
X-IronPort-Anti-Spam-Result: AqoFAAiS8EtZLcluX2dsb2JhbACRfQEBixsDbB5IvwkEiQ8
Received: from (HELO ([])
by with ESMTP; 17 May 2010 00:51:46 -0700
Received: by (Postfix, from userid 0)
id 2FF74F04FB; Mon, 17 May 2010 10:52:35 +0300 (EEST)
Subject: Test HTML email
X-PHP-Originating-Script: 0:testSendEmail.php
X-Nonspam: Statistical 50%

MIME-Version: 1.0
Content-type: text/html; charset=utf-8
Message-Id: <...>
Date: Mon, 17 May 2010 10:52:35 +0300 (EEST)
From: (root)

Yes, a simple HTML email test

Now the problem were those 3 lines :
X-Nonspam: Statistical 50%

MIME-Version: 1.0
There should be no blank line between headers as the email parser will believe that the headers are done and the content is starting.

Where do those extra line coming from? They are added by PHP for any email sent, so we need to remove them; and they are added the wrong way - introducing an unnecessary blank line.

Go to php.ini and set mail.add_x_headers to off:

mail.add_x_headers = Off

Now restart you Apache and let me know if it's working :)