Analitycs

понедельник, 10 октября 2011 г.

Python - RuntimeError: maximum recursion depth exceeded while getting the str of an object

При активном использовании рекурсивных функций в Питоне начинает вываливаться ошибка RuntimeError: maximum recursion depth exceeded while getting the str of an object

Лечение быстрое, но не оптимальное

import sys
sys.setrecursionlimit(XXX)

Где XXX число, подбираемое экспериментально, основываясь на вашей программе. Но лучше, конечно, обходится без рекурсии. ;-)

суббота, 8 октября 2011 г.

Ошибка - Невозможно подключиться к базе данных QMYSQL (Mac, Python, Qt)

Симптомы

При запуске Qt приложения с MySQL ошибка "Невозможно подключиться к базе данных QMYSQL".

Причина

Отсутствие драйвера MySQL "из коробки" в каких-то вариантах Qt. Почему-то по умолчанию включают только SQLite.

Как лечить?

Скомпилировать драйвер самостоятельно, для чего умные люди написали вот такой скриптик.

Разумеется, не забываем поправить необходимую версию Qt и проверить, чтобы в путях не было пробелов. (У меня в username есть пробел, из-за чего время от времени ловлю различные проблемы с компиляторами)

PyQT на MacOS - Error: Unable to create the C++ code.

При сборке PyQt на MacOS вот по этому мануалу на команде

python configure.py

упорно вылезает ошибка

Error: Unable to create the C++ code.

Решение оказалось простым, как грабли - в пути до исходников не должно быть пробелов.

Теперь сижу, курю - жду пока соберется. ;-)

пятница, 7 октября 2011 г.

3 дня отсутствия = iPhone(+), Steve Jobs(-)

Стоит только уехать на три дня как начинаются авралы
  • iPhone выпускают такой неполноценный, который, "панимаешь" (с) умеет звонить и работать, а не умеет думать за пользователя и причёсывать его собачку, заодно массажируя дистанционно соседа. Ну, короче - какашка, а не телефон.
  • Потом Стив Джобс помирает...
Они что там, совсем нюх потеряли и расслабились? Опять звонить, ругаться?

Ну а если серьезно - просто оставлю это тут.

понедельник, 3 октября 2011 г.

Как бекапить проекты с помощью rsync, sshpass, scp?

Как известно, "админы делятся на две категории - те кто не делает backup, и те, кто его УЖЕ делает". (с)

Ежедневный бэкап

Как кому удобно - я делаю mysqldump базы на продакшене и потом rsync синхронизирую httpdocs и дамп на удаленную машину. Для авторизации - используются ключи.

#!/bin/bash                                                                                                      
DESTINATION=/var/www/vhosts/xxx/httpdocs                                                              
KEY="ssh -i /home/user/.ssh/scm_dsa -l xxx"                                                          
ORIG_HOST=user@xxxx                                                                                              
rsync -a -e "$KEY" --delete --exclude="${DESTINATION}/cache/*" $ORIG_HOST:${DESTINATION}/* ${DESTINATION}/

Недельный бэкап

Уже на удаленной машине архивирую засинхронизированную папку несколько раз и через несколько дней заливаю архив на backup-space. К сожалению, доступ в backup-машинам - только по ftp, поэтому приходится немного извращаться, используя для авторизации sshpass.

#!/bin/bash

VHOSTS_DIR=/var/www/vhosts
TMP_DIR=/mnt/backup
BACKUP_DIR=FTP_USER@XXXXX.XXX.XX:/

/usr/local/bin/sshpass -pFTP_PASSWORD scp ${TMP_DIR}/* ${BACKUP_DIR}scp -Cp ${TMP_DIR}/* ${BACKUP_DIR}

/etc/crontab

Да, разумеется - лучше всего делать эти процедуры тогда, когда народу на сайтах поменьше.

0 3 * * * root /home/user/bin/backup.sh >> /home/user/logs/backup.log
7 1 * * 0 root /home/user/bin/backup_weekly.sh >> /home/user/logs/backup_weekly.log

Как просмотреть битовые поля(bit fields) в MySQL?

Когда вы используете в таблицах MySQL битовые поля,  то стандартный консольный клиент их не показывает в результатах запросов.

mysql> select deleted from shopping_cart where id > 1000 and deleted = 0 limit 3;
+---------+
| deleted |
+---------+
|         | 
|         | 
|         | 
+---------+
3 rows in set (0.00 sec)

mysql> select deleted from shopping_cart where id > 1000 and deleted = 1 limit 3;
+---------+
| deleted |
+---------+
|        | 
|        | 
|        | 
+---------+
3 rows in set (0.00 sec)

Внимательный человек заметит, что у результатов команды отличается отступ.

Для того чтоб значение поля было показано явно, нужно в запросе либо добавить +0 к имени поля, либо вызвать функцию bin, как показано ниже.

mysql> select deleted+0 from shopping_cart where id > 1000 and deleted = 0 limit 3;
+-----------+
| deleted+0 |
+-----------+
|         0 | 
|         0 | 
|         0 | 
+-----------+
3 rows in set (0.36 sec)

mysql> select deleted+0 from shopping_cart where id > 1000 and deleted = 1 limit 3;
+-----------+
| deleted+0 |
+-----------+
|         1 | 
|         1 | 
|         1 | 
+-----------+
3 rows in set (0.01 sec)

mysql> select bin(deleted) from shopping_cart where id > 1000 and deleted = 1 limit 3;
+--------------+
| bin(deleted) |
+--------------+
|            1 | 
|            1 | 
|            1 | 
+--------------+
3 rows in set (0.01 sec)

mysql> select id,bin(deleted) from shopping_cart where id > 2000 and deleted = 0 limit 3;
+------+--------------+
| id   | bin(deleted) |
+------+--------------+
| 2001 | 0            | 
| 2002 | 0            | 
| 2003 | 0            | 
+------+--------------+
3 rows in set (0.00 sec)

Ну очень вольный перевод вот этого мана

суббота, 1 октября 2011 г.

Несколько аккаунтов Google - Не можете войти в Docs, Reager, Calendar?

У меня сейчас было такое.

Предыстория  - имеется несколько связанных аккаутнов Google - личный и рабочий на Google Apps.

После удаления аккаунта из Google Apps - не мог войти в личные Google Reader, Docs, Plus, причем Gmail работал отлично.

Лечится полной чисткой cookies и кеша браузера.