Архив автора

Настройка админской панели в django   нет откликов

Размещено в 12:17 в разделе Open Source,Языки

Интересная заметка на habrahabr про то как минимальными усилиями сделать из обычной админской панели django красивый и удобный интерфейс.

Написано 08-07-2010 автором goodguy

Метки: ,

Do it satchmo way   нет откликов

Размещено в 20:53 в разделе Open Source,ПО,Языки

Недавно потребовалось быстро развернуть более-менее универсальный магазин для нашего нового проекта торговли велотоварами. PHP-системы мне как-то не нравились и из симпатии к python начал было писать проект на django, но вскоре понял, что скорее всего получается велосипед, и начал искать что-то готовое. Оно пришло в виде Satchmo, весьма универсального и накручиваемого решения для электронной торговли. Что понравилось – немало настроек, в которых поначалу можно запутаться. Есть тонкости в адаптации под себя, но они описаны в документации (один отсутствующий момент – это как обновлять sitemaps, пришлось додумывать и доделывать самома). Но главное, магазин развернулся из коробки и через пару часов в нём уже можно было добавлять товары. А вот допиливания мелочей происходят уже по ходу, и зачастую незаметно для посетителей :)

Написано 07-07-2010 автором goodguy

Метки: , , ,

Антивелосипед   нет откликов

Размещено в 12:43 в разделе Языки

Python опять обрадовал меня наличием готовых модулей для всего и вся. На этот раз повезло быстро разобраться с чтением конфигурации из XML файла – для этого идеально подошёл модуль xmlobjects и простая конструкция вида:

import xmlobjects
import psycopg2

xml = """

   user
password
   dbname

"""

conf = xmlobjects.fromstring(xml)
conn = psycopg2.connect('dbname=%s user=%s password=%s' % (
    conf.db.dbname, conf.db.user, conf.db.password))

Написано 28-06-2010 автором goodguy

Метки:

Получение приватного SSL-ключа без пароля   нет откликов

Размещено в 13:32 в разделе ПО,Разное

Защищать приватный ключ SSL-соединений паролем в большинстве случаев очень хорошая идея, но некоторое ПО (в частности некоторые классы PHP) не всегда нормально воспринимают такие файлы, особенно в формате PEM. Чтобы дать им счастье и умиротворение достаточно с помощью openssl провести пару простых операций импорта-экспорта и получить желаемый файл без паролей:

cat my.crt my.key > my.pem
openssl pkcs12 -export -in my.pem -nodes -out my.pfx
openssl pkcs12 -in my.pfx -out my-nodes.key -nodes -nocerts

В примере из файлов my.crt и my.key получаем незащищенный файл my-nodes.key. Взято отсюда.

Написано 29-10-2009 автором goodguy

Метки:

Задание разрешения экрана в VirtualBox   нет откликов

Размещено в 09:46 в разделе Open Source,ПО

На рабочей системе я держу Kubuntu под VirtualBox в которой провожу основную разработку (привык к bash, да и gvim там как-то симпатичнее). Но вот проблема: разрешение рабочего стола у меня 1280×800, но при запуске виртуальной машины в полный экран при загрузке получаю всего 1024×768. Помогало переключение в оконный режим и возврат в полноэкранный. Но оказалось есть более удачный способ. Нужно зайти в каталог где установлен VirtualBox и запустить команду вида:


VBoxManage setextradata global GUI/MaxGuestResolution 1280,800

где последний параметр — это собственно и есть желаемое разрешение. Работает, сохраняется после выключения и новой загрузки. Такая вот магия командной строки :)

Написано 21-10-2009 автором goodguy

Отлов ошибок PECL класса HTTPRequest   нет откликов

Размещено в 09:35 в разделе Языки

В модуле pecl_http есть очень удобный, но при этом не всегда хорошо задокументированный класс HTTPRequest. Одной из проблем, с которой я столкнулся при работе с ним, это то, что в случае ошибок при HTTP-соединениях, выбрасывались исключения с текстами:


(HttpInvalidParamException) Empty or too short HTTP message: ''

Понятное дело, для отладки они не подходят. Но, если вывести исключение полностью, то обычно там как-раз и были подробности проблемы:


exception 'HttpInvalidParamException' with message 'Empty or too short HTTP message: ''' in example.php:189 inner exception 'HttpRequestException' with message 'Timeout was reached; Operation timed out after 10000 milliseconds with 0 bytes received (https://example.ru/)' in example.php:160

Видно, что самое важное содержится в сообщении от inner exception. И его, оказывается, легко поймать, если поставить дополнительный блок catch на HTTPException, например:

try {
    $request->send();
} catch (HttpException $ex) {
    if (isset($ex->innerException)){
        echo $ex->innerException->getMessage();
        exit;
    } else {
        echo $ex;
        exit;
    }
}

