Category Archives: Web

Обо всём, что связано с WEB технологиями и мной

Web 2.0, AJAX и то, как я это делаю

Так как свежая волна пошла, всем нужна динамика, всем нужен AJAX, такие красивые и удобные возможности, как “редактируем на месте”, “субмит формы без перегрузки”, полупрозрачности и, прочая красота и излишества для буржуйской жизни, я начал везде внедрять Prototype JavaScript framework. Prototype JavaScript framework для меня не только популярная и удобная AJAX библиотека, но и отличное подспорье в проектах. Не надо думать о многом, заниматься написанием сложных парсеров XML, заморачиваться на работе с формами, а просто используешь довольно удобный интерфейс этой библиотеки. Конечно, описания у неё минимум на сайте производителя, но в сети можно найти пару неплохих примеров-уроков: Которкий вводный курс в Prototype, Краткий обзор библиотеки Prototype, Записки разработчика о prototype.js.

На основе Prototype JavaScript framework написали следующую библиотеку: script.aculo.us (я никак не могу запомнить это название, а тем более выговорить). Это маленький набор эфектов: визуальные эфекты, Drag-and-drop, элементы управления. Не слабенькая библиотека, способная поморгать, потрясти, эфектно спрятать элемент интерфейса/дизайна, нарисовать за несколько минут вашего времени auto-completing с изпользованием AJAX (причём парсить XML вам не придётся, а всего сделать лист, а если что-то сложнее, то немного пописать JavaScript). Жаль только что у них сайт местами выглядит как развалившийся…

Это были старые новости, теперь посвежее: Не так давно, на основе Prototype 1.5, с использованием эффектов от script.aculo.us, сделали библиотеку для “игр” с окнами: Prototype Javascript Windows. К сожелению, всё это не всегда срабатывает так как хочется (у меня не грузит “шапку” окон), пока версия 0.80, и оттестированна в IE6, Safari, Firefox и Camino, хотя мне в Opera отработало совсем не плохо. Будем ждать стабильных релизов. Хотя, уже сейчас можно красиво отстилизировать сообщения об ошибках, сделав их на родном языке пользователя, а не стандартными диалогами броузера.

Так сказать – рекомендую, для облегчения труда.

ZEND, фреймворк, прочее и PEAR во фреймворках

О! А я и не заметил, что ZEND сменил дизайн для свого фреймворка… Зелёненький логотипчик… Опять такой гламурненький, для PHP уж очень гламурненький… Последний релиз аж 18 апреля – что-то они не спешат. Не пора ли поджимать в этом плане? Ах… ну да, а зачем ;-)

Скачал их дистрибутив. В нутри папка: incubator… Это специально так, об искуственном “высиживании”? Что-то я не вижу пока там ничего вкусного… Простите, а есть где реальный пример, что-бы на этом летало что либо?

Вообще, осматривал фреймворки на PHP, очень часто встречал слово PEAR, что меня сразу заставляло от этого дела отказаться (т.е. не смотреть дальше). Простите меня, но для фреймворка использовать PEAR – зверство и свинство. Я что, должен мало того, во фреймворке разобраться, так ещё и PEAR ставить нужной версии?

Как убить Firefox 1.5.0.4 при помощи marquee

Уже месяц пользуюсь Basecamp, а так как данный “софт” лучше всего работает в Mozilla Firefox, я тоже начал усиленно его использовать. Вроде всё хорошо, и даже он успел один раз обновиться в автоматическом режиме… И какого было моё удивление, когда я узнал сегодня от SecurityLab о такой детской уязвимости. Набор Marquee убивает его… На повал… Не ну меня на странице такой набор Marquee тоже вводит в ступор… потом я падаю под стол и долго дёргаюсь в конвульсиях от смеха, но я то человек, я не жгучий лис, мне можно ;-)

А те, кто ненавидят Mozilla Firefox, могут немножко пошутить, пока Mozilla залатает это место. Интересно, какие наботы тегов ещё выводят Mozilla Firefox из равновесия?

Делал свой маленький набор Web-разработчика

С самого утра собираю маленький (334 MB) наборчик для себя, что-то вроде Денвера. Вот только под себя и для тех кто рядом… Входит в него: Apache 2, MySQL 3.23, MySQL 4.0, MySQL 4.1, MySQL 5.0, PHP 4.4.2 и phpMyAdmin. Всё устанавливается как сервисы по запуску одного .bat файла, удаляется так-же (сервисы с префиксами, и по-этому если что-то из этого списка стоит, его достаточно будет остановить). Надо только что-бы был свободен 80 порт для Apache и 3305-3308 для MySQL. Никаких файлов копировать в системные каталоги не надо. Причём тут-же ещё и дебугер установлен (для особо продвинутых). Если архивом, то весит 112 MB.

По хорошему там не хватает ещё SMTP/POP3 какого сервера, для отладки рассылок, отсылок, засылок всяких (я думаю это был-бы Mercury Mail Transport System)… И мануала, как что делать… Мне следовало такую вещь собрать уже давно, что-бы небыло таких проблем и глупых ситуаций…

В принципе, ничего сложного – всё складываем рядом в один каталог, так что бы легко можно было кидать на флешку или болванку, DLL от PHP (и сам php4ts.dll и из каталога dll) кидаем к Apache в каталог bin, жёстко прописываем пути. Всё это легко ставиться из командной строки (как не странно для MS Windows 2000/XP) и без всяких srvany.exe. Просто данный софт (Apache, MySQL) отлично сам преспособлен к такой работе.

