Cіпласпластик

Description
Про айті та дотичні теми загалом, ну й трохи про C++.

??
Зворотний звʼязок: @gooro0
We recommend to visit

❌ Чорний Лист заходу України ⚠️
(Львівщина, Волинь, Тернопільщина, Рівненщина, Франківська та Хмельницька області! Закарпаття та Чернівецька)

Надіслати новину/Реклама ?‍☠️ @send_me_smth

Last updated 1 month, 2 weeks ago

Last updated 1 month, 2 weeks ago

Посилання для друзів: https://t.me/+bafDvXg7ux83NTk6

Офіційний канал КНИГ УКРАЇНСЬКОЮ. Цитуючи класиків : “не ходіть по інших каналах”.

По питанням співпраці: @darkwoolfik
.
Наш чат: @ukrlib_chat

Last updated 3 months ago

2 months, 2 weeks ago

Взяв я собі ж R1, як вже згадував. Тижні три чи чотири лежав у мене — ліньки було розпаковувати.

Відтоді, як я його замовив, в інтернетах вже зʼявився 1000001 відос про те, який це скам. І скоріш за все так воно і є. Та я не жалкую, бо разом з ним я отримав річну передплату на Perplexity (власне, за ціною річної передплати). Тож сприймаю це як безплатний пристрій ?

Що сказати по самому девайсу… Пластик відчувається якимсь дешевим, але загалом пристрій дуже solid. Українською запити ігнорує, але коли просиш перекласти щось з української іншою мовою — робить це без проблем. Концептуально дуже схоже на кишенькову Amazon Alexa, тільки розумнішу й водночас менш спроможну. Alexa хоча б світло може вимкнути ?

З інтеграцій є тільки Spotify/Apple Music, Uber, DoorDash, Midjorney та Suno. Я ще не настільки сказився, щоб логінитися під своїми акаунтами на чиїхось ремоут-компах, тож протестувати, мабуть, не вийде. Та й нагадую, що їхня хвалена LAM (Large Action Model) наразі виявилася пачкою кривих скриптів під Playwright.

Ютубери та інші тиктокери вже так затролили їхню ШІ-шку, що коли показуєш Реббіту в камеру коробку від харчової добавки, що ветеринар виписав коту, й просиш розказати, що це, воно замість інформації видає текст на хвилину про те, чому воно не може давати мені медичні поради, і як це все небезпечно, і наскільки воно відповідальне і т.д. Доволі useless короч.

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

2 months, 3 weeks ago
Cіпласпластик
2 months, 3 weeks ago
Трапився на очі написаний на C++ …

Трапився на очі написаний на C++ та Dear ImGui hex-редактор ImHex. Низькорівневі штуки — то трохи не мій профіль, але днями як раз став у пригоді. Доволі непогано зроблений, мені сподобався. Є вбудована C-like мова для опису структури бінарного формату. Та навіть онлайн можна використовувати прямо у браузері.

2 months, 4 weeks ago

C++-комітет продовжує ~~підглядати в спеку Haskell~~ обговорювати нові потенційні фічі для мови. Цього разу (документу вже рік насправді) дійшло до плейсголдерів _, щоб зручно було користуватися зіставленням із взірцем (паттерн-матчінгом), якого звісно досі нема, або, наприклад, розпаковувати кортежі на кшталт:

auto [x, y, \_] = f();

Тут типу третє значення нам не суттєве, тож можна використати _, щоб не вигадувати імʼя, а потім боротися з ворнінгами про те, що воно не використовується, додаючи [[maybe_unused]].

Та C++ би не був собою, якби все було так прозоро. Ніщо не заважає вам і зараз використати _ як імʼя змінної:

auto [x, \_] = make\_pair(1, 2); cout << x << "," << \_ << endl; // використання

Тож це працюватиме й надалі. Однак інколи хочеться зробити так двічі в одному скоупі, а structured binding — це визначення нової змінної, а не просто запис у ту, що вже існує:

auto [x, \_] = make\_pair(1, 2); auto [\_, y] = make\_pair(3, 4);

Зараз такий код генерує error: conflicting declaration ‘auto _’, бо це повторна декларація змінної, а от з новим пропоузалом перестане.

