Ви уявляєте, я примудрився провтичить анонсувати перший випуск, тож, якщо ви не бачили, там вийшло вже два випуски Right Tool For The Job у партнерстві з Luxoft.
Останній — про моніторінг, а перед ним — про Java, і про БД, і Еластік зачепили, в цілому такий загальний вийшов. Enjoy!
Останній — про моніторінг, а перед ним — про Java, і про БД, і Еластік зачепили, в цілому такий загальний вийшов. Enjoy!
YouTube
Про системи моніторингу, DevOps, Prometheus разом з Андрієм Шевцовим, Luxoft.
Зустрічайте другий випуск серійного подкасту разом з партнером Luxoft у рамках «RTFJ».
Luxoft входить до числа найбільших ІТ-компаній України, та створює інноваційні технологічні рішення для клієнтів у сферах фінансів, автомобілебудування, енергетики, ритейлу…
Luxoft входить до числа найбільших ІТ-компаній України, та створює інноваційні технологічні рішення для клієнтів у сферах фінансів, автомобілебудування, енергетики, ритейлу…
core-js
Минулого тижня автор проєкта core-js написав довжелезний пост про те, який світ несправедливий, і замість того щоб платити йому дуже багато грошей, натомість платить небагато грошей.
Пост там такий, шо важко взагалі челюсть з полу підібрати, поки його читаєш: як приклад нестачі грошей — потреба купити дружині новий айфон, victim-blaming дівчини, яку він вбив своїм мотоциклом, згадка про війну (тут я взагалі гублюся, що тобі заважало мовчати?) у вигляді "two evils", і багато іншої дурі.
Ну я почитав, подумав "ото козел", і закрив. А натомість відкрив Hacker News, де в топі висить ця історія, і всі верхі коментарі в стилі "біднесенький програміст, підняв важливу тему!" А всі спроби вказати, що він трошки не зовсім біднесенький, і насправді і з грошима там місцями навіть все не дуже погано (і пожертв на 2.5 тисячі на місяць, і десь там контракти на 10к зелених) — задаунвочені.
Ну я з того вразився дуже сильно, і написав твіт англійською, щоб мож хоч хтось з-за кордону прочитав та увімкнув трохи критичного мислення. Аж тут виявилося, що в нас на ДОУ коментатори такі ж недалекоглядні:
> як це відноситься до коду в опенсорсній лібі?))
І от що я з цього приводу хочу сказати: напряму відноситься. Політичні погляди людини не можна відділити від людини. Чи можна відділити від коду? Хз, але мене це питання зараз не цікавить. Питання таке: чи треба підтримувати фінансово чувака, який підтримує війну? В жодному разі! Це сприяння поганій поведінці, поганий прецедент і все таке. Ганьба адекватності.
Тим більше, що адекватністю там і не пахне. Він у свій код натащив коду інших людей, при тому порушуючи ліцензію. Очевидно, таким чином зробивши все-в-одному пакет для вирішення питання з поліфілами і пробився у залежності до Babel'я (цікаво ще, як). Ніколи не додавав інших мейнтейнерів, навіть коли попав у тюрму — job security в повний зріст. Ну і тепер цим всім шантажує ком'юніті. 🤦♂️
А ще двіжуха апологетів придумала порівнювати core-js із OpenSSL, якому "теж не доставалося грошей і подивіться до чого це призвело". Вражає хуцпа, порівнювати власне відносно простий код polyfill'ів (бо там, де складно, він код спіонерив, хаха) із серйозно складним проєктом, завдяки якому працює увесь-увесь інтернет. 🤯
Михайло ще непогано розклав цю історію, з подробицями.
P.S. Завдяки Максу Кавалері я перестав слухати Soulfly у 14-му році. Кілька разів вмикав, музика подобається, але не можу забути про те, що він мудак. Та ж сама історія.
Минулого тижня автор проєкта core-js написав довжелезний пост про те, який світ несправедливий, і замість того щоб платити йому дуже багато грошей, натомість платить небагато грошей.
Пост там такий, шо важко взагалі челюсть з полу підібрати, поки його читаєш: як приклад нестачі грошей — потреба купити дружині новий айфон, victim-blaming дівчини, яку він вбив своїм мотоциклом, згадка про війну (тут я взагалі гублюся, що тобі заважало мовчати?) у вигляді "two evils", і багато іншої дурі.
Ну я почитав, подумав "ото козел", і закрив. А натомість відкрив Hacker News, де в топі висить ця історія, і всі верхі коментарі в стилі "біднесенький програміст, підняв важливу тему!" А всі спроби вказати, що він трошки не зовсім біднесенький, і насправді і з грошима там місцями навіть все не дуже погано (і пожертв на 2.5 тисячі на місяць, і десь там контракти на 10к зелених) — задаунвочені.
Ну я з того вразився дуже сильно, і написав твіт англійською, щоб мож хоч хтось з-за кордону прочитав та увімкнув трохи критичного мислення. Аж тут виявилося, що в нас на ДОУ коментатори такі ж недалекоглядні:
> як це відноситься до коду в опенсорсній лібі?))
І от що я з цього приводу хочу сказати: напряму відноситься. Політичні погляди людини не можна відділити від людини. Чи можна відділити від коду? Хз, але мене це питання зараз не цікавить. Питання таке: чи треба підтримувати фінансово чувака, який підтримує війну? В жодному разі! Це сприяння поганій поведінці, поганий прецедент і все таке. Ганьба адекватності.
Тим більше, що адекватністю там і не пахне. Він у свій код натащив коду інших людей, при тому порушуючи ліцензію. Очевидно, таким чином зробивши все-в-одному пакет для вирішення питання з поліфілами і пробився у залежності до Babel'я (цікаво ще, як). Ніколи не додавав інших мейнтейнерів, навіть коли попав у тюрму — job security в повний зріст. Ну і тепер цим всім шантажує ком'юніті. 🤦♂️
А ще двіжуха апологетів придумала порівнювати core-js із OpenSSL, якому "теж не доставалося грошей і подивіться до чого це призвело". Вражає хуцпа, порівнювати власне відносно простий код polyfill'ів (бо там, де складно, він код спіонерив, хаха) із серйозно складним проєктом, завдяки якому працює увесь-увесь інтернет. 🤯
Михайло ще непогано розклав цю історію, з подробицями.
P.S. Завдяки Максу Кавалері я перестав слухати Soulfly у 14-му році. Кілька разів вмикав, музика подобається, але не можу забути про те, що він мудак. Та ж сама історія.
Я тіки що використав ChatGPT для того, щоб написати плагін для ProseMirror. Це просто сюрреалістичний досвід.
Плагін — це коментування. Не питайте, нащо мені, якщо зараз все нормально зрощу, то покажу скоро. :)
Історія починається так: я написав сам першу версію за допомогою гуглу, існуючих прикладів, обговорень на форумах — ну все як звичайно. І зрозумів, що підхід дуже привабливий, але в спільному (collaborative) редагуванні все ламається. Коментарі зберігаються окремо від документу і синхронизувати їх — гемор.
Зранку подивився на Notion, а вони коментарі зберігають у верстці назавжди, навіть якщо їх зарезолвили. Ну, думаю, супер, зробив якусь першу версію розширення по прикладах, вона працює, але встановлення коментаря за допомогою стандартного API (
Я собі подумав, що треба зібрати вже існуючі мітки (mark — це термінологія ProseMirror'а для розмітки тексту), і руками змержити, де треба. Типу є мітка такого типу — об'єдную, нема — просто ставлю.
Пішов читати API проузміррора, а воно величезне і я не дуже його шарю. Піду, думаю, спитаю в ChatGPT, цікаво що він зробить. Спитав як знайти всі мітки якогось типу, спитав як їх позиції знайти, а потім думаю — ну до чого оці всі полуміри? Питаю:
> How would I add mark of some type (say
Не так щоб забагато контексту, да? Ну і він відповідає, з поясненнями, все таке, але зміст зводиться до оцього шматочку кода:
Якщо вчитатися, то останній рядок коду — він їх не об'єднує, а просто зберігає старі. Але ну які проблеми, це вже один if'чик для мене, і я його написав.
І шо ви думаєте? Працює!
Дивні відчуття з того приводу, не можу зформулювати. Код доволі ефективний, здається. Круто, круто. Висловлюйте свої думки. 😁
UPD. Походив тут, подумав:
0. В деталях воно провтикує. У сенсі що я переписав майже увесь код, що воно згенерувало. Ну ми й так вже всі знаємо, що ML — це не про те, коли тобі важливі деталі.
1. Але основні моменти —
2. Без мого розуміння, що робити, з нечіткими запитами — згенерований код теж був фуфлом беззмістовним. Постановка задачі потрібна, короче. Та сама історія, що з програмуванням: від ідеї до реалізації прірва роботи. А ChatGPT тут допомагає частинку прірви засипати.
Напевно, я excited з приводу того, куди рухається професія. Думати над ідеями мені подобається більше, ніж долбатися з розбиранням, який апі як треба використати. 😁
Плагін — це коментування. Не питайте, нащо мені, якщо зараз все нормально зрощу, то покажу скоро. :)
Історія починається так: я написав сам першу версію за допомогою гуглу, існуючих прикладів, обговорень на форумах — ну все як звичайно. І зрозумів, що підхід дуже привабливий, але в спільному (collaborative) редагуванні все ламається. Коментарі зберігаються окремо від документу і синхронизувати їх — гемор.
Зранку подивився на Notion, а вони коментарі зберігають у верстці назавжди, навіть якщо їх зарезолвили. Ну, думаю, супер, зробив якусь першу версію розширення по прикладах, вона працює, але встановлення коментаря за допомогою стандартного API (
setMark
) просто затирає існуючі коментарі. Ну можна було б це очікувати.Я собі подумав, що треба зібрати вже існуючі мітки (mark — це термінологія ProseMirror'а для розмітки тексту), і руками змержити, де треба. Типу є мітка такого типу — об'єдную, нема — просто ставлю.
Пішов читати API проузміррора, а воно величезне і я не дуже його шарю. Піду, думаю, спитаю в ChatGPT, цікаво що він зробить. Спитав як знайти всі мітки якогось типу, спитав як їх позиції знайти, а потім думаю — ну до чого оці всі полуміри? Питаю:
> How would I add mark of some type (say
comment
) to a selection in ProseMirror, appending some identifier if such mark already is set on a part of selection, rather than replacing it?Не так щоб забагато контексту, да? Ну і він відповідає, з поясненнями, все таке, але зміст зводиться до оцього шматочку кода:
// update the document state with the new mark
const tr = editor.state.tr.addMark(start, end, commentMark);
// preserve any existing comment marks in the selection
doc.nodesBetween(start, end, (node, pos) => {
const commentMarks = node.marks.filter((mark) => mark.type.name === 'comment');
for (const mark of commentMarks) {
if (!mark.attrs.id.includes(uniqueId)) {
tr.addMark(pos, pos + node.nodeSize, mark);
}
}
});
Якщо вчитатися, то останній рядок коду — він їх не об'єднує, а просто зберігає старі. Але ну які проблеми, це вже один if'чик для мене, і я його написав.
І шо ви думаєте? Працює!
Дивні відчуття з того приводу, не можу зформулювати. Код доволі ефективний, здається. Круто, круто. Висловлюйте свої думки. 😁
UPD. Походив тут, подумав:
0. В деталях воно провтикує. У сенсі що я переписав майже увесь код, що воно згенерувало. Ну ми й так вже всі знаємо, що ML — це не про те, коли тобі важливі деталі.
1. Але основні моменти —
doc.nodesBetween
, node.marks
та tr.addMark
— це і є головна користь. Напевно десь в інтернеті є оця комбінація, але знайти пошуком мені її не вдалося. Я тому і пішов спочатку інший спосіб реалізовувати, бо ідей, що робити з мітками — не було.2. Без мого розуміння, що робити, з нечіткими запитами — згенерований код теж був фуфлом беззмістовним. Постановка задачі потрібна, короче. Та сама історія, що з програмуванням: від ідеї до реалізації прірва роботи. А ChatGPT тут допомагає частинку прірви засипати.
Напевно, я excited з приводу того, куди рухається професія. Думати над ідеями мені подобається більше, ніж долбатися з розбиранням, який апі як треба використати. 😁
Панове, потребую вашої допомоги, бо я зі своїм стартапом якось забуксував. Хочу знайти когось, в кого болить — читайте далі для подробиць.
Проблема: маркетинг регулярно хоче невеличких змін під різні події чи експерименти. Може скоро розпродаж і хочеться трошки цікавіший банер, ніж раніше, а чи то новій людині прийшло в голову, що треба змінити місцями блоки на головній...
Це генерує багато невеличких, термінових, не дуже інтелектуально навантажених завдань. Термінових, бо розпродаж через тиждень, а з нативними апками ще треба релізнути і дочекатися, поки вона оновиться. Всі спрінти і недороблені задачі коту під хвіст. Ну й плюс зміни ці зазвичай у місці, якого майже не торкається основна розробка — лендінги, онбордінги, пейволи тощо.
Я навіть знаю команду, де "задачі монетизації" використовувалися, як покарання — бо ніхто не хоче цим займатися. Воно одноманітне, нудне, і зазвичай йде у смітник через кілька тижнів.
Маркетингу теж не так щоб солодко. За кожну ідею треба воювати, затримка на реалізацію не 15 хвилин, а тиждень, стосунки з розробниками не фантастіка і вмовити їх на щось цікаве — біль.
Я хочу зробити для того рішення — у вигляді ліби/фреймворку, адмінки, і чого там ще потрібно буде — яке дасть змогу керувати верхньорівневими компонентами. У сенсі компонентами конкретної апки, а не абстрактними кнопки/картинки (як мінімум для початку). Ну й всім сумісним — А/Б тестами, прев'ю змін, що там ще прийде в голову.
Тож я шукаю проєкт, де є така проблема. Якщо ви б не проти її вирішити, проте ніколи немає на те часу — зв'яжіться зі мною, поговоримо, га? :) Або може у ваших знайомих такі трабли, направте їх в мою сторону. Англійська мова ок, якщо шо. 😁
Проблема: маркетинг регулярно хоче невеличких змін під різні події чи експерименти. Може скоро розпродаж і хочеться трошки цікавіший банер, ніж раніше, а чи то новій людині прийшло в голову, що треба змінити місцями блоки на головній...
Це генерує багато невеличких, термінових, не дуже інтелектуально навантажених завдань. Термінових, бо розпродаж через тиждень, а з нативними апками ще треба релізнути і дочекатися, поки вона оновиться. Всі спрінти і недороблені задачі коту під хвіст. Ну й плюс зміни ці зазвичай у місці, якого майже не торкається основна розробка — лендінги, онбордінги, пейволи тощо.
Я навіть знаю команду, де "задачі монетизації" використовувалися, як покарання — бо ніхто не хоче цим займатися. Воно одноманітне, нудне, і зазвичай йде у смітник через кілька тижнів.
Маркетингу теж не так щоб солодко. За кожну ідею треба воювати, затримка на реалізацію не 15 хвилин, а тиждень, стосунки з розробниками не фантастіка і вмовити їх на щось цікаве — біль.
Я хочу зробити для того рішення — у вигляді ліби/фреймворку, адмінки, і чого там ще потрібно буде — яке дасть змогу керувати верхньорівневими компонентами. У сенсі компонентами конкретної апки, а не абстрактними кнопки/картинки (як мінімум для початку). Ну й всім сумісним — А/Б тестами, прев'ю змін, що там ще прийде в голову.
Тож я шукаю проєкт, де є така проблема. Якщо ви б не проти її вирішити, проте ніколи немає на те часу — зв'яжіться зі мною, поговоримо, га? :) Або може у ваших знайомих такі трабли, направте їх в мою сторону. Англійська мова ок, якщо шо. 😁
Тисячоліттями диктатури знаходилися в кращому становищі під час конфліктів та війн. У Римський республіці, наприклад, самі собі призначали диктатора під час кризисних ситуацій. І наш випадок — яскравий тому приклад останні 400 років. Можна ще поглянути на історію стосунків Москви та Новгорода, а також почитати про розділи Речі Посполитої.
І тут раптом ми потрапляємо у традиційно зрозумілий для диктатури конфлікт в умовах зовсім інших комунікацій. І виявляється, що демократичне суспільство, при всіх своїх внутрішніх конфліктах і распрях, при такій очевидній загрозі — мобілізується добре і ефективно. А традиційна для диктатури та імперіалізму корупція нікуди не дівається.
І тому в перший раз за 4 сторіччя в нас є не просто шанс, а мало не шлях. Складний, болючий, засмічений ворожою пропагандою, але все одно зрозумілий.
Бажаю нам всім перемоги, а росії згоріти в історії.
Moskovia delenda est. 🔥
І тут раптом ми потрапляємо у традиційно зрозумілий для диктатури конфлікт в умовах зовсім інших комунікацій. І виявляється, що демократичне суспільство, при всіх своїх внутрішніх конфліктах і распрях, при такій очевидній загрозі — мобілізується добре і ефективно. А традиційна для диктатури та імперіалізму корупція нікуди не дівається.
І тому в перший раз за 4 сторіччя в нас є не просто шанс, а мало не шлях. Складний, болючий, засмічений ворожою пропагандою, але все одно зрозумілий.
Бажаю нам всім перемоги, а росії згоріти в історії.
Moskovia delenda est. 🔥
Я не планую використовувати канал у якості джоб-борди, але за мною невеличкий борг, тому тримайте. :)
В мене є знайомий iOS-ник, який шукає роботу. В нього вже десь близько 20 років досвіду (руки чухаються дописати "з айосом", ггг) — а він досі не кинув цю справу, тож точно ненормальний і точно треба брати. 😁 Мені пощастило з ним працювати на початку кар'єри (моєї), а потім я його вмовив прийти до Касти — і це був супервдалий хід. Я йому того ніколи не казав, але мені його підхід до роботи допоміг зовсім інакше подивитися на мобільну розробку, на аналітику і на взаємодію з маркетингом.
Тож якщо вам треба не просто робочі руки, а робочі руки з головою, це ваш шанс. 😁 Каже, що цікаві різні варіанти співпраці, не тільки фултайм, так що не соромтесь, пишіть. Звати Зореслав, пишіть на me@zoreslav.com.
P.S. Більш формальну історію можна подивитися на Лінкедині коли є охота.
В мене є знайомий iOS-ник, який шукає роботу. В нього вже десь близько 20 років досвіду (руки чухаються дописати "з айосом", ггг) — а він досі не кинув цю справу, тож точно ненормальний і точно треба брати. 😁 Мені пощастило з ним працювати на початку кар'єри (моєї), а потім я його вмовив прийти до Касти — і це був супервдалий хід. Я йому того ніколи не казав, але мені його підхід до роботи допоміг зовсім інакше подивитися на мобільну розробку, на аналітику і на взаємодію з маркетингом.
Тож якщо вам треба не просто робочі руки, а робочі руки з головою, це ваш шанс. 😁 Каже, що цікаві різні варіанти співпраці, не тільки фултайм, так що не соромтесь, пишіть. Звати Зореслав, пишіть на me@zoreslav.com.
P.S. Більш формальну історію можна подивитися на Лінкедині коли є охота.
TwinSpark.Morph
Оце нещодавно стрельнуло мені позакривати гештальти на гітхабі, а то маринувалися деякі понад рік. І найцікавіший був прикладом з валідації форми для твінспарку, типу як валідувати на сервері взаємо-залежні поля. Але, об'єктивно кажучи (маю надію що Андрій не образиться :-), сам код виглядав трошки як запинування ногами.
Таке буває, коли тобі треба вже проблему вирішити, а не архітектуру будувати, ти ногами якось запинуєш — головне, щоб працювало. Worse is better.
На моє щастя, це була не мій біль, тому я міг дозволити собі маринацію. 🤣 Короч, прийшло натхнення, і я пішов будувати солюшен.
Найскладніше, авжеж, не зібрати дані з форми — це якраз вирішується просто, перевісив хендлер на форму з кожного поля і вуаля. Але потім оновити ту форму — ось де собака зарита (і, власне, основна причина отого запинування ногами, я так розумію).
Авжеж, можна вигадати якийсь обман, і оновлювати форму шматочками, але тоді заготовочки для помилок треба мати у верстці заздалегідь, та й взагалі звучить дуже крихко — а хочеться-то навпаки, кльовий і непробивний приклад, як воно все добре працює.
Якщо ви стежите за попередніми серіями, то увесь сенс підходу в тому, що ми отримуємо новий HTML і замінюємо ним старий. Я намагався прилаштувати це до форми — шукати де там фокус, ловити, встановлювати його назад. Авжеж нічого не працює. Курсор іноді трошки не туди стає, під час перескакування курсора з поля в поле взагалі немає
Тобто у мене при змінах у формі валідація, а при сабміті — і валідація, і сабміт. Запит для сабміту вже полетів, але приходить назад — а його рідна форма десь вже просто в замиканні зависла і гудбай. Uphill battle. Абсолютне відчуття, що ти в дитинстві йдеш у школу і назад у завірюху вгору в обидві сторони. 😡
Піду, думаю, подивлюся ще раз на idiomorph. Не зря ж його чувак написав, повинен вирішувати всі трабли. А він наче й вирішує, але розміром більш ніж половина ТвінСпарку. 🐸 очевидно придавила мене, і я в найкращих традиціях NIH взяв і написав заново. 🎉
І вийшла чверть. Без жартів, 250 рядочків, і це навіть з деякими доробками. Мабуть, чувак джавіст, бо деякі місця ну дуже розлаписті (я йому навіть пул реквест заслав, хехе). Ну і я пару довгих, але нерелевантних, моментів пропустив — типу парсінгу хтмлю (в мене вже готовий елемент), чи оновлення тегу head (ну здається що вже зроби повний релоад, та й все).
І я щось так пройнявся результатом, що зняв відео про те, як працює алгоритм морфінгу (і про прикольні анімації). 😁 Enjoy!
Оце нещодавно стрельнуло мені позакривати гештальти на гітхабі, а то маринувалися деякі понад рік. І найцікавіший був прикладом з валідації форми для твінспарку, типу як валідувати на сервері взаємо-залежні поля. Але, об'єктивно кажучи (маю надію що Андрій не образиться :-), сам код виглядав трошки як запинування ногами.
Таке буває, коли тобі треба вже проблему вирішити, а не архітектуру будувати, ти ногами якось запинуєш — головне, щоб працювало. Worse is better.
На моє щастя, це була не мій біль, тому я міг дозволити собі маринацію. 🤣 Короч, прийшло натхнення, і я пішов будувати солюшен.
Найскладніше, авжеж, не зібрати дані з форми — це якраз вирішується просто, перевісив хендлер на форму з кожного поля і вуаля. Але потім оновити ту форму — ось де собака зарита (і, власне, основна причина отого запинування ногами, я так розумію).
Авжеж, можна вигадати якийсь обман, і оновлювати форму шматочками, але тоді заготовочки для помилок треба мати у верстці заздалегідь, та й взагалі звучить дуже крихко — а хочеться-то навпаки, кльовий і непробивний приклад, як воно все добре працює.
Якщо ви стежите за попередніми серіями, то увесь сенс підходу в тому, що ми отримуємо новий HTML і замінюємо ним старий. Я намагався прилаштувати це до форми — шукати де там фокус, ловити, встановлювати його назад. Авжеж нічого не працює. Курсор іноді трошки не туди стає, під час перескакування курсора з поля в поле взагалі немає
document.activeElement
, то ти навіть не знаєш, куди ставити, але самий прикол, це, авжеж, те, що заміна форми вбиває всі івенти в черзі, посилання на неї в пам'яті, ну карочє.Тобто у мене при змінах у формі валідація, а при сабміті — і валідація, і сабміт. Запит для сабміту вже полетів, але приходить назад — а його рідна форма десь вже просто в замиканні зависла і гудбай. Uphill battle. Абсолютне відчуття, що ти в дитинстві йдеш у школу і назад у завірюху вгору в обидві сторони. 😡
Піду, думаю, подивлюся ще раз на idiomorph. Не зря ж його чувак написав, повинен вирішувати всі трабли. А він наче й вирішує, але розміром більш ніж половина ТвінСпарку. 🐸 очевидно придавила мене, і я в найкращих традиціях NIH взяв і написав заново. 🎉
І вийшла чверть. Без жартів, 250 рядочків, і це навіть з деякими доробками. Мабуть, чувак джавіст, бо деякі місця ну дуже розлаписті (я йому навіть пул реквест заслав, хехе). Ну і я пару довгих, але нерелевантних, моментів пропустив — типу парсінгу хтмлю (в мене вже готовий елемент), чи оновлення тегу head (ну здається що вже зроби повний релоад, та й все).
І я щось так пройнявся результатом, що зняв відео про те, як працює алгоритм морфінгу (і про прикольні анімації). 😁 Enjoy!
YouTube
Twinspark.Morph — оновлення HTML без втрати стану
Валідація форм, анімації з мінімумом коду і Рік Ештлі, в якого не закривається рот — що в цьому спільного? 😁 Розбираю подробиці алгоритму оновлення HTML у Twinspark'у, який дозволяє і обійтися без зайвого джаваскрипту, писати просту і конкретну верстку і…
Пару років тому — після десятиріччя погроз — Google нарешті почав враховувати Core Web Vitals у ранжуванні. В них, якщо ви пам'ятаєте, сайт PageSpeed займався тим, що підказував "найкращі практики", як YSlow колись: зроби менше джаваскриптів, збери в один файл цсс, дуже все базове.
А потім вони його навчили більш серйозним речам і придумали три метрики перформансу сайту:
• LCP — скільки часу до того, як на екрані з'явиться більшість фінального результату
• FID — затримка від кліка до того, як браузер почне щось робити
• CLS — % зміщення контента (під час завантаження)
У останньому вони може хотіли б і загалом міряти, на web.dev дуже кльова іллюстрація того, як зміщення контенту бісить, але це трохи складнувато повторювати.
Метріки доволі непогані насправді, і були однією з причин, чому я наважився Касту з реакту на твінспарк перероблювати — гугл її і так пеналізує за бізнес-модель, а ми ще й додаткові проблеми створюємо. Міряти це все, правда, гемор — спеціальна тулза під назвою Lighthouse (яка наче бекенд для PageSpeed) дуже широкий розброс дає, прям важко щось зрозуміти.
Натомість ми зробили собі CI, який раз на тиждень важливі нам сторінки кілька разів проходить Lighthouse'ом, і постить зранку інтегральний бал і посилання на подробиці у Слак. Що важливо, воно не десь в дешборді, який звичайні програмісти ніколи не відкриють — воно прям в них очевидно на очах прилітає, і коли значення того балу значно змінилося, то в кожного виникне питання, що там. Але треба стежити, щоб не зламалося, коли ти ламаєш перформанс — бо буде як на скріні Касти в грудні. 🤣
Продаж цієї історії бізнесу прямолінійна: конверсія, SEO-трафік, приємність для клієнта (вище шанси попасти у звички), новий сегмент клієнтів із повільними девайсами. Ну короч, перформанс — штука важлива.
Ну і є ще кльові чуваки treo.sh, які фактично продають отой CI, що я описав. І ще на шару дають симпатичний інтерфейс до бази вимірювань Гугла, тож можна легко подивитися, що робиться із сайтом останній рік. Дуже цікаво, ось подивіться скріншот. :-)
А потім вони його навчили більш серйозним речам і придумали три метрики перформансу сайту:
• LCP — скільки часу до того, як на екрані з'явиться більшість фінального результату
• FID — затримка від кліка до того, як браузер почне щось робити
• CLS — % зміщення контента (під час завантаження)
У останньому вони може хотіли б і загалом міряти, на web.dev дуже кльова іллюстрація того, як зміщення контенту бісить, але це трохи складнувато повторювати.
Метріки доволі непогані насправді, і були однією з причин, чому я наважився Касту з реакту на твінспарк перероблювати — гугл її і так пеналізує за бізнес-модель, а ми ще й додаткові проблеми створюємо. Міряти це все, правда, гемор — спеціальна тулза під назвою Lighthouse (яка наче бекенд для PageSpeed) дуже широкий розброс дає, прям важко щось зрозуміти.
Натомість ми зробили собі CI, який раз на тиждень важливі нам сторінки кілька разів проходить Lighthouse'ом, і постить зранку інтегральний бал і посилання на подробиці у Слак. Що важливо, воно не десь в дешборді, який звичайні програмісти ніколи не відкриють — воно прям в них очевидно на очах прилітає, і коли значення того балу значно змінилося, то в кожного виникне питання, що там. Але треба стежити, щоб не зламалося, коли ти ламаєш перформанс — бо буде як на скріні Касти в грудні. 🤣
Продаж цієї історії бізнесу прямолінійна: конверсія, SEO-трафік, приємність для клієнта (вище шанси попасти у звички), новий сегмент клієнтів із повільними девайсами. Ну короч, перформанс — штука важлива.
Ну і є ще кльові чуваки treo.sh, які фактично продають отой CI, що я описав. І ще на шару дають симпатичний інтерфейс до бази вимірювань Гугла, тож можна легко подивитися, що робиться із сайтом останній рік. Дуже цікаво, ось подивіться скріншот. :-)
Люди антикрихкі
Якось у твіттері попався тред, де чувак розмірковував над цікавим відкриттям — економія енергії не призводить до того, що її стає більше. Прямо навпаки, витрачання енергії призводить до того, що ти можеш робити більше наступного дня, тижня та місяцю.
Якщо задуматися, це дуже логічно: треба навантажувати м‘язи, щоб вони не атрофувалися, треба навантажувати мізки, і треба навантажувати силу волі.
Що дивно — м‘язи це загальновідома історія, мізки так собі, десь на рівні «після 60 хоча б треба кросворди розгадувати», а все інше взагалі вважається іншим.
Про силу волі я багато разів читав думки, що вона як ресурс: витрать більше на те, щоб не валятися у ліжку зранку, і тобі не вистачить потім її, щоби втриматися від солодкого ввечері.
При тому всьому згадайте оточуючих — найбільш жаліються на «не можу стриматися від булочки» ті, хто і так не сильно напрягається.
А з енергією є цікаве підтвердження у думці, що «найкращий відпочинок — зміна заняття». Бо тупити в екран і нічого не робити не призводить до бажання щось різко почати робити через тиждень. І навпаки, коли напружено працюєш, то через кілька днів відпочинку в отпуску вилазить бажання кудись бігти.
Якось у твіттері попався тред, де чувак розмірковував над цікавим відкриттям — економія енергії не призводить до того, що її стає більше. Прямо навпаки, витрачання енергії призводить до того, що ти можеш робити більше наступного дня, тижня та місяцю.
Якщо задуматися, це дуже логічно: треба навантажувати м‘язи, щоб вони не атрофувалися, треба навантажувати мізки, і треба навантажувати силу волі.
Що дивно — м‘язи це загальновідома історія, мізки так собі, десь на рівні «після 60 хоча б треба кросворди розгадувати», а все інше взагалі вважається іншим.
Про силу волі я багато разів читав думки, що вона як ресурс: витрать більше на те, щоб не валятися у ліжку зранку, і тобі не вистачить потім її, щоби втриматися від солодкого ввечері.
При тому всьому згадайте оточуючих — найбільш жаліються на «не можу стриматися від булочки» ті, хто і так не сильно напрягається.
А з енергією є цікаве підтвердження у думці, що «найкращий відпочинок — зміна заняття». Бо тупити в екран і нічого не робити не призводить до бажання щось різко почати робити через тиждень. І навпаки, коли напружено працюєш, то через кілька днів відпочинку в отпуску вилазить бажання кудись бігти.
Програмісти — дуже поверхневі. Як і всі нші люди, але то окрема проблема. 😁 Підтвердження тому — те, що ми працюємо в індустрії моди, та кількість коментарів про дужки під кожною згадкою Кложі. Здавалося б, у Кложі є дійсно важкуваті для пересічного сторони, але ні, нумо нити за те, що одразу впадає в око. :)
Системне рішення наразі бачиться тільки одне — фізичне насилля. 🤣 Тобто якимось чином широкому загалу пояснити різницю між «просто» та «легко» (див. Річа Хікі про Simple Made Easy).
Але доки всі цього не усвідомили — а нові програмісти з‘являються швидше, ніж старі розвиваються — треба з цим працювати. 😁 Це значить, що форма — дуже важлива (дивись ліспові дужки знов).
Ця думка не була мені очевидною років 15-20 тому, «бо важливіше сенс», і взагалі я сприймав прислів‘я «зустрічають по одягу» як критику суспільства. Але це не критика, це констатація факту, що на твою складну і глибоку натуру звернуть увагу тільки тоді, коли ти будеш нормально виглядати.
Тому оформлення коду — абсолютно критичне.
Так-так, я розумію, що я здалеку зайшов, як для такої загальноприйнятої точки зору — але я спробував написати одним махом за файний код і вийшов дуже сумбурний пост, тому давайте відкусювати по шматочку.
Один з інструментів розуміння коду — привести його до ладу. Коли є якийсь не дуже очевидний шмат коду, перейменовуєш пару змінних більш зрозуміло, трохи підправляєш стиль — і код стає ріднішим і зрозумілішим. У більшості випадків ці зміни можна викинути, якщо код був достатньо нормальним, або використати як перший крок до приведення проєкту до ладу.
Підлаштуватися під прийняті у проєкті стандарти теж важливо по тій самій причині: з використанням якихось підходів до них приходить звичка, вони стають легші, тому код стає легшим для читання.
В активному проєкті деякий відсоток змін у справному коді заради приведення його до новіших стандартів — імхо нормальне протікання життя. Він не повинен бути великим, але й зовсім не змінювати — небезпечно, бо проєкт стане накопиченням різних стилів.
А це захламлення. Накопичення різних стилів, підходів, використання різних бібліотек для одного й самого в різних місцях — це засмічування. А засміченмй проєкт — він як звалище, буде гнити в різних місцях і відбивати бажання зазирнути в окремі куточки. А то й взагалі.
Тому не соромтеся прибиратися.
Системне рішення наразі бачиться тільки одне — фізичне насилля. 🤣 Тобто якимось чином широкому загалу пояснити різницю між «просто» та «легко» (див. Річа Хікі про Simple Made Easy).
Але доки всі цього не усвідомили — а нові програмісти з‘являються швидше, ніж старі розвиваються — треба з цим працювати. 😁 Це значить, що форма — дуже важлива (дивись ліспові дужки знов).
Ця думка не була мені очевидною років 15-20 тому, «бо важливіше сенс», і взагалі я сприймав прислів‘я «зустрічають по одягу» як критику суспільства. Але це не критика, це констатація факту, що на твою складну і глибоку натуру звернуть увагу тільки тоді, коли ти будеш нормально виглядати.
Тому оформлення коду — абсолютно критичне.
Так-так, я розумію, що я здалеку зайшов, як для такої загальноприйнятої точки зору — але я спробував написати одним махом за файний код і вийшов дуже сумбурний пост, тому давайте відкусювати по шматочку.
Один з інструментів розуміння коду — привести його до ладу. Коли є якийсь не дуже очевидний шмат коду, перейменовуєш пару змінних більш зрозуміло, трохи підправляєш стиль — і код стає ріднішим і зрозумілішим. У більшості випадків ці зміни можна викинути, якщо код був достатньо нормальним, або використати як перший крок до приведення проєкту до ладу.
Підлаштуватися під прийняті у проєкті стандарти теж важливо по тій самій причині: з використанням якихось підходів до них приходить звичка, вони стають легші, тому код стає легшим для читання.
В активному проєкті деякий відсоток змін у справному коді заради приведення його до новіших стандартів — імхо нормальне протікання життя. Він не повинен бути великим, але й зовсім не змінювати — небезпечно, бо проєкт стане накопиченням різних стилів.
А це захламлення. Накопичення різних стилів, підходів, використання різних бібліотек для одного й самого в різних місцях — це засмічування. А засміченмй проєкт — він як звалище, буде гнити в різних місцях і відбивати бажання зазирнути в окремі куточки. А то й взагалі.
Тому не соромтеся прибиратися.
Стежите за історією із SVB (Silicon Valley Bank)? Це найбільший банк у Кремнієвій Долині, який обслуговує більшість стартапів. Тримати гроші в JP Morgan чи ще десь вважалося западлом, модні стартапи такою лажою не займалися. Деякі інвестфонди деякі вимагали в тебе мати рахунок в цьому банку, щоби дати грошей.
При тому він обслуговував і стартапи, і їх фаундерів — візьми іпотеку під оцінку свого стартапу, таке все: ну повний цикл всього. Ну і в співробітників, очевидно, дуже часто рахунок в ньому.
А вчора (в п’ятницю) туди ввели тимчасову адміністрацію і заборонили всі виплати. Доволі раптово і неочікувано, судячи по реакції всіх. :)
Історія така: за 20 і 21 рік депозити банку виросли з 62 до 190 млрд, і в банка виникла дуже неочевидна (для мене) проблема: як заробляти на такій сумі. Тобто їх стандартні методи залучення боржників не встигали за ростом депозитів, і вони лишалися з купою кешу, який не заробляв грошей — а відсотки по депозитам платити треба ж (ну і взагалі заробляти теж треба).
Це, як то кажуть, хороша проблема, щоб її мати — і банк вирішив то покупкою іпотечних контрактів. Якщо я наколупав правди, то середня доходність цих контрактів — 1.56%. Але ж FRS у 22 році підняв базовку ставку (і продовжив піднімати у 23) аж до 4.5%!
Тобто тепер можна було купити державні облігації США з доходністю вище майже в 3 рази! Авжеж, ціна на іпотечні контракти поїхала вниз, бо кому вони тепер треба. 😁 Це б не було проблемою, якби ніхто не забирав депозити — все одно іпотеки заплатили більше б грошей, ніж коштували, і все б зійшлося.
Але десь щось пішло не так, і в четвер банк оголосив, що продав своїх активів на 21 млрд $ із втратою 1.8 млрд, й о залученні додаткових 2.25 млрд боргів. Плюс пишуть, що ще 91 млрд по факту зараз коштує 79 млрд. Тобто дірка у 14-16 млрд? Схоже, ця новина і підштовхнула регулятора ввести тимчасову адміністрацію.
Вихлоп з того дуже неприємний: купа компаній із грошима в банку не може платити зарплати, бо всі виплати заморожені. Обіцяють до 250к розблокувати в понеділок, але це ж копійки для роздутих штатів долини. 😟
Додаткового фану додає те, що навіть коли в компанії гроші не у SVB — більшість компаній, які обслуговують виплати, все одно через нього працюють, і все зависло.
А ще компанія, яка забезпечує стейблкойн USDC (Circle) частину своїх грошей зберігала також там (3.3 з 40 млрд), і це сприяє конверсії usdc в анстейблкойн. 😁 Ми живемо у екстра-цікавий час, нажаль, але з приємного — може доведеться понаблюдати, як крешиться крипта. :)
Але як це буде розвиватися — важко вгадати. Здається схожим на повторення 2007-8 року? Масові скорочення наступного тижня? Хз. Здається, що вільних грошей на ринку стане ще менше.
При тому він обслуговував і стартапи, і їх фаундерів — візьми іпотеку під оцінку свого стартапу, таке все: ну повний цикл всього. Ну і в співробітників, очевидно, дуже часто рахунок в ньому.
А вчора (в п’ятницю) туди ввели тимчасову адміністрацію і заборонили всі виплати. Доволі раптово і неочікувано, судячи по реакції всіх. :)
Історія така: за 20 і 21 рік депозити банку виросли з 62 до 190 млрд, і в банка виникла дуже неочевидна (для мене) проблема: як заробляти на такій сумі. Тобто їх стандартні методи залучення боржників не встигали за ростом депозитів, і вони лишалися з купою кешу, який не заробляв грошей — а відсотки по депозитам платити треба ж (ну і взагалі заробляти теж треба).
Це, як то кажуть, хороша проблема, щоб її мати — і банк вирішив то покупкою іпотечних контрактів. Якщо я наколупав правди, то середня доходність цих контрактів — 1.56%. Але ж FRS у 22 році підняв базовку ставку (і продовжив піднімати у 23) аж до 4.5%!
Тобто тепер можна було купити державні облігації США з доходністю вище майже в 3 рази! Авжеж, ціна на іпотечні контракти поїхала вниз, бо кому вони тепер треба. 😁 Це б не було проблемою, якби ніхто не забирав депозити — все одно іпотеки заплатили більше б грошей, ніж коштували, і все б зійшлося.
Але десь щось пішло не так, і в четвер банк оголосив, що продав своїх активів на 21 млрд $ із втратою 1.8 млрд, й о залученні додаткових 2.25 млрд боргів. Плюс пишуть, що ще 91 млрд по факту зараз коштує 79 млрд. Тобто дірка у 14-16 млрд? Схоже, ця новина і підштовхнула регулятора ввести тимчасову адміністрацію.
Вихлоп з того дуже неприємний: купа компаній із грошима в банку не може платити зарплати, бо всі виплати заморожені. Обіцяють до 250к розблокувати в понеділок, але це ж копійки для роздутих штатів долини. 😟
Додаткового фану додає те, що навіть коли в компанії гроші не у SVB — більшість компаній, які обслуговують виплати, все одно через нього працюють, і все зависло.
А ще компанія, яка забезпечує стейблкойн USDC (Circle) частину своїх грошей зберігала також там (3.3 з 40 млрд), і це сприяє конверсії usdc в анстейблкойн. 😁 Ми живемо у екстра-цікавий час, нажаль, але з приємного — може доведеться понаблюдати, як крешиться крипта. :)
Але як це буде розвиватися — важко вгадати. Здається схожим на повторення 2007-8 року? Масові скорочення наступного тижня? Хз. Здається, що вільних грошей на ринку стане ще менше.
Більшу частину вчорашнього дня втратив на те, щоб виловити баг у своєму коді на фронті — в інтернеті купа обговорень схожих кейсів і всі рішають якимись дуже складними конструкціями. Врешті мені в діскорді відповів один з авторів бібліотеки — виявилося, що в мене екстратупий баг на бекенді.
Сенс в тому, що я скопіював приклад на Sqlite, який робив щось типу
Які з цього можна зробити висновки, окрім того, що фронт не завжди винен? 🤣
1️⃣ Проблема дуже схожа на те, що було б, якби нагенерити багато коду за допомогою GPT — я скопіював відносно багато (близько 100 рядків) коду з прикладів на беці та на фронті, і тупив в них. Коли GPT десь набреше як я, то трабла буде така. І здається, що в цьому місці типізація дуже не завадила б, правда? Динамічно типізовані мови зробили для того, щоб люди могли швидше писати — а нащо це нам, коли код пише кремнієве створіння?
2️⃣ При таких розкладах здається, що було б кльово мати нову мову, яка орієнтована максимально на простоту читання і дебаг (інтроспецію і все таке). Які претензії до хороших чи модних зараз мов зі статичною типізацією?
Zig — орієнтована на простоту написання людиною, здається що за мемліками у великій кількості кода стежити очима не дуже зручно.
Rust — borrow-checker достатньо складний для того, щоб коли ти тільки читаєш код, забагато розумової енергії на нього треба буде, і нюанси будуть вислизати. А ще я наблюдав якось на стрімі, як професійний програміст на Расті (у сенсі що він на роботі на ньому пише) запинує borrow-checker експериментами, а не роздумами.
Haskell — мене тут лінивість напрягає сильно, не зважаючи вже на те, що це ще більший екстрим зі складнощами абстрацій, ніж в Rust'a.
Ocaml може? Хз навіть, придумайте до чого приколупатися?
Авжеж отак здалеку хочеться і лаконічності (щоб не треба було продиратися через
Короч, запускайте фантазію, якою вам ввижається ідеальна lingua franca для перетину люди/LLM/CPU?
Сенс в тому, що я скопіював приклад на Sqlite, який робив щось типу
let row = db.get(q)
, і переробив на постгрес, отримавши let row = db.query(q)
. Чуєте, звідки вітер дує? db.query
повертає не row
, а якийсь результат, де треба брати result.rows[0]
. Ну авжеж JS не пікнув, а TS я там не сетапив, бо і ліньки, і не хочеться, і шо я, ніколи жсу не писав, чи шо? 😁Які з цього можна зробити висновки, окрім того, що фронт не завжди винен? 🤣
1️⃣ Проблема дуже схожа на те, що було б, якби нагенерити багато коду за допомогою GPT — я скопіював відносно багато (близько 100 рядків) коду з прикладів на беці та на фронті, і тупив в них. Коли GPT десь набреше як я, то трабла буде така. І здається, що в цьому місці типізація дуже не завадила б, правда? Динамічно типізовані мови зробили для того, щоб люди могли швидше писати — а нащо це нам, коли код пише кремнієве створіння?
2️⃣ При таких розкладах здається, що було б кльово мати нову мову, яка орієнтована максимально на простоту читання і дебаг (інтроспецію і все таке). Які претензії до хороших чи модних зараз мов зі статичною типізацією?
Zig — орієнтована на простоту написання людиною, здається що за мемліками у великій кількості кода стежити очима не дуже зручно.
Rust — borrow-checker достатньо складний для того, щоб коли ти тільки читаєш код, забагато розумової енергії на нього треба буде, і нюанси будуть вислизати. А ще я наблюдав якось на стрімі, як професійний програміст на Расті (у сенсі що він на роботі на ньому пише) запинує borrow-checker експериментами, а не роздумами.
Haskell — мене тут лінивість напрягає сильно, не зважаючи вже на те, що це ще більший екстрим зі складнощами абстрацій, ніж в Rust'a.
Ocaml може? Хз навіть, придумайте до чого приколупатися?
Авжеж отак здалеку хочеться і лаконічності (щоб не треба було продиратися через
FactoryBuilder factoryBuilder = new FactoryBuilder()
), і хорошої типізації, і, може, відсутності GC? Чи це я вже гоню?Короч, запускайте фантазію, якою вам ввижається ідеальна lingua franca для перетину люди/LLM/CPU?
Пам'ятаєте, я два місяці тому написав новий фреймворк для тестів?
Сьогодні мене вкусила муха і я зробив так щоби він тести міг запускати параллельно. Трохи шкода, що через це він розрісся до 140 рядків із 80 (це, правда, з парочкою додаткових фіч, які може й не дуже треба). Можна подивитися на сторінці з тестами Твінспарку, як воно працює.
Я, якщо чесно, сам дуже полюбляю, коли натрапляю на такі проєкти — в такій кількості кода значно простіше побачити ліс за деревами, а то всякі Мочі розрослися шо дурні, і розібратися у логіці важко. Тож якщо ви теж полюбляєте шось мінімальне, велкам почитати. 😁
P.S. Чекаю коментів, чому треба було взяти мочу, чи шо там. :-)
Сьогодні мене вкусила муха і я зробив так щоби він тести міг запускати параллельно. Трохи шкода, що через це він розрісся до 140 рядків із 80 (це, правда, з парочкою додаткових фіч, які може й не дуже треба). Можна подивитися на сторінці з тестами Твінспарку, як воно працює.
Я, якщо чесно, сам дуже полюбляю, коли натрапляю на такі проєкти — в такій кількості кода значно простіше побачити ліс за деревами, а то всякі Мочі розрослися шо дурні, і розібратися у логіці важко. Тож якщо ви теж полюбляєте шось мінімальне, велкам почитати. 😁
P.S. Чекаю коментів, чому треба було взяти мочу, чи шо там. :-)
Останнім роки у моїй бульбашці дуже пишно квітне любов до SQLite — до того, що люди декларують, що на цьому можна продакшен будувати, а як додаси litestream, то все, ховайся, яке життя добре буде.
Але SQLite ацтой для продакшена. Можливо колупати якісь невеличкі речі, зберігати там букмарки для файрфокса чи ще щось таке — це окей, але коли в тебе звичайна така веб-аппка на пару десятків сутностей, то я б краще жив не з ним, навіть якщо даних не дуже багато.
• Екстрабідна модель даних — на рівні JSON'у. Зберігай дати рядками, порівнюй як рядки, ура, фантастика. Привіт таймзонам, з якими кожен програміст дуже обережно працює. Йуху.
• Типізація дуже слабка. SQLite він трошки як жс чи там перл, він трошки пофігіст. Обережним треба бути тобі.
• Індекси по такій моделі даних, очевидно, теж не дуже багаті.
• Якщо в тебе не один процес, типу якоїсь жирної JVM, а стандартні пачки джанг/рельсів — капець конкурентний запис поламає життя. З JVM можна писати з одного треда і воно буде жити.
• Альтери не можуть зробити того, що може зробити
Насправді думаю, що вам це все очевидно. Але щось склайта забагато в інфопросторі, аж здається, що всі почали забувати: воно для того випадку, коли є 1 апка з 1 користувачем. А мінімальний двіж, як у вебі — і SQLite стане препоною.
А дані — це найголовніше, що у вас є. Змінити мову програмування простіше, аніж базу та модель даних. Вибирайте розсудливо: вибирайте постгрес. 😁
Але SQLite ацтой для продакшена. Можливо колупати якісь невеличкі речі, зберігати там букмарки для файрфокса чи ще щось таке — це окей, але коли в тебе звичайна така веб-аппка на пару десятків сутностей, то я б краще жив не з ним, навіть якщо даних не дуже багато.
• Екстрабідна модель даних — на рівні JSON'у. Зберігай дати рядками, порівнюй як рядки, ура, фантастика. Привіт таймзонам, з якими кожен програміст дуже обережно працює. Йуху.
• Типізація дуже слабка. SQLite він трошки як жс чи там перл, він трошки пофігіст. Обережним треба бути тобі.
• Індекси по такій моделі даних, очевидно, теж не дуже багаті.
• Якщо в тебе не один процес, типу якоїсь жирної JVM, а стандартні пачки джанг/рельсів — капець конкурентний запис поламає життя. З JVM можна писати з одного треда і воно буде жити.
• Альтери не можуть зробити того, що може зробити
create table
. Наприклад, add column <name> default ...
зробити неможливо. Тобі це не треба. 🤪Насправді думаю, що вам це все очевидно. Але щось склайта забагато в інфопросторі, аж здається, що всі почали забувати: воно для того випадку, коли є 1 апка з 1 користувачем. А мінімальний двіж, як у вебі — і SQLite стане препоною.
А дані — це найголовніше, що у вас є. Змінити мову програмування простіше, аніж базу та модель даних. Вибирайте розсудливо: вибирайте постгрес. 😁
Знаєте думку, що кожен програміст повинен написати свій власний блог-двіжок? В мене, як у сертифікованого CNO (Chief NIH Officer), це спрацювало просто perfect 5/7.
Byteflow
Років 15 тому, коли я почав у вільний від роботи та універу час колупати Джангу, я раптово усвідомив, що треба терміново замінити свій вордпрес із його гнусним пхп на щось із божественним пайтоном всередині! Виявилося, що рушіїв на пайтоні, а ще на джанзі — яка тоді була прям екстра-свіжа, ще року з моменту релізу не виповнилося — особливо й нема.
Ну там же ж нічо складного нема, тому я швиденько сів, придумав рушію назву Byteflow, і швиденько сів його писати. Воно спочатку ледве живе було, а потім я влаштувався працювати джанго-програмістом і байтфлоу дуже добре слугував як місце для експериментів та навчання, які потім можна було в робочий проєкт переносити. :) Навколо нього навіть зібралася невеличка тусовка (у джаббер-конфі), і це напевно було перше, що дало мені якусь впізнаваність у пайтон-ком’юніті. Було дуже приємно кілька разів на конфах почути, що люди розбиралися у джанзі, читаючи код Byteflow. 😊
Сорси не зберіг, нажаль. :(
Cyrax
За пару років воно мені набридло, а особливо — набирати пости в адмінці джанги. 😁 Плюс я надивився на Jekyll пана Моджомбо, і вирішив, що писати пости у редакторі, а потім їх один раз відрендерити — це супер, але у джекіла все якось цвяхами жоско прибито і це не тру взагалі. Тому я написав убер-екстенсібл генератор на пайтоні під назвою Cyrax (бо це мій улюблений персонаж у морталі, всіх поб’є, авжеж) — 2009 рік на дворі, щоби перспективу навести — і користувався ним кілька років.
І він до недавнього моменту був двіжком для Open Source Game Clones, доки мені не захотілося там зовсім хитро все розвернути і я просто написав кастомний скрипт на пайтоні.
Gostatic
Але у сайракса була трабла — це ж пайтон, а на дворі ще диски крутяться. Тобто в ноуті мене крутяться, авжеж, але все одно — ноут із SSD я собі ще не купив на цей момент. Тобто ця пайтон запускається стільки, скільки у мене нема терпіння — а ще потім там якась логіка, об’єкти бігають (все ж серйозно), час витрачають. Тож за 3 роки по тому я всівся писати двіжок на Go, щоби воно швидко все робило. Я прям серйозно до питання швидкодії, навчив його ре-рендерити тільки ті файли, які змінилися, плюс залежні від них.
Вочевидь розширяємості прямо кодом, як із пайтоном, зробити неможливо, але й прибивати цвяхами “оце блог-пости, а оце — окремі файли” (як джекіл та більшість інших) мені теж не хотілося. Тому я придумав make-подібний синтаксис: матчиш файли, кажеш від чого вони залежать, і правилами описуєш, що з тими файлами може відбуватися. Вийшло норм, а зі стеженням за файлами і гарячою перезагрузкою відчуття взагалі майже як live preview. :-)
Мож якби трохи займався маркетингом — зробив би сайт з нормальними доками і дизайном, трохи двіжував — воно було б популярніше, бо Hugo з’явився мало не на рік пізніше. Там правда в авторах більш відомі чуваки, тому хз, і взагалі історія не любить оцих “а може”. 😁
А ще по результатам пари рефакторингів я написав пост про свою любов до Go. З однієї сторони — трошки дивно, що я досі сапорчу апку, написану на мові, яка мені не дуже подобається. З іншого - вона добре для мене працює і вже написана, і тому якось мотивації знайти часу для переписування щось не виходить. Worse is better, класіка. :)
Якщо вам стало цікаво: github.com/piranha/gostatic.
Byteflow
Років 15 тому, коли я почав у вільний від роботи та універу час колупати Джангу, я раптово усвідомив, що треба терміново замінити свій вордпрес із його гнусним пхп на щось із божественним пайтоном всередині! Виявилося, що рушіїв на пайтоні, а ще на джанзі — яка тоді була прям екстра-свіжа, ще року з моменту релізу не виповнилося — особливо й нема.
Ну там же ж нічо складного нема, тому я швиденько сів, придумав рушію назву Byteflow, і швиденько сів його писати. Воно спочатку ледве живе було, а потім я влаштувався працювати джанго-програмістом і байтфлоу дуже добре слугував як місце для експериментів та навчання, які потім можна було в робочий проєкт переносити. :) Навколо нього навіть зібралася невеличка тусовка (у джаббер-конфі), і це напевно було перше, що дало мені якусь впізнаваність у пайтон-ком’юніті. Було дуже приємно кілька разів на конфах почути, що люди розбиралися у джанзі, читаючи код Byteflow. 😊
Сорси не зберіг, нажаль. :(
Cyrax
За пару років воно мені набридло, а особливо — набирати пости в адмінці джанги. 😁 Плюс я надивився на Jekyll пана Моджомбо, і вирішив, що писати пости у редакторі, а потім їх один раз відрендерити — це супер, але у джекіла все якось цвяхами жоско прибито і це не тру взагалі. Тому я написав убер-екстенсібл генератор на пайтоні під назвою Cyrax (бо це мій улюблений персонаж у морталі, всіх поб’є, авжеж) — 2009 рік на дворі, щоби перспективу навести — і користувався ним кілька років.
І він до недавнього моменту був двіжком для Open Source Game Clones, доки мені не захотілося там зовсім хитро все розвернути і я просто написав кастомний скрипт на пайтоні.
Gostatic
Але у сайракса була трабла — це ж пайтон, а на дворі ще диски крутяться. Тобто в ноуті мене крутяться, авжеж, але все одно — ноут із SSD я собі ще не купив на цей момент. Тобто ця пайтон запускається стільки, скільки у мене нема терпіння — а ще потім там якась логіка, об’єкти бігають (все ж серйозно), час витрачають. Тож за 3 роки по тому я всівся писати двіжок на Go, щоби воно швидко все робило. Я прям серйозно до питання швидкодії, навчив його ре-рендерити тільки ті файли, які змінилися, плюс залежні від них.
Вочевидь розширяємості прямо кодом, як із пайтоном, зробити неможливо, але й прибивати цвяхами “оце блог-пости, а оце — окремі файли” (як джекіл та більшість інших) мені теж не хотілося. Тому я придумав make-подібний синтаксис: матчиш файли, кажеш від чого вони залежать, і правилами описуєш, що з тими файлами може відбуватися. Вийшло норм, а зі стеженням за файлами і гарячою перезагрузкою відчуття взагалі майже як live preview. :-)
Мож якби трохи займався маркетингом — зробив би сайт з нормальними доками і дизайном, трохи двіжував — воно було б популярніше, бо Hugo з’явився мало не на рік пізніше. Там правда в авторах більш відомі чуваки, тому хз, і взагалі історія не любить оцих “а може”. 😁
А ще по результатам пари рефакторингів я написав пост про свою любов до Go. З однієї сторони — трошки дивно, що я досі сапорчу апку, написану на мові, яка мені не дуже подобається. З іншого - вона добре для мене працює і вже написана, і тому якось мотивації знайти часу для переписування щось не виходить. Worse is better, класіка. :)
Якщо вам стало цікаво: github.com/piranha/gostatic.
Там Кадді спражні інновації чинить, не те, що загниваючі альтернативи. 😁 Півроку тому (я теж не дуже уважно стежу, ггг) там вийшов реліз 2.6.0. В ньому купа просто приємностей, типу швидшого віддавання статики, готового до продакшену HTTP/3, HTTP 103 Early Hints, але є прямо life-changing штука.
Вони переробили свій код читання файлів з диску — раніше там було конкретно читання з диску, а зараз воно працює на абстрації, яка дозволяє мати віртуальні файлові системи (VFS). Вже є модуль для вбудовування сайту прямо у бінарнік Кадді, є зачатки конектору до S3, і взагалі можливостей дофіга і більше.
Приємно бачити, як проєкт розвивається.
Вони переробили свій код читання файлів з диску — раніше там було конкретно читання з диску, а зараз воно працює на абстрації, яка дозволяє мати віртуальні файлові системи (VFS). Вже є модуль для вбудовування сайту прямо у бінарнік Кадді, є зачатки конектору до S3, і взагалі можливостей дофіга і більше.
Приємно бачити, як проєкт розвивається.
Зайшов на OLX глянути як там поживають мої оголошення (нікому оптика для фуджика не потрібна, доречі?). А в них величезний банер “акція на рекламу”.
Нормальний наче банер, так? АЄОА: в ньому нічого не натискається. Іди шукай “Центр підтримки”, клацай там “Про нас”. 🤣
Взагалі, авжеж, OLX — ідеальний приклад мережевого ефекту маркетплейсів. Він тормозить, в нього не дуже добре працює пошук, він постійно вилогінює, мобільна апка не переживає відправлення в бекграунд (схоже стіки пам’яті жере, що айос її вилогінює при першій можливості) і не запам’ятовує місця…
Тобто хорошого наче особливо не налічиш — окрім того, що в ОЛХа величезна аудиторія. Фотік і три з п’яти об’єктивів продалися за день після публікації. І, здавалося б, візьми та зроби краще? Багато хто намагався, в тому числі й Evo із izi.ua, Фоззі з besplatka.ua — але вибити лідера з позицій фактично нереально. Не розумію взагалі, як це зробити, окрім якихось тектонічних зсувів або заходів із сусідніх позицій (скажімо, чому izi.ua, а не розвиток prom.ua?).
Це в принципі взагалі характерно для онлайну, бо в реальному світі завжди можна відкрити магазинчик ближче до дому чи в зручнішому місці, а в онлайні всі відстані однакові.
Нормальний наче банер, так? АЄОА: в ньому нічого не натискається. Іди шукай “Центр підтримки”, клацай там “Про нас”. 🤣
Взагалі, авжеж, OLX — ідеальний приклад мережевого ефекту маркетплейсів. Він тормозить, в нього не дуже добре працює пошук, він постійно вилогінює, мобільна апка не переживає відправлення в бекграунд (схоже стіки пам’яті жере, що айос її вилогінює при першій можливості) і не запам’ятовує місця…
Тобто хорошого наче особливо не налічиш — окрім того, що в ОЛХа величезна аудиторія. Фотік і три з п’яти об’єктивів продалися за день після публікації. І, здавалося б, візьми та зроби краще? Багато хто намагався, в тому числі й Evo із izi.ua, Фоззі з besplatka.ua — але вибити лідера з позицій фактично нереально. Не розумію взагалі, як це зробити, окрім якихось тектонічних зсувів або заходів із сусідніх позицій (скажімо, чому izi.ua, а не розвиток prom.ua?).
Це в принципі взагалі характерно для онлайну, бо в реальному світі завжди можна відкрити магазинчик ближче до дому чи в зручнішому місці, а в онлайні всі відстані однакові.
Магія
Здається, ми на свої очі наблюдаємо становлення абсолютної магії. ChatGPT і зараз іноді вражає результатами, а коли воно виросте і буде інтегроване з кожною кавоваркою, то в нас буде абсолютно фентезійний світ.
Побутово у всіх є доступ до магії, і дзеркальце вже не тільки каже, хто на світі всіх миліше, але й покращить тебе (власне для світу). Але є хобіти (чи лудіти?), зо копирсаються у грядочках, а є ельфи, які трохи краще розуміють світ і можуть досягнути більшого (prompt engineer).
А є й Гендальфи із Саруманами, які вочевидь роздуплили, як за допомогою чатжпт програмувати і для ельфів виглядають дуже серйозними людьми. За що біла мантія, цікаво, вміє не тільки чатгпт вмовити, а й сам регулярку написати?
Майари — себто люди, які вміють програмувати самі — чи то вже постаріли і розучилися (Саурон), чи кудись поникалися по норах (на Марс із Маском полетіли, чи шо).
Аж тут випадково у Гендальфа із Сауроном конфлікт за доступ до чатгпт — Саурон втратив свій епл воч і намагається відновити, щоби забанити Гендальфа та всіх інших у файрволі. Тим це не подобається, але самі вони принципів не розуміють і підписують хобітів спалити епл воч - останнього покоління, титановий, роздовбати молотком не виходить - у вулкані (тобто у доменній печі, але хобітам піди поясни).
А чи є якісь рпг, де апокаліпсіс відбувся розумовий, а не атомний? 😁
Здається, ми на свої очі наблюдаємо становлення абсолютної магії. ChatGPT і зараз іноді вражає результатами, а коли воно виросте і буде інтегроване з кожною кавоваркою, то в нас буде абсолютно фентезійний світ.
Побутово у всіх є доступ до магії, і дзеркальце вже не тільки каже, хто на світі всіх миліше, але й покращить тебе (власне для світу). Але є хобіти (чи лудіти?), зо копирсаються у грядочках, а є ельфи, які трохи краще розуміють світ і можуть досягнути більшого (prompt engineer).
А є й Гендальфи із Саруманами, які вочевидь роздуплили, як за допомогою чатжпт програмувати і для ельфів виглядають дуже серйозними людьми. За що біла мантія, цікаво, вміє не тільки чатгпт вмовити, а й сам регулярку написати?
Майари — себто люди, які вміють програмувати самі — чи то вже постаріли і розучилися (Саурон), чи кудись поникалися по норах (на Марс із Маском полетіли, чи шо).
Аж тут випадково у Гендальфа із Сауроном конфлікт за доступ до чатгпт — Саурон втратив свій епл воч і намагається відновити, щоби забанити Гендальфа та всіх інших у файрволі. Тим це не подобається, але самі вони принципів не розуміють і підписують хобітів спалити епл воч - останнього покоління, титановий, роздовбати молотком не виходить - у вулкані (тобто у доменній печі, але хобітам піди поясни).
А чи є якісь рпг, де апокаліпсіс відбувся розумовий, а не атомний? 😁
Вважайте, що я даю їм настоятися перед публікацією, але у п’ятницю вийшов новий подкаст RTFJ, з Олександром Чумаком з Уклону. З найбільш цікавого (для мене, хехе) там розповідь про те, як вони використовували MS Orleans — це такий фреймворк на базі моделі акторів для будування розподілених систем, а-ля Ерланг. Вікіпедія каже, що на ньому побудований бекенд для Halo.
Але це не все, про що я не розповів вчасно. 🤣 Кілька тижнів тому вийшов ще один випуск, про C++ з Олексієм Кучуком із Luxoft. В нас очевидно доволі різні погляди на питання (про плюси), але розмова вийшла ніжною. :) В коментарях жаліються, що нема конкретних рекомендацій про те, коли брати С++ — моя думка в тому, що це треба робити тоді, коли інші інструменти очевидно не підходять.
Enjoy!
Але це не все, про що я не розповів вчасно. 🤣 Кілька тижнів тому вийшов ще один випуск, про C++ з Олексієм Кучуком із Luxoft. В нас очевидно доволі різні погляди на питання (про плюси), але розмова вийшла ніжною. :) В коментарях жаліються, що нема конкретних рекомендацій про те, коли брати С++ — моя думка в тому, що це треба робити тоді, коли інші інструменти очевидно не підходять.
Enjoy!
YouTube
Архітектура Uklon. Про мікросервіси, MS Orleans, Actor model та Event-driven з Олександром Чумаком.
10-й випуск подкасту “RTFJ”, який виходить за підтримки продуктової ІТ-компанії Uklon.
Гість випуску Олександр Чумак – Solution Architect в Uklon. Наш ведучий Олександр Соловйов поспілкується з Олександром про мікросервісну архітектуру компанії, про те…
Гість випуску Олександр Чумак – Solution Architect в Uklon. Наш ведучий Олександр Соловйов поспілкується з Олександром про мікросервісну архітектуру компанії, про те…
Так от, вбудовували-вбудовували, да недовбудували — rolling restart зробити їм не-ручним способом неможливо. Шаблони є, керування контейнерами (хоч і не в основному пакеті) є, купа якихось фіч є — а адекватні юзкейси закривати так і не закриває. Все одно треба доставляти якісь керувалки процесами додаткові.
Що робити людині, яка не хоче будувати контейнери, але хоче деплой без переривання обслуговування?.. Давайте вигадаємо якийсь мінімальний солюшен. 😁
systemd
у свій час підняв неймовірний шквал емоцій у linux-ком’юніті — немалим чином через вбудовування всього, разом із керуванням кавоваркою. Мені здається, що достатньо людей і досі не відпустили цю історію.Так от, вбудовували-вбудовували, да недовбудували — rolling restart зробити їм не-ручним способом неможливо. Шаблони є, керування контейнерами (хоч і не в основному пакеті) є, купа якихось фіч є — а адекватні юзкейси закривати так і не закриває. Все одно треба доставляти якісь керувалки процесами додаткові.
Що робити людині, яка не хоче будувати контейнери, але хоче деплой без переривання обслуговування?.. Давайте вигадаємо якийсь мінімальний солюшен. 😁
Sideloading
Минулого листопаду вже вступив у дію закон, який змушує таких чувачків, як Епл, відкрити свої платформи для встановлення апок повз апстор (для sideloading’у тобто). Мені здається, що це фантастика. Епл не пускає дуже багато цікавих апок, в тому числі браузери (бо те шо є — це все обгортки для сафарі), торенти, і такий інший стаф. По-друге, для деяких апок відсутність 30% податку на кожну транзакцію може бути взагалі причиною для існування.
Тож у iOS 17 нас чекають кастомні апстори. :) Епік той самий, наприклад, може ще Стім якийсь, і, хочеться вірити, Setapp (панове з MacPaw, чекаємо ваших натяків в коментах :)). Це ж взагалі фантастика, і конкуренція може змусити Епл як комісію знизити, так і якість їх рев’ю підняти.
Ну і взагалі, конкуренція. Як тільки Епл зрозуміли, що сайдлоадінгу не уникнути, вони почали наймати у команду Сафарі — яка історично просто критично недоукомплектована порівняно з Хромом, ФФ та іншими. Почали трошки більше року тому, і весь рік Сафарі мав все кращі і кращі релізи, наразі з кульмінацією у 16.4 з більшим релізом, ніж за попередні років 10 (здається). Конкуренція — це дуже добре для нас. :)
Епл, авжеж, розповідає за сек’юріті. Чи є шанси на якісь проблеми? Та є, але здається, що не сильно більше, ніж наявне — сайдлоадінг ≠ руту телефону, і обмеження різних апі залишаються на місці. Маки куди більш “діряві” (якщо можна так сказати), і епідемій та руйнувань ми очевидно не наблюдаємо.
I’m excited, короч. :-) Хоч і є великі шанси, що прийдеться купляти європейські айфони (по дурним європейським цінам), щоби все працювало. Якщо США не приймуть аналогічний закон, авжеж.
Минулого листопаду вже вступив у дію закон, який змушує таких чувачків, як Епл, відкрити свої платформи для встановлення апок повз апстор (для sideloading’у тобто). Мені здається, що це фантастика. Епл не пускає дуже багато цікавих апок, в тому числі браузери (бо те шо є — це все обгортки для сафарі), торенти, і такий інший стаф. По-друге, для деяких апок відсутність 30% податку на кожну транзакцію може бути взагалі причиною для існування.
Тож у iOS 17 нас чекають кастомні апстори. :) Епік той самий, наприклад, може ще Стім якийсь, і, хочеться вірити, Setapp (панове з MacPaw, чекаємо ваших натяків в коментах :)). Це ж взагалі фантастика, і конкуренція може змусити Епл як комісію знизити, так і якість їх рев’ю підняти.
Ну і взагалі, конкуренція. Як тільки Епл зрозуміли, що сайдлоадінгу не уникнути, вони почали наймати у команду Сафарі — яка історично просто критично недоукомплектована порівняно з Хромом, ФФ та іншими. Почали трошки більше року тому, і весь рік Сафарі мав все кращі і кращі релізи, наразі з кульмінацією у 16.4 з більшим релізом, ніж за попередні років 10 (здається). Конкуренція — це дуже добре для нас. :)
Епл, авжеж, розповідає за сек’юріті. Чи є шанси на якісь проблеми? Та є, але здається, що не сильно більше, ніж наявне — сайдлоадінг ≠ руту телефону, і обмеження різних апі залишаються на місці. Маки куди більш “діряві” (якщо можна так сказати), і епідемій та руйнувань ми очевидно не наблюдаємо.
I’m excited, короч. :-) Хоч і є великі шанси, що прийдеться купляти європейські айфони (по дурним європейським цінам), щоби все працювало. Якщо США не приймуть аналогічний закон, авжеж.