Сама потрібна програма на світі

image
Якими програмами постійно користуються люди? Якщо подумати над цим питанням, то виявиться, що список цей не такий вже великий. До постійно використовуваних програм можна віднести: саму операційну систему, файловий менеджер, редактор, браузер, месенджер. Це саме той базовий набір, яким користується на комп'ютері практично кожна людина. Вимоги до таких програм повинні бути високими: безвідмовна робота, швидке виконання всіх функцій, зрозумілий і зручний інтерфейс.

Можна сказати, що перерахований вище набір програм — це найпотрібніші програми, якими користується людина в цифрову епоху. Цей список покриває всі базові потреби людини-користувача. Або не всі? Є ще одна базова потреба, яка не врахована у вищенаведеному списку найнеобхідніших програм? Чи є ця потреба найважливішою з тих, що повинен автоматизувати комп'ютер? Для мене така потреба є, але в списку найбільш використовуваних програм їй місця не знайшлося. Що ж це за потребу?


Історична ретроспектива
Раніше комп'ютер вважався пристроєм для проведення обчислень. Навіть побутові старі комп'ютери орієнтувалися на дуже просунутого користувача, який використовував комп'ютер для обчислень шляхом написання власних невеликих програм. Для повноцінної роботи з комп'ютером, користувач повинен був знати мову програмування. Подальший злет більш просунутих комп'ютерних платформ відбувся багато в чому завдяки появі перших варіантів електронних таблиць, які теж були націлені на обчислення, але знижували вимоги до користувача, не змушуючи його бути програмістом. У будь-якому випадку, це був період, коли призначення комп'ютера безпосередньо відповідало його назві. Сам обчислювальний модуль — процесор — ставилося на чільне місце, адже саме поява мікропроцесора зробило можливим появу самого комп'ютера.

Однак, подальший розвиток не зациклилося на поліпшення характеристик процесорів. Розвивалися всі компоненти комп'ютера, і, зокрема, пам'ять. Пам'ять оперативна і постійна пам'ять. В той момент, коли стало ясно, що комп'ютер здатний зберігати і швидко діставати небачені обсяги даних, з'явилась можливість реалізувати на комп'ютері іншу давню мрію людини: накопичення та швидке вилучення даних. Зробити як би безмежну пам'ять, деяке місце, в яке можна покласти інформацію, а потім швидко її знайти і витягти. Так стали розвиватися бази даних і мови запитів.

Поступово з'явилася найбільша в світі база даних — Інтернет, з усіма його мільярдами сайтів: википедиями, бібліотеками, форумами і соцмережами. Інструменти пошуку кардинально помінялися, а звичайний користувач навіть не може мати особистий пошуковик в Інтернеті — це практично неможливо, та й не потрібно.

Багато ролей приміряв на себе комп'ютер за всі роки розвитку ІТ. Комп'ютер — це дуже універсальна річ, а цифровий всесвіт здатна вмістити в себе всі прояви людської фантазії. І добре, що до теперішнього часу сформувався той необхідний мінімум програм, який демонструє еволюційний шлях, який пройшло людство в своїх потребах в цифрову епоху. Потреби ці, чесно кажучи, сильно зміщені в область споживання та передачі контенту. Не сказати що це погано, але…

