Bite the Byte
2.58K subscribers
24 photos
1 video
231 links
Download Telegram
Вирішив якось що мені для мікрофона вкрай потрібен жовтий кабель — це я ще Worker Bee користвувався, тож дуже підходило за кольором. А все шо є в магазах та всяких промах виключно сумних кольорів.

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

І ось приходить нотіфікашка, що кабель їде, а паралельно в месенджер олх з 15 фоток подібного змісту, і з вимірами ємності, etc...

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

Осьо він, якщо вдруг знадобиться (не реклама, я просто вражений максимально): https://instagram.com/goodcable
Знаєте шо? Не дивлячись на таке западло зі сторони погоди, я все одно зроблю стрім, бо точність — це ввічливість, стабільність — це культурність, фідошніки сабжів не міняють... це мене кудись понесло. Просто вибір вечора чогось складний для мене, не дивлячись на карантін, тож плюйте у те вікно і приходьте о сьомій послухати і потім прийняти участь у срачі^Wдискусії.

Ось тут: https://www.youtube.com/watch?v=uNF7QmFiQaw
Те, що у програмуванні все на соплях тримається — звично всім, хоча й дратує трішки. Люди, буває, собі програми на Хаскелі пишуть, щоб гарантувати, що воно працює, типизація там, все інше — а потім воно виходить у реальний світ, йому приходять реальні дані, і всі гарантії розвалюються, тому що хтось той JSON збирає в 1С і забуває екранувати лапки у строках.

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

Але увесь цей стрімінговий сетап, особливо якщо використовувати опенсорсні/безкоштовні рішення, типу OBS та obs.ninja, Streamlabs, і таке інше, воно взагалі дуже складне, незрозуміле і ламається так хитро, що в мене опускаються руки. Ну тобто вчора в Роми, якого я підключив через ніндзю, дублювався звук мікрофона із затримкою (тобто відлуння). Чому - хоч вбийте, я не знаю. Взагалі те, як я ловив його звук - це смішно, і я навіть не хочу писати сюди подробиці, тому що йшов він зовсім не разом з відео (ррррррр). Хочеться якогось рішення простіше. :))

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

Хух, наче пару випустив, можна піти підкинути кілька разів малу, чи ще щось продуктивне зробити. 😁
Хочу розповісти пригоду сьогоднішню. :) Ви мабуть бачили по всьому місту веліки BikeNow — їх реально розставили всюди, і мені було дуже цікаво спробувати, які вони. А сьогодні поїхали зі Степаном покататися у парк Пушкіна, і там декілька стояло на вході, тож ось і видалась нагода. Велосипед, як суто міський, дуже непоганий. Єдиний мінус — це його вага, але ж він зроблен з товстезної сталі, щоби витримати всі негаразди свого важкого життя. :)

Але це не пригода. Пригода те, що в кінці я його припаркував, закинув Степанів у багажник і ми поїхали додому. А через чотири години я згадав, що я його просто поставив на підножку, навіть замок не зачинив. Ну, думаю, капець... Почитав хелп: якщо не здаси впродовж 12 годин, то штраф 10к, а якщо впродовж 24, то це вважається крадіжкою і коштує 15к. Не знаю, чи додатково, мені що так, що так не подобається.

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

Мені за таку свідому поведінку ще й скинули увесь той "накатаний" час до години, тобто 35 грн замість 160 — теж не смертельна сума, але приємно. Взагалі і сам сервіс сподобався, і сапорт добре працює, але ж якихось нагадувань не вистачає, бо це ж яким уважним треба бути, щоб не провтикувати. :)
Перекладення інтерфейсу програм історично робилося за допомогою функцій, якій ти даєш на вхід ключ (скажімо, 3232 чи index-page.welcome-banner), а вони під час роботи програми йдуть у словничок (напевно, в якийсь файл, що лежить рядом), і беруть справжню строку (типу Привіт, %s) — у яку потім щє підставляють змінні.

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

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

