Bite the Byte – Telegram
Bite the Byte
3.08K subscribers
24 photos
2 videos
276 links
Соловйов здорової людини!

🌐solovyov.net

Архів каналу: solovyov.net/channel

Без реклами
Download Telegram
Зараз показувати Дію з сертифікатом вакцінації треба наліво і направо. А вона така вся ще відкривається годинами, а ти у масці й або топчи свій код, або знімай маску — бо айфони ж так і не зробили тач-айді в екрані, і взагалі, експірієнс не з кращих.

Чи це життя взагалі?! Якісь люди з Чехії подумали так само і зробили сайт, якій вміє з QR-коду сгенерувати файлик для Wallet'у. Скануєш QR-код сертифікату, або завантажуєш його скриншот, і отримуєш pkpass. Відкрив — і тепер за подвійним натисканням на бокову кнопку ховається той сертифікат.

Не треба розблокувати айфон, шукати потім дію, чекати поки її швидкісні сервери дадуть відповідь, чекати розблокування (чи навпаки?)... Все локально сидить в айфоні.

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

Але трафік на дорозі... це хоч і не аргумент у протилежний бік, але це така фантастична штука, насправді. Це те, що наочно демонструє, що більша частина людей мають добрі наміри та готові співпрацювати. Небезпека неіллюзорна, здоровезні металеві дурепи, вбити когось — ізі-пізі!

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

Значит, попри купу самоіронії, порівняння з усілякими мурахами та бджілками, і таке інше, людство — доволі круте. :)
Пару тижнів тому Марцин написав пост, про те, як він переписав asciinema-player з ClojureScript на Rust + WASM. В результаті в нього бандл став у 4 рази менший і швидкість виросла у 50 разів.

Це дуже крутий результат! Але дуже цікаво чому, і чи не має тут історії про те, що не треба використовувати CLJS взагалі? 😁

Давайте розберемось. По-перше, одним з головних компонентів є емулятор терміналу, який він заново написав на расті — vt-rs. Це біля 2 тисяч строк коду відносно тисячі строк у vt-clj, але! Це ж взагалі найкращий юзкейс для мов з мутабельностю даних.

А у vt-clj відбувається неподобство, зі здоровезних масивів даних (ну як здоровезних, width*height терміналу, ггг) генерувалися нові такі самі — думаю, що GC браузерів просто захлинався від такого нахабства. Тут навіть structural sharing занадто багато не допоможе. У цьому місці йому б треба було взяти ArrayBuffer, і перестати мучити худобу. :)) Але! Треба сказати, що я приємно здивований кількістю кода на расті, і пов'язую це з тим, що йому вже не прийшлося експериментувати з імплементацією, як у кложі.

Інша велика зміна, яку він зробив — проміняв ReactJS на SolidJS. Каже, що набагато швидше, ніж реакт. Може, я не дуже в темі. Але що він робив до цього - використовував Reagent. Це дуже ергономічний і дуже неефективний врапер навколо реакту. Найбільша його проблема — він не компілює хікап ([:div "smth"]) у виклики реакту, і робить це у рантаймі.

Мені чомусь здається, що виправлення цих двох вже провело б його більшою частиною дороги у 50х. Авжеж, різниця була б меншою, але й часу пішло б менше. :) Але пацан вже забодався воювати, плюс експеримент вийшов вдалий, а feature surface не дуже великий — тому можна перероблювати на швидшу мову з більшим ефортом.

Взагалі, виглядає, як найкращий кейс зі "зробив експеримент — працює, але інструменти не підходять — переробив на щось більш вдале". Нажаль, він у пості нічого не каже за те, чи був сенс взагалі робити спочатку на CLJS, було б цікаво його думки з того приводу почути — особливо через якийсь час, коли вже наловить багів у тому, що є зараз. :)
Clojure — паразит

Позаминулої суботи ми записували новий випуск подкасту (spoiler alert!) з Ромою Лютіковим і прийшли до несподіваного визначення: Clojure — це паразит. Причому паразит у квадраті! От дивіться.

