Ѿносно Ѿносно | Входъ

Приложението Slovo и Слово.бг – как се случват

Въведение

Тук ще обясним за възможно най-широк кръг читатели как се случва това начинание и какво е необходимо да се направи, за да постигнем целите му. Където употребяваме твърде непознати технически понятия, ще поставяме в скоби техните съответствия на английски език и връзки към определенията им. Така, като обясним какво е необходимо, се надяваме да привлечем съмишленици и спомоществователи, които могат да отделят време или средства и така да допринесат за съществуването и устойчивостта на това дело, а и на плодовете от него.

Предприятието Слово.бг се състои от две части. http://слово.бг е място (сайт) в световната мрежа, където ще обнародваме писания от миналото, за да покажем и възстановим връзката с предците ни. Slovo е приложение за управление на съдържанието, работещо на сървър някъде в световната мрежа. http://слово.бг се предоставя чрез него.

Предпоставки

През юли 2013-та година ми бе предложено да работя за голяма международна банка в техния офис в град Прага като програмист. Почувствах се доста поласкан, понеже знаех, че банката е на триста (300) години и си помислих, че щом ме канят, значи вече съм доста добър, а те казваха, че търсят само най-добрите. Обикновени човешки съблазни - възгордяване, тщестлавие, алчност – друг разговор... Приех.

Почти нищо не знаех за Чехия, освен че св. св. Кирил и Методий са били там и са дали Словото на ѩꙁꙑкъ словѣньскъ на Великоморавия. Единственият спомен от детството ми, свързан с Чехия или може би Словакия, беше момиченце, тичащо по плажа някъде край Созопол и ревящо с пълна сила „Маминкооо, я йсем се посралааа...“

Пребивавайки в Прага, макар през работното ми време да бях почти изцяло в англоговоряща среда, нямаше как да не чувам разговорите между колеги – словаци, чехи, украинци, руснаци, както и сърби, хървати, поляци и понякога нашите сънародници, наричащи себе си македонци. Най-многобройни бяха чехите и словаците – разбираемо. Извън работа, по улиците естествено чувах предимно чешки, въпреки че Прага е много шарен град и в трамвая и метрото сутрин чуваш между 3 и 5 езика. При всеки такъв обикновен ежедневен разговор, чут по случайност, в главата ми избухваха фойерверки от значения и мрежи от препратки.

И така през последните пет години постоянно ме преследваха натрапчиви въпроси:

Тия въпроси, като не ми даваха мира, а същевременно силно желаех да правя нещо свое, но значимо и всекиму полезно, извън тежката и обладаваща, изпиваща мозъка корпоративна среда; и след като бях доста търсил из световната мрежа сведения по тези въпроси; и след като бях видял вече неосведомеността и небрежността, с която хората, близки и далечни ми духом, затънали в ежедневните грижи, гледаха на тия неща; и се улових, че неусетно се заемам с изясняването на всичко това не само за себе си, но и за другите – щѫ, не щѫ.

На 23ти март 2018 създадох проекта Slovo в Github. Малко по-късно регистрирах домейна слово.бг – ей така – на български.

Какво е вече направено и защо

За да съществува и да се развива сайтът:

  1. Трябва да се ползува някакъв двигател с вероятно по-общо предназначение, но и подходящ за целите на сайта.
  2. Двигателят му трябва да е достатъчно добре направен.
  3. Да могат различни хора да допринасят с писане, преписване, разпознаване на текст от изображения (цифровизиране);
  4. Да може лесно да се променя и управлява съдържанието в сайта.
  5. Да бъде устойчив (да не се чупи лесно).
  6. Да бъде с отворен програмен код, за да се присъединят помагачи при изпълнението/писането/осъществяването на самия двигател.
  7. Да се подбере най-удачното съчетание между използуване на вече написан програмен код и наш собствен код, над който имаме пълна власт да променяме, без да чакаме нечие благоволение.
  8. И други подобни.