Висновок: переїжджайте на геттекст, якщо ви ще ні, досить з підходами 80-х жити. :)
Macbook Air M1

Я вже четвертий місяць підряд терпів і не купляв новий макбук з процом м1 з двох причин: по-перше, я купив прошку 13 з нормальною клавою влітку, тож трішечки жаба давить, а по-друге, ходять чутки «у третьому кварталі буде про 14 з м2». Але кілька днів тому я відчув, що терпець мій вже вривається і я не можу так далі жити.

А практика каже, що якщо дуже хочеться, то треба купляти, навіть якщо логіка проти. :) Тож я плюнув і купив ейр на 8 озу і 512 ссд. 8 через те, що 16 настільки дорожче, що зелена тварюка аж хрипить, ну і хай там що, а я цілюся на прошку. Тож потерплю, плюс ніякі ідеї, докери та інше ненаситне я не юзаю. А 512 (а не 256) — щоб був повноцінний проц/відео, а не огризки з одним відключенним ядром. :)

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

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

Тепер в мене CLJS білд збирається не 9.5, а 6.3 секунди. Але це покращення в 30% не дає реального розуміння, наскільки швидше працює інтерфейс. Я такий довольний, шо капець, ггг. Тепер під час стрімів не буде мені волати у вухо і підпалювати пальці. :)
Рік тому написав я пост про те, як перемикаю різні розкладки клавіатури. Років 15 тому я користувався капслоком, який клацав між англ та рос розкладками. Українська у такому випадку, вочевидь, страждала. А кілька років тому я відкрив для себе Karabiner, і зараз по натисканню лівого команда вмикається англійська, правого - російська, а правого альту - українська.

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

Вочевидь, можна було і не писати цього, кому треба — міг би піти пост почитати. :) Але ж більшість з вас або не читала, або не занепокоїлася достатньо, а це ж кожень день приходиться сотні разів дивитися на те, яка зара мова увімкнена, щоб знати, куди перемкнути. Ну просто ідеальне місце щоб задешево трішечки покращити життя. :)
Написав статтю місяць тому і забув опублікувати, це капець. :) Кароч історія в тому, що показування HTML'ю користувачу після того, як він нажав кнопку "назад" - це не дуже тривіальна операція. З реактом історія була у тому, щоб заново відрендерити йому те, на що урл вказує, а без реакту... без реакту можна або зберігати верстку десь, або заново ходити на сервер. Друге робить HTMx, а перше робить TwinSpark: https://solovyov.net/blog/2021/history-snapshotting-in-twinspark-js/
Ось обговорювали с Вовою, чому ж Дія Сіті — це погано. Мої думки про це ось такі:

1) Інженерно вони дуже слабкі. Дія, як аппка, дуже погано працює: то є там мої права, то немає, тупо час від часу як повезе. Розлогінює часто.
2) Продуктовий віжн в них поганий. Він може і сильний, але поганий, тому що роблять вони централізованний реєстр документів, який дуже вразливий до корупції та кібер-атак. Нам, як країні, треба навпаки. От ID-картки в цілому у вірному напрямку рухалися, а єдиний реєстр — це дуже-дуже погано. Якщо хочете дізнатися наочно чому — подивіться на ютубі розслідування Навального про те, хто його травив.
3) Менеджмент в них дуже поганий. На надзвичайно тупу і надзвичайно небезпечну дірку вони відреагували максимально тупо: мовчанням. Це просто неприпустимо для будь-якої публічної компанії, я вже не кажу про державі установи.
4) Все, що робиться за кошти громадян для країни, повинно робитись з відкритим кодом з відкритою ліцензією. Тому що, по-перше, це наш софт, ми за нього заплатили, і не треба його від нас ховати. По-друге, це справа національної безпеки: мати не security through obscurity, а публічний контроль цієї самої безпечності ПО.

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

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

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

Так ось питання таке: нашо в номері за такі гроші така прикольна економія на кулері? І якого перцю той мінібар у спальні, якщо вже є дві кімнати?!

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

