2 августа в Ростове-на-Дону прошла вторая (хотя в каком-то смысле и первая ))) ) встреча сообщества RostovOnDon.pm. Организовал все это безобразие sharifulin, за что ему отдельная благодарность.
Нашел в сети новый стартап. В основе лежит уже, наверное, всем известная история скрепки. Я такой идеей тоже горел ) Теперь вот есть возможность попробовать на деле. Надеюсь, что-нибудь получится )))
Только что в блоге Хожу на Работу в Интернет обнаружил заметку Google AdSense Плохие Слова.
В одном из комментариев была ссылка на список "плохих слов" на которые этот самый Google AdSense ругается.
Я очень долго смеялся с того, почему слово johnson такое плохое :)
Что такое событийная машина POE я кратко рассказывал в одной из предыдущих заметок.
Под сетевой многозадачностью будем понимать параллельную обработку входящих и/или исходящих сетевых соединений системными, либо прикладными приложениями.
Почему именно POE? Вопрос, конечно, требующий обоснования. Для начала рассмотрим какие вообще бывают способы обеспечения многозадачности. Я знаю три
Совсем недавно натолкнулся на статью, доказывающую, что Perl не мертвый язык, как многие считают, а очень даже живой.
Мой перевод этой статьи можно найти здесь.
А по-русски, платформонезависимый фреймворк для создания многозадачных и сетевых приложений на Perl.
POE позволяет достаточно просто и быстро создавать многозадачные приложения, особо не задумываясь об управлении процессами и другими приятными вещами, с которыми приходится сталкиваться при желании написать многозадачное приложение. Всю эту нагрузку на себя берет POE, мы лишь описываем, что мы хотим делать. В большинстве случаев все приложение выполняется одним процессом, но при необходимости, POE умеет порождать дочерние процессы и общаться с ними.
Никогда бы не подумал, что буду что-то про верстку. Но жизнь штука странная. Да и люди бывают не очень продвинутые в web-технологиях и просят сделать вроде бы простые, но на первый взгляд невозможные вещи.
Думаю, все знают стандартный элемент формы для загрузки файлов. Вот он
А вот теперь попробуйте сделать его красивым. "Легко, ведь есть CSS!!!" - скажут многие, и многие будут правы. Но попробуйте сделать так
Слабо? Вот и мне сначала было слабо. Ведь заменить этот элемент нечем, этого требует безопасность. Вы же ведь не хотите, чтобы страничка умела сама по себе загрузить Ваш файл? Не найдя у себя в голове и в документации решения этой проблемы я решил спросить у Яндекса. Говорят там найдется все. И правда, нашлось. Ответ был короток: "Никак. Или так." Ничего больше Яндекс не нашел. Я изучил эту статью, но сделать как там у меня не получилось, видимо и не особо хотелось. Особо насторожил большой скрипт, который, при ближайшем рассмотрении, как оказалось, делает одну простую и не понятно зачем нужную вещь. Он просто ищет все элементы типа file и оформляет их как положено. Но зачем нам такая радость, если у нас на странице целых 3 таких элемента? Правильно - не надо нам такого. Еще очень не понравился пример работы этой радости (самый последний по той ссылке). Сами попробуйте и поймете. Вот я и решил воспользоваться не самим способом, а только его идеей. За что огромное спасибо Michael McGrady. И у меня получилось. Причем от скрипта не осталось и следа.
Вот блин...
Неожиданно наткнулся на одну проблемку.
При написании скрипта на Perl нашел то ли баг, то ли не знаю что в модуле POE::Component::Client::HTTP. Дело в том, что во время выполнения запроса при получении объекта HTTP::Response в заголовке запроса исчезают куки. Вернее не исчезают, а остается только последняя. В версии клиента 0.57 (именно она ставится при помощи модуля ppm) все было нормально, в версиях 0.79 и 0.80 (последняя на сегодня) этот "баг" был мной обнаружен. Сейчас буду изучать код в поисках истины.
Нашел.
Перебрал весь код POE::Component::Client::HTTP. А дело оказалось даже не в нем
Проблема в POE::Filter::HTTPHead строка 90.
$self->[WORK_RESPONSE]->header($1, $2);
Дело в том, что метод header добавляет заголовок в объект HTTP::Response, но если такой заголовок уже есть, он перезаписывается.
После обработки этим фильтром мы получим:
HTTP/1.1 200 OK
Cache-Control: no-cache, pre-check=0, post-check=0
Connection: Close
Date: Mon, 22 Jan 2007 10:19:49 GMT
Pragma: no-cache
Server: Apache/2.0.53 (ASPLinux)
Content-Type: text/html; charset=WINDOWS-1251
Expires: 0
Set-Cookie: phpbb2mysql___u=a%3A0%3A%7B%7D; expires=Tue, 22 Jan 2008 10:19:50 GMT; path=/;
Т.о. мы потеряли все куки кроме последней.
Исправляется данная проблема просто. В строке 90 вместо $self->[WORK_RESPONSE]->header($1, $2) пишем $self->[WORK_RESPONSE]->push_header($1, $2).
Недавно правил один из своих сайтиков. Движок был заточен под MySQL и прекрасно с ним работал. Но этот проект пришлось поднимать на MSSQL. Долго извращаясь, у меня это все-таки получилось. Синтаксис неповторимый.
На днях поступила жалоба, что при попытке написать сообщение вываливается ошибка драйвера БД. При ближайшем рассмотрении выяснилось, что не экранируются кавычки. Смешно? Идем дальше. Экранирование кавычек у меня всегда было. А тут нет. Странно. Вспомнить почему именно так я не смог. Причина оказалась смешной. В модуле MSSQL для PHP нет функции аналогичной mysql_escape_string(). УЖОС.
Первое, что пришло на ум, использовать функцию mysql_escape_string(). Но не тут-то было. Проблема осталась, хотя экранирование работало. Помог опыт программирования на VB. Кавычка экранируется ее повторением. Т.е. чтобы кавычка попала внутрь строки, перед ней надо поставить не \, а просто повторить ее. Ржунимагу. Ну как так можно?