Analitycs

пятница, 23 сентября 2011 г.

Python mktime/strptime - TypeError: expected string or buffer

Иногда апдейты повергают меня в транс - недавно ловил баг с PHP+cURL, теперь отличился Python ;-/

Traceback (most recent call last):
  File "test.py", line 22, in 
    s = strptime(row['change_time'], TIME_FORMAT)  File "/usr/lib/python2.6/_strptime.py", line 454, in _strptime_time
    return _strptime(data_string, format)[0]
  File "/usr/lib/python2.6/_strptime.py", line 322, in _strptime
    found = format_regex.match(data_string)
TypeError: expected string or buffer

Описание

Лезем в код - получаем какой-то набор данных из MySQL через питоновский fetchall, затем преобразуем поле со временем и начинаем с ним танцевать.

Перестала работать конструкция
 
    s = strptime(row['change_time'], TIME_FORMAT)
    last_change_time = mktime(s)

После курения манов по времени в Python выясняется, что нужно в mktime отдавать 9 численный tuple


    s = row['change_time'].timetuple()
    last_change_time = mktime(s)

Вот и верь после этого людям... обновляй после этого пакеты...

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

WTF incentivised traffic?

Что это такое?

Траффик, которому за выполнение каких-то действий назначается поощрение, что в многих системах считается нарушением

Например, "заполни 10 заявок на получение кредита и я подарю тебе прикольный ништяк" (с)

Как бы это сказать по-русски?

PHP: echo var_export($xx) ничего не выводит

Иногда с логики построения функций PHP хочется биться головой об стену.

Конструкция

logActivity(var_export($vars));

Не выводит в лог НИЧЕГО. Ломаю голову, пытаясь понять, куда делись переменные.
Подсказка проста - второй аргумент.

logActivity(var_export($vars, TRUE));

пятница, 16 сентября 2011 г.

Как исправить Fatal error: Cannot use object of type stdClass as array (PHP+JSON)

Всем хороша в пятом php функция json_decode, только по умолчанию декодирует JSON строку в объект класса stdClass, с которым нельзя работать как с массивом.

Ибо конструкция

$json = json_decode($string);
echo $json['result'];

приведет к ошибке
Fatal error: Cannot use object of type stdClass as array

Правится это добавлением второго параметра
$json = json_decode($string, true);
echo $json['result'];

четверг, 15 сентября 2011 г.

Habrahabr осеннее обострение 2011 - часть 2

Продолжение цикла фейеричных статей цикла "Осеннее обострение" на хабре. Дополнение к части 1.

Вот тут человек всерьез предлагает отдавать весь контент для Apache через PHP с зипованием всего же - тем PHP. Причем - "исследует" и строит графики...

"Мы не ищем легких путей. Стоя... и в раскачивающемся гамаке - наш выбор" (с)

Как исправить ошибку Python datetime.datetime() is not JSON serializable?

Немного о сериализации через simplejson даты/времени, полученной из MySQL

При попытке сдампить результат из fetchall - чтобы отдать данные наружу во фронтендовский в Javascript в стиле

            sql  ='SELECT * FROM xxx WHERE id=%d'                                                          
            self._query(sql % id)
            data = self._cursor.fetchall()

получаем Exception

datetime.datetime(2011, 9, 14, 10, 18, 57) is not JSON serializable

Исправляется дополнительным форматом через лямбда-функцию

            dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime) else None
            response = json.dumps(data, ensure_ascii=False, default=dthandler)
Найдено, как водится - на StackOverflow

вторник, 13 сентября 2011 г.

Валюта в Яндекс-Директ и Google Adwords

Что самое интересное - в Яндекс-Директе - расчетная единица - у.е.



А вот в Google Adwords - рубли

"Странненько... непонятненько...." (с)

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

Как определить какая версия PHP/eAccelerator используется?

$ php -v


PHP 5.1.6 (cli) (built: Mar 31 2010 02:39:17)
Copyright (c) 1997-2006 The PHP Group
Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
    with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator

пятница, 9 сентября 2011 г.

Что не нужно в Python?


  • быстродействие
  • многопоточность 
  • компилятор
  • проверка типов
  • приватные методы
  • паттерн-матчинг
  • хвостовая рекурсия
  • switch-case
  • карринг
  • ленивость
  • алгебраические типы
  • округление результатов
  • соглашение об именовании 