Така достигнах до решението да започна собствен проект, използувайки един от известните езици за програмиране – и то този, с който се чувствам най-уверен (Perl – „майчиният“ ми език в програмирането). Не е случайно, че е създаден от езиковед (лингвист). За основа използувах безспорно най-известната и добре поддържана работна рамка за създаване на приложения за световната мрежа в този език.

Ето направеното досега:

  1. Многоезични страници. Една страница може да показва съдържание, написано на различни езици.
  2. Предварително подготвени (кеширани) страници и съдържание. Страницата се сглобява само първия път, когато се показва, а всеки следващ път (докато не бъде обновена) потребителят получава нейния готов завършен вид. Това спестява много изчислителна мощ от страната на сървъра и на мрежовия четец (клиента).
  3. Поддръжка на множество домейни. Една работна единица (инстанция) на Slovo може едновременно да обслужва множество домейни (example.com, слово.бг, bulgarian-creative-circle.org, i-can.eu).
  4. Много потребители. Една работна единица (инстанция) може да се ползува, да се управлява, съдържанието в нея да бъде променяно от много записани (регистрирани) потребители.
  5. Потребителите могат да влизат в сайта, като по този начин могат да получат достъп до все още необнародвани писания. Само за влезлите потребители се използуват бисквитки, за да могат да бъдат разпознавани. За външните посетители (гости) сайтът не използува бисквитки. Сиреч, ние не следим посетителите и ОРЗД (GDPR) не ни засяга.
  6. Множества от потребители (групи).
  7. Страниците и съдържанието в тях – книги, целини (параграфи), писания (статии), бележки (малки статии) – имат възможност за ограничаване на достъпа до тях на равнище потребител, множество от потребители (група) и всички.
  8. Автоматични пренасочвания към обновен адрес на същия източник. Когато преименувате слог в някой адрес, а някой посетител е запазил в отметките си стария адрес, при следващото си посещение на стария адрес, потребителят (или търсещата машина или робот) ще бъде автоматично пренасочен към новия адрес, без да се вижда обезсърчаващото „Страницата не е намерена (Page not found)“:
    слово.бг/старо-име.html => слово.бг/ново-име.html.
  9. Внедрени начертания на буквите (шрифтове), които заедно могат да изобразяват всички букви от азбуката и глаголицата.
  10. OpenAPI 2.0 (Swagger) REST API – основите са положени. Страничният панел, показващ дървото със страниците в сайта, работи благодарение на това. Цялото управление на съдържанието постепенно ще бъде „пренесено“ на тази технология. Тя дава възможност за пълно отделяне на потребителското взаимодействие (интерфейс – това, което вижда и с което работи крайният потребител) от приложението/услугата, работеща на сървъра.
  11. Внедрен Trumbowyg - лек редактор за HTML. Нуждае се от поправки по превода на български.
  12. Работещ скрипт за systemd. Приложението може да бъде пускано като услуга на сървъра, работеща от името на потребителя, който я пуска.
  13. Настройки за Apache 2.4, работещ като междинен сървър (прокси сървър) пред услугата.
  14. И много други технически възможности.

Какво предстои – технически, времеви и финансови показатели

