Путь длиной в тысячу миль начинается с одного шага..

Неожиданно пришло осознание, что я уже очень давно не писал нормальных программ. Не знаю что повлияло — тотальное чувство усталости, отсутствие дома компа, наличие велосипеда… Учебе это, разумеется, не помогло, и надо начинать заново.

В копилке уже штук 6 проектов — начатых и недоделанных. Это проблема, и проблема состоит из нескольких частей.
Во-первых, жадность — плохая штука: нет смысла экономить, если дело серьезное. По крайней мере, на вещах, которые точно не сделаешь самостоятельно. Для меня это дизайн. На каком-то этапе это рутина, которая остановит проект и отвлечет на себя внимание, а после застопорит его намертво.
Во-вторых, надо четко продумывать цели, в том числе и промежуточные. И плясать от них. К чему это? К третьему, самому важному пункту, и названию поста.
Все проекты достаточно крупные в задумке, и попытка реализовать бОльшую часть проекта до его запуска, разом — фатальна. Стимулом всегда является какая-то жизнь, развитие. Надо начинать с маленьких шажков, и лишь потом постепенно наращивать массу функционала. Пожалуй, хорошим примером в этом плане может служить сегодняшний сервис Google вопросы и ответы — он имеет все еще очень малый функционал, и новые возможности появляются раз в 2-3 месяца (зачастую сопровождаемые серьезнейшими багами), но сам сервис уже очень и очень активно работает не первый год.

Надо, надо стремиться к лучшему, но уж если делается что-то свое — надо делать его постепенно. Нет смысла клепать идеальную CMS под себя — под себя в своем проектике можно заточить все ручками, а создание универсального сверхгибкого монстра неизбежно приведет к бесполезности этой работы — ибо ничто гибкое не может быть максимально эффективным. Если же максимум эффективности не требуется — так тот же Drupal подойдет на все 200% — там уже тьма возможностей, гибкость по самое «не могу», кеширование и пачка тем из коробки, сотни модулей… Своя система должна быть маленькой, быстрой и создаваться мелкими-мелкими порциями, чтобы не угас энтузиазм. Может, это неправильно для гуру-программистов, создающих аналог Одноклассников за три часа с завязанными глазами, но я человек маленький и буду этого правила придерживаться… Похоже — для меня нет другого пути:)

Склерозом по CMS, или какая система управления контентом наименее прожорлива.

Не так давно состоялось мое знакомство с относительно свежим WordPress. Вау. Раньше он казался мне небыстрым, но, в целом, достаточно легким — я ошибался. Свою ошибку я осознал в полной мере, когда эта система начала падать от _одного_ пользователя на 64Мб VDS сервера. Процессора со скрипом хватило, а вот памяти — увы. Когда я пошел ближе знакомиться с этим чудом моему удивлению не было предела — результаты тестов превзошли любые ожидания и мне до сих пор непонятно, как разработчики этого добились. Подобные циферки сподвигли меня произвести еще несколько замеров — и вот что получилось:

Потребляемая память по различным CMS, а также дополнительные параметры:
WordPress 2.9.2 — 22Mb. Условия запуска — 1 виджет, 1 плагин. Вау.
ExpressionEngine Core (EECore) 1.6.8 — 5.8Mb. Практически чистая инсталляция с небольшими правками шаблона. Это бесплатная версия Expression Engine, предоставляющая функционал блога.
Drupal 4.6 — 10Mb. Это нечестное сравнение — здесь замеры проводились на живом проекте, с достаточно большим числом сторонних модулей и некоторым количеством страниц. Оба этих параметра оказывают заметное влияние на Drupal.
MODx Evolution 1.0.3 — 2Mb. Чистая инсталляция. Вау! При этом изначально включено кеширование, время генерации страницы на локалхосте также впечатляет:
MySQL: 0.0185 s, 12 request(s), PHP: 0.1096 s, total: 0.1280 s, document retrieved from database.
MySQL: 0.0023 s, 0 request(s), PHP: 0.0749 s, total: 0.0771 s, document retrieved from cache.
Мне нравятся эти цифры :)

В данный момент я активно разрабатываю проект на Drupal, но, похоже, следующее столкновение с CMS не пройдет без участия MODx, не смотря на навязчивые предложения зарегистрироваться и сделать donate на официальном сайте, и напряженную ситуацию с (крайне дырявой) русскоязычной документацией.