По-перше, в кложі немає своє платформи, так? Вона працює або на JVM, або на .NET, або на JS, або он там на підході ClojureDart, щоби Flutter можна було нормальною мовою писати. Це ж одна з основних ціннісних пропозицій кложі!

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

Тому менше новачків, тому вище середній рівень розробників і тому краще середній рівень проєктів (скажімо, опенсорсних бібліотек).
Знаєте, чому я вирішив робити подкаст з fwdays, а не сам? Тому що з жовтня по зараз я записав ровно 0 відео сам, але ось вже готовий другий випуск подкасту RTFJ. :) Спасибі вдалій мотивації від Даші, і цікавій розмові з Ромою Лютіковим.

Рома зараз відповідає за перформанс у Pitch (дуже кльовий інструмент, щоб робити презентації, до речі), тож натурально ми порозмовляли і про перформанс, і про кложу (бо Пітч написаний на кложі), і про всяке інше — думаю що немає сенсу повторяти все, що в описі написано.

Тож дивіться, відправляйте лінки друзям, і дуже чекаю фідбеку, як вам новий випуск. :)

P.S. До речі, він є і на подкаст-платформах:
SoundCloud 👉 bit.ly/3yvKmCo
Apple Podcasts 👉 apple.co/3EZZTwQ
Google Podcasts 👉 bit.ly/3F8lfs0
Поки всі завзято обговорюють log4j, тут виліз новий експлоіт для айфону, набагато цікавіший: якщо трабли з лог4ж це звичайний відстій, таке постійно з компами трапляється, то цей айфонний просто краса. :) Якщо ви ще не в темі, то читайте!

Значить історія: приходить повідомлення iMessage, від якогось номера, просто картиночка. Ти відкриваєш подивитися, що там, а воно... iMessage, щоб показати картинку, викликає метод copyGifFromPath:toDestinationPath:.

Воно зветься «копі», а під капотом рендерить гіфку у пункті призначення. Тобто декодує початковий файл і створює нову гіфку замість просто копіювання байтів.

І прочитати воно може не тільки гіфки, а купу різних форматів. І один з них — це пдф. Пдф прикольний тим, що взагалі пишеться на майже тьюрінг-повній мові, але за багато років там наставили достатньо вже обмежень. Але! Код, який використовується у iOS - це код Xpdf, написанний у 80-х роках, і виглядає так, що там багато цікавого. :)

Наприклад, є там всередині реалізація формату картинок під назвою JBIG2. Це такий спеціальний формат, який дуже добре стискає чорно-білі картинки, у головному зі сканерів і ксероксів — раніше канали і сховища були скромніші і треба було економити. І ефективний він через те, що блоки зображення кодуються хитрим чином з використанням логічних операцій - and, or, xor, nor.

Потім чік-чік, невеличке переповнення буферу, замість крешу коррумпування початкової картинки і раптово ці операції можна виконувати над (майже) будь-якою коміркою пам‘яті.

І далі найкраще. За допомогою 70 000 операцій чуваки зробили віртуальний комп‘ютер, який вміє ходити по пам‘яті телефону і читати все, що завгодно. Ну як ото люди у майнкрафті роблять, тільки у айфоні. :)

Фантастично елегантний хак, просто капець. Не те шо та дитяча підстановка у лог для же. :)

Епл це пофіксила ще у вересні, але NSO явно юзали його на початку року. NSO - це автори експлоіту, ізраїльська контора, яка допомагає урядам слідкувати за громадянами. Вікіпедія каже, що вони відіграли якусь роль у вбивстві Джамаля Хашогджі. :( Елегантно, але все інше як завжди...
1
Сьогодні чи не найкращі умови в Буковелі, які я бачив. Мінус 2, вночі насніжило, людей зранку взагалі немає — кайф просто. Прийшли на відкриття підйомника і проїхалися по свіжому снігу, ммм...

Взагалі шось в ресурсі, зійшлися умови з настроєм, і лижі взяли у прокаті непогані — бо власні черевики то важливо, а лижі... ліньки всюди таскати. :) Катаємося що дурні, 60 км нагасали за день, хаха.

