Приложение DEV.SKY.

В SKY., параллельно с разрабатываемым приложением, на том же виртуальном веб-сервере, всегда, устанавливается приложение DEV.SKY., предназначенное для облегчения и ускорения процесса разработки. Приложение DEV.SKY. дополняет код файлом dev.php и папкой _dev, с файлами внутри, а БД пятью таблицами с префиксом _dev_. Код и таблицы в БД приложения DEV.SKY. НЕ должны копироваться при установке кода разрабатываемого сайта на "продакшн" сервер. Приложение используется только на локальном компьютере разработчика, во время разработки. Для каждого проекта и для каждого программиста, используется отдельный экземпляр приложения DEV.SKY.

Установка очень проста: скопируйте файл dev.php (39 строк) из любого другого вашего проекта или скачайте его с сайта http://coresky.net/ и запустите: http://адрес_вашего_проекта_на_лок_компьютере/dev.php, это скачает с сервера http://coresky.net/ и запустит установочную программу i_dev.php. В установочной программе, заполните доступ к БД разрабатываемого приложения (пять таблиц приложения DEV.SKY. добавятся в ту же БД) и установите DEV.SKY.

Работа программиста, включает ряд работ (кроме программирования), которые необходимо выполнять, и каждый находит свой собственный путь для выполнения этих работ - использует различное ПО или другие методы, которые облегчают процесс создания кода. DEV.SKY. инкапсулирует все подобные необходимые инструменты в одном приложении и кроме того является клиентом системы SKY., что позволяет принимать и передавать на сервер http://coresky.net/ повторно используемый код. Смотрите краткий перечень функционала в таблице.


Функционал Краткое описание Статус
Codebase browser Просмотр, поиск кода в локальной Codebase 90%
j.SKY. Альтернативный по отношению к jQuery javascript framework, дебютируется в DEV.SKY., читайте подробнее о j.SKY. в статье 50%
My Snapshots Снимки файлов и БД разрабатываемого приложения для последующего нахождения изменений и автоматического построения скриптов 90%
Create Scripts Автоматическое построение скриптов изменений на основе снимков файлов и БД 90%
Create Winds Построение независимых (от DEV.SKY.) консольных скриптов изменений (в скрипт включается необходимая часть парсера записей Codebase) 90%
Build Scripts Выполнение скриптов изменений для деплоя и обновления приложений 99%
Rollback Scripts Отмена изменений после деплоя и обновления приложений 50%
Settings Изменение настроек DEV.SKY. 99%
Help Встроеная в DEV.SKY. справка 80%
Compare Утилита сравнения текста (diff, используется для построения скриптов изменений и визуализации изменений) 90%
Update DEV Обновление локальной БД Codebase новыми записями из coresky.net (скачивание необходимых приложений, обновлений, плагинов, второстепенного повторно-испольхуемого кода, языковых записей) 99%
Submit work Выгрузка записей из локальной DEV.SKY. на сервер coresky.net (публикация собственной работы) 99%
Tune Package Проверка синтаксиса и тюнинг пакетов, как правило своих 99%
My Builds Список выполненных записей Codebase, для rollback при необходимости и истории 99%
CopyTo Копирование или передача Пакетов-Файлов-Wind_скриптов-SKY._архивов на диск-почту-SSH-FTP 40%
Delete files & Recycle bin Удаление файлов в корзину, просмотр, управление корзиной (используется для rollback) 99%
Export Codebase Экспортирование записей Codebase в файлы или SKY. архивы 99%
Import Codebase Импортирование экспортных файлов и SKY. архивов 99%
MySQL query Утилита для работы с БД MySQL 99%
Test Javascript Утилита для тестирования javascript 99%
Test PHP Утилита для тестирования PHP 99%
XDebug-er Отладчик PHP кода на основе xdebug модуля PHP 75%
Test HTML Утилита для тестирования HTML кода 80%
Visual SKY. app Утилита для быстрого визуального создания каркаса web-приложений 60%
Globals Утилита для просмотра глобальных данных и phpinfo() 99%
Search and replace Утилита "поиск и замена" на основе "области определения" (в т.ч. и в БД) 99%
Mass tasks Утилита для других задач на основе "области определения" - (Check php syntax, Fix dummy code, Fix code on move files, Calculate size, MD5 sum, Functions map, Change texts encoding) 2%
Translate MyApp Утилита для работы с таблицей _lang (осуществления перевода) приложения пользователя и генерации языковых файлов, см. код функций t(), translate(..) 90%