Тобто можна навіть вручну скільки завгодно разів оголошувати змінну _, і жодних проблем… доти, доки не спробувати звернутися до змінної _ у цьому ж скоупі. Якщо вона оголошена один раз, то можна, а якщо декілька, то це помилка:

auto \_ = 42; // Оголошення auto \_ = 0; // Повторне оголошення { auto \_ = 1; // Новий скоуп. Оголошення з шадовінгом assert( \_ == 1 ); // Можна прочитати } assert( \_ == 42 ); // Не можна прочитати ***?***

В принципі, очевидно, еге ж?) А, до речі… У неймспейсі двічі не можна оголосити:

namespace a { auto \_ = f(); // Ок auto \_ = f(); // Помилка }

Все логічно, короч ? Ні, заждіть, це не жарт. Все справді логічно, якщо над цим поміркувати достатньо довго! Але капець, як же втомлює тримати подібні нюанси в голові весь час.

З іншого боку шанси, що це увійде в C++26, все одно низькі ) Може в C++32…

3 months ago
Принаймні я б може так і …

Принаймні я б може так і робив, але у мене є #1Password. Я багато якими аналогами користувався, але щойно спробував його — одразу оформив передплату. Зараз розповім чому, бо, схоже, далеко не всі розуміють можливості.

По-перше, він тупо зручніший. У мене був KeePass, LastPass, Dashlane, може ще щось… та навіть хвалений Bitwarden — це все якнайменше на голову нижче за 1Password. Не знаю, чому вони можуть, а інші ні, проте, це відчутно прям сильно. Тільки у браузері на андроїді бувають проблеми — там Chrome час від часу починає свій вбудований зберігач паролів парити та відмовляється натомість пропонувати обраний вами.

В принципі гарного #UX для мене вже є достатнім приводом для передплати. Та ці чуваки добре розуміють свій продукт: він обростає новими фічами, які при цьому не безглузді. Отож…

По-друге! Він дозволяє зберігати SSH-ключі прямо в собі — вони у мене на файловій системі навіть не лежать. Просто прописуєте у свій ~/.ssh/config отаке:

Host * IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

і ваш SSH-клієнт почне ходити за ключем прямо у 1Password, запитуючи біометрику за потреби.

По-третє, мені завжди було ліньки розбиратися з GPG. Але нині можна підписувати свої коміти SSH-ключем. Принаймні GitHub та GitLab це розуміють (Gitea/Forgejo наче поки що ні, та це питання часу). Налаштовується ізічно через .gitconfig:

[gpg] format = ssh [gpg "ssh"] program = /Applications/1Password.app/Contents/MacOS/op\-ssh\-sign [commit] gpgsign = true

Окрім того, він має власну CLI-прогу, а це відчиняє нові двері. Наприклад, можна використовувати паролі/токени/ключі у різних скриптах та не перейматися, що воно лишиться в історії у відкритому вигляді:

yt\-dlp <link> \-\-password (op read op://Personal/SomeWebsite/password)

У 1Password можна створювати декілька сховищ (vaults). Так у мене є особисте, робоче, шарене з дружиною та, наприклад, сховище для одного з серверів. А торік вони додали можливість створювати додаткові сервісні облікові записи — спецом для інтеграції в різноманітні пайплайни.

Тож тепер своїми secrets можна керувати прямо у 1Password, а не на умовному ґітгабі. А потім використовувати їхню готову дію для GitHub Actions. Не знаю, наскільки це гірше чи краще за використання якогось HashiCorp Vault, але для моїх аматорських потреб цього з головою.

Ще я в Ansible прямо з нього креденшиалзи свої дістаю в inventory.yml типу такого:

macmini\_m1: ansible\_host: "{{ lookup('community.general.onepassword', 'Mac mini M1', vault='Server', field='url') }}" ansible\_user: "{{ lookup('community.general.onepassword', 'Mac mini M1', vault='Server', field='username') }}" ansible\_become\_password: "{{ lookup('community.general.onepassword', 'Mac mini M1', vault='Server', field='password') }}"

Або прямо в плейбуці, щоб залогуватися в умовний Tailscale той самий чи в апішку ґітгаба:

Authorization: Bearer {{ lookup('community.general.onepassword', gh\_api\_token.item, **gh\_api\_token.args) }}

Там ще багато чого є, як от підтримка passkeys, провайдер для Pulumi, вебхук для k8s тощо. А якщо ви маєте якийсь опенсорс-проєкт, то можна взагалі отримати team-акаунт задарма.

Короч, знаю, це виглядає як реклама, та це той інструмент, котрий я щиро рекомендую.

3 months ago
3 months ago
3 months, 1 week ago

Як же складно (і прикольно) мати свій домашній сервачок, жах!

В принципі Tailscale справді дещо спростив. Але пару додаткових днів я все-таки вбив: то зовнішні адреси не пінгуються, а тільки адреси з tailnet, то навпаки, то і ті, й інші відвалилися, то на хостовій системі ок, а в контейнері адреси не резолвляться, то контейнери з restart: always не рестартують (до речі хз чого). Ну а зрештою взагалі випадково вбив свій інстанс ґітлабу, тому що запустив два контейнери, обидва з яких писали в одну теку.

Tailscale зручний, та все ж далекий від ідеалу. Наприклад, на macOS у них аж три різні офіційно підтримувані версії з різним набором фічей, а на моєму Synology він працює з низкою обмежень. (До речі в обох випадках головна завада — системний сендбоксинг). Одначе користуватися цим можна.

Єдине, що не подобається — залежність від їхнього сервера. Він виконує тільки адміністративно-координаційну роботу на щастя, і все ж!

У попередньому дописі я згадував Tailscale мого дитинства — Hamachi. І знаєте, що з ним трапилося? Він перетворився на лайно ? Сталося це в ту мить, коли його купила угорська компанія 3am Labs, яка згодом стала називатися LogMeIn, яка до речі пізніше купила й LastPass, а ще пізніше злилася з дочірньою компанією Citrix, що робила GoToMeeting та інші продукти з тієї ж серії, тож зараз вона так і називається — GoTo. Якщо ви колись користувалися LastPass (у яких вже регулярно крадуть користувацькі дані), «новим» Hamachi або GoTo Meeting, то нескладно помітити коричневу марку якості.

Як же себе захистити від подібного з Tailscale? Ну, на щастя їхній демон та CLI-клієнт — повністю open-source. Сервер ні, проте, вони не забороняють використовувати якийсь свій, тож це було питанням часу, коли хтось напише власний. Чекати довго не знадобилося: наразі існує доволі фічастий Headscale. Тож виходить, що в принципі можна все потрібне заселфхостити.

Що саме Tailscale дає особисто мені? Ну, декілька речей:
• легке налаштування віддаленого доступу до якихось селф-хостед речей без необхідності випускати їх в публічний інтернет. Тобто не треба прокидати порти кудись назовні, морочити голову з DNS або DDNS тощо, а потім трястися, що хтось підбере твій qwerty123. У мене серед таких речей мій ґіт-сервак, книжки, скани документів, база хавки, Home-Assistant і т.д.
• легша взаємодія зовнішніх сервісів (low-code платформи для автоматизації або тих же GitHub Actions) з цими внутрішніми штуками. Робиться це завдяки ефемерним ключам, наприклад: у вас на раннері запускається пайплайн, авторизується в tailnet (з відповідними правами), спілкується з потрібною нодою, а потім видаляється з мережі щойно йде офлайн (в кінці workflow).
• швидке перекидання файлів між пристроями а ля AirDrop.

Поки це всі юзкейси, може згодом ще щось знайду. А зараз відчуваю, що досить — моя devops-чаша вже переповнена ))

GitHub

GitHub - tailscale/tailscale: The easiest, most secure way to use WireGuard and 2FA.

The easiest, most secure way to use WireGuard and 2FA. - tailscale/tailscale

Як же складно (і прикольно) мати свій домашній сервачок, жах!
3 months, 1 week ago
Обожнюю отримувати такі автоматизовані листи з …

Обожнюю отримувати такі автоматизовані листи з систем наших клієнтів ??

3 months, 1 week ago
Є у мене в домашній мережі …

Є у мене в домашній мережі купа self-hosted сервісів, значить. Більшість у докері. А проблема з докером у тому, що він порти на хостовій машині займає, так їх ще й памʼятати треба (або записувати кудись). І якось не прикольно потім у браузері писати та бачити http://myserver:53412.