Буковель може не найкращий лижний курорт у світі, але він як зручні капці, особливо коли люди ще не наїхали. :)
Є така річ, як веб-аналітика: зберігаємо інфу про те, що робить користувач, у БД, а потім можемо дивитись на те і щось собі вирішувати. БД — це Google Analytics, чи Firebase, чи, у нашому випадку, власне сховище.

Скажімо, користувач щось додав у кошик? Відправимо подію «кошик». Перейшов на оформлення - «чекаут», зробив замовлення - «ордер».

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

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

Прилітає баг від аналітиків: близько 20% замовлення карткою з аппок (айос/андроїд) не попадають в аналітику Firebase. У нашій аналітиці тим часом все файно... 🤔 Трохи деталей: в наших апках є кілька різних аналітик (бо в них різні використання і іноді дуже важко це змінити), і всі вони отримують події виключно з апки.

А подія у файрбейз коли відправляється? Ну вірно, коли користувач повертається з оплати карткою, яка у вебв‘ю. Тобто ідеш платити, вносиш дані картки, якийсь може 3д-сек’юр, і ось тоді вже... ач тільки KastaPay показує своє «дякую за оплату», і користувач, вдоволений вдалою справою, закриває апку і йде по своїм справам. Ніколи не потрапляючи в апці на сторінку, де відправиться та подія. 😬

Цю тему вже виправляємо, але приємно, що наша власна аналітика нічого не губила. 👌
Знаєте, що таке Follow Focus? Це така система наведення фокусу для знімання відео, коли оператор знімає кадр, а фокус йому наводить асистент, Focus Puller.

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

Але тут DJI (так, той, що коптери робить) показав нову, дуже інноваційну камеру - Ronin 4D. Це повноцінна камера зі змінними об‘єктивами, вбудована у стабілізатор (gimbal), з окремим дісплеєм.

Тєма: ти тримаєшся за дві ручки, а під правим великим пальцем колесо для фокуса. А додатково зверху на камері - LIDAR. І на моніторі зверху на картинці (вочевидь двомірній) показується карта глибин того, чого ти знімаєш.

От подивіться тут трохи, це просто фантастика. Там є й інші цікаві рішення (як от змінний байонет, безпровідний монітор), але це — найцікавіше.

Воно все трошки недешево коштує, понад 7 тисяч, але за хайтек треба платити. Файний девайс. :)
Є такий чувак, Ден Луу, у твіттері висловлює цікаві думки. Він і пости пише цікаві, але через його графоманство то майже книжки, важкувато це читати. Він і у твіттері графоманить, але не про те мова. :)

Так ось, він зачепив тему, чому щось зробили колись, а не раніше, і як один з прикладів згадав про системи контролю версій, у такій прогресії: RCS -> CVS -> SVN -> git. Типу, чому концепції гіта, який вочевидь багато чого робить краще, ніж SVN, не видумали раніше? І ось тут мені є що сказати, бо раніше я був version control junkie. :) З роками попустило (не біжу у pijul контріб'ютити), але у гарячу епоху кінця 00-х я був контріб'ютором у Mercurial.

Значить відповідь на запитання проста — нюанси губляться у роках. git ні в якому разі не продовження svn, це тупо інша гілка розвитку. Гіт — це продовження BitKeeper'a, яким користувалися розробники ядра лінукса перед тим. Не тільки, ще був такий проєкт, як monotone, який доволі багато інновацій зробив: згадується, скажімо, використання хешу вмісту комміту та його батьків як ідентифікатора комміту. Тобто цій властивості ми завдячуємо саме monotone, а не генію Лінуса. Він про монотон відгукувався не дуже — бо воно екстремально повільне було, але доволі багато властивостей саме звідти.

Ще була така штука, як Darcs, на Хаскелі, але це теж паралельна гілка розвитку, там доволі цікава теорія латок (the theory of patches). Тобто замість використання DAG (Directed Acyclic Graph), як було у monotone, git та Mercurial, вони юзали латки, які збиралися докупи спеціальним алгоритмом. Який під час деяких мержів мав експоненційну складність, тож збирання репозіторю докупи іноді займало вічність... Але в нього є послідовник - Pijul, здаля цікаво виглядає.

Та й вся та історія про біткіпер, гіт та меркуріал доволі цікава, але, мабуть, іншим разом. А мораль така: коли ти не в деталях, а здаля, то здається, що інновації відбуваються ривками. Але усюди, де я якось пристально наблюдав, вони завжди відбувалися дуже ітеративно. Амінь.
👍9🔥6
E2EE у чатах

У інтернетах знову срачі за те, в кого шифрування краще — у воцапа, телеграма, сигнала тощо. З того можна зробити кілька висновків.

1️⃣ Найочевидніший — що здебільшого реальна захищеність каналу нікого не турбує. Ну то не сюрприз. :)

