Отже, любі друзі, цей день настав. Ми підняли DC++!
Половина з вас, певно, і не знає, що це таке, бо протокол майже мертвий. Та десь після пʼяти розрядів деплоя інфраструктури ми побачили пульс!
Як це все працює? Насправді DC++ — це назва клієнтської програми, а сам протокол називається ADC (Advanced Direct Connect). Це гібридний протокол: має бути щонайменше один хаб, до якого підʼєднуються клієнти. Хаб забезпечує фічі на кшталт текстового чату, пошуку файлів, моніторингу підʼєднаних клієнтів тощо. Для передачі файлів клієнти звʼязуються один з одним через P2P.
Останні можуть працювати в активному або пасивному режимі. Для успішного обміну принаймні один клієнт має бути активним. Активні клієнти можуть приймати зʼєднання зовні, а пасивні можуть їх лише ініціювати. Та завдяки тому, що вони обидва підʼєднані до хабу, це не проблема. Якщо активний хоче щось стягнути з пасивного, то він каже про це хабу, той передає пасивному, а той вже сам ініціює зʼєднання, щоб з нього щось стягнули.
Ще в ADC (порівняно з DC) додали хешування файлів + підтримку TLS.
Для звʼязку самих мереж вирішили використовувати Tailscale. Проблема була в тому, що в моїй тейл-мережі вже 30+ вузлів, а у другана взагалі kubernetes-кластер зі своєю моташкою, і нікому з нас не хотілося надто це переналаштовувати чисто під цей випадок. Ми перебрали купу різних топологій, і щоразу впиралися то в якісь обмеження самого Tailscale, то ще в щось. (Думатимете, що питати на співбесідах по System Design, згадайте цей допис — кращого не знайдете, їй-богу). Врешті зупинилися на окремій спільній мережі з певними додатковими нюансами (якщо захочете, розповім детальніше) — запрацювало!
Дві наші головні помилки:
1. Ми зробили низку припущень, на базі котрих ми кинулися щось будувати, бо «ну, звучить збс» і «та хулі там», але згодом припущення виявлялися хибними: врешті час вже витрачений, а токени спалені. Тож порада: не намагатися перестрибнути декілька кроків, а почати реально з найбазовіших штук і переконатися, що вони працюють. Ніби по декілька десятків років досвіду в кожного, а робили як новачки якісь🤷♂️
2. Своєрідне продовження попереднього пункту: ми за звичкою бахнули одразу ACL, де все закрутили, і полірнули файрволами — компи наче в одній мережі, але пакети не біжуть🙁 Пішли від зворотного: тимчасово дозволили взагалі все, а далі почали закручувати. Тут допомогла можливість писати тести в тейлскейловому ACL — можна одразу прописати, хто до кого мусить ходити, а далі прибирати права.
Що маємо в результаті: окрема повністю незалежна й закрита від зовнішнього світу мережа, в якій є лише наші DC-клієнти та хаб. Можемо обмінюватися файлами за пів тисячі кілометрів один від одного по шифрованому каналу. Можемо вибирати, які файли шарити і які качати з яким пріоритетом, з підтримкою дозавантаження. Можемо слати у вбудованому убогому чаті келих пива в ASCII. Єдина залежність на чужу інфраструктуру — це координатор Tailscale, який за бажання можна замінити на власний Headscale.
А ваші сучасні технології так можуть?😎
Половина з вас, певно, і не знає, що це таке, бо протокол майже мертвий. Та десь після пʼяти розрядів деплоя інфраструктури ми побачили пульс!
Як це все працює? Насправді DC++ — це назва клієнтської програми, а сам протокол називається ADC (Advanced Direct Connect). Це гібридний протокол: має бути щонайменше один хаб, до якого підʼєднуються клієнти. Хаб забезпечує фічі на кшталт текстового чату, пошуку файлів, моніторингу підʼєднаних клієнтів тощо. Для передачі файлів клієнти звʼязуються один з одним через P2P.
Останні можуть працювати в активному або пасивному режимі. Для успішного обміну принаймні один клієнт має бути активним. Активні клієнти можуть приймати зʼєднання зовні, а пасивні можуть їх лише ініціювати. Та завдяки тому, що вони обидва підʼєднані до хабу, це не проблема. Якщо активний хоче щось стягнути з пасивного, то він каже про це хабу, той передає пасивному, а той вже сам ініціює зʼєднання, щоб з нього щось стягнули.
Ще в ADC (порівняно з DC) додали хешування файлів + підтримку TLS.
Для звʼязку самих мереж вирішили використовувати Tailscale. Проблема була в тому, що в моїй тейл-мережі вже 30+ вузлів, а у другана взагалі kubernetes-кластер зі своєю моташкою, і нікому з нас не хотілося надто це переналаштовувати чисто під цей випадок. Ми перебрали купу різних топологій, і щоразу впиралися то в якісь обмеження самого Tailscale, то ще в щось. (Думатимете, що питати на співбесідах по System Design, згадайте цей допис — кращого не знайдете, їй-богу). Врешті зупинилися на окремій спільній мережі з певними додатковими нюансами (якщо захочете, розповім детальніше) — запрацювало!
Дві наші головні помилки:
1. Ми зробили низку припущень, на базі котрих ми кинулися щось будувати, бо «ну, звучить збс» і «та хулі там», але згодом припущення виявлялися хибними: врешті час вже витрачений, а токени спалені. Тож порада: не намагатися перестрибнути декілька кроків, а почати реально з найбазовіших штук і переконатися, що вони працюють. Ніби по декілька десятків років досвіду в кожного, а робили як новачки якісь
2. Своєрідне продовження попереднього пункту: ми за звичкою бахнули одразу ACL, де все закрутили, і полірнули файрволами — компи наче в одній мережі, але пакети не біжуть
Що маємо в результаті: окрема повністю незалежна й закрита від зовнішнього світу мережа, в якій є лише наші DC-клієнти та хаб. Можемо обмінюватися файлами за пів тисячі кілометрів один від одного по шифрованому каналу. Можемо вибирати, які файли шарити і які качати з яким пріоритетом, з підтримкою дозавантаження. Можемо слати у вбудованому убогому чаті келих пива в ASCII. Єдина залежність на чужу інфраструктуру — це координатор Tailscale, який за бажання можна замінити на власний Headscale.
А ваші сучасні технології так можуть?
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍5❤🔥2👏1🤣1 1
Колись купив собі ZigBee-адаптер SkyConnect (aka ZBT-1) від Home Assistant. Підʼєднав до ZHA, і якось воно працювало доти, доки не перестало. А цими вихідними нарешті дійшли руки сісти й спробувати полагодити.
Я переконаний, що проблема була саме в налаштуваннях🍓 Raspberry Pi 3, на якому мій HA досі крутиться, але все одно вирішив з нього мігрувати, тож заразом і решті вирішив дати раду. І біс мене сплутав перешити бутлоадер на цьому ZigBee-адаптері (побачив, що версія застара 🤷♂️ ) через офіційну вебтулзу.
Ну й звісно воно повисло в процесі саме на екрані з написом «не відʼєднуйте пристрій від компа», тож за пів години я зробив вольове рішення відʼєднати😅 І все. Кінець. Більше тулза його не розпізнала.
Пощастило, що комп його досі бачив, хоча нічого зробити з ним вже не міг. А в мене якраз валявся мікроконтролер на проці від Pico 2, та ще й з Debug-портом (SWD)! Зашив туди debugprobe і почав відновлювальні дії.
Спершу треба було зібрати чистий бінарь прошивки бутлоадера для ZBT-1. На щастя все з відкритими сирцями, тож у докері чік-чік — і готово. Далі розкрив корпус адаптера, щоб глянути, що на платі. А там є маленькі пласкі контакти для даних (SWDIO), синхронізації (SWCLK) та землі (GND), а значить можна підʼєднатися програматором.
Підколхозив якихось дротів, «програматор» підʼєднав до компа через USB, адаптер увімкнув у павербанк, щоб він отримував живлення, тримав руками оті всі контакти, щоб не паяти, а мізинчиком натиснув Enter на клавіатурі, щоб запустити прошивку через😂
Щоб OpenOCD знав, як шити пристрій, у нього там конфіги якісь є. А під цей чип не було. Тому спробував pyOCD, який значно зручніший. Знову не вийшло. Пару разів дружина допомагала тримати контакти, але швидко знудилася, бо все одно безрезультатно.
Наостанок спробував probe-rs. З ним нарешті пощастило!🎉 Не з першого разу, але врешті 5 секунд (і години три до того) — і готово! Перемога раста 🤓 І коли бутлоадер ожив, далі вже через веб зафігачив туди прошивку для ZigBee.
Є в мене друган, і в нього завжди серйозний такий підхід до всього: інфраструктура, віртуалки, high availability — по-дорослому, а я навпаки намагаюся завжди малою кровʼю обійтися. Якщо в мене Docker, то в нього Proxmox і Kubernetes, якщо в мене Synology, то в нього TrueNAS, у мене ZHA, у нього Zigbee2MQTT. І оце нещодавно я зауважив, що врешті я все-таки приходжу ближче до того, що в нього, тільки значно пізніше😆 Короч, викинув я той ZHA і поставив Zigbee2MQTT — все працює тіп-топ! (Тепер думаю про TrueNAS гг).
До речі, якщо не в темі про ZigBee, то в дружньому, але нині, на жаль, напівмертвому каналі пан Шевцов розповідав про цей та інші протоколи.
Я переконаний, що проблема була саме в налаштуваннях
Ну й звісно воно повисло в процесі саме на екрані з написом «не відʼєднуйте пристрій від компа», тож за пів години я зробив вольове рішення відʼєднати
Пощастило, що комп його досі бачив, хоча нічого зробити з ним вже не міг. А в мене якраз валявся мікроконтролер на проці від Pico 2, та ще й з Debug-портом (SWD)! Зашив туди debugprobe і почав відновлювальні дії.
Спершу треба було зібрати чистий бінарь прошивки бутлоадера для ZBT-1. На щастя все з відкритими сирцями, тож у докері чік-чік — і готово. Далі розкрив корпус адаптера, щоб глянути, що на платі. А там є маленькі пласкі контакти для даних (SWDIO), синхронізації (SWCLK) та землі (GND), а значить можна підʼєднатися програматором.
Підколхозив якихось дротів, «програматор» підʼєднав до компа через USB, адаптер увімкнув у павербанк, щоб він отримував живлення, тримав руками оті всі контакти, щоб не паяти, а мізинчиком натиснув Enter на клавіатурі, щоб запустити прошивку через
openocd, і вуаля — нічого не вийшло Щоб OpenOCD знав, як шити пристрій, у нього там конфіги якісь є. А під цей чип не було. Тому спробував pyOCD, який значно зручніший. Знову не вийшло. Пару разів дружина допомагала тримати контакти, але швидко знудилася, бо все одно безрезультатно.
Наостанок спробував probe-rs. З ним нарешті пощастило!
Є в мене друган, і в нього завжди серйозний такий підхід до всього: інфраструктура, віртуалки, high availability — по-дорослому, а я навпаки намагаюся завжди малою кровʼю обійтися. Якщо в мене Docker, то в нього Proxmox і Kubernetes, якщо в мене Synology, то в нього TrueNAS, у мене ZHA, у нього Zigbee2MQTT. І оце нещодавно я зауважив, що врешті я все-таки приходжу ближче до того, що в нього, тільки значно пізніше
До речі, якщо не в темі про ZigBee, то в дружньому, але нині, на жаль, напівмертвому каналі пан Шевцов розповідав про цей та інші протоколи.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥4😁4
Cіпласпластик
Тупий телеграм десь загубив мою превʼюшку посилання, і я не зміг її повернути )
А непогано вийшло врешті!
👍14🥰5🤔1
Я доволі лояльно ставлюся до багатьох мов програмування. Багатьма з них користуюся, інші просто пробував і здебільшого всі поважаю. Але одне лишається незмінним:
Я ненавиджу Bash💻 усім своїм єством!
Я ненавиджу його читати й ніколи не пишу. Того тижня попросив🅿️ зробити собі тул для Nushell 🆕 , і щойно він закінчив, я тут же заборонив йому використовувати вбудований Bash.
Авжеж це не дуже допомогло🙁 Усі моделі так надрочені на той клятий баш, що їм до сраки якийсь Nushell. Я прямо в системний промпт прописав, що це НЕ баш, що це навіть не POSIX-оболонка, написав відмінності, написав аналоги для типових шел-патернів — по барабану. Воно продовжує мене дрочити своїми
Ну добре, біс із тим Pi. Запущу-но старий-добрий Claude Code💻 , подумав я. Не чіпав його місяць узагалі, може півтора. Здавалося б… місяць… це ж ніщо. У мене деякі пет-проєкти по 2 роки лежать, а я потім їх відкриваю й продовжую, наче останній коміт зробив учора. Такий собі анабіоз.
Але не в цьому випадку! Відкрив
Так, я міг би не вимахуватися, абути читати баш, як усі. Але ви ж розумієте, що річ не в ньому? Річ у виборі.
Не стоїть вибір між «використовувати ШІ з Bash» та «використовувати ШІ з Nushell» — є вибір «використовувати ШІ з Bash» або «не використовувати ШІ», бо воно просто не працює інакше. А скільки разів ви вибирали саме TypeScript🕸 чи Python 💻 для своїх чергових пет-проєктів, бо на них ШІ знається краще? Закладаюся, що були ліпші альтернативи за кількома параметрами, окрім хіба що швидкості розробки.
І навіть тулзи вам не належать. Вони встановлені у вас локально на компі, ви не чіпаєте їх місяць, а потім гоп — а там усе інакше. Ваші звички, які ви формували, більше не актуальні; налаштування не працюють — читайте мануал знову, витрачайте свій час, бо хтось вирішив, що вашому ярму(гг) час оновитися.
Єдине рішення, яке лишається вам: робити щось із використанням ШІ чи без. «Але ж, Сіпласпластик, — вигукнете ви, — якби не ШІ, то багато моїх ідей взагалі не матеріалізувалися б!» — і матимете в чомусь рацію. Хоча я все частіше розмірковую: а може воно було й на краще?
Так чи інакше, щодо себе звернув днями увагу, що з появою ШІ я значно більше почав програмувати саме руками, ніж до того (бо раніше просто нічого не робив😌 ). Цікавий ефект.
Я ненавиджу Bash
Я ненавиджу його читати й ніколи не пишу. Того тижня попросив
Авжеж це не дуже допомогло
2>&1 і 2>/dev/null, комбінує команди через && та пише декілька ls у рядок, щоб подивитися вміст кількох директорій за один виклик. Nushell на це, звісно, скаржиться, або ж це просто дає не ті результати, і модель починає переписувати команди по пʼять разів, доки не вгадає синтаксис. Буквально «вгадає» — інакше це назвати не можна. Ось де чудово видно, що це аж ніяк не інтелект.Ну добре, біс із тим Pi. Запущу-но старий-добрий Claude Code
Але не в цьому випадку! Відкрив
claude, він наче на вигляд такий самий, але поводить себе інакше. Самі моделі реагують інакше, ярмо відчувається інакше! Тули Grep та Glob зникли, і ця хуйня тепер все ганяє через Bash. Я розумію, що вони зробили свій супер-пупер автоматичний «інтелектуальний» режим, де інша(?) модель оцінює, наскільки безпечно виконувати команди, і тепер це такий типу дефолт. Але я дід — мені таке не треба. Я люблю сам оцінити, що треба, а що не треба викликати. От тільки не коли воно мені висирає по 15 рядків на баші замість запустити два ґлоба та три ґрепа!Так, я міг би не вимахуватися, а
Не стоїть вибір між «використовувати ШІ з Bash» та «використовувати ШІ з Nushell» — є вибір «використовувати ШІ з Bash» або «не використовувати ШІ», бо воно просто не працює інакше. А скільки разів ви вибирали саме TypeScript
І навіть тулзи вам не належать. Вони встановлені у вас локально на компі, ви не чіпаєте їх місяць, а потім гоп — а там усе інакше. Ваші звички, які ви формували, більше не актуальні; налаштування не працюють — читайте мануал знову, витрачайте свій час, бо хтось вирішив, що вашому ярму
Єдине рішення, яке лишається вам: робити щось із використанням ШІ чи без. «Але ж, Сіпласпластик, — вигукнете ви, — якби не ШІ, то багато моїх ідей взагалі не матеріалізувалися б!» — і матимете в чомусь рацію. Хоча я все частіше розмірковую: а може воно було й на краще?
Так чи інакше, щодо себе звернув днями увагу, що з появою ШІ я значно більше почав програмувати саме руками, ніж до того (бо раніше просто нічого не робив
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15😁11👍3🤣1
YouTube
The Story of C++: The World's Most Consequential Programming Language | The Official Story
This is the story of C++, one of the world’s most widely-used and consequential programming languages. C++ divides opinion, resists replacement, and has outlasted almost everything built to supersede it.
C++ The Documentary traces the full arc, from its…
C++ The Documentary traces the full arc, from its…
Подивився учора документалку про C++. Сподобалася! Вище вже згадував аналогічні про Python та Clojure, але ця, звісно, якось ближче до серця сприймається, бо знайомі люди.
Розповідають про появу та становлення мови. Мені найцікавіше було послухати про самий початок. Помітив, як в різний час приходили та йшли різні люди (навіть різні типи людей), та й загалом видно, наскільки по-іншому раніше приймалися рішення, що напряму впливали на розвиток мови та індустрії. (Чи не по-іншому?).
Концентрація крутих дідів на хвилину відео вкрай висока. Керніган прям бодрячком мужик, молодець! Ромеро засвітився, куди без нього. У Александреску очі запалали, коли мова про шаблони зайшла. Понасміхалися з Java💻 , розповіли, як Степанов замовив собі 3 пляшки вина (вгадайте, до чи після того, як вигадав STL), один раз навіть прозвучало слово Rust. Гейлсберґ якось невдало спробував охрестити Б'ярне BDFL. Ще купа вельми цікавих людей посвітили обличчями. Та й таке. Раджу короч!
Ну а щоб трохи збалансувати враження, потім можна полірнути оцією чудовою статтею про те, чому💻 котиться в прірву через свою (майже) непорушну політику збереження зворотної сумісності. Там про те, скільки за останні роки додали фічей в мову та стандартну бібліотеку та скільки з них реально досі живі. Дізнався, що вже навіть
Ну а дядьку Б'ярне можу хіба що побажати побільше здоровʼя та ще раз подякувати за таку топову мову!
Розповідають про появу та становлення мови. Мені найцікавіше було послухати про самий початок. Помітив, як в різний час приходили та йшли різні люди (навіть різні типи людей), та й загалом видно, наскільки по-іншому раніше приймалися рішення, що напряму впливали на розвиток мови та індустрії. (Чи не по-іншому?).
Концентрація крутих дідів на хвилину відео вкрай висока. Керніган прям бодрячком мужик, молодець! Ромеро засвітився, куди без нього. У Александреску очі запалали, коли мова про шаблони зайшла. Понасміхалися з Java
Ну а щоб трохи збалансувати враження, потім можна полірнути оцією чудовою статтею про те, чому
std::function неофіційно вважається застарілою, і треба використовувати щось інше (але з бібліотеки звісно не видалять, бо купа коду написана). До тієї самої прірви C++ котитися ще доволі далеко, але їм би все-таки щось вирішувати з розміром комітету, бо той цирк, що зараз, на користь аж ніяк не йде.Ну а дядьку Б'ярне можу хіба що побажати побільше здоровʼя та ще раз подякувати за таку топову мову!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1