Тук изреждаме само очевидните, най-важни за крайните потребители необходими възможности, които трябва да бъдат осъществени, но те включват множество технически подзадачи. Подредбата е от най-важни към „може да бъде отложено“. Отделните задачи може да са описани по друг начин и да изискват разработка на възможности от други точки в следващия списък. Например, може да бъде разработено общуването между отделните части чрез REST само за страници, а след това и за други типове данни. Разработката ще се осъществява по т.нар. Стегната методология – без излишества.

  1. Разработване на възможност за промяна на множеството (групата), към което принадлежи дадено писание или страница. Възможност за промяна на собствеността на писание или страница, както и на вида им – „папка/файл/препратка(d|-|l)“. Така потребителите ще имат права да работят заедно по един документ. Пример: Един пише, друг проверява, добавя, променя.
  2. Възможност за добавяне на потребител към различни множества (групи). Така, ако даден набор от документи принадлежи на дадено множество (група), то всички членове на множеството (групата) ще могат да го изпълняват, четат или променят, в зависимост от зададените права на документа.
  3. Отделяне на взаимодействието с потребителя (за управление на съдържанието) от сървърното приложение. Сървърът доставя на мрежовия четец (клиента) само данни, а цялото взаимодействие с крайния потребител се случва само в мрежовия четец. Това е архитектурата на частта за управление на данните (потребители, множества от потребители, страници, съдържание, домейни).
    1. Допълнителна разработка и описване на приложния интерфейс (REST API) от страната на сървъра за всяко действие (върху потребители, множества от потребители, страници, съдържание, домейни) – създаване, показване, промяна, премахване, показване на списък от еднотипни елементи.
    2. Разработка на потребителския интерфейс от страната на клиента за всяко действие (върху потребители, множества от потребители, страници, съдържание, домейни) – създаване, показване, промяна, премахване, показване на списък от еднотипни елементи. Разглеждам две работни рамки Mithril и Vue.js. Езикът за разработка от страната на мрежовия четец (клиента) е JavaScript (ES5 и ES6).
  4. Техническа документация и автоматизирани тестове. Тази задача е част от всяка друга. Документацията е на английски, за да може да бъде четена от всякакви програмисти от различни народности.
  5. I18N & L10N – Поддръжка на съобщения на различни езици.
  6. Възможност за записване (регистраци) в сайта.
  7. Възможност за влизане (вписване) чрез съществуваща сметка във Facebook, Google +, Github, LinkedIn.
  8. В раздела за управление на сайта списъкът със страници да показва само страници от текущият домейн. Така потребителят няма да се губи във възможното огромно количество от страници.
  9. „Обучение“ на tesseract  да разпознава буквите, използувани в по-старите книги. Обнародване на получения файл за разпознаване на текст така, че да може да бъде ползуван от преписвачите. Създаване на самоучител на български как да се използува tesseract за разпознаване на текст, за да могат помагачите да въвеждат нови текстове.
  10. Добавяне на средство за обсъждане на писанията чрез внедряване на някой свободен софтуерен продукт за разговори в мрежата (chat), като например Mattermost.
  11. Поддръжка на сигурна връзка (HTTPS) между мрежовия четец (клиента) и сървъра чрез безплатен сертификат от Letsencrypt. В полето за адрес ще се вижда катинарче и данните, обменяни между сървър и мрежов четец, ще са защитени. Дори сега, при влизане в сайта, паролата на потребителя не се пренася като свободен текст през мрежата.
  12. Пренасяне на базата данни на PostgreSQL. Сега се ползува SQLite.
  13. Наемане на виртуална машина. Сега ползуваме машина, любезно предоставена ни от processofthings.io.
  14. Създаване на начертание (шрифт) с пълния набор от букви в азбуката (38). За това е нужен отделен специалист с нужните знания и умения. Възможно е също просто да се добавят липсващите букви към съществуващ, свободен за ползуване шрифт.

Трудно е да се предвиди колко време биха отнели изредените задачи, затова работа може да се раздели на откъси (спринтове) от по две седмици. Във всеки промеждутък от по две седмици се разработва и проверява дадена функционалност. Разработчиците трябва да са поне двама. Заплащането на човек на ден трябва да е подобаващо за старши програмист в Средна Европа (Прага). Първоначалното мое емпирично предвиждане за необходимото време е между четири месеца и половин година за осъществяването на всичките посочени горе задачи от един човек при осемчасов работен ден.

Устойчивост и развитие

За да бъде устойчив проектът, е необходимо да се създаде общност около него. Това може лесно да стане, като създадем възможност потребителите да се присъединяват просто, идвайки от известни големи сайтове (чрез бърз Входъ от Facebook, Google+, Linkedin, Github).

Необходимо е също един човек да се занимава с поддръжката на сайта – администриране, добавяне на нови възможности, разполагане на нови издания на Slovo и т.н.

Средствата, необходими за по-нататъшното устойчиво развитие на Слово.бг, могат да идват главно от две места:

Написал: Красимир Беров