2️⃣ В Телеграма найкращий маркетинг. Вони пишуть пости-відповіді на звинувачення від Моксі (засновника Сигналу), які люди шлють один одному як гарний приклад того, що Телеграм молодець. А там жоден пункт звинувачень не заперечений, розмова про інші речі. Файний месседжинг. 😤

3️⃣ Найцікавіше — телеграм не захищений з точки зору zero-trust тусовки, усіх цих веб3 та й всього іншого. Але! Цікаво Мачай відмічає — чому протести у Гонконзі використовували телеграм? Тому що у ситуації, коли конкретно тобою починає цікавитися держава, месседжер — то вже і близько не проблема. Воно тупо може подивитися, хто з людей був на протесті за даними з телефонних сот.

А ось юзабіліті, відсутність шарінгу усіх деталей (номера телефону) по дефолту всім у чаті (на відміну, до речі, від «сек‘юрного» Сигналу), можливість створювати справді гігантські групові чати (тобто паблішінг платформа) - це все суперцікаво з точки зору всього двіжу.

Не те щоб я нахвалював Телеграм, все ж таки в нього є для нас величезна проблема: це російське коріння. Навіть якщо Павло чесний і хоче відкараскатись від тих людожерів, не можна не враховувати, що «органи» як мінімум з ним знайомі. А це погано конкретно для нас.

Висновків не буде, бо в мене їх нема. 🤣 Усіх з Новим Роком! 🎉 Бажаю, щоб висновки приходили простіше, а інсайти — частіше! :)
👍16🎉13👎1
Останнім часом мені дуже подобається дратувати людей нагадуванням, що у православних Різдво відбувається не 7 січня, а 25 грудня. Всі християни святкують в один день - 25 грудня. Але чому в нас є вихідний 7 січня?

Бо Російська імперія свого часу не прийняла «єрєсь» від римського папи Григорія XIII. Ну типу в нас тут свій патріарх є і він все порішає. Я не знаю, хто там кому лікар — чи то патріарх у Стамбулі не схотів згоджуватись, чи московити — схоже що перші, бо там є ще й новоюліанський календар, якась хитра дурня.

А потім, у 1918, УНР перейшла на «новий стиль» - з юліанського на григоріанський календар. А церква — нікуди не перейшла! Напевно, московський патріарх підтримував царя, тож для них це було не на часі.

Повертаючись на початок — а чому ж дратувати? Бо дивно, але з моїх знайомих ніхто не замислюється, а чому ж Різдво - 7 січня? А ось так. Воно таки 25 грудня.

Вже Саудівська Аравія перейшла! У 2016 році, теж прогресивні дуже. 😁 А що там ПЦУ втикає?
👍24🔥3😁2
Висить у табах сафарі на айфоні в мене стаття під назвою “The internet made defensive writers of us all”. Все хотів про неї написати, але якось не вдавалося слова до купи зібрати.

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

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

Але це небезпечно! Варто було в інтерв‘ю для ДОУ згадати, що мене дратують в айті новобранці, яких не цікавить нічого, окрім грошей, сходу знайшлася купа народу, яка зробила далекоглядні висновки. І що у Касті нікому гроші не платять, і що окрім овертаймів в нас тільки овертайми, і дідовщина, і взагалі в дупу довбимося замість програмування.

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

Цей стиль, з розшаркуваннями у різні боки та намаганням перекрити всі можливі вектори атаки — неприємно читати. Написано для всіх і ні для кого. Тож я відмовляюся грати у цю гру, палає дупа — зменшуй у ній тиск. :) У сенсі, як писали у книжках, автор розраховує на здоровий глузд і буденне милосердя читачів.

