Analitycs

вторник, 31 января 2012 г.

Python/PHP - запятая - казнить нельзя помиловать

Сегодня ловлю баг в сервисе - в JSON-результате вместо поля с integer  выдается список элементов-integer, то есть вместо

data : {
  'id' : 1
}

упорно получаю

data : {
  'id' : [1]
}

Перепроверяю код 20 раз - ничего не могу понять... вроде все правильно, должен быть идентификатор ОДИН, но хоть ты тресни - список. Подвисаю на несколько минут, иду попить кофе, снова смотрю в код...

Через несколько минут доходит - начинаю истерически хохотать

def bla-bla(self, args): 
    data = {
      'bla-bla' : bla_bla,
      'name' : name,
      'id' : temp_id,
    }
  return data


Правлю один символ - все работает. После хохота начинаю вспоминать хорошего PHP team-leader, с которым работал много-много лет назад.

Он был большим аккуратистом в плане чистоты форматирования кода и железнобетонно приучил меня расставлять меня запятые в ассоциативных массивах в КАЖДОМ элементе, включая последний.  Так как в случае необходимости быстро переставить элементы в коде - не пришлось бы искать потенциальную ошибку c пропущенной запятой.

А для Python - это собственно - сокращенный формат списка-последовательности.

Так что вот вам прекрасный пример того, что старые привычки часто вредят, а иногда - вредят ОЧЕНЬ сильно. "Казнить нельзя помиловать" (с)   ;-)

Ну и верный вариант - БЕЗ запятой ;-)

def bla-bla(self, args): 
    data = {
      'bla-bla' : bla_bla,
      'name' : name,
      'id' : temp_id
    }
  return data

понедельник, 30 января 2012 г.

Javascript+Flash мультизагрузчики картинок (SWFUpload, Uploadify) и Error #2038

Иногда мультизагрузчики изображений с использованием Flash (SWFUpload, Uploadify и т.д) дают ошибку #2038 при загрузке на случайных картинках без всяких видимых причин.

Как выяснилось - может быть целая куча разномастных серверных проблем - причем проблем преимущественно backend'овских.

TODO-list
  • обновляем Flash загрузчик до последней версии;
  • проверяем, что POST приходит на сервер в скрипт загрузки нормально - без всяких HTTP авторизаций, сессии нормально передаются, пользователь распознается залогиненным и т.д.;
  • и внимание - ЭПИЧНАЯ ОШИБКА: Размер разрешенных вложений должен быть <= размеру upload_max_filesize в php.ini;

И только потом лезем в настройки сервера - для nginx решение

Открываем nginx.conf и в http секцию добавляем директиву

client_max_body_size 500m;  

И удаляем из конфига директиву keepalive_timeout

Через некоторое время, когда у пользователей обновится кеш браузера - начинает все работать

пятница, 27 января 2012 г.

Python implode/join - TypeError: sequence item 0: expected string, int found

Одна из частых функций в PHP проектах - implode/explode.

На Python (по идее/по мануалу) это делается так

tmp = [1,2,3,4,5]
','.join( tmp )

Но в результате - получаем ошибку TypeError: sequence item 0: expected string, int found

Проблема - в том, что у нас числа, а не строки

 В итоге - нужно так

','.join( map( str, tmp ) )
'1,2,3,4,5'

Но вот пресловутое неявное приведение типов-то в PHP как помогает, а? ;-)

четверг, 26 января 2012 г.

Google Adsense/Adwords + Translate

Сегодня увидел то, что заставило глубоко задуматься...
Смотрим первое объявление... и видим ничто иное - как использование автоматического перевода Google Translate для показа рекламного объявления с ЯПОНСКОГО языка для показа на РУССКОМ сайте.

Интересно - давно ли это внедрено? Как бы раньше такого - не замечал, информации в публичном доступе не проскакивало

Какой плюс для рекламодателей, однако.

Update: как указали в комментах на Хабре: Это не автомат, а ручной режим, но действительно с помощью GoogleTranslate

"Действительно ручной перевод объявлений на другой язык — это распространенное явление: http://adwords.blogspot.com/2009/10/translate-your-adwords-campaigns-with.html "

А жаль, идея автоматического перевода объявления "под сайт" была бы интересной.

И да, конечно же (разумеется) - там заметку загнали в минуса, что как бы намекает ;-)

среда, 25 января 2012 г.

Как узнать установленную версию Apache?

Для Red Hat дистрибутивов От рута
# httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Oct 19 2010 16:27:47
От простого смертного
# ps aux | grep httpd
web     1152  1.6  0.7 314296 62168 ?        S    00:42   0:03 /usr/sbin/httpd

# /usr/sbin/httpd -v
Server version: Apache/2.2.17 (Unix)
Server built:   Oct 19 2010 16:27:47
Либо
# rpm -qa|grep httpd
httpd-2.2.17-1.el5
httpd-tools-2.2.17-1.el5
Для debian-based, понятное дело - httpd заменить на apache2.

вторник, 24 января 2012 г.

От Arena до Skyrim - Заглавные темы из всех Elder Scrolls

Услышав характерные напевы старпёристые старые геймеры пускают скупую крокодилью слезу, молодое поколение - недоумевает...
Я, пожалуй, отношусь к старому поколению - начинал с Arena, но уже был Daggerfall - и он поглотил меня надолго, как и Morrowind.

К Oblivion отнесся гораздо спокойней, но все таки прошел, теперь закончил и Skyrim. Хорошо, но мало - ждем до едрени фени разных DLC.

Если кто не в курсе...
  • 00:00 The Elder Scrolls I: Arena 
  • 00:31 The Elder Scrolls II: Daggerfall 
  • 01:22 The Elder Scrolls III: Morrowind 
  • 02:28 The Elder Scrolls IV: Oblivion 
  • 03:09 The Elder Scrolls V: Skyrim

пятница, 20 января 2012 г.

Как полноценно включить UTF-8 для MySQL?

Что нужно добавить в /etc/my.cnf для полноценной поддержки UTF-8 в MySQL, включая вывод данных в консоли mysql


[mysqld]
default-character-set=utf8
default-collation=utf8_general_ci
character-set-server=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
 
[client]
default-character-set=utf8
 
[client]
default-character-set=utf8