Понабирають студентів по 5$/година, а потім результати проектування як люкси здають, ггг :)
Кілька днів провели сім‘єю в Одесі і дуже мене неприємно вразила кількість реклами і оголошень російською мовою, наче у 90-ті повернувся. Тобто Київ не те що б україномовним мені відчувався, але майже вся реклама українською, на моє відчуття, 70% кур‘єрів та менеджерів та взагалі сфери обслуговування починають розмову українською, а більшість інших переходить на українську після перших моїх слів. І взагалі, я якось зібрав булки у кулак і з незнайомими людьми вже майже завжди українською спілкуюся. :)

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

Тож до чого це я. Думаю що піду зара вб‘ю російську клаву в айфоні і подивлюся, де буде важко жити. :) І Одесу ніхто у Коцюбіїв не перейменує назад, але, маю надію, що хоча б мовні закони відміняти не будуть.
Доволі цікаво, як Епл використала один і той самий процесор у зовсім різних сегментах. І мак міні за 700$, і айпад про за 800$, і ноути трішки дорожче тисячі, і аймаки за 1700$ - всюди один і той самий проц (тільки іноді без одного перформанс-ядра у відяхи). Це типу з однієї сторони він енергоефективний (тож підходить айпадам), з іншої - достатньо швидкий, щоб продавати девайси за півтори тисячі і не боятися порівнянь з x86.

Прикольно, насправді. Я не передивлявся ретельно тестів та й не занурювався у подробиці, але на власних відчуттях так воно і є: ейр м1 з однієї сторони живе майже як айпад про наш (якому 4 роки напевно зараз), з іншої — він помітно швидший за мій попередній macbook pro. Much snappier UI, щоб розмовляти усталими термінами. ;) Я б навіть сказав, що відчуття від швидкості реакцій інтерфейсу не гірші, ніж у вінди на райзені — а вона завжди кращє макосі була з точки зору затримок в юаї.

Тож виглядає що епл нормально так попала. Зрозуміло, що то не овернайт саксес і вони його будували 12 років — у 2008 якось вмовили Джима Келлера приєднатися до Епла і купили згодом P.A. Semi, де він працював до того. Того самого Келлера, що автор Атлону64 і Райзенів!

Тож дуже цікаво, що там епл випустить далі! З ядрами наче зрозуміло, клепайте більші (і дорожчі) проци і буде більше ядер. А от з пам’яттю... мак про зара може мати до 1.5 терабайту озу, а з тою архітектурою пам‘яті, що є зараз, це буде нереально дорого. Перейдуть на DDR, як в усіх? Не знаю, але здається, що далі буде ще прикольніше. :)
Ми у коментах до попереднього посту трішки обговорили, чому M1 від Епла такий швидкий, що вони його всюди пхають. Вся історія в тому, що процесори зараз являють собою зовсім не те, що вони намагаються з себе зобразити, тому що їх архітектура вже дуже давно пішла уперед, а увесь софт у нас все ще пишеться, наче ми маємо чесний x86. Це значить, що x86 — це лише фасад, тобто декодер, який з інструкцій x86 робить інструкції для справжнього процесора.

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

Але ж виконати x = 1 + 2; y = x + 1 за один такт неможливо, бо y залежить від x. Через це процесори всередині змінюють порядок інструкцій, щоб мати змогу використовувати свої непересічні здібності. Тож ефективність процесору дуже залежить від ефективності декодеру, щоб він встигав декодувати достатньо інструкції, щоб було що пересортувати.

Це спільна риса і x86, і ARM процесорів, тому що кожна архітектура процесорів має свої властивості і заставляти світ перекомпілювати увесь софт під новий процесор при кожному релізі нереально. Отож і маємо товстезний шар сумісності.

Ось і наблизились ми до суті історіі. x86 мають довільну довжину інструкції, наразі від 1 до 15 байт. І це значить, що розпаралелити декодування дуже важко. Статті, які я читав, рапортують, що максимальна кількість декодерів у процах Інтела та АМД - 4 на кожне ядро проца.