Заметки на полях: Из приведенных систем ExpressionEngine и MODx имеют особенность — они хранят шаблоны в БД. Разработчики MODx пошли дальше — PHP-плагины, используемые в шаблонах, хранятся там же… Уж не знаю, насколько это удобно, и какие сулит проблемы, однако попробовать стоит.

Экстремальное программирование

Мы не ищем легких путей — к описанию экстремального программирования я пришел начав со статей по тестированию :)

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

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

Впрочем, подобные техники актуальны только для зарубежных компаний — вот не представляю совкового типа фирму, в которой будет решено, что подобное «совмещение» скажется на финансах положительно, а не отрицательно.

ToDo, ближайшие планы

+2 личных проекта.
Запуск первого — текущая неделя. Второго — неясно. Дизайн — предположительно стартует в начале мая, за 2 недели надеюсь на окончание первого.
Первый проект прост почти до безобразия, второй — темная лошадка с непонятной платформой для реализации. Хуже того — ладно бы платформы, на том же WordPress можно построить очень даже сложные и любопытные системы с минимальной доработкой или даже простой настройкой, но надо понять что будет, как это все будет взаимодействовать… Тихий ужас.

Мне определенно не хватает совета и технической поддержки умного человека…

Кратенько об MVC

Дело было вечером, делать было нечего…
MVC это крыса, которая бегает по углам, и делит углы… ой, не то.
MVC — Model-View-Controller это логика (принцип, парадигма, или любое другое умное слово) разделения продукта таким образом, чтобы потом не было мучительно больно. А именно, вот так:

Model — кусок программы, который общается с БД (или другим хранилищем информации). Можно его обозвать API нашей структуры базы данных для конкретного приложения. Как пример функций, которые реализуются в Модели — вывод последних 10ти постов блога, добавление записи, обновление, удаление и т.п.

View — отображение. Это шаблон (для нас это обычно будет HTML с PHP вставками, но может быть что угодно (XML, допустим). Он _не_ содержит _никакой_ логики — только конечный вывод переменных.
Controller — самая умная штука, которая лежит посередине между ними. Он получает от Модели значения, которые потом будут отображены во View шаблоне, делает обработку и проверку возвращаемых значений (этим может заниматься и Модель, но Контроллер _обязан_ это делать), передает их Модели для записи и осуществляет любую логику, преобразования и действия.

Зачем это все придумали? Чтобы было легче и удобнее что-то менять. Можно поменять весь вывод, поправив файл Шаблона — и не лазя по дебрям кода. Можно изменить структуру БД, заменив при этом Модель — а логика приложения вообще не потребует пересмотра. Вот такая маленькая перестраховка, которая экономит потом массу времени даже для не очень крупных проектов.

Лирическое отступление: HMVC — то же самое, но плюс H — hierarchical, то бишь, иерархическая. Эта модель предполагает наличие иерархии (обычно, в виде файловой структуры) в которой может содержаться несколько одинаковых по названию элементов (Моделей, Контроллеров или Шаблонов), которые перекрываются от частного к общему по какому-то условию. Так, допустим, можно сделать два View страницы: для администратора и для пользователя, и один общий контроллер. При этом View администратора перекрывает View пользователя, а вот частного контроллера для администратора нет, поэтому подключается общий пользовательский контроллер.

Сезон веб-садоводства начался

Угадайте, что это за адрес такой: otherweb.drupalgardens.com/?

Да, это именно он — сайт на ДрупалГарденс, и это значит, что сады открыты для желающих потренироваться в создании сайтов. Что я могу сказать — потрудились на славу: меню стало таки более удобным, хоть и непривычным, к тому же оно работает на AJAX поверх основной страницы, что позволяет и работать удобнее, и сервер меньше нагружать. Пять красивых дэфолтных тем с возможностью их достаточно гибко настроить из админки, хороший набор начальных модулей — удобно, функционально и красиво. Плюс возможность экспорта текущего состояния сайта и БД для тех, кого не устраивают условия хостинга — а он предоставляется на платной и бесплатной основах.

Кстати, о птичках и хостингах — на Drupal Gardens предусмотрено три типа стандартного хостинга для больших и маленьких, и любой пакет до конца 2010 года будет полностью бесплатен. Думаю, это вполне неплохое предложение для тех, кто хочет попрактиковаться в сайтостроении и не хочет на первых порах платить за домен и хост, а последующий переход будет заметно облегчен кнопкой «экспорт».

В сад, все в сад!

Сегодняшний день вообще полон сюрпризов, так что рад представить еще одну новинку, которая получила зеленый свет — ДизайнКадабра. Этот волшебный сайт предназначен для дизайнеров и позволяет в пару кликов мыши превратить завалявшийся и неиспользуемый дизайн в хорошую плюшку.

Приятное с полезным - думаем на Java

Не сидится мне на месте. Вот уж не знаю, что с этим делать, но второй активный проект заморожен, я работаю над третьим, а в промежутке пришла в голову мысль, что учиться надо активно.

Как результат, в полном разгаре сейчас установка NetBeans для Java, а на заднем плане висит окошко с eBook посвященной этому замечательному языку. А чтобы было не так скучно, eBook я буду читать на родном английском — благо, на русском достать что-либо адекватное не удалось :)

