| CARVIEW |
Блоґ одного кібера
Історія хвороби контуженого інформаційним вибухом
Про деякі проекти 2024, 2025, …
Щось я так давно не писав що вже розучився. І навіть не знаю чи це мають бути підсумки року (скоріше багатьох років), чи плани на 2025, чи просто опис проекту, чи якась загальноосвітня стаття як от про етимологію слова блоґ чи про те як краще використовувати систему розподілених повторень.
Про писанину
Як колись сказав покійний Користувач:Helgi, вікіпедійний інстинкт з’явився у людини напевне ще за неоліту, коли на роздоріжжі стежки у якомусь лісі ставили камінь з позначками “наліво – шаблезубий тигр, чиста вода – направо”.
Багато моєї писанини мотивована подібним інстинктом. “Я зробив щось таке, зараз я вам розповім як. І тоді ви зможете дістати воду в кілька разів швидше за мене, при цьому не зустрівши тигра.” Вам вигідніше, і я від того не збіднію. А якщо ви теж напишете про щось що ви робите – то теж буду дуже радий. Бо велика частина моєї писанини, проектів і думок якщо не запозичена то натхненна іншими. ХЗ чи людина може творити щось у вакуумі. Штучний інтелект точно не може, і не факт що людський інтелект сильно відрізняється. Кажуть що робота зробила з мавпи людину, але я чув що мозок у приматів почав рости коли вони почали жити в соціальних групах, і саме для того аби спілкуватись з іншими приматами.
Цей вікіпедійний інстинкт в мене, як могли зауважити читачі цього блогу сильно занепав десь біля 2020-го. На то було багато причин. В мене була дитина, але я ще писав всяке різне. Потім я зіткнувся з деякими вчителями у вікіпедії, Зеленський став президентом і я вирішив що краще аби моя дитина з такими вчителями не зустрічалася і що краще бути на захід від тої середини на якій пропонував зійтись президент.
Ще якось я прочитав цікаву статтю про історію комп’ютерних ігор. І вирішив поділитись цим з українською аудиторією на вікіпедії. Там ця історія нікому особливо не була цікава, але натомість мене переконали що українською я писати не вмію, бо програмують не на BASIC (це страшна помилка, вислову “на мові” не існує українською мовою!) а BASIC-ом, версію гри не публікують а “подають” у книжці (хз що означає, подавати код гри у книжці, припускаю що то термін запозичений з тенісу). Одним словом – не вмієш користуватись українською, і краще не треба, залиш цю справу спеціалістам.
Щоб голова менше боліла я вирішив більше писати про програмування англійською. Тоді більше часу залишається на те аби думати про код, а не про те чи ти програмуєш мовою Go чи головою.