Скриншоты DEV.SKY.

Приложение DEV.SKY. очень компактно, смотрите структуру таблиц БД и код файлов прямо сейчас.

Внутренняя структура ядра DEV.SKY.

рис. 1

Структура базы кода (Codebase), пакеты

Записи Codebase - это ряды в таблице _dev_codebase, имеют такие свойства:

Группы записей объединяются в пакеты, передача информации между сервером coresky.net и приложением DEV.SKY. всегда происходит архивированными пакетами. Пакет dev.sky. содержит само приложение DEV.SKY, переводы приложения на другие языки, coresky код для повторного использования, еще другие приложения. Пакеты могут содержать аттрибут start_id равным некоторому значению, это означает, что весь пакет представляет единое целое и если выполняется, то должны быть выполнены все записи пакета. Пакет dev.sky. содержит аттрибут start_id равным 0, это значит, что в нем содержатся разноцелевые записи. Все пространство Codebase разделено на области (по автоикрементной колонке ID, см. "помощь / Draft"), записи 1-50000 фиксированная область (конкретный ID представляет одну и ту же запись на всех инсталляциях приложения), более 50000 "плавающая" область - в каждой инсталляции DEV.SKY. записи представляют разные записи, поэтому при экспорте записей, они нормализуются по значению 50000, и первая запись пакета всегда равна 50001. При импорте (обнаружив значения более 50000), записи добавляются в таблицу _dev_codebase в свободное место, текущее значение auto_increment, при этом ID записей и вызовы командой RUN CODEBASE: других записей корректируются, при этом ID одних и тех же записей на инсталляции, где был импорт чаще не совпадает с инсталляцией где был экспорт. Из фиксированной области нельзя ссылаться на "плавающую" область, а наоборот, из "плавающей" в фиксированную можно.

Записи из фиксированной области однозначно идентифицируются с помощью ID записи плюс имя-версия пакета, например [1]dev.sky.1.000 или ID записи плюс имя записи + версия, например [1]a:dev.sky.1.000. Записи в фиксированной области могут иметь одинаковые имена, но представлять разные записи, например f:index.php - индексный файл для одного и для второго приложения, поэтому в примере ([1]a:dev.sky.1.000) имя указано для удобства, реально однозначно идентифицирует запись ID плюс версия.

Пакеты однозначно идентифицирует не нулевой SKY_ID или имя пакета плюс версия. Когда программист создал новый пакет, SKY_ID равен 0. При передаче пакета на сервер coresky.net, вначале выполняется запрос "reserve" - резервирование SKY_ID и версии для данного имени. Получив ответ, скрипт выгрузки пакета вставляет выданный SKY_ID и заменяет версию, после экспортирует пакет в архив и после передает на сервер.

Если имя пакета, например dev.sky, уже используется в системе, то только первый автор этого имени (или те пользователи, кому специально дано разрешение автором) могут выгружать на сервер новые версии этого имени (пакеты), т.е. компоновать новые версии приложений могут не все пользователи. Но все пользователи могут улучшать приложения других авторов, делая обновления. Например, любой пользователь может создать обновление пакета dev.sky, назвав пакет именем u_neo.dev, где neo - его логин на сайте (u - признак обновления, update). Логины уникальны на сервере coresky.net, таким образом легко подобрать имя пакета, чтобы найти свободное имя. Если вы назовете пакет обновления upd.dev и это имя окажется занятым другим пользователем, система не примет пакет, выдаст ошибку с предложением переименовать пакет, так как имя зарезервировано другим пользователем (группой пользователей). В имени пакета всегда желательно ссылаться на приложение для которого оно предназначено, как в примерах выше - если это обновление DEV.SKY. в конце имени писать .dev, или другой пример - neo_ftp.core. Имя пакета подсказывает, что пакет содержит записи от пользователя neo, как coresky (код для повторного использования) в области манипуляций с ftp. Автор dev.sky. может внести этот код в следующей версии в содержимое пакета.