Если Вы также решите заняться изучением, то кроме книги Вам понадобится среда разработки (NetBeans или Eclipse, к примеру), а также JDK и JRE с сайта java.sun.com/

Кстати, говорят что Thinking in Java Брюса Экеля это одна из лучших книг — так что буду поднимать свой скилл, и делиться впечатлениями. Оставайтесь на связи)

Фреймворки - повышаем скорость разработки

С этим временем что-то неладное: оно увеличивает скорость своего хода, при чем делает это безо всякого предупреждения, исподтишка, пытаясь застать нас врасплох. Неприятно, но уж такова его природа, и ничего с этим уже не поделаешь, поздно перевоспитывать — а выход искать надо.

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

( Читать дальше )

Мой выбор софта для Ubuntu

Есть не один десяток специализированных блогов, на которых вы можете найти список программ, используемых автором, перешедшим с Windows на Ubuntu. Столь же несложно найти и обзоры программ какого-то конкретного назначения, будь то аудио/видео проигрыватели, icq-клиенты и прочее-прочее. Однако пусть еще один небольшой обзор увидит свет. Цели его весьма скромны: во-первых, при частой переустановке системы по разным зависящим и независящим от меня причинам мне время от времени приходится заново устанавливать весь этот софт на Убунту, держа его при этом в памяти, во-вторых, он может, и впрямь, кому-то пригодится. Итак…

( Читать дальше )

Дорерайтились

Честно говоря, я не считаю что рерайт, то бишь творческая переработка готового текста, легче чем копирайтинг. Копирайтер зачастую может себе позволить добавить личное мнение, составить весьма объемный текст на основе скромного объема информации, в то время как рерайтеру обычно надлежит сохранять структуру, логику повествования, и уложиться в достаточно узкий промежуток между слишком малым и излишне большим для заказчика объемом. Наверное, именно эта привычка пагубно влияет на другую — не менее полезную. Многие за рутиной даже в свободных статьях, которые пишутся «для себя», забывают думать, что, надо заметить, весьма прискорбно.

Наверное, наиболее бросающийся в глаза пример, это «мечта блоггера». О, сколько личных блогов, тематических и обычных, преподносят нам шаблонные статьи о том, как же это, все таки, классно — работать на себя, а не на «дядю». Наверное, еще более здорово было бы, если бы люди, эти блоги ведущие, задумались на мгновение. И представили…

Представили, что они находятся в 6-7 классе общеобразовательной школы, на уроке истории, и слушают лекцию об изменении взаимоотношений между людьми. О том, как ушел первобытно-общинный строй… Хотя ладно, пусть это будет не история в шестом, а основы экономики в десятом классе — это уже вполне определенная тема урока о том, почему сейчас практически везде прижилось разделение труда и не осталось кого? Правильно, детки — людей, работающих «на себя». Дедушки и бабушки, гнущие спину на огороде с утра до вечера в любую погоду — вот они, те, кто не работает «на дядю», а вот господа блоггеры в большинстве своем хлеб с маслом зарабатывают на рекламе — баннерах, партнерских программах или же постовых. Меняются методы, верования в то, что тот или иной метод и область приносит больший доход, но не меняется суть: блоггер создает рекламную площадку для того самого «дяди», раскручивает ее, наполняет уникальным контентом, чтобы дядя его заметил и соизволил баннер разместить, или строчку в конце поста, ночами не спит, волнуется о позиции по различным поисковым запросам…

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