Python - Да все это не нужно!

Я как бы НЕМНОГО переживаю из-за урезанной многопоточности но терпеть - можно.
И признайтесь честно - все это вам ДЕЙСТВИТЕЛЬНО нужно? ;-)

Проблема в PHP+cURL+CURLOPT_POSTFIELDS - после обновления

Обновив PHP и cURL поймал забавность - старая конструкция, нормально работавшая несколько месяцев

 $data = array(
  'id' => $id,
 );
 
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $data));

 $result = curl_exec($ch);

 curl_close($ch);
  
 return json_decode($result);

перестала отправлять в POST данные.

Покурив маны, нашел ошибку в коде - не нужно implode на массив

 $data = array(
  'id' => $id,
 );
 
 $ch = curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

 $result = curl_exec($ch);

 curl_close($ch);
  
 return json_decode($result);

Нет, ну понятно - как бы косяк, но тогда вопрос - ПОЧЕМУ ЭТО РАБОТАЛО?

P.S. "Чем дальше в лес - тем толще партизаны" (с) Ненавижу...

четверг, 8 сентября 2011 г.

Как посмотреть количество соединений по статусам через netstat?

# netstat -an | grep ":80" | awk '/tcp/ {print $6}' | sort -nr | uniq -c

     58 TIME_WAIT
      2 SYN_RECV
      1 LISTEN
     22 FIN_WAIT2
    319 ESTABLISHED

среда, 7 сентября 2011 г.

Python+MySQL+Bit fields = Error: invalid literal for int() with base 10: '\x01'

Причина - не нужно сравнивать значения, полученные из битового поля MySQL сразу с  int значениями - 0 и 1.

Методически грамотно - преобразовывать:

if int(result) != ord(row['bit_filed']):
    bla-bla-bla

Как вставить копию данных в ту же самую таблицу MySQL с изменениями?

Ну лень мне было перебивать несколько сотен записей в таблице "ручками", а потом еще их и менять. А лень, как известно - двигатель прогресса.

INSERT INTO megatable (id, server_name, server_ip, type, params, notification, account_id, status, is_active) SELECT 0, server_name, server_ip, 'ping', params, notification, account_id, status, is_active FROM megatable;

Работает ли на других диалектах? - мне не ведомо... ;-)

вторник, 6 сентября 2011 г.

Habrahabr - такой хабр... осеннее обострение?


На Хабр можно ходить с разными целями - почитать что-то умное (иногда)... или поржать, потроллить на худой конец. Но последняя неделя - доставляет особенно.

Опрос про опыт работы PHP кодера и место его работы (офис/фриленс)

Разумеется, вариант "я PHP кодер, стаж больше 5 лет, и перешел нахрен на другой язык (python/ruby)" - автор забыл, но ему напомнили... После некоторого глумления в комментах пост исчез. Скриншотов снять не успел.

Создаём сайт на PHP без использования расширения в именах файлов

Здравствуй, Хабр! 
Многие из нас видели сайты, страницы которых не содержат расширения файла. Например, компания Google для поиска использует файл вида /search?q=%s. Многие также знают, что, как правило, такие сайты написаны с использованием технологии Java. Однако не все знают, что также можно делать и для php-скриптов. Если Вам стало интересно, прошу под кат.

Мне стало БЕЗУМНО интересно, но увы - пост уже ушел...

Анализируем производительность сервера

То человек, ВСЕРЬЕЗ предлагающий для построения графиков нагрузки серверов у кластера использовать Excel. Было тут, кеш Гугля

Аренда сервера или виртуальной машины в сети становятся все доступнее. На момент написания статьи аренда мощного 4-х ядерного сервера с неограниченным трафиком обходится всего в 70-100 долларов в месяц. 


По этой причине многие компании, веб-мастера и разработчики арендуют сервер для нескольких проектов вместо использования разделяемого хостинга. Преимущества очевидны: больший контроль над работой приложений и полное использование ресурсов сервера для своих проектов. Как определить, что производительности сервера стало недостаточно и пора производить обновление или замену? Какой из компонентов стал бутылочным горлышком? Эта статья поможет самостоятельно ответить на вопрос — требуется ли серверу замена? — используя сводные таблицы Microsoft Excel. 


