VDcgi. То во что мы верим.

Есть такой довольно популярный сайт cmsmagazine.ru. На нем тусуются веб-разработчики и их клиенты. На сегодня, среди зарегистрированных пользователей, только этого ресурса, создатели 927 различных cms!!! А сколько еще команд, занимающихся продвижением собственных оригинальных систем, можно насчитать по всем миру? Трудно даже предположить. Так зачем же здесь и сейчас мы пытаемся представить еще одну? Вопрос был бы уместен если VDcgi можно было бы назвать cms. Так что же это? Фремворк? Тоже нет. Во всяком случае пока. Сейчас это просто набор инструментов, при помощи которых мы создаем наши веб-приложение.

Что для нас важно

Здесь необходимо сделать небольшое отступление и рассказать о том какие приоритеты существуют для нас в работе и почему именно их мы считаем важными.

Последние 10 лет индустрия программирования для web развивается впечатляющими темпами. Чуть не каждую неделю появляются новые фреймворки, а о количестве cms уже говорилось выше. При этом создается впечатление, что все эти тонны кода разработчики пишут исключительно для себя, а интересы заказчика конечного приложения их не волнуют ни в малейшей степени.

Создано множество post и pre процессоров css. Написано бесконечно число js-библиотек. А что касается бек-энда, то монстрообразные творения в сотни мегабайт, призванные сгенерировать пару простеньких html страничек, иногда просто приводят в ужас. Создатели всего этого зоопарка в один голос кричат о том, что все сделано для оптимизации, упрощения и веб-разработки, и в конечном итоге уменьшения времени создания веб- приложений. И в этом отношении они правы.

а, процесс создания веб-приложений в настоящее время упростился до предела. Даже если не брать во внимание различные html конструкторы, которые позволяют простым перетаскиванием форм слепить простенький сайт, если оставить в списке только «профессиональные системы» (точнее те, что позиционируют себя как таковые), начать клепать сайты сегодня может любой школьник, после 3 дневного изучения документации. И свой первый сайт он сварганит за пару часов. И он даже как-то будет работать. Вот только как именно?

Очень хочется спросить: «Почему мы ставим превыше всего не скорость работы сайта, а скорость его создания?» Что, написать сайт это самоцель? Или все же предполагается, что на этот сайт будут заходить люди и важно чтобы они тут же не закрыли «тормознутую» страницу.

Как-то в одной статье от разработчиков Google, адресованной сое-оптимизаторам, пришлось прочитать: «Увеличив время загрузки страниц своего сайте на 20%, вы потеряете 30% аудитории». Полностью с этим согласен. А значит код сайта должен быть чист и лаконичен.

К сожалению времена, когда хорошим тоном считалось уложить вес одной html странички в 16K давно прошли. И наверно это правильно. Технологии передачи данных, мощность серверов — все изменилось.

Сегодня есть возможность представить пользователю более «продвинутый» контент. Можно делать более красочные сайты с более богатым функционалом. И потому особенно обидно, что все возможности, которые предоставляют создатели железа, некоторые горе программисты благополучно спускают в унитаз.

Вместо того чтобы, к примеру, подключить на страницу скрипт в 10к, добавляющий привлекательный интерактивный функционал, подключают js-фреймверк размером 240K для создание эффекта тени на одной кнопочке (не преувеличение и не шутка — случай из жизни).

Так вот, подводя итог — мы считаем что программист должен быть программистом, а не «фреймворкером» (недавно довелось узнать о такой новой профессии). Инструмент программиста должен, в первую очередь, позволять создавать быстрые и надежные сайты. И только во вторую помогать, создавать их быстро и «удобно». Это наше мнение. Мы его ни кому не навязываем, но и отказываться от него не собираемся.

От общего к частностям

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

Мы же пошли несколько дальше. В отличие от подавляющего большинства фрейворков, где «базовые» функции написаны на основном языке программирований данной среды (для Ruby on Rails — Ruby, для Django — Python, для Symfony — php и так далее) мы написали наш «джентльменский набор» на языке C и оформили его как библиотеку (gem для языка Ruby). Что это нам дало?

Во-первых, скорость. Поскольку большая часть времени работы скрипта расходуется, как раз на стандартные операции, а они у нас написаны на самом быстром из возможных языков (не считая ассемблера конечно), то и скорость работы наших приложений даже выше чем если бы они были написаны на Ruby.

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

При ближайшем рассмотрении

В основе нашего «инструмента» (пока не могу сказать нашей среды разработки, но надеюсь когда-то получить такую возможность) лежит gem языка Ruby, под названием vdcgi.

Подключив его разработчик получает:

  • a) интерфейс для взаимодействия с переменными передаваемыми web-сервером (по умолчанию это nginx, но можно настроить любой)
  • b) интерфейс для работы с базой данных mysql
  • c) интерфейс для обработки и сохранения изображений
  • d) интерфейс отправки электронной почты
  • e) веб-клиент.