Об изобретении велосипедов на PHP и клонах

Берём Rails, долго на них смотрим и изучаем. Даже несколько внутренних проектов делаем. Приятно, удобно, но! В результате надобности интегрироваться в старые проекты на PHP, в результате желаний клиента что-то с чем-то совместить, мы всё равно берём PHP (так как кругом всё упорно на PHP… Одно PHP у нас даже кто-то Rails с phpNuke сравнивал). Жаль… да? А вот и нет! Берём наработки, скопившиеся в закромах мозга в течении 5 лет. Берём знание по PHP 4, серверочек для разработок и за дня два собираем маленький, лёгкий клон Rails под один проект (а кто знает что будет потом). Да, не такой навороченный, да, не такой отттестированный, но он позволяет нам в течении нескольких дняй без особого программирования и не писания запросов складывать несколько десятков форм с максимальной отдачей. Приятно. Rails – супер! Даже как муза, как источник для вдохновления и подражания. Пусть там overloading через одно место с массивами, пусть там вместами запросы не совсем оптимизированны – но большая половина рутины уже сделана один раз. Мне нравиться, мне удобно… А показать… Вот не знаю… Может однажды – не могу обещать – оно не мне пренадлежит.

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

Немного о том, как я всё вижу

Есть программное обеспечение “А”, способное выполнять всё строго в своей функционалии: А::ф[а-я], и имеющая возможности к расширению А::р[а-я], причём не нарушая никаких правил, законов, лицензий и не выходя из основной ветки ПО “А” (скажем только плугинами, шаблонами, тем, что безболезненно можно создавать и менять, не боясь смены версий ПО “А”). Основываясь на этом, реализуется что-то вроде ПО “Б”, которое есть ПО “А” + А::ф[а,б,д] и А::р[о,п,р,с,т]. Сами понимаем, что некоторые реализации А::р[о,п,р,с,т] будут не оптимальны (зачастую изза обходов разных, и соблюдения всего API, опять же не выпадая за рамки разумного). Всё прекрасно, всё работает, и даже можно рассматривать возможности к расширению ПО “Б” путём использования оставшихся А::р[а-я] и новый возможностей. Так можно придти к ПО “В”, “Г”, “Д”… Всё время наращивая довесок к ПО “А”, пока не получиться желаемый результат “XXX”. Вот только желаемый результат может быть не совсем таким, каким должен быть, или ожидался. По моему, это примерно как из ЗАЗ-965 “Запорожец” попытаться сделать гоночный болид “Формулы 1”, не изменяя его кузова, двигателя, прочей начинки (вобщем всего, что идёт с завода-изготовителя и замене простым пользователем не подлежит), а только сменя ему резину, навешав спойлеров и залив ракетное топливо в бак.

Не делайте так… Прошу вас… Не надо. Если вы строите гоночный болид, истребитель или быстроходный катер, то стройте, пожайлуста! Но не надо его строить основываясь на модель ЗАЗ-965 “Запорожец”, АН-2 “Кукурузник” или надувной лодки для одиночной ловли пескарей в болоте. Такие модели требуют тщательного анализа, разработки и доводки, а не принципа: приварим, посмотрим, если не подойдёт – отрежем. По моему из этого ничего хорошего не получиться. Ах, ну да, попсовая и модная штуковина, показывая которую, можно будет сказать, что её сделали основываясь на очень популярном продукте. В момент её представления, никого не будет волновать те лишние 20 запросов в базу, не понятные нормальному программисту сортировки после выборки данных из базы. Их будет просто не видно… В начале… А потом… В потом я ещё не заглядывал… Надеюсь и не загляну никогда.

Wordwrap и Multibyte String Functions

PHP не перестаёт удивлять… Языку 10 лет, нет даже больше… А с функциями полный бардак я бы сказал… Сегодня мне понадобилось разбить юникодную сторку на строки, как это делает wordwrap… Естественно я пошёл в Multibyte String Functions… и что вы думаете? Я нашёл её эквивалент? Нет… нету… даже никаких замашек… Получается, что простую строку врапить им надо, а мультибайтовую не надо… Мультибайтовые строки PHPисты не врапят… Ну если тока своими силами… Интересно сколько человек в день наступают на эти грабли? Неужели нельзя продублировать стандартные функции с однобайтовыми строками для мультибайтовых? Ведь, XXI век на дворе, везде шагает юникод…

Я прекрасно понимаю, что вот если мне надо, то я могу пойти и попытаться на C (Си) сам реализовать эту функцию (заодно выучив C, и разобрав исходники PHP), пересобрав потом PHP, но я не могу это сделать на всех хостингах, где мне это надо… И даже после контрибуции мей, если бы я её сделал, оно на хостинги доходило-бы в течении 2-4 месяцов…

Вот так и мучаешься всё время, таская за собой разные самопальные библиотеки, которые, вроде-бы должны быть давно и везде…

PHP и иконки

Блин… PHP оказывается не умеет распознавать такой вид графики, как иконка. Да да, этот самый .ico ему не знаком. getimagesize скажите вы? Фигвам! Только GIF, JPG, PNG, SWF, PSD, BMP, TIFF(intel byte order), TIFF(motorola byte order), JPC, JP2, JPX, JB2, SWC, IFF, WBMP, XBM… Кто из них ICO? А никто… И не надо про BMP, не надо! Да они там немного совместимы, но только маленько… Вот ходи и ищи теперь, как определить – иконка это или нет…