Гарних усім свят! 🎉
👍27🎉115
colors, faker et all

Давайте я теж висловлюсь про цю історію. Короткий зміст драми: якийсь пацан написав дві бібліотеки, виклав їх в опенсорс (під ліцензією MIT), вони стали популярні (28 млн звантажень на тиждень), тож він вирішив, що дуже погано, що великі компанії йому не платять гроші, і поламав ті бібліотеки так, щоб всі пішли на його сторіночку і почитали, що йому потрібні гроші.

А на сторінці faker.js ще додатково написав "що відбулося з Аароном Шварцем".

Зовсім випадково в мене є кілька думок з того приводу!

1️⃣ Те, що написав apenwarr: ти подарував свій код цьому світу. Які взагалі претензії? Ніхто тебе конкретно не просив нічого робити. Ти зробив, воно тепер популярне. Молодець, використай це для розвинення власного бренду.

2️⃣ Те, що написав Армін: такі історії відвертати увагу від справді важливих речей. Краще б компанії давали гроші авторам curl'у, openssl чи libxml2, а не авторам colors.js та faker.js. Плюс він кльово підмітив: Github Sponsors, який наче намагається вирішити проблему з компенсацією зусиль авторів, дивиться не там, де треба (як от в історії з openssl), а там, де є світло (як в анекдоті з пошуком ключей).

3️⃣ У npm є дві величезні проблеми. Перша: замість конкретної версії дуже легко вписати "щось типу версії 1.2.0", і воно автоматом при звантаженні само вирішить. І в результаті те, що було при розробці, при тестуванні та в продакшені — це можуть бути різні набори коду. Так, можно вказати конкретну версію, але так роблять тільки дуже свідомі люди. Їх пара десятків у всьому білому світі, бо більш свідомі просто не пишуть на ноді.

Друга проблема: якимось чином простота публікації пакетів призвела до лефтпадів та isEven. У світі пайтона (де з залежностямі можливо все ще гірше) чомусь такого не відбулося, а от у світі ноди на npm така кількість бруду, що це просто звіздєц. І colors/faker це не совсім лефтпад, але це точно не інфраструктура, яка вкрай потрібна.

4️⃣ Якого біса приплітати Аарона до цього? Не пам'ятаю, щоб він закликав опенсорсних авторів нападати на капіталістичних свиней заради копієчки. Леніна треба було згадувати.
👍17🔥2
Колись у сиву давнину (навесні 2017, щоб бути точним) написав нам OWOX з цікавою пропозицією: додайте наш скрипт на сайт і ми перекинемо всі ваші події у веб-аналітиці в BigQuery.

BigQuery - це такий Data Warehouse від Гугла, який вміє ворочати ну дуже великими обсягами даних. Тобто суть пропозиції у тому, що ми зможемо аналізувати те, що відбувається, не так, як задумано у Google Analytics, а як завгодно. Ну дуже цікаво, погодьтеся? Єдина річ — що вони за те хотіли доволі багато грошей. Не пам'ятаю суму, але це точно навіть не тисячі доларів на рік.

Скажу вам, що жаба для мене як мотиватор схоже непогано працює. У сенсі ну скільки там тієї роботи — записати дані у BigQuery? Зробив на фронті, щоб події GA копіювалися нам в спеціальний апі, той скидає їх у кафку, а потім з кафки перекидається у BigQuery. Все супер, і потім ми з того виростили свою аналітику з ClickHouse'ом — до речі, по тій самій причині, BigQuery недешевий, коли даси йому складне запитання. :))

Але був один нюанс. Для конекту до бігквері я використав гугловську джавну лібу, і щоб усе запрацювало, витратив довбаний тиждень. Бо апі в неї — гівно, помилки — гівно, підхід до авторизації — гівно, і взагалі. А як вишенька на торті — при оновленні вона ламалася. Десь всередині, то NPE якийсь, то ще щось. Не статична типізація, а хрін зна що.

Ну типу інжиніринг від Гугла, що ви взагалі очікуєте. 🤕

Так і була в нас кілька років забита у залежностях стара версія, від лютого 19-го року. А вчора настрій був, сів, вичистив з коду останнього користувача і прибив лібу з залежностей. Кайф. ☺️