Скрипт для автоматической генерации записей-пакетов, всегда генерирует записи в "плавающую" область и практически всегда нужно из этой области, а не фиксированной, передавать пакеты на сервер coresky.net. В "плавающей" области ID записей никак не участвует в идентификации записей-пакетов, только лишь для относительного положения записей в пакете по отношению друг к другу. Поэтому имеет значение только лишь уникальная идентификация пакетов (а не записей в них) и пакеты идентифицируются также как и пакеты с записями в фиксированной области - по не нулевому SKY_ID или имени пакета плюс версия. Авторы имеющие размещение пакетов в фиксированной области, могут перемещать работу (или включать их работу в новую версию) других авторов в свои пакеты. При этом авторство всех программистов сохраняется. Если программист X изменил файл автора Y, то в записи, содержащей файл, будет указано Y+X.

При выполнении записей в приложении DEV.SKY, эти записи отмечаются в "утилиты / My builds", так как и собственно генерация новых пакетов программистами. Во втором случае, генерация второго пакета невозможна, пока не будет передан на сервер первый сгенерированный пакет, так как он не получил SKY_ID с сервера и для второго пакета нет корректной информации для составления списков "includes" и "depends". В утилите "My builds" в списке отмечаются уникальные записи для фиксированной области, а для "плавающей" области отмечаются имена уникальных пакетов, только последний, один, может иметь SKY_ID равен 0, быть не переданным на сервер.

Эволюция Codebase

В DEV имеются специальные средства для развития приложений и системы SKY. в целом. Для создания нового приложения, вначале, выполняем записи в Codebase, абстрактно охватывающие большой спектр назначений (генерим нужный NULL-сайт, который обычно включает код первого и второго крыла), также выполнив поиск, генерируем нужный код третьего крыла. После этого сохраняем текущее состояние кода в снимок (Snapshot), выбрав нужную область определения снимка и другие параметры. Это позволит в будущем автоматически генерировать скрипт для построения приложения. Далее, используя утилиту Visual, создаем базовый каркас БД приложения (программирование не используется) и генерируем каркас файлов админ и фронтальной части для объектов приложения, например VIEW, файлы контроллеров и моделей списка новостей (для новостного сайта). Отмечу, что в будущем планируется дополнить утилиту Visual записью макрокоманд произведенных действий, а в парсер добавить возможность выполнения этих макрокоманд, т.е. в таком случае, сохранение снимка состояния приложения нужно будет делать после использования утилиты Visual и при генерации скрипта приложения, БД и файлы, полученные на текущий момент времени НЕ будут включаться в скрипт приложения, но вместо них будут включаться ссылки на выполнение определенных записей в Codebase и макрокоманды утилиты Visual.

Все выполненные записи Codebase помечаются как выполненные, и сохраняются на специальной странице выполненных записей "My Builds". При создании снимка (Snapshot) их перечень также копируется в Snapshot, чтобы использовать при генерации скрипта приложения.

После полуавтоматического создания каркаса приложения и сохранения Snapshot, выполняется уникальное программирование человеком и когда приложение готово - генерация скрипта приложения используя Snapshot (внесенные изменения программистом). Параллельно со скриптом приложения, создается пакет, объединяющий множество сгенерированных записей Codebase в единое целое. Передеча данных между сервером coresky.net и клиентскими приложениями DEV в обоих направления, всегда происходит пакетами. При работе с сервером пакеты всегда, к тому же, архивируются в единый файл (с помощью функций сжатия Bzip2 PHP) со специальным форматом, файлы таких архивов имеют расширение *.sky при этом.

Пакеты могут содержать не только приложения, но и обновления приложений (исправления, дополнения). Для создания пакета обновления, необходимо сохранять Snapshot после того как будет установлено все текущее приложение и необходимые другие пакеты обновлений (если они есть и пересекаются с текущей работой). Автор приложения может давать другим программистам право генерации новой версии при его желании, или делать это самостоятельно. Но любой программист, может создавать обновления для любого приложения, для этого нужно только лишь зарегистрироваться в системе SKY. (для получения права записи в Codebase на сервере). Обновления приложений могут быть включены в новую версию приложения автором, при этом автор обновления получает право второго (третьего и т.д.) авторства, а автор приложения может дать ему право генерации новых версий приложения. Любой программист также может делать ответвления от любого (кроме DEV.SKY.) приложения, например если есть FORUM.SKY. общего назначения, то ответвление уже будет считаться новым приложением (некоторый специализированный форум), при этом все авторства прошлого форума не переходят в новый, однако создание новых приложений и ответвлений предпочтительно обговаривать с сообществом, если автор планирует размещение его работы на сервере. Следует учитывать, что передача новых пакетов на сервер, может как повышать так и понижать рейтинг программиста в системе SKY.