Информация получена отсюда.

Написано 30-09-2009 автором goodguy

Метки:

Unknown SSL protocol error   нет откликов

Размещено в 16:22 в разделе ПО,Разное

При запросе из PHP с помощью HTTPRequest к интерфейсу одной серьёзной биллинговой системы получал постоянно ошибку «Unknown SSL protocol error in connection to xxx.xxx.xxx.xxx:443». Быстрый взгляд в гугл подсказал только перебирать параметры, что оказалось вполне верной догадкой: оказывается хост нормальное работал с SSLv2, который не использовался при соединении. Пришлось указать принудительно строкой:

$req->setOptions(array('ssl' => array('version' => SSL_VERSION_SSLv2)));

Потом правда всплыли и другие прелести, вроде отдачи XML в UTF-8 с типом «text/html; charset=ISO-8859-1», но такие шутки находятся быстрее и решаются проще.

Написано 28-08-2009 автором goodguy

Метки:

Загадка бытия   1 отклик

Размещено в 10:09 в разделе Разное

Почему в Eclipse до сих пор не сделали такой банальной вещи как цветовая схема?

Написано 18-06-2009 автором goodguy

Чудны дела   нет откликов

Размещено в 09:45 в разделе ПО,Разное

Удивительно, но совсем рядом с теми людьми, кто проводит конференции разработчиков высоконагруженных систем находятся довольно забавные люди. Кто-то сравнивает непонятно что, непонятно с чем, а кто-то, видимо, начитавшись подобного пишет платёжные системы на ASP.NET, сталкивается с проблемами нагрузки и, вместо того чтобы заниматься оптимизацией БД, репликацией, установкой load balancer’а, делает такой финт: ставит несколько серверов, обслуживающих веб-запросы, которые за собой лезут к единой базе. Клиентам предлагает самостоятельно искать, какой-же из серверов сейчас доступен. Но даже, если ты счастливо находишь этот доступный сервер, это не значит, что ты совершишь свою операцию: база то одна на всех, и задержка ответов у неё дикая, и, например, список доступных провайдеров выдать быстро уже не может. Ну хорошо, отвечают они, вот вы действительно не можете получить этот список, так попробуйте увеличить время ожидания ответа. Но, максимальный таймаут прописан уже на их стороне, в обслуживающем веб-сервере и увеличить его никак! Задаюсь теперь вопросом: сколько же должно быть записей, чтобы для их получения и форматирования в SOAP-ответ требовалось более 3 минут? Вопрос почему же нельзя сделать простейший master (read/write) — slave (read) и брать статусы, списки и т.п. со второго сервера, а так-же почему бы не сделать простейший скрипт распределения нагрузки самим уже отпал :)

Дополнение: В процессе работы выяснился момент, что у ребят в WSDL были указаны неверные адреса сервиса, из-за этого и происходили проблемы с получением списка. Но перебор серверов всё-равно требуется.

Написано 11-06-2009 автором goodguy

Метки: ,

PHP и SOAP Message Security   нет откликов

Размещено в 18:44 в разделе Языки

Очередной случай из жизни натолкнул меня на мысль расписать, как из PHP создать подписанный по стандарту SOAP Message Security SOAP-запрос по SSL-соединению. Насколько я понимаю, стандарт этот не единственный, но используется достаточно широко и базируется на различных XML-стандартах W3C.

Сама суть механизма подписи хорошо описана в этой статье, из которой и я почерпнул для себя несколько полезных моментов, на которых возник ступор поначалу. Но предлагаемый мной вариант имеет одно важное дополнение: он добавляет в SOAP-сообщение ещё и информацию о сертификате, с помощью которого была сделана подпись. Кстати, меня удивила логика одной системы, для которой это делалось (кстати, написанной на Microsoft’овских компонентах): помимо сертификата в SSL-соединении они ещё проверяли сертификат и в самом запросе, хотя могли бы и воспользоваться данными HTTPS и тем самым получить ещё дополнительную проверку того, что соединение открыто тем самым агентом, который подписывал запрос.

Основным моментом в подписи является то, что собираются хэши (дайджесты) узлов с данными, которые будут подписаны (при этом узлы приводятся в канонический вид с помощью утилиты xmllint из комплекта libxml2). После чего собранные внутри одной «обёртки» дайджесты подписываются ключом сертификата, тем самым гарантируя, что если подпись верна, то данные в этих узлах не были изменены во время передачи запроса.

Класс так-же переписывает механизм HTTP-запроса к удалённому серверу, т.к. даже с помощью stream_context PHP не позволяет использовать совместно с SOAP сертификаты в формате PKCS12. В итоге используется HTTPRequest, результат которого уже транслируется далее в обработку.

Написано 29-04-2009 автором goodguy

Метки: , ,