А по мотивах тих страждань я написав власну лібу, яка просто використовує HTTP і тому не ламається. Не дивлячісь на назву, ми її для бігквері вже не юзаємо, а як інтерфейс до гугла - аж бігом. :)
👍12
Думав, що недочекаюсь. :) Ми випустили третій випуск RTFJ, на цей раз — з Єгором Назаркіним. Дуже прикольна розмова вийшла! Єгор зараз Engineering Manager у HealthJoy, в минулому займався організацією пайконів, та й загалом дуже відомий у Python-ком'юніті.

В нас вочевидь трохи розбігаються погляди на деякі технології, хехе, але ми норм пообговорювали і пайтон, і бази даних зачепили, і проблеми зв'язку у Сибіру. :))

Кароч велкам подивитися і не забувайте ділитися з оточенням. :)

На подкаст-платформах (або шукайте Fwdays Tech Talks у вашій апці):
SoundCloud 👉 https://bit.ly/3H4iysi
Apple Podcasts 👉 https://apple.co/35fzcag
Google Podcasts 👉 https://bit.ly/3qZyeaI
🔥15👍7
Омікрон

Я попередні хвилі корони оминув, а цю не вдалося. :) Дві модерни не врятували повністю, хехе. Вночі на минулий понеділок температура злетіла за 38, аж трясло від холоду — добре, що парацетамол допомагав і збивав температуру. В середу накрило дружину, а в четвер мені стало ставати краще, навіть поспав.

Це насправді найцікавіший (якщо можна так сказати, ехехе) ефект. Сил діяти бракує, здавалося б — спи, поки діти дозволяють, але ні, о 3 ночі прокидаєшся і все, нічого не допомагає. А до ранку приходив у стан повної розрухи, тупо жесть. Добре хоч вдень додатково з годину вдавалося поспати.

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

А от наслідки нервують. :/ Кашель досі не пройшов, бігати за дітьми зараз важче, а працювати головою це взагалі жесть. У вівторок трохи перелякався, бо після пари зустрічей відкрив код щось роздуплити й голова кругом пішла. 😱

Але вчора вже краще було, тож, здається, потроху відновлююся. Та й минулого тижня взагалі думати важко було зовсім, хаха. Згадується пост на quora, як чувак тупим став (не можу щось лінк знайти).

Рейтинг: 3/5, свідомість не губив, до лікарні не потрапляв, але рекомендувати не можу. 😁
😱20👍5
Завдяки Борису Джонсону я дізнався, що назва Foursquare - це не аллюзія до «на всі чотири сторони», чи радше не тільки аллюзія, а ще й окреме слово, яке означає «міцно, із завзяттям і переконанням, безкомпромісно». Типу будівля може stand foursquare, скажімо. Прикол реально. :)

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

Написав і назвав finaloption - з натяком на те, що це останній парсер опцій, після нього вже нічого не треба робити. Але це ще й сталий вираз, який проміж іншим означає останнє бажання перед стратою. Не можу нагуглити це, до речі, але мені кілька людей сказало про те, тож я перейменував лібу на opster.

Ну як у приказці, іменування — одна з двох найважчих справ у програмуванні.
👍20😁8🔥3
Чи можна полюбити код іншої людини

Накаталися з малим з гори (тааак, цей момент прийшов, я катаюся на лижах разом з сином!), замучився і відкрив ютубчик повтикати. А там новий подкаст ДОУ, і прям у нарізці на початку Діма Малєєв каже "я ніколи не бачив програміста, який відкриває чужий проєкт і каже: боже, яка красота".

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

Але ж причини того прості й зрозумілі: дедлайни, кваліфікація й обмеження.

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

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

3️⃣ Коли код пишуть, обмежень купа — окрім часу, є усні домовленості, якісь прийняті у проєкті підходи, якісь технічні проблеми (може навіть тимчасові), щось у голові в розробника, щось у голові в його рев'ювера, вигадайте корочє самі. А коли ти відкриваєш і дивишся код, то ти всіх обмежень, в яких знаходився розробник, не знаєш, зате бачиш замість простого і симпатичного коду для базового юзкейсу купу якихось нагромаджень.

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

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

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