Применяя описанный метод, для вас не составит труда подготовить красивый иллюстрированный отчет руководству, а также быстро найти узкие места в системе. Картинок будет много! Нам понадобятся две вещи: данные и инструмент их анализа. Для анализа данных производительности мы будем использовать «Сводные таблицы» из Microsoft Excel. В качестве примера данных используется записанный в CSV файл результат работы Perfomance Monitor. Это стандартный инструмент Windows Server, однако аналогично можно обработать данные, полученные на любой системе. 

Вот не могу понять - то ли осеннее обострение, то ли кто-то просто массово стебется.

Кстати, в третьем варианте человек-то именно Excel знал очень неплохо - судя по скриншотам. ;-)

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

Как скопировать dict в Python? copy.deepcopy

При частом переключении с PHP на Python часто ловишь баги и проблемы с копиями объектов, особенно - ассоциативных массивов/dict.
Что бы избежать неявных изменений данных - нужно делать deepcopy - полное копирование.

Вариант новичковый

    node_params = {}
    for key, value in data['params'].iteritems():
        node_params[key] = value

Вариант true pythonic ;-)

    from copy import deepcopy
    ...
    node_params = deepcopy(data['params'])    
Внимательнее с копиями ;-)

Платон Щукин - милейший персонаж Яндекса

В который раз убеждаюсь, что Платон Щукин - очень вежливый и приятный в общении персонаж. Получаю ответ на тикет:

"Приносим извинения за задержку с ответом.
xxxx не предусмотрено. Однако, мы подумаем над реализацией этой возможности после окончания тестирования.
Спасибо Вам за письмо! " (c)


Граждане СЕОшники! Может, в консерватории что-то нужно подкрутить? ;-)

воскресенье, 4 сентября 2011 г.

Закон о Национальной платёжной системе - пришел Лесник и всех разогнал

30 августа - закрывается платёжная система Вконтакте. Как выяснилось недавно в одном разговоре, многие люди до сих пор находились в анабиозе - и спрашивают - "что случилось?"



А самое "интересное" нашлось в блоге Сбербанка.

Выдержки самого интересное из  просто "интересного" ниже

На самом деле долгое время мы вообще не собирались на этот рынок выходить. Мы его заметили не с точки зрения размера рынка, а с точки зрения процентов роста. Когда мы смотрим в разрезе долей, то видим, что это очень маленький рынок, действительно, на нем много денег не заработаешь. В разрезе роста, мы видим, что он растет значительно быстрее, чем любой другой рынок. И в этой связи мы, конечно, хотим на этом рынке быть, но мы на этом рынке хотим быть не как поставщик клиентов для Яндекс.Денег, а как самостоятельный игрок.


Сейчас, во втором чтение, выходит закон о национальной платежной системе. На следующей неделе он будет представлен государственной думе на рассмотрение. Я этим законом занимаюсь, это вторая моя профессия – это писать законы ;-) Я его, наверное, на треть написал и переписал


Он не позволяет считать деньги на мобильном телефоне электронными деньгами. Деньги на мобильном телефоне – это предоплата за мобильные услуги, за услуги связи. Если хочешь заплатить с мобильного телефона, то ты должен купить со счета телефона инструмент – электронные деньги или любой другой инструмент, а затем потратить. Sms-платеж, если платеж идет со счета мобильного телефона, будет нелегален. Еще одна правильная мера закона – электронные деньги нельзя будет превратить в «кэш». Купили электронные деньги – положите их на счет в банке. Нельзя будет просто получить «кэш». Если купить электронные деньги вы можете за наличные, то продать только за безналичные, то есть положить на карту или на депозитный счет. Это правильная схема. Потому что она препятствует отмыванию и обналичиванию денег. И этот наш новый продукт, он готов именно под новый закон.

В результате прочтения этого интервью - получаем, что Сбербанк, намеревающийся войти на рынок ЭПС, фактически признает, что написал закон, по которым они будут функционировать. Хорошо это или плохо - посмотрим.

Шандарахнет по всем - и видно как все уже зашуршали. Webmoney тянется за Яндекс-Деньгами - создаются привязанная к счету MasterCard, все активно идентифицируются и привязываются к телефонам.