Як сервер у мене Synology NAS наразі, і там є вбудований реверс-проксі. Цього було б достатньо, щоб зробити собі адреси виду http://myserver/gitlab, але хочеться радше http://gitlab.mynetwork. Тож підняв я додатково DNS-сервер (також від Synology, хоча там, мабуть, тільки юайка їхня) і зрозумів, що це дуже прям запарно налаштовувати тепер. Доводиться в декількох місцях одне й те саме прописувати.

Виявилося, що замість повноцінного DNS-сервера в локальній мережі можна використовувати mDNS, проте, з ним також є певні проблеми. А для більш-менш автоматичного налаштування реверс-проксі можна було б перейти на Træfik чи Caddy. Та це вже якось вище мого порога заморочливості.

Тож я здався та спробував Tailscale. Це така штука, яка дозволяє дуже легко та швидко побудувати свою VPN.

Ідея звісно не нова: ще на початку 2000-х ми з друганами думали, як нам грати разом в ігри, якщо ми живемо в різних районах. У першому StarCraft можна було, наприклад, зателефонувати модемом напряму модему другана, прикиньте ☎️ Але то поодинокий випадок скоріш. А ось десь у 2004-му зʼявилася така славнозвісна в ті часи прога як Hamachi (на скріншоті саме вона). Вона дозволяла змусити ігри думати, що два віддалених компи насправді в одній локалці — те що треба!

Зараз такі штуки теж існують. Наприклад, ZeroTier. Ми з ексколегою намагалися через нього пограти віддалено в Cuphead, але воно зрідка давало неприємний лаг. (Ми з ним пограли врешті, але інакше).

Так ось, а шо Tailscale? Ну більшість з вас, мабуть, вже й так в курсі — це тільки я слоупок. Але фактично це те саме, тільки на базі (дуже швидкого) протоколу WireGuard, й до того ж підтримує меш-мережу.

Цікаве тут інше: tailscale можна підіймати прямо в докер-контейнері, фактично додаючи його у вашу мережу як окрему машину. Тобто виходить наче у вас є окремий комп, на якому стоїть тільки той сервіс, який ви там підняли. Отож з суботи я займався міграцією деяких штук у свій новий tailnet.

В принципі, процес доволі straight-forward. Налаштував собі простий GitOps для автоматичного деплоя ACLs та docker\-compose.yaml файлів. Наче норм.

Але зʼявилася зворотна проблема: не всі сервіси легко підіймаються на 80-му порту ? Це тому, що перші 1024 порти привілейовані, й вішатись на них можуть тільки проги з відповідними правами. Однією з неспроможних штук виявився форк Gitea — Forgejo, який я вирішив собі підняти замість GitLab (бо останній заважкий для моїх потреб). Танцював навколо нього майже дві доби, але так і не зміг змусити його забайндити на себе 80-й порт. Зрештою довелося в контейнері ще підіймати nginx чисто заради цього.

Запрацювало тепер-то! Можу відкривати http://git/ та насолоджуватися ? (причому навіть не вдома, бо у мене навіть на телефоні Tailscale).

Цікаво до речі, що сучасні програми вкрай кепсько реагують на подібні короткі адреси: телеграм не запарсив як URL (з міркувань безпеки, я думаю), браузери постійно намагаються відкрити мені пошук замість сайту, а Arc навіть не зміг зберегти закладку ? Я не кажу вже про http (без s). Але це вже інша історія.

We recommend to visit

❌ Чорний Лист заходу України ⚠️
(Львівщина, Волинь, Тернопільщина, Рівненщина, Франківська та Хмельницька області! Закарпаття та Чернівецька)

Надіслати новину/Реклама ?‍☠️ @send_me_smth

Last updated 1 month, 2 weeks ago

Last updated 1 month, 2 weeks ago

Посилання для друзів: https://t.me/+bafDvXg7ux83NTk6

Офіційний канал КНИГ УКРАЇНСЬКОЮ. Цитуючи класиків : “не ходіть по інших каналах”.

По питанням співпраці: @darkwoolfik
.
Наш чат: @ukrlib_chat

Last updated 3 months ago