Saturday, August 21, 2010

Z-Index problem with IE

I spent couple of hours to find the solution of this bug, so I just post it here hope it can help somebody else.

The problem is introduced here http://www.quirksmode.org/bugreports/archives/2006/01/Explorer_z_index_bug.html

and here
http://therealcrisp.xs4all.nl/meuk/IE-zindexbug.html

Some of the solutions proposed are here:
http://brenelz.com/blog/squish-the-internet-explorer-z-index-bug/
http://systembash.com/content/css-z-index-internet-explorer/

What really worked for me was the combination of two solution above, set position:relative to the containing divs and give each containing div higher value of z-index of the contained one.

Case example :

<div style="z-index:5; position:relative">

    <div style="z-index:4">

        <div style="z-index:3">

        </div>

    </div>

</div>

<div style="z-index:2; position:relative">

    <div style="z-index:1">

    </div>

</div>


For the code above, we should be able to see the div with z-index 3 on top of the divs positioned after it (z-index 2 and 1).

Monday, August 16, 2010

MySQL (No data - zero rows fetched, selected, or processed)

Trying execute a sp in unit test, the tester stop because a one warning (No data - zero rows fetched, selected, or processed), the sp is rigth, but when try run return a error that we will see below.

Ex:

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_test` $$
CREATE PROCEDURE `sp_test`()
BEGIN
DECLARE v_employee_id INT;
SELECT id INTO v_employee_id
FROM employee
WHERE name = 'Ozahata';
SELECT CONCAT('The id is ', v_employee_id);
END $$
DELIMITER ;

execute this and calling (call sp_test();) will return:
+-------------------------------------+
| CONCAT('The id is ', v_employee_id) |
+-------------------------------------+
| NULL |
+-------------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected, 1 warning (0.00 sec)

See the warning: (show warnings;)
+---------+------+-----------------------------------------------------+
| Level | Code | Message |
+---------+------+-----------------------------------------------------+
| Warning | 1329 | No data - zero rows fetched, selected, or processed |
+---------+------+-----------------------------------------------------+
1 row in set (0.00 sec)

This happend because not found a information in the select and try put into a variable.

To fix you need execute like the sp below.

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_test` $$
CREATE PROCEDURE `sp_test`()
BEGIN
DECLARE v_employee_id INT;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_employee_id=0;
SELECT id INTO v_employee_id
FROM employee
WHERE name = 'Ozahata';
SELECT CONCAT('The id is ', v_employee_id);
END $$
DELIMITER ;

will have the result:

+-------------------------------------+
| CONCAT('The id is ', v_employee_id) |
+-------------------------------------+
| The id is 0 |
+-------------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

Back to work. ;)

Tuesday, May 11, 2010

Convert query result to dictionary like json in Python

If you wish get a result of a query but like to return each row like a dictionary {Field name: value, ...} inside a array, you can make in a single line:

query_result = [ dict(line) for line in [ zip([ column[0] for column in cursor.description ], row) for row in cursor.fetchall() ] ]

I will try explain the line.

The cursor.fetchall() will return the row, but we don't know the name of field, so to get this information we need request to a cursor.description to give me the fields.
The cursor.description have more then a name of field, so we use a column[0] to get the name of field.
To give a list of columns we use a for to give a sequence to me :
[ column[0] for column in cursor.description ]

Now we need give the name for each field and a value returned in a row, for this we use a function zip, but we can't forget that each row need be in a sequence resulted a this command :
[ zip([ column[0] for column in cursor.description ], row) for row in cursor.fetchall() ]

This will result a sequence line:
[ [(Field, value), (Field, value), ...],  [(Field, value), (Field, value), ...], ]

Finally we convert this lines to a dictionary using the function dict(). resulting the line above.

this is a example (In this case I use the mysql connection):

try:
# Load the connection
connection = MySQLdb.Connection(host='host_name', user='user_name', passwd='password', db='db')
cursor = connection.cursor()
cursor.execute(query)
query_result = [ dict(line) for line in [zip([ column[0] for column in cursor.description], row) for row in cursor.fetchall()] ]
print query_result
except Exception, e:
print "Error [%r]" % (e)
sys.exit(1)
finally:
if cursor:
cursor.close()


NOTE: This will not result a JSON result is only a sequence of dictionary that will be like JSON if you use a simple result (date will return like: datetime.datetime(2010, 4, 23, 14, 44, 6))

Tuesday, January 12, 2010

Erlang YAWS now supports WebSockets

http://yaws.hyber.org/websockets.yaws
http://armstrongonsoftware.blogspot.com/2009/12/comet-is-dead-long-live-websockets.html