Як видно зі статистики, в 2022, у мене, як і в багатьох інших бажання щось знову зробити знову з’явилось, і потрохи я і бот роблять там якісь технічні виправлення, і стараюсь не додавати нового вмісту, хіба що видаляти неправильний. Ну й після такої віківідпустки вікіпедійні проблеми вже не здаються такими критичними, в крайньому разі можна зробити собі ще одну віківідпустку.
Крім того й писати нема особливо про що, хоча я й програмував усілякі цікаві речі. Наприклад гру яка працює з блокфлейтою як з контролером. Але хіба є якісь проекти важливіші за той що робить ЗСУ? Ну ок, ти запрограмував щось цікаве, чи написав щось українською, від цього хіба вмер хоч один окупант? (Якщо звісно ти не запрограмував якусь навігацію для дрона що обходить РЕБ чи щось в тому роді). Коротше, сенс мають хіба проекти від яких росія стає меншою. Я навіть трохи заздрю деяким своїм друзям які працюють над всякою секретною електронікою яка в цьому допомагає. Оце проекти з сенсом! Потім згадую, що один з їх попередніх “проектів” – будинок в Ірпіні, знищили російські танки, і перестаю заздрити, думаю скільки скинутись на ще якусь електронну штуку.
Про німецьку
Я почав був вчити німецьку бо то був логічний наступний крок після англійської. Ну і якось знадобилось. Хоча в Берліні можна обійтися й англійською, але дитина ходить в німецьку школу, з німецькими вчителями, з якими треба контактувати і починає читати німецькі книжки, де їй треба допомагати, і відповідати на запитання про вміст німецьких книжок. Отож логічно що я вчу німецьку далі.
При цьому я трохи переріс курс Duolingo, а робити собі свої тести для Memrise накладно, і при цьому доволі складно. Тому що нехай ми хочемо вивчити слово Steg. А воно може означати причал, може кладку чи місток, може струнотримач. Чи наприклад “необхідний“: erforderlich, nötig, notwendig, unerlässlich, vonnöten. Який переклад вибрати в якій ситуації? Хз, для того треба ці слова багато разів бачити. Просто у відриві від (кон)тексту вивчити слово неможливо.
Тому мій “Неповний огляд програм для розподіленого повторення (Memrise vs Duolingo)” я вважаю трохи застарілим. Ну тобто для початку, коли варто вивчити всі займенники, числівники, дні тижня там, основні побутові предмети і фрази типу вітань, подяк, кольори, і т.п. – це напевне корисно і допомагає. Але після 5-10 тис слів мені здається що вже треба щось інше.
Тому зараз я просто читаю (що й раніше робив), але тепер ще більше німецькою. Наприклад коли є вибір на цікаву тему між німецькою й англійською, я беру німецьку, хоча тоді розібратися в темі займе більше часу. Аби зустрічати побільше слів у різних контекстах. Перевага простого читання над розподіленими повтореннями що у алгоритмі розподілених повторень ти повторюєш частіше ті слова які важче запам’ятати. У читанні – ти частіше повторюєш ті слова які зустрічаються частіше.
Тобто якщо у тексті зустрічається термін GAU (größter anzunehmender Unfall – найнебезпечніша можлива аварія), то його варто запам’ятати й повторити раз. Не треба його повторювати двічі. Якщо воно запам’ятається з першого разу – добре, молодець. Якщо не запам’ятається – то може й не треба було. А якщо треба, і ви працюєте зі всякими ядерними штуками чи цікавитесь ними – то значить будете читати про ядерні штуки ще і зустрінете те слово ще.
А ще поверх читання я додаю трохи інші модальності. Наприклад виділяю незнайомі слова. В електронних книжках виділяю електронно, в тих що взяв з макулатури і віддам в макулатуру (Ден Браун і подібне) або в газетах підкреслюю прямо на сторінці олівцем, а в цінніших – виписую в окремий зошит (з контекстом або сторінкою), аби не псувати книжку:

Дослідження кажуть що виділення маркером неефективні для запам’ятовування. Тому що не потребують багато зусиль, а мозок любить робити речі які не потребують зусиль на автоматі, не сильно фокусуючи увагу.
Тому критичнішим є етап 2 – пошукати в інтернеті що то незнайоме слово взагалі означає, і записати. То займає трохи часу, але це трохи активніша діяльність зі словом, і воно доволі добре запам’ятовується. Після того ще раз підглянути значення треба хіба що може для 10% слів.
Аби швидше шукати в інтернеті і при цьому бачити менше реклами, я зробив плагін для браузера який робить пошук в 4 словниках і вікіпедії одночасно і показує результати на одній сторінці.
Ну й аби потім не треба було важко шукати в різних місцях – я виписую знайдені значення собі в https://deuk.dict.cc/.
Це такий собі словник на принципах вікі (не плутати з вікісловником) з простим текстом, без езотеричної вікірозмітки і, заточений на різні мовні пари. відколи там навесні увімкнули українську (нова мова, вперше з 2010)
Відколи додали українську версію, вона зросла до 27 000 тис перекладів. Що за статистикою вже достатньо аби розуміти зі словником 3/4 вікіпедії, хоча звісно не всі слова там суперчасто зустрічаються. Слова на зразок Weihnachtsbaumschmuckausstattungsspezialgeschäft чи Fußbodenschleifmaschinenverleih напевне єдині в своєму роді. 🙂
Але, можна й краще, для чого мені потрібна ваша допомога. Я був записав відео про те як допомогти, але його чомусь мало хто бачив:
Тому й цей пост. Якщо ви вчите німецьку – введіть туди слова які вчите (якщо не знайдете їх вже перекладеними). Чому це варто зробити окрім того що для себе аби краще запам’ятати?
По-перше, тому що зараз там більшість редакторів майже не володіють українською (ну тобто ще гірше ніж я). Вони австрійці, німці, французи і т.п, які в кращому випадку напевне пройшли дуолінго. І користуються наприклад словником який створив університет Лейпцига. В ньому багато лексики, але є багато русизмів й м’яко кажучи дивні переклади. Наприклад бакалія – Süßigkeit (солодощ). Ну може й так, але це доволі частковий випадок бакалії. Але люди пробують вчити українську на основі німецької, і було б добре їм допомогти прокласти цей місток між мовами також з протилежного боку. Тоді він вийде якісніше якщо крім людей які знають німецьку і вчать українську там будуть люди які знають українську і вчать німецьку. Та й взагалі, чим більше очей, тим менше помилок.
Окрім власне запису значень там є ще над чим працювати, наприклад записувати аудіо (так, всі слова озвучені, всі комп’ютером, і тисячі слоів людьми з різних регіонів і різними вимовами).
По друге, тому що він поки що в 5 разів менший від словника іншою мовою якою багато людей (і українців) в Німеччині користуються і яку хотілося б забути. Чому б не дати їм кращу українську версію? Треба просто після закінчення уроку, якщо ви вчите мову витратити ще 10 хвилин і записати нові цікаві слова.
Written by bunyk
1 Січня, 2025 at 18:17
Опубліковано в Інструменти, Нещоденник
Столітня книжка про технології
В дитинстві літом я жив у селі з батьками тата, а взимку – в місті з батьками мами. Думаю тому що в місті в той час не треба було носити дрова і гріти воду аби скупатися. В селі хата була більша за міську квартиру і містила немалу бібліотеку. Про неї можна багато згадувати але я не буду бо то буде довго. Полиці в книжковій шафі були заставлені в два ряди, і колись я знайшов в задньому ряді щось загорнуте в пластикову обкладинку для зошита. То виявилася найстаріша книжка бібліотеки – науково-популярне видання з 1920-тих. Була ще старіша (і набагато товстіша) книжка з різними оповіданнями і віршами. Вона була загорнута в картонну папку для зошитів аби замінити відсутню обкладинку, і вже майже розсипалася на листки. Але коли вона видана – невідомо, бо починається зі сторінки 6. Десь внизу на якомусь аркуші підписана як “Читанка для II. кл. шк. с.
Книжки цікаві, бо цікаво дізнатись як жили люди в давнину майже з перших рук. І цікаво як змінилася мова.
Коли я дізнався що у Вікімедіа Україна є книжковий сканер, то згадав за цю книжку і вирішив поділитись з іншими. Так “Оповідання про сили природи” опинились на вікіджерелах.
Читанку я пізніше відсканував сам за допомогою сканера зробленого з трьох коробок піци і додатка OfficeLens від Microsoft. Якість вийшла не гірша за сканер вікімедії, хоча вона відрізняється від сторінки до сторінки, бо іноді джерелом світла було вікно, а іноді – настільна лампа + лампа від камери телефона.
Я недавно закінчив їх оцифровку, пошукав автора/редактора Миколу Чайковського і виявив що він (якщо це той самий Микола Чайковський, а скоріше за все так) помер 7 жовтня 1970, що означає що згідно законів про авторське право і правил вікіджерел, вона до 7 жовтня 2040 не може бути в суспільному надбанні і її скоріше за все видалять з вікіджерел. Dura Lex, sed lex. Аби не витратити зусилля на марно, я цю книжку перепощу тут, через 20 років якщо доживу – може перепощу назад на вікіджерела, якщо такий проект ще буде. Або хтось інший щось зробить. Це також означає, що цей пост не підпадає під ліцензію CC-BY-SA як решта цього блогу, майте це на увазі. А кому нарешті цікаво прочитати – прошу:
НАРОДНЯ БІБЛІОТЕКА „ПРОСВІТИ“ Ч. 26.
ОПОВІДАННЯ
ПРО
СИЛИ ПРИРОДИ
ТРЕТЄ ВИДАННЯ, ЗОВСІМ ПЕРЕРОБЛЕНЕ
(З 13 ОБРАЗКАМИ).
ЛЬВІВ, 1924.
НАКЛАДОМ ТОВАРИСТВА „ПРОСВІТА“.
Прочитати решту цього запису »
Written by bunyk
9 Жовтня, 2020 at 10:27
Опубліковано в Нещоденник, Передруки
Чому блоґ називають блоґом?
Дивовижно як довго якась відверта дурниця може протриматись у вікіпедії. У 2009-му році хтось додав у статтю “Лоґ” інформацію про те, що англійське слово лоґ це від грец. logos — слово, смисл, думка, мова. Через 11 років я це виправив, і от тепер вирішив розповісти про етимологію слова блоґ, бо вона доволі цікава. Думаю технічний музей Берліна, або Deutsches Museum в Мюнхені мають до неї багато експонатів. А з усім цим карантином я вже трохи скучив за такими музеями. 🙂
Прочитати решту цього запису »Як написати собі маленький Google Translate на Grammatical Framework за 15 хв
І з якістю трохи кращою ніж в Google Translate, але з обсягом можливих перекладів набагато меншим.
Що я роблю на роботі
Зараз я працюю в Zalando – компанії яка продає різний крам в купу країн Європи. Відповідно, треба підтримувати сайт для багатьох країн. Я працюю у відділі який займається інструментами що допомагають створювати наповнення сайту. Процес додавання нового вмісту на сайт дуже трудомісткий, бо потрібно сфотографувати продукт, на столі, на моделі, перевірити розміри, матеріали і інструкції з догляду, написати опис, заголовок і т.п.. А потім ще перекласти це на 8 мов і кілька локалей, бо деякі країни DACH (німецькомовний простір) не входять до єврозони і використовують швейцарські франки наприклад. Це велика купа часу, і великий простір для автоматизації.
Google Translate не підходить, тому що наприклад ми продаємо скатертини, і німецький менеджер пише “Tischdecken” (множина від Tischdecke), Google Translate думає що це дієслово (бо є таке дієслово), і перекладає “Set the table” (накривайте столи!).
Насправді задача стоїть простіша ніж повний машинний переклад, бо дані отримуються не якоюсь конкретною мовою, а набором параметрів – “що”, “коли”, “яке”, “для кого”, “по чому” і т.п.. Тобто якщо я отримую що=взуття, яке=класичне коли=зима для кого=хлопчики, по чому=<100 € то я (в сенсі моя програма), пише:
'de_CH': 'KlassischeWinterschuhe für Jungs- unter CHF 107','de_DE': 'KlassischeWinterschuhe für Jungs-unter 100 €','en_GB': 'ClassicWinter Shoes for Boys-under £85',
Все просто – перекладаємо слова за словником і підставляємо в шаблон для конкретного набору компонентів. З німецькою лише один виклик – з’єднання слів. Тобто якщо я з’єдную Winter з чимось – просто конкатеную, а от коли Fruhling – додаю між Fruhling і тим словом яке приєдную ще “s”. Є ще інші правила.
Складність з’являється в слов’янських мовах. Там є відмінювання прикметників у множині.
На роботі я багато думаю як би то не робити роботу яку вже хтось зробив за мене
Програмісти ліниві створіння. Нащо писати код якщо код вже є написаний на StackOverflow і Github? Треба лише знати де той код лежить. І я почав собі шукати як інші люди це робили. До того як з’явилось машинне навчання і статистичні методи, всі пробували підхід на основі правил. І проміжної мови.
З проміжною мовою процес розбивався на дві частини – спершу проводився синтаксичний аналіз тексту на мові джерела, тоді з побудованого представлення тексту на проміжній мові (зазвичай дерево) будувався текст іншою мовою.
Моя задача вже простіша, бо ніякого синтаксичного аналізу робити не треба, треба просто згенерувати текст 8-ма мовами на основі структури даних. Це як два пальці відрендерити контекст за допомогою шаблону, ми веб-деви тільки таке й робимо.
Тільки виявляється що шаблон для генерації простого заголовку на зразок: “Mindestens 500 € sparen – Premium Herbstmode” або “Premium Herbstmode unter 999 €” займає мало не ввесь екран.
Я подумав що може нарешті настав той момент коли я на Кубику не даремно вчився, пам’ятаю Opa Chomsky Style, і треба застосувати якусь контекстно-вільну граматику, чи яка там наступна за потужністю, бо контекстно-вільна здається не потягне слов’янську морфологію.
І раптом в своїх пошуках надибав Grammatical Framework. Це штука яку вже більше ніж 20 років пишуть на Хаскелі, значить люди вміють точно більше ніж я. І автор приходить з доповіддю в Google, в якій кілька слайдів на початку – суцільний тролінг команди Google Translate:
Але мене підкупило речення з їх сайту, https://www.grammaticalframework.org/
GF is easy to learn by following the tutorial. You can write your first translator in 15 minutes.
До роботи!
Ну що ж, заводимо таймер, і спробуємо наприклад написати перекладач, що може перекласти набір шахматних словосполучень /(black|white) (queen|king)/ з англійської на українську. Шахмати, тому що одягом я й на роботі можу зайнятись, а блог я пишу вдома і хочеться трохи змінити контекст.
Для початку варто встановити компілятор/інтерпретатор gf. На сторінці завантаження є пакети для різних ОС, з інструкцією про те як їх поставити. Ще можна поставити плагін підсвітки синтаксису для вашого редактора, перелік є на цій сторінці.
Hello, world!
Тепер, в файлі Chess.gf пишемо таку граматику:
-- це, до речі, коментар
abstract Chess = {
flags startcat = Piece ;
cat PieceType ; Color ; Piece;
fun
piece : Color -> PieceType -> Piece ;
Black, White : Color;
Queen, King: PieceType;
}
abstract означає що ми описуємо граматику проміжної мови, тобто не якоїсь конкретної людської, а мови якою ми описуватимемо сенс тексту.
flags startcat = Piece ; означає що початковою категорією (коренем дерева) буде фігура.
cat перелічує можливі категорії (типи вузлів дерева).
Секція fun описує функції. Функції описують як будується дерево, і можуть бути будь-якої арності, в тому числі нулярні. Наприклад тут функції Black та White не приймають аргументів але повертають колір. (По суті – константи). Зате функція piece приймає дві категорії і повертає категорію для фігури.
Тепер про те як перетворити дерево на послідовність токенів якоюсь мовою. Це називається лінеаризацією, і описується конкретною граматикою:
concrete ChessEng of Chess = {
lincat Piece, Color, PieceType = {s : Str} ;
lin
piece color type = {s = color.s ++ type.s} ;
Black = {s = "black"} ;
White = {s = "white"} ;
Queen = {s = "queen"} ;
King = {s = "king"} ;
}
Зберігаємо її в файлі ChessEng.gf. Для GF важливо щоб кожна граматика була в своєму файлі і щоб він називався так само як називається граматика, інакше він дає помилки.
lincat описує які типи токенів будуть відповідати категоріям абстрактної категорії. В нашому випадку це структура з одним полем типу Str, тому що пізніше нам знадобляться інші поля.
lin описує функції лінеаризації типи яких були описані в абстрактній граматиці. Для унарних функцій – як власне пишеться слово, для інших – як скомбінувати інші лінеаризації.
Щоб потестувати як все працює, запускаємо команду gf Chess*, яка завантажує обидві граматики і починає інтерактивну сесію.
Тут ми можемо наприклад перевіряти наші речення на правильність:
Chess> parse "black queen"
piece Black Queen
Chess> parse "snow queen"
The parser failed at token 1: "snow"
Правильно, ми тут пишемо граматику для шахмат а не для казок. Ще можна попросити згенерувати випадкове дерево:
Chess> generate_random
piece White Queen
Або його лінеаризацію:
Chess> generate_random | linearize
black queen
Або всі можливі речення:
Chess> generate_trees | l
black king
black queen
white king
white queen
Морфологія
Тепер давайте зробимо переклад на українську! Для цього треба описати граматику української. Додаємо переклад з англійської в файл ChessUkr.gf:
concrete ChessUkr of Chess = {
lincat Piece, Color, PieceType = {s : Str} ;
lin
piece color type = {s = color.s ++ type.s} ;
Black = {s = "чорний"} ;
White = {s = "білий"} ;
Queen = {s = "королева"} ;
King = {s = "король"} ;
}
Завантажуємо і тестуємо перекладач в консолі:
Chess> parse -lang=ChessEng "black king" | linearize -lang=ChessUkr
чорний король
Дуже добре!
Chess> parse -lang=ChessEng "white queen" | linearize -lang=ChessUkr
білий королева
От засада! Навіть Google Translate вміє краще. Треба ввести в українську граматику поняття роду. Для цього до іменників треба додати інформацію про те якого вони роду, а кольори мають описувати як вони відмінюються залежно від роду:
concrete ChessUkr of Chess = {
param Gender = Masc | Fem ;
lincat Piece, PieceType = {s : Str; gender : Gender} ;
lincat Color = {s : Gender => Str} ;
lin
piece color type = {s = color.s ! type.gender ++ type.s; gender=type.gender} ;
Black = {s = table {
Masc => "чорний";
Fem => "чорна"
} };
White = {s = table {
Masc => "білий";
Fem => "біла"
} };
Queen = {s = "королева"; gender=Fem} ;
King = {s = "король"; gender=Masc} ;
}
Тут нам і стало в нагоді те що наші категорії – це структури, а не просто рядки. Чіпляємо до кожної фігури інформацію про стать. Gender => Str задає тип таблиці (це майже як функція, тільки описується чимось типу хеша). Кожен колір тепер – це таблиця. Операція “!” – це вибір значення з таблиці.
Тестуємо нову граматику української:
Chess> generate_trees | l
black king
чорний король
black queen
чорна королева
white king
білий король
white queen
біла королева
Chess> parse -lang=ChessUkr "білий король"
piece White King
Chess> parse -lang=ChessUkr "біла король"
The parser failed at token 2: "\1082\1086\1088\1086\1083\1100"
Хаха, він думає що ми неправильно вжили слово король, бо після біла може стояти лише королева. Але помилку знайшов!
Рефакторинг
Накодили, потестували, тепер пора зробити код гарнішим.
Писати словник в форматі:
White = {s = table {
Masc => "білий";
Fem => "біла"
} };
Коли ми можливо захочемо додати ще слів які можливо матимуть ще середній рід і множину – доволі трудозатратно. Але ми можемо написати функцію. Точніше оператор, бо в GF функцією ми вже назвали штуку яка будує дерево.
Ще нам знадобиться згадати школу, в якій нам казали що прикметники твердої групи в чоловічому роді завжди закінчуються на -ий, а в жіночому на -а.
Тоді ми можемо додати в українську граматику такий оператор:
-- hard adjective
oper ha: Str -> {s: Gender => Str} = \stem -> {
s = table {
Masc => stem+"ий";
Fem => stem+"а"
}
};
Він приймає рядок і повертає токен в якого s – це таблиця що відображає рід на написання.
І тепер ми можемо швидко додавати багато прикметників:
Black = ha "чорн";
White = ha "біл";
Fast = ha "швидк";
Defenceless = ha "беззахисн";
і навіть швидко додати множину для всіх якщо додамо закінчення рід. Правда колір певне варто перейменувати в прикметник, а рід – в граматичну категорію. Але іменування – це вже складніша проблема програмування.
Тепер додайте решту слів і маєте свій перекладач!
Hunspell
Hunspell розшифровується як “угорський правопис”, і це найбільш просунута програма перевірки правопису якщо не враховувати Grammarly. А все тому що угорська мова – найбільш скажена в плані морфології. Тому якщо щось підходить для угорської – для інших європейських мов точно підійде.
sudo apt install hunspell hunspell-uk hunspell-de-de libhunspell-dev
sudo pip install hunspell
hunspell має доволі простий інтерфейс для використання в мовах програмування (хоча й складні словники (читати man hunspell.5)):
>>> import hunspell
>>> spellchecker = hunspell.HunSpell('/usr/share/hunspell/uk_UA.dic', '/usr/share/hunspell/uk_UA.aff')
>>> spellchecker.spell('ласка')
True
>>> spellchecker.spell('ласкає')
False
>>> spellchecker.suggest('ласкає')
['ласка', 'ласкам', 'лускає', 'ласках', 'ляскає', 'ласка є', 'скалатає']
Written by bunyk
13 Січня, 2020 at 19:45
Опубліковано в Інструменти, Кодерство
Стараюсь вписатись в рамки:
- 1 (2)
- Інструменти (91)
- Всяке (82)
- Кодерство (252)
- Конспекти (84)
- Нещоденник (254)
- Передруки (54)
- Психософія (89)
- Творчість (23)
- English posts (10)
Недавні записи
- Про деякі проекти 2024, 2025, …
- Столітня книжка про технології
- Чому блоґ називають блоґом?
- Як написати собі маленький Google Translate на Grammatical Framework за 15 хв
- Hunspell
- Німецька реєстрація
- 30 відтінків слова Zug
- Як збудувати геодезичний купол?
- Корисні налаштування Git
- Чи правда досить 1000 слів щоб вивчити мову?
Літописи
Варто читати
Друзі
Блоґ одного кібера
Баннери
Хмарка тем
3ds :) :) :) :) Angular Assemler blender C++ Code::Blocks CybWiki deutsch english esperanto GLUT go hardware HTML JavaScript LaTeX linux lisp NoSQL OpenGL PHP preCybWiki prolog Python SDL SQL ubuntu Vim windows Есперанто Курсова Лайфхаки ООП С++ Хакери блог блоговедення вікіпедія графіка гроші дані добре здоров'я зле зміни книжки кубик люди мандри математика мова музика німеччина освіта переклад політика психологія речі робота розробка спорт танго фантастика фото філософія фільми цілі шпора ігри ідеї історія-
Підписатись
Підписано
Already have a WordPress.com account? Log in now.


