четвер, 13 лютого 2020 р.

Перші кроки розробки

Усім привіт.
В попередній публікації я описав концепцію універсальної системи збору та аналізу інформації, а сьогодні хочу почати поетапний опис конкретних модулів та особливості їх розробки.
Отже, самий перший і основний модуль - це адмінка, за допомогою якої можна налаштовувати підключення до БД, адмініструвати користувачів та керувати встановленням інших модулів системи. Як я вже згадував, в якості сервера БД планую використання Firebird 3, а середовище розробки - CodeTyphon Studio.
Оскільки система планується модульною, кожен модуль буде представлений окремим проектом в середовищі розробки. Також Typhon IDE має дуже зручну функцію - мультипроект, який дозволяє одночасно працювати з групою проектів. Це дозволяє вести розробку кожного проекту як окремо, так і збирати одночасно усі проекти групи не відкриваючи кожен з них окремо.
З допоміжних інструментів я використовую FlameRobin - програма, яка призначена для адміністрування БД Firebird, доступна в різних дистрибутивах Linux, а також є версії і для Windows та MacOS X. Інший корисний інструмент - універсальна адмінка різних БД DBeaver, яка також доступна для різних ОС та розповсюджується у двох редакціях - безкоштовна Community та комерційна Enterprise. Я використовую DBeaver Community. Також безумовно найкращою адмінкою БД Firebird для Windows вважається IBexpert - комерційний продукт, але також існує безкоштовна версія для персонального використання,потрібно лише зареєструватись на офіційному сайті та отримати код активації на електронну пошту.
Щодо компонентів, які будуть використовуватись в середовищі розробки для доступу та роботи з БД, в більшості випадків мене влаштовують стандартні компоненти на вкладках "Data Access", "Data Controls", "SQL DB". Проте для адміністрування БД, керування користувачами та інших специфічних для Firebird функцій я встановив додаткові компоненти IBX for Lazarus, які спочатку конвертував для сумісності з CodeTyphon IDE спеціальною утилітою.
Оскільки переважну частину процесу розробки я проводжу в ОС Linux (відповідно сервер БД в мене теж розгорнуто та налаштовано на спеціально виділеному комп'ютері під керуванням ОС Ubuntu Server). Для організації зовнішнього доступу до БД в мене виділена постійна IP-адреса та прокинуто потрібні порти в роутері. Розробку я веду на ноутбуці Lenovo Ideapad 330 (Intel(R) Pentium(R) Silver N5000 CPU @ 1600MHz, 8 Гб ОЗУ DDR4, SSD 128Gb+HDD 500Gb) під ОС Linux Mint 19.3 з додатковим монітором, на який розширено робочий стіл.
Для того, щоб можна було працювати з БД, необхідно встановити бібліотеки для розробки. Це робиться командою
sudo apt-get install firebird-dev
Після цього можна запускати середовище розробки та приступати безпосередньо до програмування.
Ще один момент, як у мене реалізовано структуру проекту в файловій системі:

Папка проекту
-bin
--i386-win32
--i386-linux
--x86_64-win64
--x86_64-linux
-lib
--i386-win32
--i386-linux
--x86_64-win64
--x86_64-linux
-src
--admin
--updater
--sheduler
...папки з сирцями інших модулів
--forall
-res
-doc

Спробую трошки пояснити що і для чого використовується.

  • тека bin - містить вкладені підтеки для запису готових виконуваних файлів під відповідну платформу;
  •  тека lib аналогічно містить вкладені підтеки для проміжних файлів компіляції під відповідні платформи;
  • тека src містить підтеки з сирцями окремих модулів системи, а у вкладеній теці forall я виніс сніпети коду та бібліотеки, які використовуються в різних модулях системи;
  • тека res містить файли ресурсів, які використовуються в різних модулях проекту;
  • тека doc містить документацію по розробці та опис системи, а також що потрібно зробити та логи розробки.
Також в теці src зберігається файл мультипроекту для автоматизації збирання усіх модулів системи та налаштування середовища розробки при роботі з двома моніторами.
Сирці системи та скрипти структури БД буду викладати на Github по мірі розробки, також буду використовувати вже готові напрацювання, пристосовуючи їх до цього проекту.
Залишилось придумати назву такої системи, може, є якість пропозиції? Пишіть в коментарях, буду вдячний!

середа, 12 лютого 2020 р.

Старт серйозного проекту

Вітаю усіх, хто читає мій блог!
Хочу повідомити, що в мене стартувала розробка серйозного масштабного проекту, який я збираюсь реалізувати спочатку в межах закладу, де я працюю, і в залежності від того наскільки вдало буде реалізовано ідеї, можливо, проект буде доступний як Open Source для всіх охочих з можливістю зібрати та запустити під наступними операційними системами: Windows x32 та x64, Linux x32 та x64, робота через Web-інтерфейс в браузері. Коли з'явиться така можливість, також перевірю чи буде працювати в MacOS X.
Коротко опишу що саме я збираюсь зробити.

Завдання і мета проекту
Вже декілька років я виношував ідею  створення універсальної системи для збору та аналізу інформації, а також автоматизації певних процесів роботи будь-якого закладу чи організації.
Оскільки передбачити усі можливі аспекти роботи неможливо, система повинна складатись з окремих модулів, кожен з яких відповідав би за конкретні можливості роботи (внесення інформації, формування звітів, аналіз даних тощо). Фактично, можливості системи залежать лише від набору модулів, які використовуються системою, і за потреби ці можливості можна збільшувати доробляючи нові модулі. Ідея не нова, аналогічним методом організовано можливості ОС Linux - в залежності від набору встановлених пакунків можна отримати як сервер, так і декстоп або мультимедійну робочу станцію чи "тонкий клієнт", в залежності від потреб користувача.
Аналогічно, моя система теж повинна складатись з ядра, яке відповідає за роботу з базою даних, адміністрування користувачів та модулів системи, надавати можливість оновлення модулів та конфігурацію на робочі місця користувачів.
На рівні бази даних планую реалізувати наступні особливості.
- розподілена база даних: при неможливості синхронізувати дані з сервером (за відсутності підключення до мережі або інтернету) необхідні дані зберігаються на стороні клієнта з приблизними ознаками які дані міняються або додаються, ким і коли, а за наявності відновлення підключення програма пропонує синхронізувати дані. Схожий підхід реалізовано у системах оффлайн клієнт-банкінгу, коли синхронізація даних відбувається за запитом.
- система логування основних подій з базою даних, при цьому для запису логів повинна використовуватись окрема база даних з метою зменшення об'єму основної бази. Відповідно періодично записи логів будуть підчищатись за терміном давності відповідно до налаштувань системи або за запитом.
На рахунок оновлень системи в мене є декілька варіантів як реалізувати краще. Один з них - оновлення модулів тримати в спеціальній базі даних, де буде зберігатись версія файлу модуля для оновлення, та або сам модуль в стиснутому форматі для певної операційної системи, або посилання на завантаження його з сервера. При запуску будь-якого модуля спочатку запускається оновлювач, який перевіряє чи є доступною нова версія, і відповідно якщо є, попередній модуль видаляється і на його місце записується новий.
- по структурі таблиць в базі даних хочу зробити певні правила: кожна таблиця буде мати префікс, який визначає використання цієї таблиці. Наприклад, префікс SYS_ будуть мати усі таблиці зі службовою або системною інформацією, префікс DIC_ в таблицях зі словниками та довідниками, які дуже рідко змінюються, REG_  для довідників, які досить часто змінюються та реєстрів, DOC_ для збереження документів та журналів документів, MISC_ для решти таблиць.
- Інколи при оновленні модуля буде необхідність також оновити структуру певних таблиць, тому одна зі службових таблиць повинна відповідати за збереження інформації про назву таблиці та номер версії її структури. Таким чином при оновленні модуля буде перевірятись версія структури потрібних таблиць, і у випадку коли версія нижче потрібної буде проводитись оновлення структури БД.
Ще одне важливе питання, яке потребує уваги при розробці системи такого масштабу - це права користувачів. В загальному, потрібно визначити які користувачі мають право отримувати  дані та вносити зміни до яких таблиць. Найоптимальніший варіант реалізації - визначення ролей користувача, оскільки один користувач може мати декілька ролей (наприклад, оператор та реєстратор тощо). Все це реалізовується можливостями сервера БД.
Оскільки ідею я виношував вже не один рік, відповідно дещо пробував реалізувати. В якості сервера БД використовую Firebird 3 як на мою думку найоптимальніший варіант - проект Open Source, оснований на вихідному коді Interbase (ця БД свого часу використовувалась у МВС США, що вже говорить про її надійність та захищеність), не потребує багато ресурсів, майже необмежений об'єм БД (фактично обмежується лише вільним місцем на сервері), можливість шифрувати дані та розширити або обмежити способи авторизації користувачів. Працює в різних ОС, є багато хороших інструментів для адміністрування, при цьому до сервера БД під однією ОС можна підключатись з клієнтських програм в інших ОС незалежно від архітектури та розрядності. У випадку технічних неполадок сервера файли БД досить швидко можна перенести на іншу машину та переналаштувати сервер для швидкого відновлення роботи.
Для розробки модулів системи використовую Typhon IDE з комплекту CodeTyphon Studio (це такий дистрибутив Lazarus, який "з коробки" містить величезну кількість додаткових компонентів та інструменти для крос-платформової розробки). Порівняння цих інструментів можна подивитись на відео.

На даний час частково працює адміністративний модуль, в якому реалізовано налаштування підключення до бази даних та робота з користувачами, а також декілька тимчасових модулів для подання лікарями щомісячних звітів в оргметодкабінет, та отримання зведених даних для подальшого аналізу якості роботи лікарів на рівні керівництва. Потрібно зазначити, що лікарі подають звіт з 15 амбулаторій, розміщених на території району. Також для оргметодкабінету було розроблено та впроваджено в роботу модуль для квартального звіту на область по щепленню проти кору (інформація вноситься в розрізі лікарів та формується зведений звіт по закладу). Майже готовий оновлювач модулів, в стані розробки реєстр пацієнтів та запис на прийом до лікаря через реєстратуру.
В планах реалізувати також наступні модулі:

  • Робоче місце лікаря - робота з реєстром пацієнтів, ведення прийому по запису, ведення електронної медичної карти пацієнта (далі - ЕМК) з використанням кодування ICPC-2 та МКХ-10, направлення на обстеження та щеплення
  • Електронна черга - друк талонів лише по направленню лікаря, талони містять дані пацієнта та лікаря який направив
  • “Лабораторія” - прийом по електронній черзі, внесення результатів в ЕМК
  • “Пункт щеплень” - прийом по електронній черзі, внесення результатів в ЕМК
  • “Кабінет долікарського огляду” - прийом по електронній черзі, внесення результатів в ЕМК
  • “Функціональна діагностика” - прийом по електронній черзі, внесення результатів в ЕМК
  • “Звіти” - формування різних типових звітів та можливість універсальних виборок з БД
  • З часом додати можливість для пацієнтів записуватись самим на прийом до лікаря через наш сайт та можливість перегляду ЕМК в особовому кабінеті.
Ось такий проект в мене планується реалізувати, а якщо все піде досить вдало, можна буде спробувати підключитись і до Центральної БД Електронної системи охорони здоров'я.

четвер, 6 лютого 2020 р.

Linux vs Windows: що обрати користувачу?

Привіт усім користувачам комп'ютерів!
Вже досить довгий час іде "війна" між користувачами, яка ОСь краще - Windows чи Linux?
Спробую висловити свою точку зору з цього питання.
Отже, в чому полягає основна різниця між цими операційними системами? Розглянемо спочатку ОС Windows. Ця операційна система від самого початку розроблялась корпорацією Microsoft як комерційна система з основною метою "зрубати бабла". З початку виходу першої популярної серед користувачва версії Windows 3.0 пройшло близько 30 років, на протязі яких нам масово намагались "впарити" цю недосконалу ОСь, величезна кількість копій якої були "піратськими", але Microsoft крізь пальці на це дивилась. В інтересах корпорації було "підсадити" користувачів на свій продукт і зробити залежними від нього, що вдалось зробити досить успішно. Але, не зважаючи на довгий період розвитку, Windows так і залишився з одвічними проблемами "голубого екрану смерті", вразливий до вірусів та хакерських атак і постійно тягне оновлення для виправлення виявлених вразливостей. А підтримка застарілого обладнання взагалі викликає сльози жалості - чому мій лазерний принтер, який прекрасно друкує незважаючи на свій вік 15 років, не може підтримуватись в Windows 10??? Чому мій сканер не розпізнається останньою версією Windows? Зрештою, чому через нову версію ОСі мені необхідно робити апгрейд комп'ютера, тому що процесор на 2 ядра з частотою 1.8 GHz та ОЗУ 2 Gb достатньо лише для запуску ОС, а при спробі запустити ще й Word система починає постійно свапитись на жорсткий диск та жахливо підвисати? Зрештою, чому мої улюблені ігри, які працювали в Windows XP, в Windows 10 взагалі не хочуть запускатись??? Поверніть мої гроші!!!😠😠😠😠
Ну, добре, я трошки перегнув палку - Windows 10 не настільки вже й погана ОСь (після того, як пройшло декілька років після випуску і розробники трошки почали зважати на побажання користувачів). Але особисто для мене історія з Windows закінчилась після того, як я декілька днів покористувався "десяткою".
Результат пошуку зображень за запитом "windows 10  broken"
Щодо Linux, під цим терміном мається не операційна система, а лише ядро, яке на початку 90-х розробив фінський програміст Лінус Торвальдс як ядро Unix-подібної системи і відкрив його вихідний код по відкритій ліцензії. З того часу подальшою розробкою і підтримкою ядра займаються тисячі людей зі всього світу, і роблять це абсолютно безкоштовно. До речі, ОС Android для мобільних пристроїв теж базується на ядрі Linux, а починаючи з 10-ї версії Google заявив про повний перехід Android на ядро Linux і використання його модульної архітектури.
Те, що ми зазвичай називаємо ОС Linux - це дистрибутив ядра та програмного забезпечення, яке розповсюджується як компаніями, так і окремими маінтейнерами. В принципі, будь-хто бажаючий може випустити свій власний дистрибутив - обмежень на це немає. Linux можна розповсюджувати будь-яким способом, як безкоштовно так і продавати. А спробуйте випустити власний дистрибутив Windows - і вас звинуватять в піратстві!
Щодо підтримки обладнання, то якщо воно в Linux працювало, то буде продовжувати працювати і в будь-якій новій версії дистрибутиву. Проте якщо обладнання несумісне з Linux і виробник не надає ніякої інформації про функціонування
Саме цікаве питання для тих, хто починає задумуватись перейти з Windows на Linux - "А як щодо моїх улюблених програм? Там буде Skype/Viber/Torrent (продовжуйте список по своїх потребах)?" Відповідь: альтернативи є, і вибір досить великий. Усі популярні веб-браузери і мессенджери мають також версії і для Linux. В тому випадку, коли потрібна програма не має версії для Linux, можна подивитись на аналоги. В будь-якому випадку можна підібрати альтернативу, а в багатьох випадках за допомогою WINE навіть запустити необхідну Windows-програму.
Також потрібно врахувати той факт, що Linux не вразливий для вірусів, хоча, за іронією долі, перший в світі вірус - хробак Морріса - був розроблений для UNIX-систем. Сама архітектура Linux передбачає захист системи від шкідливих дій користувача, якщо для цього не скористатись командами sudo або su - ніякої серйозної шкоди системі не буде завдано. Аналогічна ситуація відносно хакерських атак - правильно налаштована система від них максимально захищена.
Результат пошуку зображень за запитом "sudo boo"
Також Linux не вимогливий до обладнання - може працювати навіть на дуже старому обладнанні, для цього навіть існують спеціальні дистрибутиви на зразок Puppy Linux. Спробуйте на комп'ютері зі 128 Мб ОЗУ, процесором Pentium II з частотою 400 MHz та відеокартою з 4 Мб відеопам'яті запустити хоча б Windows XP SP3 - навряд чи можна буде працювати на такій машині. А Linux зможе! Я настільки старої техніки під руками не мав, але реально запустив Linux Mint 19.3 на машині з 1-ядерним процесором та 1 Гб ОЗУ, при такій конфігурації навіть можна подивитись відео на Youtube!
Можна довго перелічувати як недоліки, так і переваги обох систем, але чим користуватись - кожен вирішує сам. Особисто мій вибір - Linux.

Реставрація ну ду-у-уже староко комп'ютера. Чи можливе нове життя?

  Минулого року мені дістався дуже старий комп'ютер, якому понад 20 років. На відео я зробив перше включення і огляд нутрощів цього &quo...