Таким образом в любом пакете, кроме прочих параметров, имеются параметры (акцентируем внимание): app - приложение в разработке, depends - пакеты которые должны быть запущены перед текущим (минимальный список), included - обновления которые включены в пакет нового пакета, priorun - записи пакета dev.sky., которые использованы для генерации пакета.

При генерации новой версии приложения в список included, кроме (возможно обновлений), всегда включается версия приложения (первой в списке) на базе которой генерируется новая версия (обычно предыдущая), если версий не было (новое приложение) пишется слово scratch. Обновления которые были включены в предыдущую версию, в новый список included не пишутся, однако по цепочке версий можно составить весь список обновлений до scratch (первой версии приложения). В обновлениях, в depends, первым в списке пишется версия DEV, а вторым версия приложения, для которой разрабатывается текущее обновление. Вообще, в любых пакетах (кроме первой версии DEV.SKY.), в списке depends, первым всегда указывается приложение DEV.SKY.x.xxx с версией на базе которого необходимо делать развертывание (выполнение пакета парсером).

Путь развития

Смотрите рис. 2 ниже. В список included, последним, обычно пишется слово work, указывающее что в пакете включена работа программиста по модификации кода приложения. Если пакет - новая версия приложения, в котором просто интегрированы имеющиеся обновления (и при этом коллизий не было), слово work не пишется. Макрокоманды утилиты Visual, о которых говорилось выше, относятся к списку priorun. Малым в абсолютном плане количеством информации, могут описываться значительные результаты (таким свойством, например обладает любой макро-код). Вообще, в будущем, после тщательного испытания данной системы развития кода, мы планируем значительно развивать priorun возможности, так как именно благодаря, автоматической коррекции кода уменьшается часть работы человека-программиста. В списке priorun может быть и автоматическая коррекция кода на соответствие стандартам (несложный, реальный сейчас алгоритм), и поиск и замена частей кода на более оптимальные и т.д. Список priorun может значительно развиваться. Мы считаем что именно такая система развития кода, может привести нас к тому, чтобы в будущем общаться с компьютером голосом, как с разумным, и чтобы он умел выполнять наши сложные абстрактные задачи без специального программирования человеком.

рис. 2

В списке priorun показаны обращения к записям Codebase пакета DEV, но в будущем список может быть например таким: priorun: 2,3,visual,x_fix. На рис. 3 показан второй способ создания пакетов приложений. К примеру, обновилось приложение DEV.SKY. и программист собирает новую версию приложения app заново, на "чистом" DEV, при этом он делает избирательное копирование кода приложения app.v2, разрешая коллизии и получает app.v3.

рис. 3

Служебное слово "copy" в списке included, всегда указывает, что сборка версии приложения производилась на "чистом" DEV.SKY.

Пакеты могут иметь одинаковые имена, но в связке имя пакета плюс версия, все уникальны, также любой пакет имеет уникальный SKY_ID, однозначно идентифицирующий конкретный пакет. SKY_ID (и версия) присваивается сервером при выгрузке пакета на сервер coresky.net, до этого момента поле SKY_ID содержит ноль. В отличии от пакетов имя записи Codebase плюс версия не идентифицируют однозначно запись, может быть несколько записей с одним и тем же именем и версией, но однозначно идентифицирует запись ее CODEBASE_ID, если это значение менее 50000.