На мене, наприклад, дуже вплинув код Mercurial. Метью, автор Меркуріалу, дуже багато уваги приділяв простоті архітектури та коду, зворотній сумісності, когерентності функціоналу й обмеженості фіч, які попадають у ядро. Тож у 2008-му я був тим програмістом, який відкрив чужий код і сказав — боже, яка краса! 😁

Це був не перший і не останній раз, але найяскравіший для мене.
👍38🔥3
Щось мене пробило ностальжі, можна я вам розповім історію про геймінг у сиву давнину 94 року?

Нам з братом неймовірно пощастило й у 94 році в нашому житті з‘явився 486SX25 (досі не знаю звідки). Один з першої партії четвірок в Україні, я так розумію — порізана модель проца (на 25 мгц і без сопроцессора), вінт на 120 мб (як зазвичай до 386 йшли, для четвірок були більші), і 4 мб ОЗУ (це важливо для подальшої історії).

І там на ньому було кілька базових ігр, а потім папа з роботи дискетами приносив різне, типу перших гоблінів — досі пам'ятаю, як тре почекати, поки вона нагріється, "аби конденсат не вбив дисковод". 😁 А потім сталося чудо — ціною відсутності диска протягом кількох тижнів (це я вже з батьків показники зняв, мені здавалося що півроку без компа прожити прийшлося) в нас з‘явилася купа ігор. В тому числі дум — який не запускався! 😭 Тож ми шпілили у вольфенштейн, у танчики (так, за 20 років до всіх, ггг), етц.

Чому не запускався? Ось тут складно! Дум хотів 4 мб ОЗУ, які в нас наче були, так? Але під час запуску комп'ютера виконувалися інструкції у CONFIG.SYS та AUTOEXEC.BAT, які запускали різне — драйвера для відео (бо ж VGA, а не EGA, аж олдскули зводить), резидентну програму (це типу демона зараз) для перемикання розкладки клавіатури, волков коммандер (передав би привіт Сєві, цікаво, де він зараз), ну й таке інше.

А ми, вочевидь, не сильно розчехлялися, що відбувається. А потім у нас в гостях знов був той самий друг батьків, завдяки якому всі ці ігри з'явилися, і навчив: під час запуску натискаєш F6, і дос запускається у щось типу safe mode, без виконання всіх тих файлів. Плюс написав нам doom.bat, який щось підгружав (підозрюю, що вга-драйвер, і може ще щось).

І воно поїхало. Після гоблінів, танчиків і вольфенштейну це була магія. Воно снилося мені у снах. Я придумував історії, які відбувалися у тому світі. Намалював скриншот з дума у школі, коли на малюванні була "вільна тема". :))

А потім! З відрядження до Києва папа привіз ще 4 мб ОЗУ і звуковуху. Пройшло майже 30 років, а я досі пам'ятаю своє хвилювання, коли замість натискання F6 я у Волкові навів курсор на doom.exe, натиснув Enter і воно запустилося. Серце стучало що капець. :)

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

P.S. Думаю, що вся ця двіжуха з компами — це тупо робочий комп вдома, бо їсти було нема чого, а комп'ютер вдома стояв. :)
👍27🔥1510
Дружина вмовила подивитися випуск Дудя про білорусів — я його зазвичай не дивлюся, бо від нього тхне імперським синдромом, але тут цікавість переборола неприязнь.

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

Ще один цікавий момент був, коли прийшла соцслужба через те, що хлопчик 10 років біло-червоно-білий прапор у школі намалював, прийшли до мами і кажуть: напевно, прийдеться відбирати у вас дітей, а що ми зробити можемо... Ну у сенсі що? Банально італійську забастовку можете, ну ви ж бачите, що це абсурд зовсім? Бачать, але виконують.

На жаль, моментом скористатися білоруси не скористалися — і замість аналога майданів вийшов аналог російських мітингів, ще й потім розігнали всіх активних людей по різних странах. Тож здається, що реакціонерна політика у Білорусі проживе, на жаль, ще дуже і дуже довго. :(
👍46