Записи декабря 2009
Shinobi 0.8.5
Очередное обновление бета-версии Shinobi.
Внедрена поддержка альтернативных адресов для записей в блоге. Теперь можно оставлять /post-2009-12-25.rhtml, а можно для каждого поста придумывать свой URL, например, /shinobi-update.rhtml. Поправлены некоторые вещи, оптимизирована работа со страницами.
Выяснил, что без кэша фреймворк работает так же быстро, как с кэшем, соответственно, необходимость в нём отпала.
Пахнет Новым годом
Наконец-то им запахло. Недалеко от работы ёлочный базар. Аромат неповторимый: хвойная смола, свежие иголки, ёлок море, и пахнет просто потрясающе.
Жаль, что запах нельзя сфотографировать.
SEO в Shinobi
Движок (фреймворк-CMS) Shinobi обновился до версии 0.8. Изменения:
1. Небольшие исправления в результатах работы JavaScript-редакторов.
2. Страницу теперь можно отредактировать не только из меню «Страницы», но и с текущей страницы — при администраторском заходе внизу появляется кнопка «Редактировать».
3. Лёгкие изменения в словаре.
4. Для профессионалов в SEO добавлены поля «Ключевые слова» и «Описание» для всех записей и страниц (которые перезаписывают META-тэги и являются более приоритетными перед теми, что указаны в настройках). Если их оставлять пустыми, то в соответствующие тэги будут помещены значения из настроек. В плагинах и на прочих динамических страницах можно просто задать новые значения переменным $metakw и $metadscr.
В начале следующего года будет открыт сайт, посвящённый Shinobi.
Картинка
Анимэшная картинка, но как классно тело прорисовано.
Перехват событий при перестройке DOM
Проблема JavaScript и JavaScript-фреймворков в том, что они не перехватывают события, связанные с элементами, которые были добавлены в объектную модель документа динамически, при помощи того же JavaScript’а. То есть вот есть функция, которая ловит клик на определённом классе элементов, и всё работает. Но тут мы добавляем ещё элемент с таким классом, и на него обработчик события уже не распространяется, что грустно. В jQuery 1.3 уже появилась функция live(), которая похожа на bind() и исправляет ситуацию для некоторых обработчиков, например, click(), но не для всех, что тоже грустно, во-первых. А во-вторых, разработчикам какого-нибудь хорошего JavaScript-фреймворка должна прийти идея (и воплотиться, понятное дело) о том, что обработчики события должны перезагружаться после каждого обновления дерева элементов, чтобы кодирование было более прозрачным, а не приходилось заново вызывать обработчики, вешая их как коллбэки.
Усложнение
Смотришь на код популярных фреймворков и думаешь строчкой из «Наутилуса»: «Зачем делать сложным то, что проще простого?»
В некоторых случаях, чтобы поправить какую-то мелочь на странице, приходится редактировать 4 или 5 файлов. На мой взгляд, при построении даже сложных систем нужно соблюдать принцип, когда вёрстка не зависит от программных особенностей приложения, и какие-то блоки можно переместить без искажения функциональности. Следует избегать повторения участков кода, прямой зависимости вёрстки от программной логики и наоборот: если связи ослаблены, то изменение кода становится более гибким. Особенно сильно страдают от этого Struts и все PHP-фреймворки с принципом MVC: выдержанная идеология ставится на одну чашу весов, а тяжеловесность фреймворка и скорость разработки — на другую.
Спор о том, что лучше: ООП/MVC-фреймворк с большим количеством файлов или гибкий легковесный фреймворк на принципах процедурного кода — настолько же идеологичны, как и споры о том, что лучше: изобретательная вёрстка или валидная вёрстка.
О важности аккуратного кода
«Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете».
Steven C. McConnell — программист и автор книг по разработке ПО
About Shinobi
Here will be the description of Shinobi blog engine: see a special page.
Now it works as a beta; updates coming soon.
I am to decide now if it has to be free downloadable with restrictions for commercial use, or commercial only (I don’t want set too high price for it). Anyway, soon we will be pleased to open an official website for Shinobi.
Shinobi и файлы
Изначально фреймворк Shinobi не использует баз данных, а работает с текстовыми файлами. Это не значит, что БД нельзя использовать для каких-то задач в плагинах. Но файловая концепция предполагает логическое продолжение.
Во-первых, особое внимание уделено удобному файловому менеджеру. Сейчас он не умеет только переименовывать файлы и не использует драг-н-дроп (можно ещё сделать встроенное редактирование текстовых файлов, но необходимость пока обдумывается), остальное в нём есть: вы можете аккуратно раскладывать файлы по папкам и вообще использовать эту часть блога как приятное файлохранилище. В базовый пакет поставки входит папка files, которую и стоит использовать для этого.
Во-вторых, к записям в блоге можно прикладывать файлы любого формата. Начиная с версии 0.7.5, на которой сейчас работает этот блог,— любое количество файлов. До прошлой субверсии было загадочное для меня самого ограничение: к посту можно было приложить только один файл, а при редактировании, если приложить другой файл, удаляется первый. Это наследие системы iLyte, и очевидно, раньше ограничение было обосновано. Сейчас же изначально к посту можно приложить один файл, а при каждом редактировании добавлять до бесконечности (до окончательной публикации запись можно сделать закрытой) и удалять ненужные. Все приложенные картинки располагаются до текста записи, а файлы остальных форматов — после текста. При добавлении файлов к записям они сохраняют оригинальные имена, только кириллица заменяется на латиницу, обрабатываются некорректные символы, а если файл с таким именем уже существует, то название будет немного модифицировано: например, перед расширением добавится единица.
Обновление Shinobi
Фреймворк и движок блога Shinobi обновился до версии 0.7. В нём исправлено или улучшено много мелочей, касающихся вёрстки, смены шаблонов; теперь движок умеет рассылать уведомления о дискуссиях тем, кто оставил свой электронный адрес в комментариях — не только при новых комментариях, но и при добавлении ответов администратора сайта; вероятно, последнее стоит сделать опциональным. Улучшены стили оформления по умолчанию. Шиноби ждут новые улучшения.
Адреса страниц в блоге
Кроме красивого кода и красивого дизайна хочется сделать красивые URL (адреса страниц). И если с обычным «страничным» сайтом всё понятно, то с блогом всегда возникают вопросы. Кому-то достаточно обычной строки запроса вроде ?p=456, кто-то приводит её в порядок средствами .htaccess и делает из неё псевдостатическую страницу: p465, или note/465, или p465.htm.
Очень часто URL формируется из даты + номера записи, как на этом блоге: post-2009-11-13.rhtml, что удобно. Многие любят, чтобы из заголовка «Какой прекрасный день» автоматически создавался адрес страницы kakoj-prekrasnyj-den.htm, что вызывает сомнение: вроде по адресу легче идентифицировать страницу, когда перебираешь адреса в строке браузера, но выглядит не слишком симпатично, особенно если заголовок длинный.
Оптимальное решение, на мой взгляд, такое: при добавлении записи давать пользователю возможность ввести альтернативный адрес страницы. Например, к записи с упомянутым заголовком я бы приделал URL wonderful-day.htm. Если же ничего не введено, то адрес остаётся стандартный, собранный из даты.
Скоро эта возможность появится в Shinobi.