При генерации новых пакетов обновлений, записи Codebase всегда сохраняются с автоикрементной колонки id таблицы _dev_codebase со значением большим 50000 и с этого значения CODEBASE_ID имеют плавающую адресацию. При создании экспортных файлов, значения нормализуются к значению 50001, а при импорте записи приводятся к текущему значению автоикрементной колонки в каждой конкретной инсталляции приложения DEV.SKY. Из области c ID большим 50000 ссылки на область с ID меньшим 50000 могут быть, но наоборот - нет, смотрите подробнее страницу помощи "Draft" в приложении DEV.SKY.

Вообще, автоматическая генерация скриптов, всегда добавляет записи только с ID > 50000, в плавающую область. Пользователи с типом профиля root делают первичное размещение приложений в области с ID < 50000 (статическую) используя утилиту MOVE records. Для локальной Codebase приложения DEV.SKY. отведены ID от 1 до 10000, в числе кода: непосредственно само приложение (DEV.SKY. строит сам себя), код для повторного использования 1,2,3 крыльев, переводы приложения DEV на другие языки (базовый - английский), NULL сайты и пара готовых для развертывания приложений общего назначения. Статическая область с ID от 10001 до 50000 хранится только на сервере coresky.net и содержит другие приложения доступные для скачивания в DEV.

Запись в Codebase

Если вы сделали полезную работу, создали пакет и хотите поделиться работой с сообществом, зарегистрируйтесь на сайте coresky.net, придумайте себе псевдоним и внесите в аккаунт (в дальнейшем изменить невозможно), впишите в страницу настроек приложения DEV. $u_reg_access_code - ваш личный код доступа для записи, $u_sky_inet_login - ваш логин, $u_profile_code - установите 6 (тип профиля - Registered), $u_my_app, $u_my_rubric - имя и рубрика разрабатываемого приложения, после этого в утилитах приложения DEV на странице "Submit your work" откройте пакет, внесите описание (на английском языке только), проверьте пакет и оптимизируйте вручную. Иногда задание области определения не позволяет генерировать идеальные пакеты и требуется ручная коррекция сгенерированных записей Codebase. Имеется ввиду не код с ошибками, а несовершенный код. Если все хорошо - отправляйте пакет на сервер. Мы будем уделять значительное внимание модерации, анализу качества кода и стремиться в будущем производить модерацию и анализ кода алгоритмически, без участия людей (а в дальнейшем и автоматическое создание нового кода :-), точнее голосом). Работа оценивается рейтингом, званиями, которые представляют определенные бонусы в системе SKY. (или их отсутствие).

Коллизии и версии

Обновление одного и того же файла в приложении (которые соответствуют записям Codebase), могут захотеть выполнить параллельно несколько человек, что скорее всего привело бы к бесполезности работы одного из программистов, поэтому перед началом работы настоятельно рекомендуется отметить файлы приложения как "взятые в работу" на этом сайте. Тогда другие программисты, смогут видеть это намерение и предоставить право модификации тому кто первый отметил записи. По истечении максимум 3 суток, программист должен сгенерировать пакет обновления и выгрузить на сервер, в статусе кода выбрав "in work" (если работа не до конца выполнена), что будет сообщать, что работа идет, а авторы приложения смогут увидеть как. Последнее не касается авторов приложений и программистов с высоким рейтингом, но отмечать записи Codebase "взятые в работу" желательно всем. Несоответствие намерений реальным действиям может отрицательно влиять на рейтинг программиста. После того как работа выполнена, необходимо "отпустить" записи ранее "взятые в работу".

Для разделения заданий и определения направления работы будет также практиковаться коллективное обсуждение задач в блогах. Это в основном касается фундаментальных объектов приложений и CORESKY кода.

Во всех пакетах, в списке depends первым всегда стоит версия DEV.SKY. Приложение DEV, как и другие приложения могут развиваться длительное время и время от времени будут выходить новые версии DEV, как и других приложений. Новые версии приложений желательно строить на базе новых версий DEV. Это может приводить к коллизиям кода в скриптах, которые должны разрешать авторы приложений. Тем не менее, старые версии DEV (и других приложений) всегда доступны для скачивания, наряду с новыми. И только, если не будет ни одного потомка-пакета старого DEV (тоже касается и других приложений), пакет *.sky будет удаляться физически с сервера (но не информационная запись о нем). Пакеты (*.sky архивы), которые будут включены в другие пакеты и отсутствующие в любых списках depends, будут также физически удаляться.