На відміну від них, у ARM інструкції завжди по 4 байта, тобто бери нарізай бінарник як хочеш і пхай у декодери. І в M1 зараз 8 декодерів. І внутрішнє звірятко через те дуже-предуже ефективне.

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

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

Наступний шар — це рендерінг шаблонів. Йдуть роки, а генерація строк залишається однією з найбільш ємних частин веба. Навіть якщо цей шаблон — це JSON, і (на відміну від більшості ліб шаблонів) генерація написана на C, це займає доволі багато ресурсів. Тож ми можемо закешувати його. Тут треба дуже уважно слідкувати за варіативністю параметрів: якщо у результати попадає ім'я користувача, ми ризикуємо генерувати кеш для кожного користувача окремо і тоді ефективність такого кешування впаде до плінтуса. При цьому при розробці (та тестуванні) все буде виглядати нормально, тому що користувач-то один буде. Це те саме місце, де можна відчути, що кеш — одна з наскладніших проблем у програмуванні.

І з важливого є ще один шар, власне HTTP. У протокол HTTP вбудований механізм кешування, який імплементовано і в браузерах, і в різних балансувальниках нагрузки, як от в nginx чи у Cloudflare. Він нам дуже цікавий, тому що дозволяє навіть з доволі повільним бекендом (на Django чи то на Rails) мати сайт, який відносно нормально витримує навантаження. У будь-якій HTTP відповіді можна додати хедер Cache-Control: max-age=3600 (припустимо), і браузер, який отримав цю відповідь, ще годину не буде повторювати цей запит. Ще цікавіше: якщо перед нашим сервером сидить якийсь проксі, то він теж закешує ту відповідь і жоден запит з будь-яких браузерів з тим самим урлом вже не прилетить до бекенду.

Ми цим кешуванням дуже широко користуємося у Касті. Як API, так і усі публічні сторінки рендеряться так, наче їх дивиться анонім, а потім фронтенд біжить і довантажує кастомні елементи (насправді, у більшості випадків — хедер, де є ім'я користувача).

Правильно побудоване кешування — дуже ефективна штука, тому що найшвидший код — це той, який не потрібно виконувати. #cache #performance
В мене у Києві є улюблений ресторан. Насправді, назвати це місце рестораном важко… але вони готують їжу, і в них можна сісти у залі поїсти (хоча останній рік тільки на виніс), і це не фаст-фуд, тож мабуть таки ресторан?

Це Пекін на вулиці Васильківській, навпротив корпусів універститету Шевченка. Так, у Києві є ще інші ресторани з такою назвою, і є багато інших китайських ресторанів та доставок, але всі вони — не те.

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

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

Раніше там всередені взагалі був сюр і гнучкі алюмінієві виделки. Гнучки не у сенсі «гнучка компанія», а у сенсі «вирівняй перед тим, як їсти», як ото у совкових столовках. Але вони оновили інтер‘єр, поміняли посуд і тепер просто так собі. :)

Це не висока кухня, це смачна кухня. Обожнюю і свиню по-пекінськи, і курку по-сичуанськи, і яловичину з китайськими приправами, і смажені пельмені з бараниною, і купу купу всього іншого. Взагалі, якщо в темі і я не згадав ваше улюблене, пишіть в коментарях для тих, хто там не був, бо Пекін сяє наче Бетельгейзе у світі китайських ресторанів Києва. :)
За минулий тиждень написав аппку-приклад для твінспарку і навіть сюжет для відео — вирішив зробити начисту замість стріму. Не певен, що це було найкращім рішенням, бо шось гемору так багато, шо капець. ಠ_ಠ

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

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

Тож в доволі короткий час я записав все що треба. Ура, 80% праці зроблено! Лишилося тільки змонтувати і почистити звук, тобто ще 80% роботи.

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

Я навіть сумнівався, чи він працює, бо до цього дня від нього чув може два чи три удари… а зара прямо істерика.

Лежу без сну вже третю годину і думаю, чи записатися у екстремісти, чи у ескапісти?..