И многое, многое другое. Всего 15 классов, полное описание которых, вы можете найти в нашей документации по Vdcgi.

Однако сам по себе gem лишен многих «вкусностей». Ставить его стоит в составе всего пакета с одноименным названием.

Здесь Вы можете скачать VDcgi. После скачивания распакуйте архив и запустите файлик inatall.rb. Запустив его без параметров, или с параметром -h, вы получите полную справку. А со всеми необходимыми параметрами - полностью установленную систему в составе:

  • 1) gem — Vdcgi
  • 2) nginx
  • 3) Обертка — fcgiwrap
  • ) Сформированные баз данных под ваш проект с минимальном необходимым таблицами
  • 5) Рабочую директории проекта со следующей структурой папок:
  • • configapp
  • public
  • css
  • js
  • incl
  • img
  • images
  • tools
  • templates.

Остановимся на содержании папок последних поподробнее.

configapp содержит всего один файл — config. О его формате можете прочитать в документации.

public — корневая папка web сервера проекта. В ней, кроме указанных выше папок, лежит файл index.rb. На него перенаправляют все обращения.

css и js - смысл папок понятен без разъяснений. В них лежит файлы стилей и js скриты используемые в проекте.

incl можно найти заготовки файлов для расширения всех классов, уже объявленных в VDcgi. Там же рекомендуется, в случае необходимости, держать файлы классов, что Вы допишите.

img — там лежат картинки интерфейса будущего сайт.

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

tools - лежат скрипты, которые «отзываются» на ajax запросы. Подробнее о них так же читайте в справочнике.

templates - как наверно уже догадались, лежат шаблоны сайта. По умолчанию там Вы найдете основной шаблон index.rhtml (он служит в качестве «обертки»), шаблон main.rhml, pagesadmin.rhtml и некоторые другие. Обо всех можно прочить в наших манах.

Сейчас остановлюсь только на pagesadmin.rhtml. Сразу после инсталяции vdcgi, вы получаете костяк готового веб-приложения с дифференциацией по 10 уровням пользователя. По умолчанию в систему добавлен один пользователь с максимальными правами. Его логин и пароль admin:admin.

Чтобы залогиниться в системе Вы должны пройти по адресу http://ваш.домеН/auch.html. На этой странице увидите форму для входа. После регистрации Вы будете снова перенаправлены на главную страницу. Теперь, если подведете курсор, к правому верхнему углу окна, увидите две ссылки «Выход» и «Страницы». Первое — понятно. Страницы тут задействуется шаблон pagesadmin.rhtml. Он позволяет сразу добавлять в систему страницы сайта и подключать к ним скрипты и классы.

Конечно возможности системы намного шире чем те что сейчас перечислены. Но цели дать в этой статье полный ман не было. Хотелось только вкратце представить систему — показать на что она способна.

Сказано довольно много, но пока никаких цифр, никакой конкретики. Это неправильно. Исправляюсь.

Пустая болванка главной страницы, с автоматизированным пользователем, будет отрабатывать у Ввас за 90 ms. Это приблизительно те же цифры, что показывают 5-е «Рельсы» и большинство других популярных фреймвоерков.

Однако есть одно маленькое «но». В тех же рельсах, «по умолчанию», кроме коннекта с базой нет ничего. Что-бы отправить почту, обработать фотографию и так далее, и тому подобное, нужно подключать дополнительные gem-ы. Хотите работать с jnson — сделайте require json., Нужен http клиент — будь добр require uri. Еесли email, то подойдет require pony. А каждый подключенный gem это дополнительные миллисекунды, которые в итоге, выливаются в достаточно ощутимую задержку.

У нас же все перечисленное и даже больше (полный перечень смотри в документации) есть изначально. Ничего дополнительно подключать не нужно. И функции почты, и обработка изображений и http клиент - все заложено в VDcgi. Причем прошу заметить — это бинарник, а значит и работает он быстрее чем большинство gem-oв написанных на Ruby (например тоже Pony).

Планы

О чем еще хочу сказать в завершении, так это о двух моментах.

Первый и самый главный — то что мы сейчас и здесь представляем далеко не завершенный продукт. Да, уже сейчас vdcgi позволяет нам писать быстрые и надежные приложения. Но вместе с тем нам еще многое нужно сделать.

В ближайших планах переход на PostgreSQL (при этом Mysql тоже останется, но у программиста будет выбор с какой базой работать).

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

И второе — если кому-то понравилось то, что он сейчас прочитал, если кто-то хочет поучаствовать - предложить какие-то идеи, дописать какой-то функционал, одним словом что угодно — мы будем очень рады.

Данная система распространяется на основе GNU лицензии и Вы можете скачивать, дописывать, модифицировать исходный код, как Вам заблагорассудиться. Единственная просьба — делитесь результатами своих экспериментов с остальными.

Для обсуждения всех моментов связанных с разработкой у нас есть страница в Vk, на которой ждем всех заинтересовавшихся.