За всім цим буйством технологій трохи вбік відійшла одна дуже важлива мрія багатьох людей із сивої давнини і до наших днів, яка добре реалізується у формі персонального комп'ютера. Ця мрія — отримати персонального інтелектуального помічника з безмежною пам'яттю, який би допомагав людині якщо не мислити, то згадувати і знаходити ті знання (а не дані!), які людина вже встиг осмислити, або хоча б побіжно бачив краєм ока, або знав, що щось потрібне є в деякій бібліотеці. Одне це допомогло б вивести розвиток людини на новий якісний рівень. Можливо, стародавні греки могли сказати, що треба розвивати власний мозок (коли розвивалася писемність, багато греки демонстрували чудеса цитування по пам'яті, нехтуючи записами). Однак пройшло багато часу, світ змінився, і зараз наша цивілізація вперлася в обмеження: в наш час людський мозок не справляється з тим обсягом інформації, який потрібно знати і пам'ятати. Інформації стало дуже багато. І це сталося не сьогодні, а в момент переможного ходи науково-технічної революції.

Історія знає як мінімум один концептуальний проект, в якому вперше була зроблена спроба вирішити зазначену вище проблему на новому технологічному рівні. Американський інженер-розробник аналогових комп'ютерів Вэнивар Буш запропонував відійти від зошитів із записами, картотек, бібліотек, і натовпи особистих секретарів до пристрою, який би все це змогло замінити. Він запропонував у 40-х роках минулого століття концепцію пристрою MEMEX. Ось як воно описується:

… електромеханічний пристрій, що дозволяє створити автономну базу знань, забезпечену асоціативними посиланнями та примітками, які можуть бути в будь-який час передані в інші такі ж бази знань. Це пристрій повинно було максимально точно імітувати асоціативні процеси людського мислення, при відсутності недоліків, таких як «забування» інформації.
Опис цього пристрою в кінцевому рахунку побічно вплинуло на появу гіпертекстової розмітки HTML, але нас зараз цікавить саме клас програм, які в будь-якому вигляді реалізували б ідею цього концепту. Слід звернути увагу на слова «автономна база знань» — вони для нас є ключовими. Є програми, які потрапляють під таке визначення? Звичайно є! Це менеджери персональної інформації (PIM), mind-map рішення, деякі органайзери і їх різні гібриди.

Пошук ідеального помічника
Особливість вибору ідеального персонального помічника полягає в тому, що така програма вибирається на десятиліття. А це вимога накладає великі обмеження на можливих кандидатів.

В силу моїх переконань, при пошуку підходящої програми я орієнтувався в першу чергу на кросплатформеність і відкритість коду. Перша вимога — кросплатформеність — пов'язана з тим, що на домашніх комп'ютерах я використовую Linux, а на роботі мені наказано використовувати Windows, і на якій платформі мені доведеться працювати завтра — я точно не знаю. Але знаю точно, що на кожній платформі мені потрібен один і той же помічник. Відкритість коду пов'язана з багатьма факторами, але найголовніше — це безпека в часі і в просторі коду. Безпека в часі — це тверда впевненість, що завтра автор пропрієтарної програми не закриє свій проект або не підніме ціну ліцензії. Безпека в просторі коду — це впевненість, що програма не зіллє збережені особисті дані в місця, де цими даними робити нічого.

Звичайно, істотним фактором є і відкритість формату збережених даних. Ніщо не повинно заважати «втечі з формату», якщо з якихось причин початковий вибір помічника був невдалим. Дуже було б неприємно розлучитися з накопиченої базою знань просто тому, що вона зберігається в закритому проприетарном форматі.

Примітка: чому я використовую термін «база знань» а не «база даних»? Тому що хотілося б накопичувати саме знання, а не дані. Питання в тому, який механізм перетворення даних у знання. У загальному випадку можна сказати, що дані перетворюються в знання після їх осмислення людиною. Саме після цього розумового процесу людина, дивлячись на знайомі запису (дані) може використовувати їх в якості знань.
Як з'ясувалося, програм, які відповідають вищезазначеним критеріям, не так вже й багато. І я навіть спочатку сильно знизив планку вимог, сказавши собі, що в крайньому випадку є Wine, та й чого лякатися закритих форматів — інші ж користуються. І я перебрав велику кількість проектів, щоб зрозуміти, що ж мені таки краще всього підійде.

З пропрієтарних продуктів я переглянув лінійні і деревоподібні PIM-менеджери, спробував mind-map рішення, помацав можливість вести записи в органайзерах. Нічого з испробованного мені не підійшло: завжди був який-небудь неприємний недолік, який зупиняв мене в подальшому використанні продукту. Хороший редактор тексту, але лінійність записів замість древовидности. Наявність древовидности, але жахливий редактор. Спроби зробити обмежений набір типів записів, не описує все різноманіття можливих ситуацій. Неможливість отримувати дані від офісних програм або з вікна браузера. Падіння протягом п'яти хвилин при елементарних діях. Непродуманий інтерфейс, сильне захаращення робочої області, налезание елементів один на одного в русифікованих версій. Можливо, що зараз справи йдуть краще, але вісім років тому я жахнувся від того, що пропонують людям купити за гроші. По суті, з усього зоопарку більш-менш доделанными виявився Microsoft OneNote і якийсь китайський комбаїн з купою функцій і кнопочок, які, на диво, всі працювали (можливо це був TreeDBNotes). Але бачачи, яким деструктивним маркетингом займається Мікрософт, зв'язуватися з OneNote я не став. А китайський комбаїн на той момент я не міг набути тому, що оплата йшла то валютної банківської картою, то через PayPal, а у мене ні того ні іншого не було. Пиратить ж я принципово не збирався.

У стані вільного програмного забезпечення я помацав CherryTree, Zim, KOrganizer, KeepNote, навіть пробував використовувати Eclipse в окремій директорії, створивши дерево піддиректорій і відкриваючи в ньому текстові і HTML файли. Проблеми виявилися ті ж самі: великі і дрібні недоробки, які заважають повноцінно користуватися програмою, або великі незручності замість роботи як у випадку з Eclipse (не призначений він для таких речей, так і сильно гальмує, бо Java). Навіть більш-менш пристойна CherryTree, наприклад, не могла згорнутися в систрей при кліці по хрестику в заголовку вікна: вона просто завершувала роботу. Під Linux я як-то проблему вирішив, а в Windows вона виявилася проблема не вирішується. У свій час я відмовився від WinAmp, коли він раптом розучився згортатися і продовжувати працювати при кліці на хрестик. Адже особистий помічник — це така річ, яка завжди повинна бути під рукою, і не має бути побоювань, що він закриється при природних елементарних діях.

до Речі, про древовидности. Людський мозок звик все класифікувати. В цьому його сила. Наприклад, така складна річ як класифікація живих істот від Арістотеля і Теофраста до Роберта Гука і Карла Ліннея і до наших днів має деревоподібну структуру. І хоч за сучасними уявленнями, походження видів є, більше не деревом, а графом, а електронні енциклопедії при структуризації інформації взагалі виключають древовидность, що побічно говорить про те, що дерево непридатне для опису всіх можливих угруповань даних, я все ж вважаю, що дерево — це той зручний компроміс між простотою лінійністю (як у перших версіях Evernote) і складністю графа (як у Вікіпедії). Як мінімум, при побудові дерева завжди можна виділити один умовно головна ознака, по якому можна здійснювати групування інформації. Зате наявність дерева дає ту опору, завдяки якій можна шукати інформацію «за логікою речей», якщо така логіка простежується.
Дерево має багато інших корисних властивостей: виростання вгору без істотного потовщення, ієрархічність, наочність. З дерева легко можна зробити граф: достатньо просто додати зв'язку між гілками.

Створення ідеального помічника
Загалом, я опинився в класичній ситуації: хочеш отримати щось добре — зроби це сам. В той момент я придивлявся до плюсового фреймверку Qt, який вийшов у своїй 4-й версії. І я вирішив, що немає нічого краще, ніж зробити свій власний менеджер, який би задовольняв мене в міру моїх власних здібностей. Навіть якщо проект «не піде», я, як мінімум, зможу на практиці вивчити перспективний багатоплатформовий фреймверк.

Я прочитав пару книжок, засів за програмування, і зробив першу мінімальну версію програми. Я назвав її MyTetra. Виглядала вона ось так:

image

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

Формат зберігання даних я спочатку робив в «природному» вигляді, і ніяких власних бінарних форматів використовувати не збирався. Так само відмовився від зберігання даних в БД. Всі відкриті формати: дерево зберігається в XML-файл, форматований текст в HTML, зображення PNG, налаштування в INI. Спочатку структура проектувалася так, щоб дані були акуратно розкладені по файлів і піддавалися диференціальної синхронізації через системи контролю версій. Імена збережених файлів і директорій зроблені платформонезависимыми: все-таки платформна програма повинна працювати на будь-якій сучасній платформі без переробок і побічних ефектів. Все це елементарні речі, але виявляється, розробники схожих програм не завжди їх розуміють: наприклад автор OutWiker дозволяє давати каталогах російськомовні назви — тобто використовує в якості імені каталогу на диску ім'я гілки, причому зі знаками пунктуації, що мене в свій час сильно вразило: програма на Пітоні заявлялася як платформна, але при синхронізації даних з різних платформ таке рішення обов'язково б викликало проблеми.

Для сутностей «гілка» і «запис» я визначив основні дії, які можна виконувати: створення, редагування, копіювання, вставка, переміщення, видалення. І коли цей мінімум повністю запрацював і з'явився пошук, я трохи зачесав код і випустив першу публічну версію.

Що я записував у свою програму? Першим ділом я став записувати такі відомості, які весь час забував, і знайти які в простому вигляді дуже важко. Є такі речі, за якими постійно лізеш у свої записульки. Наприклад, в Linux man-сторінки традиційно пишуться у формі «мінімально необхідного і достатнього», тому, швидко зрозуміти опції командного рядка якої-небудь програми дуже складно. Приміром, опції упаковки tar.gz архіву: чотири погано вимовляти букви, які вічно забуваєш.

Так само став докладно записувати дії, які виробляю при налаштуванні якого-небудь линухового софту. Часто в Linux складно не тільки налаштувати програму, а складно встановити її, не кажучи вже про запустити. І щоб програма завелася, треба зробити не п'ять і не п'ятнадцять неочевидних дій, а набагато більше. До кінця, якщо щось вийшло, людина вже не пам'ятає точно, що він робив на початку. А якщо пишеш, то такої проблеми немає.

Ще я собі записував дійсно гарні матеріали з Інтернет або «вичавки», які робив на їх основі. Буває так, що довго не можеш розібратися в якомусь питанні. І раптом натикаєшся на текст, в якому все детально, легко і просто пояснюється. Шкода такий текст втратити: він може зникнути з інтернету, про нього можна просто, запрацювавшись, забути. Але якщо скинути його у свою базу знань, то можна випробувати відчуття заспокоєння, що ці важливі відомості нікуди не дінуться, і залишаться з вами. Чесно кажучи, я не розумію людей, які роблять закладки в браузері: неприємно робити закладки і знати, що в якийсь момент інформація може зникнути. Кілька разів мене моя передбачливість виручала: цікавий матеріал зникав з інтернету, зате залишався в моїй базі.

І звичайно, я записував всю можливу інформацію по своїх побутових електронних пристроїв, паролі входу в адмін і інші інтернет-сервісу, телефони і адреси всяких організацій і знайомих, іншу мелочевку, яка дуже важлива, але складно запам'ятати.

Поступово база зростала, а програма видозмінювалася. Зараз вона виглядає ось так (до речі, це скріншот з Linux, а не Windows):

image

Так, враховуючи, що зараз легко доступні хостинги розподілених систем контролю версій, такі як GitHub і BitBucket, а так само хмарні сховища типу DropBox або Яндекс.Диск, гріх було б ними не скористатися для безкоштовного зберігання в них своїх баз знань. Заодно вирішувалося питання бекапа і синхронізації. Виникала лише одна проблема: зберігання приватних даних. У відкритому вигляді їх можна завантажити на хостинг. Тому була розроблена невелика криптографічна бібліотека, і на її основі зроблено шифрування вибраних гілок. Тобто, з'явилася можливість безпечного зберігання приватних даних у всіх на виду. Чому була зроблена бібліотека, а не використана існуюча? Тому що менеджер позиціонується як Qt-only. Він повинен легко збиратися командами qmake & make на будь-якій платформі, де є тільки Qt, і ніяких додаткових бібліотек не вимагати. Такий принцип дозволяє легко отримувати збірки для всіх популярних платформах: Linux, Windows, MacOs, FreeBSD, Android, і навіть під таку екзотику як MeeGo. Втім, у форматі шифрування передбачено версіонування, і, можливо, я коли-небудь прикручу OpenSSL, коли розберуся як її включати в проект для всіх вищеперелічених платформах.

Крім шифрування в програмі була реалізована настроюється синхронізація, навігація по історії, вбудований довнлоадер, прикріплюються файли, сортовані список записів і ще багато чого потрібного. Через п'ять років відкритої розробки, вийшов PIM-менеджер з тими характеристиками, які були потрібні: відкритий, багатоплатформовий, легкий і швидкий, здатний працювати місяцями не вимикаючись, з набором функціоналу, який необхідний для зручної роботи з ведення записів.

Я, як людина, яка щодня користується MyTetra, до теперішнього часу тримаю в ній близько 5000 записів. Середній приріст — близько 1000 записів в рік. Для порівняння: автор сервісу Evernote Степан Пачиков в одному зі своїх інтерв'ю обмовився про 20000 записів. Однак у нього інший концепт: він збирає в свою систему все підряд, використовуючи її як «зовнішню» людську пам'ять. Я ж збираю потрібну мені інформацію, оформляю її, тегирую, тобто працюю з інформацією руками. І за останні три роки накопичилася ось така статистика:

image

Не кожен може похвалитися таким Contributions Map на GitHub-є. А я навіть не помічаю, як ця статистика набралася, так як MyTetra — це мій щоденний робочий інструмент.

MyTetra та Інтернет
Менеджер персональних записів — це, звичайно, добре. Кожен може зробити свій маленький городик і нишком пиляти свою базу знань. Скільки у базі персональних даних, а скільки таких, які, можливо, були б потрібні іншим людям? По своєму досвіду скажу, що записів, якими можна ділитися, приблизно 2/3 від загального числа. Це з урахуванням того, що в приватних записах у мене йде постійна щоденна робота, тобто їх відсоток у мене дуже великий.

Як то раз я грався з візуалізацією моєї бази через пакет GraphViz. І для розуміння масштабу моїх відкритих даних, зробив пару картинок. Тут зведеної на картинці хмара повернене на 90 градусів, інакше воно виглядало б занадто широким. Тут відображено близько 3000 відкритих записів. Повна база була б на ~2000 записів більше.

image

Посилання на повнорозмірні картинки (Увага! Картинки дуже великі, браузер може сегфолтнуться. Краще викачати та переглянути переглядачем.):

Дерево PNG 1.751 x 32.767 pix (7.2 Мб)
Хмара PNG 31.279 x 5.289 pix (19.2 Мб)

Шкода, що великі масиви знань просто лежать на дисках користувачів, і у них немає навіть можливості поділитися ними, навіть якщо б вони захотіли, бо немає відповідної інфраструктури.

Який резон користувачам ділитися своїми базами знань? Це кожен вирішує сам для себе. Хтось хоче «повернути борги» інформаційного співтовариства, хтось просто вважає, що на шляху сходження кожен чоловік повинен ділитися своїми знаннями. Хтось відчуває потребу поліпшити свою карму. Хтось хоче це робити просто з альтруїстичних міркувань, а хтось з практичних: зручно заглянути в свої відкриті запису з будь-якого місця, де є Інтернет.
Загалом, крім самої програми накопичення записів я вирішив зробити сервіс, що дозволяє виводити свої записи в простір Інтернет. Спочатку я зробив JavaScript-додаток, якому можна згодувати URL індексного файлу бази MyTetra, доступного за HTTP(S). І це додаток відкриває базу MyTetra в WEB-інтерфейсі, що нагадує Qt-интерфес MyTetra. Я назвав це додаток MyTetra Web Client. Виглядає це справа ось так:

image

Цей клієнт був написаний в 2012 році, і з тих пір я його не розвивав. Це дуже проста оболонка, в якій не зроблено навіть пошуку за назвою записів і тегам. Просто демонстрація того, що базу MyTetra можна побачити в браузері прямо в Інтернеті, якщо зберігати дані у відкритих архівів GitHub або BitBucket. Клієнт працює і зараз, а побачити демонстрацію його роботи можна так:

  1. Скопіюйте наступний URL: raw.github.com/xintrea/mytetra_syncro/master/mytetra.xml
  2. Перейдіть за посиланням Web Client, та вставте цей URL в діалоговому вікні.
Якщо є інша база MyTetra, що зберігається десь у відкритому HTTP(S) доступі — GitHub, BitBucket, расшаренный каталог DropBox, то можна побачити, достатньо вказати URL файлу mytetra.xml. Ніякої реєстрації не потрібно — все просто працює. Якщо в базі є приватні зашифровані гілки, то вони просто не відображаються: немає ніякого сенсу показувати людям те, що неможливо прочитати.

Однак у цього веб-клієнта є один недолік: по суті, це просто JavaScript-сторінка, та відображаються на ній дані не індексуються пошуковими системами. Який толк від баз знань, якщо про них ніхто не знає?

Тому я зробив другий проект, який називається MyTetra Share. Девіз проекту: «Діліться знаннями!». Цей сервіс динамічно перетворює базу знань MyTetra у набір HTML-сторінок, які можна переглядати через Інтернет. На офіційній сторінці проекту перераховано 8 баз користувачів, які можна відразу переглянути. Принцип такий же як у MyTetra Web Client: якщо база зберігається у відкритих архівів, можна сформувати спеціальний URL, за яким відкриється вміст бази знань в HTML-форматі. Якщо пошуковик проіндексує такий URL, значить він піде далі і індексує весь вміст відкритої бази даних. Як я вже сказав, таких баз зараз 8 (приклад однієї бази даних), і вони проіндексовані пошуковими системами. Виглядає MyTetra Share наступним чином. Саме дерево:

image

І запис:

image

Цей проект виявився більш затребуваним, і я з допомогою нього навіть зміг монетизувати зміст свого хоумпейджа і сервісу MyTetra Share: на деяких сторінках можна помітити текстову рекламу. Цих коштів вистачає на оплату хостінга, доменного імені та оплати мобільного телефону. Можна було б заробляти більше, але я відразу поставив жорсткий фільтр на всякі аудіо-наркотики, гральні автомати, вібратори, микрозаймы, на чаклунів та екстрасенсів. На жаль, навіть у текстовій рекламі основні прибутки йдуть з мракобісся і розпусти. Я ж займаюся вирівнюванням цифрового всесвіту в більш правильне русло, тому такі речі, на моєму сайті не допустимі.

Завдяки розміщенню добре протегированной інформації, проект MyTetra Share сформував для сайту індекс цитування 100 ТІЦ, і забезпечив близько 3000 відвідувачів на добу. Для Pet-проекту це не полохие показники, враховуючи що ніякої розкруткою я не займався.

Про несправджених надіях
Які ж надії я покладав на цей гігантський і багаторічний проект? Найголовніше, чого я хотів від проекту — це формування хоч невеликої, але постійної команди розробників, щоб можна було розвиватися не як програміст-одинак, а в тісному спілкуванні з собі подібними. Друга надія була на те, що я зможу розібратися з мовою C++, і нарешті-то відчую легкість програмування на ньому. На жаль, ні того, ні іншого не сталося.

Періодично з'являлися люди, які робили невеликі правки і виправлення у проекті. І я їм дуже вдячний. Іноді вони робили щось для проекту самі, без прохання, іноді я сам звертався до спільноти ЛОРа і Тостера, і знаходилися люди, які допомагали вирішити конкретну проблему. Але це одиничні випадки, весь проект доводиться тягнути самому.

Що стосується мови C++, то він виявився набагато складніше і неоднозначніше, ніж я міг припустити десять років тому, коли починав його щільно використовувати. На жаль, моя робота не пов'язана з програмуванням: там, де я живу, такою річчю не заробиш. В моєму оточенні немає знайомих, хто хоча б знав різницю між «сямі» і «плюсами», тільки пара PHP кодерів. І так виходить, що якщо немає особистого спілкування ротом і вухами з дошкою і фломастером під рукою, то немає і розвитку. Не з ким обговорити складні речі так, щоб не залишилося непорозуміння і вони добре вклалися в голові. Можливо, мені допомогли книги, які мені дуже рекомендували:

  • Ніколас А. Солтер, Скотт Дж. Клепер, «C++ для професіоналів»
  • Брюс Еккель, «Філософія С++» (1-й том)
  • Брюс Еккель, «Філософія С++. Практичне програмування» (2-й том)
але я ніде не можу знайти їх в паперовому вигляді. З екрана ж глибокого читання у мене не виходить. Максимум що можу читати — художню літературу з книгочиталки. Але технічну не сприймаю. Можливо тому, що книгочиталки — це один «лист», а мені потрібно швидко стрибати вперед-назад у пошуках різних місць, але книгочиталки такого не дозволяють, вони занадто повільні і незручні.

Я намагався поліпшити розуміння C++ переглядом лекцій з курсів дистанційного навчання. Саме осудна, що я знайшов — це курси Євгена Лінського на lektorium.tv. Але все одно, лекції по інтернету до навчання віднести не можна: у відео не запитаєш ті речі, які тобі були незрозумілі по ходу лекції. Так що користі від такого «навчання» трохи.

Загалом, для мене мова C++ так і залишився загадкою. Я використовую дуже малу частину мови — процедури і ОВП, з болем пишу шаблони, якщо без них не обійтися. Кожен раз плачу від синтаксису покажчиків і адрес. З обережністю використовую спадкування, хоча розумію, що сила мови саме в ньому. З жахом дивлюся на множинне спадкування і на кастинг типів об'єктів. Qt трохи згладжує всі ці проблеми, але він їх більше маскує, ніж вирішує. Апофеозом мого розуміння мови стала новина на Лорі, яку швидко випиляли, ось небольша частина:

Які зміни пропонує ініціативна група стандарту C++!!, щоб зробити мову C++ красивим, потужним і затребуваним засобом сучасної розробки? З найбільш помітних поліпшень:
  • Включення в стандарт концепторов, що реалізують аспектно-орієнтовану парадигму успадкованого коду;
  • Багатовекторна диспетчеризація динамічного поліморфізму для трансляції поліморфного інтерфейсу в рантайм;

  • Нативна підтримка каппа-функторів, та відображення їх на булеан множини з коваріантного структурою, що вирішує проблему единичности метаданих;
  • Рекурентні конструктори, реалізують перезавантаження об'єктів-функцій для дружніх родових класів;
  • Розширена арифметика покажчиків для підтримки адресації фрагментів успадкованих віртуальних структур даних в спецификаторе складання;
  • Трансформація мутабельных об'єктів через оператори доступу до полів класу за допомогою лаяй… -генераторів.
Щоб стало зрозуміло — цю новину я писав на 1 квітня, і в ній написана просто мішанина термінів. Приблизно таке у мене сприйняття мови. Найсмішніше, що майже нікого вышенаписанная белиберда не збентежила — народ активно обговорював дії комітету ISO і угарал над назвою C++!!..

Як ви можете допомогти проекту
Про те, що з'являться люди, крім мене постійно займаються кодом проекту, я навіть не мрію. За весь час розвитку проекту було кілька людей, які протрималися трохи довше ніж люди, які роблять поодинокі правки. Але їх ентузіазм швидко сходить нанівець, коли приходить усвідомлення, що перед тим як кодити, треба погоджувати зміни. Можливо, коли-небудь станеться диво, і у мене з'являться постійні напарники.

Тому, реальна допомога проекту MyTetra може полягати тільки в одному: треба почати ним користуватися. Якщо ви налаштуєте синхронізацію, і почнете користуватися MyTetra Share, то у вас вийде дивовижна річ: ви накопичуєте свою базу знань, і автоматично діліться знаннями з усім Інтернетом, просто користуючись цим самоорганизовывающим інструментом. Можна користуватися MyTetra Share нишком для себе, а щоб посилання на базу з'явилася на сторінці проекту, можна повідомити про це бажання автору MyTetra. Про те як налаштувати синхронізацію через Інтернет, написана окрема стаття.

Важливо розуміти: якщо ви користуєтеся безкоштовними тарифами CVS-хостингів типу GitHub або BitBucket, то при початку користування ви приймаєте правила хостингу про те, що ваші дані є відкритими для всіх під різними OpenSource ліцензіями. Відповідно, ваші дані можуть з'явитися на сторінках MyTetra Share просто за фактом їх розміщення на таких відкритих хостингах, без вашої участі. Це сувора правда світу OpenSource, і це є добре!


офіційному форумі можна висловлювати свої побажання щодо необхідних поліпшень програми. Хоч у мене є своє бачення функцій програми, аргументовані доопрацювання знаходять своє відображення в коді.

Для того, щоб проект розвивався далі, мені як творцеві, треба бачити, що проект затребуваний. Ніяких об'єктивних засобів для визначення кількості інсталяцій програми не передбачено: люди не люблять, коли програма починає зливати якусь інформацію, навіть якщо вона попередньо запитала дозволу на це. Тому єдиним мірилом затребуваності може бути листування на форумі, кількість email повідомлень і наявність активності у MyTetra Share.

Якщо кількість баз в MyTetra Share збільшиться вдвічі щодо поточного, я почну роботу щодо створення окремого сайту для проекту MyTetra. На новому сайті планується зробити розділи новин, вихідного, Wiki, скріншотів, розмістити форум, перенести туди сервіси MyTetra Share і MyTetra Web Client. Можливо, наявність сайту і англомовних версій сторінок виведе проект на новий рівень.

До речі, про англійською мовою. До мене постійно звертаються англомовні користувачі, і я розумію, що певний інтерес в англомовному світі MyTetra має. Дві офіційні сторінки — сторінка MyTetra і MyTetra Web Client мають англомовні версії на кривому англійською (я багато перекладаю з, але не можу). По-хорошому, їх треба причесати і привести у відповідність з російськомовними версіями. Так само вимагають перекладу сторінки MyTetra Share, по синхронізації даних через Інтернет, за форматом зберігання даних (посилання наведено в кінці цього посту). Крім того, було б непогано отримати якщо не звукову доріжку, то хоча б англомовні субтитри до оглядових відео (теж в кінці посту). Я цього зробити не можу, але можливо хтось з хорошим знанням мови візьметься за таку роботу.

Про форках MyTetra
Автору дуже приємно, що кілька місяців тому китайський розробник Beimprovised (реальне ім'я Hugh Young) зробив форк MyTetra, званий MyTetra WebEngine. Протягом декількох місяців він несамовито коммитит в GitHub величезні шматки коду, що змушує щиро дивуватися його працездатності. Наявність цього форк говорить про те, що код програми MyTetra був досить зрозумілий і простий для того, щоб інший розробник, навіть є носієм іншої мови, зміг підхопити проект і почати робити на його основі новий продукт.

У Hugh Young своє бачення проекту, і його форк дуже далеко пішов від оригінальної MyTetra. Але нещодавно він висловив жаль про те, що шляхи проектів розійшлися, і нововведень, що з'явилися в останній версії MyTetra у нього немає, а скористатися новим кодом проблематично, тому що він сильно змінив внутрішню структуру проекту.

У будь-якому випадку, наявність форк мене, як автора, дуже радує. Це означає, що мої зусилля по написанню проекту були не марними.

Висновок
Про програму MyTetra я написав кілька матеріалів, що дозволяють розібратися з можливостями, закладеними в неї:

Є хороша ідеологічна стаття людини під псевдонімом Ігор Блогератор (на жаль, я з ним не знайомий), у другій частині якої розглядається MyTetra:

Так, в силу того, що на днях я випустив свіжу версію 1.42, я зробив відеоогляд програми в 3 частинах, відеоогляд викладений на YouTube:

У цих відео докладно розповідають всі аспекти роботи з програмою (тому відео довгі за 20-40 хв.), і розглядаються основні прийоми роботи. MyTetra — це не тільки менеджер заміток, це інструмент, какорый допомагає організувати власний робочий процес. Наприклад, в MyTetra можна вести список справ і створювати для себе невеликі звіти. Про цю методику розповідається у першій частині.

За новою версією MyTetra 1.42 (ювілейний випуск на 5-ти річчя відкриття исходников) опубліковано новину, в якій описані зміни та нововведення, є інформація по установці і оновлення програми.

Сподіваюся, спільноті Хабрахабра сподобається програма, і ідеї, які в неї закладені.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.