✙rozho)))k✙🇺🇦
3.54K subscribers
202 photos
30 videos
1 file
558 links
Про автора: www.rozhkov.me/about
Про канал: www.rozhkov.me/about-full-of-hatred

Канал про все що не ІТ: @daily_rozhok
дірект: @xrozhokx
блог: rozhkov.me
Download Telegram
Чи добре бути поліглотом?

Серед "справжніх" інженерів популярна думка що програміст має вирішувати задачі, а вже яким чином—то справа десята. Наприклад в FAANG на співбесіді ти можеш писати код на будь-якій тобі зручній мові, а на проекті працювати з тим що вже там є, і це не обов'язково буде улюблений Python, на якому ти вирішувала літкод задачі.

Мовна спеціалізація нехарактерна для великих західних контор. Це у нас вакансія на Spring Boot 2.5.4 Developer бо треба продати клієнту експертизу вже і зараз.

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

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

Друге—це задоволення від роботи. Працювати з Ruby on Rails приємно. Я відчуваю це кожного разу. Код компактний, пишеться легко, інструментарій зручний. Свято а не робота. Чи можу я сказати, що маю таке ж задоволення від роботи з іншими мовами та платформами? Однозначно ні.

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

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

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

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

P.S.: Шурупокрут через рік вкрали охоронці будівлі, яку орендувала церква. Хотів зараз такий самий купити, а їх вже не роблять.

#інструменти #лайфстайл
permalink | donate
daily rozhok №10: getting back on track

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

Чудові новини—завдяки вам, Віталію, Олегу Миколайченко і спільноті @devopsengineer, та купі небайдужих людей, нам вдалось зібрати всю необхідну суму 💰 на пікап для ССО! Зараз шукаємо машинку і незабаром будемо відправляти її на фронт. Сьогодні @kapelan_it відвідує наших артилеристів у Бахмуті та Слов'янську🙏 Команда 🐶@freeanimals_ukraine🐱 планує поїздку з гуманітаркою до прифронтових міст.

Тим часом канал @daily_rozhok потроху відновлює свою роботу та готовий розважати вас п'ять днів на тиждень, з понеділка по п'ятницю, щоранку о 8:30. Ось добірка оповідок за минулий час:

Game the system — біди маркетплейсів. Заходиш на блаблакар щоб комфортно проїхатися на лакшері машині натомість пхаєшся в потний бус. Бо там вже немає людей одні контори.

Культура письма — черговий раз нию на засилля zoom-мітингів, короткий attention span людей, та синхронну комунікацію.

Ігнор — нарешті допер навіщо в icq/qip була кнопка інвізу.

Співбесіди на дивані — спостерігаю за обрядами найму у сусідній рекрутерській аґенції.

Хитрі ділові люди — як за ціну філіжанки кави сидіти в кафе цілий день.

Звукоізоляція — офісний вуайеризм проти волі. «Підслухано» на мінімалках.

Перенесли засідання — у вас палає срака коли час зустрічей раптово змінюється? У мене теж.

На тому все, наступного тижня у нас буде багато офісних історій. Хто вже скучив за офісом? Курилка, кава, ранкові новини, панянки на гучних каблуках, шум опенспейсу, столовка радянського зразку, докучливі колеги, «ти не зайнятий, можна запитати?», душні мітинг руми, ехо аудіоконференції, година на дорогу до БЦ ❤️❤️❤️

На тому все. Віримо в перемогу, донатимо на армію та волонтерам.

Тримаймося🇺🇦🇺🇦🇺🇦

P.S.: наш друг Жора портаксував два дні і кинув то невигідне заняття, пару місяців якось пробідкався, аж поки будівництво на якому він працював, відновилось. Так що Жора при грошах, цвіте та пахне. Дев'ятка на ходу, життя налагоджується👌 Тепер його мрія—стати популярним тіктокером і заробляти там гроші на стрімах (???)

P.P.S.: вчора ввечері з'явився запис нелюдських знущань над нашим полоненим. Вірю що негідник та все його оточення отримають достойну відплату. Попри ранкові ракети, це чергове нагадування що наша рософобія недостатня. Я думаю—якщо це попало на відео, то скільки такого залишилося поза кадром?

#daily_rozhok
permalink | donate
Щурячі перегони

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

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

На днях я вчергове перечитав пост чоловіка, який 4 роки працював у гуглі а потім пішов займатися своїми проектами. З самого початку він сумлінно працював. Потім, коли прийшов час збирати promotion package, виявилося що він працював може й добре, але не над тим, що було потрібно для підвищення.

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

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

Врешті, чоловік зрозумів що ловити нічого і вирішив звільнитися.

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

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

Все це робиться заради результату—більше грошей, «цікавіші» проекти, більша посада, але щоб шо?

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

Все це якась безглузда біганина. Звісно гроші та все інше потрібні, але за цим якось втрачаєш себе.

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

#робота
permalink | donate
Колективний ПТСР

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

Позавчора я дивився відос як на солдата падає ВОГ, сміявся вголос.

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

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

Я не дуже бачив війну. Найближче що було до нас то збитий у кілометрі калібр від якого відчутно похитнувся будинок, та свист тих самих калібрів по Артему. Сліди від ракет ППО у небі. Інші ракети по Києву. Робота нашої артилерії на околицях. Після «кроку доброї волі» та виходу росіян з півночі, ми їхали по розтрощеній Житомирській трасі, по зруйнованим Гостомелю, Бучі, Бородянці, Ірпіню. Колони спаленої російської техніки, фотка на танку. Та й по тому.

Дружина в Чернігівській області фоткається вже біля хвостовика від Точки У, та розповідає про смердючий труп москалика, якого кинули свої.

Люди приїздять до нас за кормом на X5, в ньому немає скла і дірки від куль. Питаю, “що це?”, “а то в нас росіяни стріляли, просто так” відповідають люди що дивом вціліли.

По радіо лунають пісні зі словами «джавелін» та «байрактар». „Доброго вечора, ми з України!”. Ведучий щиро бажає смерті окупантам. Всі медіа, все довкола просякнуте ненавистю до русні.

По всьому місту написи «русский военный корабль иди нахуй».

Сайти на яких можна замовити напис маркером на снаряді до M777. Теронліфанс.

На фронті мої друзі дитинства та юності. В березні два сини маминого одногрупника приїздять добровольцями до Києва. Ми забираємо їх та підвозимо трохи по місту. Через два місяці дізнаюсь що старший брат наступного дня сідає у гелікоптер і летить у Маріуполь, бо мав бойовий досвід. Вони долетіли, але зв'язок з ним зник и 99.99% що він загинув. Коли чую новину то мені від того стає недобре. Молодший брат залишився сам...

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

Зрада. Оточили Маріуполь. Відійшли з Попасної. Відійшли з Сіверськодонецьку. Відійшли з Лисичанська. Відійшли з Пісків. Пускаємо пакети по Антонівському мосту а він все ніяк не ламається. Постійні емоційні гойдалки.

Їдемо у Харків, по дорозі бачимо HIMARS. Радію наче доторкнувся до перемоги.

Непокоюсь що мало роблю. Донатити та волонтерити то не привілей а обов'язок. Грішми не відкупишся від ризику життям у окопі. Друг з-під Слов'янська телефонує і каже “як маєш роботу то сиди і працюй, тут є кому воювати”. Можливо скоро буду збирати гроші йому на гвинтівку, готуйте гаманці. У київських військоматах черги. Думаю що війна надовго і ми всі рано чи пізно підемо на фронт.

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

Всі вірять у перемогу. Бо інакше просто не може бути.
🇺🇦🇺🇦🇺🇦

#війна
permalink | donate
daily rozhok №11: 🦐

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

Хто рано встає, тому Бог дає — коли менше спиш то краще себе почуваєш, перевірено на собі.

Телеграмне жебрацтво — ефективно збираю лайки в соцмедіа.

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

Зігнуті спини — спостереження за 🦐 шкідливими тенденціями у коворкінгу.

Фотопослуги, копіювання, друк — зайшов зробити фото, а вийшла ціла історія в голові.

Ніякові погляди — палю людей довкола.

Електронні гроші легше витрачати — зливаю місячний прибуток однією кнопкою у приват24.

Асиметрична дискусія — за будь-яке твердження вимагаю пруфи або злився.

Робота під музику або в навушниках — сижу в тиші і вам раджу те саме.

Біде — дорвався до цивілізації.

На тому все, побачимось у понеділок!

P.S.: за 🦐 подяка мому товаришу, пану Зайцю, з котрим ми на обідах в салатеріях з'їли нескінченну кількість тих самих креветок.

P.P.S.: епопея з пікапом для Азову схоже підходить до успішного завершення! Новини незабаром.

P.P.P.S: я прочитав статтю Don't put yourself into a box (or why you shouldn't niche down prematurely as an online creator) і вирішив що призупиню дейлі рожок, натомість все те що йшло туди буду писати сюди.

#daily_rozhok
permalink | donate
Donate 1024 — бот для щоденного нагадування про донати

Зробив бота який щодня надсилатиме вам нагадування про донат. Потрібно розпочати діалог з @Donate1024Bot, та натиснути там команду /subscribe. Кожного дня бот буде обирати один із зборів які є у базі та пропонувати вам. Рекомендована сума донату — 1024 грн, звідси і назва. Оголошення про збори грошей додаються через краудсорс: пересилайте лінк на збір за допомогою бота і якщо все гаразд то він попаде до черги.

Це був елеватор пітч, а тепер трошки розгорнутіше.

Є проблема—я став менше донатити на потреби армії. Не хочу вкладати багато грошей у великі фонди, Притули, або ПЖ, більше цікавлять маленькі збори на конкретні підрозділи. Наприклад, підрозділу ССО на пікап, який ми робили раніше. Якщо зустрічаю збір на тих каналах які читаю, на дрон, на навушники, ще на щось, то завжди закидую туди грошей. Але такі збори в мому інфополі з'являються нечасто.

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

Моя дефолтна сума донату—1024 грн. Чому 1024? Мені здається що це хороша сума від якої не станеш біднішим, та яка буде суттєвою для збору. Наприклад щоб закрити 100 000, потрібно всього сто таких як я. В такому режимі на місяць буде витрачатися 30 тисяч гривень. Вважаю що будь-який айтівець з зп більше 3000$, а таких я переконаний тут багато, може вкластися у перемогу.

Ви можете донатити більше (2048, 4096) або менше (512, 256), на ваш розсуд.

FAQ:

Q: Навіщо донатити щодня? Хочеш витратити 1000$, закинь їх на початку місяця і май спокій.
A: Коли закидуєш раз на місяць то втрачаєш відчуття що робиш щось корисне і забуваєш про війну. Нагадування потрібні нам щоб не забувати про те, що хоча в Києві двіж йде повним ходом, люди гульбанять, щодня десятки наших найкращих людей гинуть на Півдні та Сході.

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

Q: Як ти перевіряєш що збір справжній?
A: Тут доводиться покладатися на довіру. Я зайду на сторінку збору та подивлюся що це живий акаунт який вже робив збори раніше, публікував звіти і так далі. 100% верифікакцію скаму я проводити не зможу. Бот видасть вам текст оголошення та посилання на першоджерело де ви самі можете переконатися що я не підмінив номер картки а волонтер—не скамер.

Q: Який алгоритм видачі оголошень?
A: select * from posts where posted_count = 0 order by random() limit 1

Q: Як ти відстежиш що був донат?
A: Ніяк, атрибуцію транзакцій зробити неможливо без того щоб пропускати оплати через мене а я фондом наразі ставати не збираюсь.

Q: Ось є PeoplesProject чим ти відрізняєшся?
A: Це фонд який бере збір, проводить через себе на нього гроші і звітує потім. Я ж просто беру лінки з фейсбуку, телеграму та ДОУ і видаю вам. «Агрегатор волонтерки».

👉@Donate1024Bot

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

Перший лінк прийде завтра.

Разом до перемоги! 🇺🇦🇺🇦🇺🇦

#війна #проекти #donate1024
permalink | donate
Новини Donate 1024: перші користувачі, безумовна підписка, верифікація, «статистика»

Всім привіт! Завдяки публікації на каналі ҐРУНТ бот @Donate1024Bot підключило собі багато користувачів—більше 200! Я був трошки неготовий до такого 😅. Дякую всім хто приєднується! Наразі в нас є 320 людей, тобто продукт комусь потрібен. Радий що моя гіпотеза підтвердилась.

Безумовна підписка

Перша зміна яку я зробив це спрощення «реєстрації». Тепер, якщо ви почали діалог з ботом, то він одразу вважатиме що ви хочете отримувати щоденні нагадування. Багато людей не зрозуміли або пропустили необхідність «підписки» після початку діалогу та запитали мене чому вони не отримали сповіщення. Тому замість явної підписки є явна відписка. Сьогодні вранці всі користувачі отримали нагадування, навіть ті хто не «підписався». Тому якщо ви не хочете отримувати нагадування, то натисніть /unsubscribe у боті. Прошу вибачення у тих, хто явно не підписався раніше, та кого я потурбував сьогодні вранці😓.

Верифікація зборів

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

«Статистика»

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

Що далі?

Додам верифіковані збори. Перероблю UI боту щоб були кнопки замість незручних команд. Додам функцію «поскаржитися на збір».

На тому все! Підключайтеся до @Donate1024Bot та приєднуйтесь до нашого щоденного марафону донатів!

#проекти #війна #donate1024
permalink | donate
Обери еміграцію.

Вибери безпеку. Вибери країну, вибери місто, вибери район. Вибери хороші дороги. Вибери роботу в автомотіві, зарплатну стелю в 4k євро та відсутність кар'єрних перспектив. Вибери малолітражку. Вибери іпотеку на 30 років під 2.5% та справно сплачуй внески. Вибери існування від зарплати до зарплати. Вибери прогресивний податок. Вибери садочок, вибери школу. Вибери кешбек та податкові вирахування. Вибери поганий сервіс та магазини що зачиняються о п'ятій вечора. Вибери тільки готівкове обслуговування. Вибери дорогий та неякісний інтернет. Вибери безліч заборон та обмежень на все навколо. Вибери сортування сміття. Вибери мігрантські квартали. Вибери круасан по 10 євро. Вибери мовні екзамени та процедуру отримання посвідки на постійне проживання. Вибери черги в лікарнях. Вибери мультикультуралізм. Вибери чесні суди та співгромадян-стукачів. Вибери літкод. Вибери багатомісячну підготовку до співбесід. Вибери behavioral interview. Вибери фаанг та ретельно працюй над promotion package. Вибери $500k. Вибери rest-and-vest, вибери картку революта, вибери стоки та ETF. Вибери пусті балачки, вибери розмови про гроші. Вибери студію за 6000$, вибери наркоманів на вулицях, вибери чужий культурний контекст. Вибери злочинність, вибери рівність, вибери дискримінацію, вибери толерантність. Вибери податкового адвоката. Вибери медичний туризм до Турції. Вибери джанк фуд, підписку на нетфлікс, надмірну вагу. Вибери спеку, вибери холод. Вибери мігрантські чати, вибери бюрократію, вибери паперову пошту. Вибери кілометрові гайди, вибери релокаціїні аґенції. Вибери бічування по різним квартирам, AirBnb та життя на валізах. Вибери прикордонника який візьме хабаря, вибери нічну мандрівку через ліс. Вибери петицію про скасування заборони на виїзд чоловіків. Вибери чат «повістки львів».

Але навіщо мені це все? Я не став обирати еміграцію, я обрав дещо інше. Чому? Жодних «чому». Які можуть бути «чому» коли є Україна та КВЕД 62.01?

🇺🇦🇺🇦🇺🇦

#кулсторі #війна #сатира
permalink | donate
Новини Donate 1024: статистика монобанок, реквізити, алгоритм видачі, спрощення UI

Того тижня я сумлінно працював над покращенням @Donate1024Bot. Зараз є 380 підписників з активованими сповіщеннями.

Спрощення UI

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

Реквізити

Номери карток та монобанок виділені в окрему секцію та відформатовані так щоб одним кліком копіювати номер картки.

Статистика монобанок

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

Алгоритм видачі

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

Врешті, враховуючи наявні дані я прийняв рішення залишити все як є: видавати всім один і той самий рандомно обраний збір. Наша потужність складає десь ~10 000₴ на день. В базі немає таких зборів, які би могли бути закриті цією сумою, тому вважаю що немає змісту робити якісь калькуляції та пріоритезації.

Моя ідея полягала в тому що я не роблю складного морального вибору. За мене це робить постгрес. Якщо би ми мали потужність в 300 000₴ то була б звичайно інша розмова бо дійсно виникла ситуація з закриттям збору за раз. Це класна проблема, і я б хотів її мати, але зараз це не так. Тому покладаємось на order by random().

Нотифікація користувачам про схвалення їх збору

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

Інстаграм та модерація зборів

Мені надіслали десяток зборів в інстаграмі, але я не можу їх подивитися бо інстаграм блокує мене і вимагає логін. Акаунту не маю, бо ношу шапочку з фольги. Також деякі інші пости я теж досі не перевірив. Тому прошу вибачення у тих хто чекає. Незабаром це питання буде вирішено.

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

На тому все!

Підключайте собі @Donate1024Bot, та долучайтеся до мене у марафоні щоденного донату в розмірі 1024 гривні на потребі армії!

#проекти #війна #donate1024
permalink | donate
До 31-ої річниці 🇺🇦Незалежності🇺🇦 допомагаємо ДОУ зібрати 31 мільон гривень на безпілотник PD-2

👉 https://dou.ua/forums/topic/39602/ 👈

Переходьте за посиланням, донатьте будь-яку суму, ставте + в коментарях, залипайте на прогрес бар! Лайк шер репост.

Я навіть встиг на мить увірватися до топ10 але швидко здав позиції потужним кабанчикам.

Також не забувайте донатити разом зі мною у @Donate1024Bot
Friendship ended with Heroku, now fly.io is my best friend.

Коли я починаю проект то завжди намагаюсь застосувати нову технологію. Для @Donate1024Bot я обрав дві таких: хостинг на fly.io та верстку з Tailwind CSS. І якщо остання завдала клопоту, то перша виправдала себе на 100%. Про це і розповім.

Вперше я натрапив на fly.io на HackerNews, де обговорювався їх блог-пост A Foolish Consistency: Consul at Fly.io. Я тоді прочитав цей матеріал і подумав “Нічого собі! Оце хлопці роблять рокет саєнс!”. Якщо коротко то Fly позиціонює себе як хостинг з точками присутності по всьому світу з мінімальним оверхедом на віртуалізацію.

Щоб досягнути цього вони побудували приватну IPv6 мережу між датацентрами по всьому світу з'єднану через WireGuard, для віртуалізації використовують Firecracker, а зверху написали купу софту яким тим всім керує, наприклад конвертер з Docker імеджів у Firecracker, свій DNS-сервер для гнучких гео-запитів і багато іншого цікавого. Рекомендую ознайомитись.

Останні місяці я платив за Heroku 60$. Значну частку рахунку складали adopt.ua та blogigram.com (сервіс що публікує пости з блогу в телеграм) які тягнули по 23$ кожний за дві віртуалки та постгрес. Донат бот теж потребував 2 процеси—вебсервер та воркер для бекграунд джоб. Збільшувати рахунок ще на 14$ мене якось ламало. Але і переносити існуючі проекти мотивації не було. Тому як тільки випала нагода, я вирішив протестувати fly.io.

Процес деплою аплікації докладно описаний в доках. Робота відбувається через CLI, навідміну від Heroku, де все можна наклікати у веб-інтерфейсі.

Перед початком роботи потрібно розгорнути Postgres кластер. Кластер немає обмежень по розміру бази, навідміну від Heroku що дає всього 10 000 рядків у Free Tier. Його можна приєднувати до потрібних аплікацій. Я швиденько то налаштував, потім підняв Redis, який потрібен мені для Sidekiq.

Далі просто. Fly працює з докер-контейнерами, тому вам треба або вже мати свій, або fly launch детектить що за мова та фреймворк використовується і генерує Dockerfile під вас.

Потім потрібно встановити секрети (ключі AWS і так далі) через fly secret set і нарешті fly deploy. Ця команда підніме ваш особистий безкоштовний білд-сервер, надішле туди сорци, збере докер імедж, і задеплоїть його.

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

Після першого деплою апки можна додати домени та сертифікати.

Через день я подивився у скільки мені то все обійшлося і був приємно здивований—я вліз у Free Tier і витратив лише пару центів.

Про мережу я розповім пізніше, але Fly мені так сподобався що я вирішив перенести туди всі свої проекти з Heroku. Сказано—зроблено. Завдяки тому що Heroku ефемерний, то мені потрібно було лише забрати звідти дампи баз.

Вчора я переніс останній проект—adopt.ua, довелось трошки повозитися з докер імеджом, бо там використовується старий вебпакер, але вреші все запрацювало. Мене приємно вразила швидкість роботи. Сайт став буквально літати. Можете поклікати котиків та оцінити.

Heroku це просто надбудова на AWS, тому він працює достатньо швидко, але зовісм не так як Fly, який розгортає ваші контейнери прямо на залізі. За рахунок цього вони по-перше, значно дешевші та по-друге, більш швидкодійні.

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

Якщо ви хостите свої проекти на DO/AWS/Heroku ще десь то наполегливо рекомендую подивитися на fly.io.

#проекти #інструменти
permalink | donate
Мережа у fly.io

Всі ваші сервери знаходяться всередині приватної IPv6 мережі. Всі регіони зв'язані у одну мережу, а гнучкий DNS дозволяє вам резолвити імена типу top<number>.nearest.of.<appname>.internal, який автоматично підбере вам найближчий інстанс. Втім мені воно не потрібно, в мене всі апки живуть у Франкфурті. Крім того доступно ще багато регіонів, навідміну від Heroku, у якого їх всього два.

За необхідності, кожен процес вашої апки (вебсервер і тд) може отримати зовнішній проксі-сервер щоб до нього можна було звертатися з інтернету. Але якщо це не потрібно (для воркерів та для баз даних), то все буде приватним. Heroku виставляє вашу базу даних голою дупою в інтернет, і захищена вона лише довжелезним паролем. Коли б я робив свою хмару, то теж би планував таку архітектуру—все приватне.

Щоб отримати доступ до приватної мережі, fly дає можливість підключатися до WireGuard гейтвеїв. Таким чином ви однією командою можете опинитися всередині своєї мережі. Нажаль, мені не вдалося налаштувати WireGurad на лінуксі так щоб він міг резолвити .internal DNS імена і я не інвестував в то багато часу, але на макбуках все має бути окей.

WireGuard це топ софт і набагато зручніший ніж OpenVPN та інші VPN рішення.

Якщо вам потрібно відкрити собі доступ лише до якоїсь частини ресурсів то команда типу fly proxy 15432:5432 rozhok-db.internal прокине вам тунель на локалхост. Власне поки я не знайшов часу розібратися з DNS то я так і прокидую собі базу з редісом та працюю.

“Але ж все це давно є в кубах та інфраструктурі навколо!”, вигукне досвічений читач. Звичайно є, але воно все тягне за собою сотні шарів непотрібних мені абстракцій.

P.S.

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

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

Fly позиціонують себе як платформу на якій інші можуть будувати свої PaaS та рішення, і вже навіть з'явилися такі компанії.

Сподіваюсь що мені вистачить мотивації, я відкину ідею піднімати свою оркестрацію та побудую свій продукт з ідеальним Developer Experience на вже готовій платформі яку дає fly.

#інструменти
permalink | donate
✙rozho)))k✙🇺🇦
Пікап для ССО Вітаю друзі! Нам вдалося зібрати вже ~360 000 грн! Залишилося зовсім небагато, давайте доб'ємо цей збір💰 Вчора я зустрічався з @kapelan_it, Віталієм (відомий у фронтенд колах), та двома бійцями ССО, які зараз повернулися з передової до Києва.…
Пам'ятаєте, ми збирали гроші на пікап для ССО? Разом з @kapelan_it, Віталієм та @devopsengineer вдалось зібрати більше 400000₴!

Ми вже купили повнопривідний Toyota Tacoma 2005 року та відремонтували його. На гроші що залишилися докупили якісні маскувальні сітки, газові балони, відбійний молоток, вітаміни, спеціальні одноразові душі, та покрили ТО ще одного авто підрозділу!

Пікап чекає на фарбування, після цього ми переоформимо його на баланс частини та відправимо на фронт.

Після відправки обов'язково відзвітуємо.

❤️‍🔥Дякуємо всім хто долучився, ви найкращі!❤️‍🔥
Новини @Donate1024Bot: дашборд та «пауза» на тиждень

🇺🇦Привіт усім!🇺🇦 Дякую активним донатерам, ви—найкращі❤️‍🔥! Згідно статистики монобанок наша потужність точно складає близько 10 000₴. Я думаю того тижня ми зробили непоганий внесок. Продовжуємо далі!

Дашборд

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

👉 https://donate1024.org/ 👈

Також там можна переглянути всі вже опубліковані збори та їх статистику.

«Не турбуйте мене наступні 7 днів»

Додав кнопку яка поставить бот на паузу на наступні 7 днів. Буває таке що зараз не до донатів, а блокувати бота або відписуватися не хочеться—бо потім забудеш. Якщо ви не донатите але хочете щоб вам нагадали про це пізніше—сміливо тисніть кнопку.

Дрібнички

Поправив UI кнопок, тепер зелена відмітка буде з'являтися тільки якщо ви натиснули кнопку «готово». Статистика монобанок буде автоматично оновлюватися у вашому повідомленні, і якщо ви задонатили то відразу, або з невеликою затримкою побачите зміну прогресу.

На тому все!

Підключайте собі @Donate1024Bot, та долучайтеся до мене у марафоні щоденного донату в розмірі 1024 гривні на потребі армії!

#проекти #війна #donate1024
permalink | donate
Істинна мотивація

Торік написав пост «Як прокидатися рано?». В мене тоді була якась цікава задача, я був заряджений на перемогу і мені не потрібно було себе «примушувати» прокидатися щоб розпочати роботу.

Задача закінчилась, мотивація повернулась на попередній навколонульовий рівень—працювати аби з голоду не померти.

Під час розробки @Donate1024Bot я знову відчув що таке справжня внутрішня мотивація. Перші декілька днів коли в мене ще не було крону, я робив розсилку вручну. Вже о 8 ранку я підривався і ледве примушував себе поспати ще годинку. В наступні дні я швидко біг до комп'ютера та дивився чи немає помилок у Sentry. Потім придумував що б ще такого зробити, статистика, монобанки, дашборд, оце все. Воно моє.

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

Я просто сідав і робив.

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

В чому секрет успішних кабанчиків? П'ять звичок багатіїв, сім способів доводити справи до кінця, топ три поради від фаундера єдинорога? Все це туфта. Секрет один—успішний кабанчик має багато причин прокидатися рано і працювати на повну.

Кабанчик успішний не тому що він рано встає або медитує. Ранній підйом це не причина а наслідок його успішності.

Що ви там, вже загримувались та готові до виступу у цирку під назвою дейлі стендап🤡?

#продуктивність
permalink | donate
Мікрооптимізації vs читаємість

Бот для управління чатом зроблений на Ruby on Rails. Для визначення команди використовується наступна конструкція: if command.downcase == "!ban"

.downcase тому що раніше на телефоні мав клавіатуру яка після знаку оклика піднімала регістр. Зараз вже не така, але регістро-незалежний код залишився.

У всіх Rails проектах для підтримання порядку використовую лінтер Rubocop. Крім форматування він ще підказуває ідіоматичні речі та перформенс проблеми. І от після чергового регулярного апдейту пакетів я проганяю рубокоп, а він мені і каже:

app/models/moderator_bot.rb:42:8: C: [Correctable] Performance/Casecmp: Use command.casecmp("!ban").zero? instead of command.downcase == "!ban".
if command.downcase == "!ban"
^^^^^^^^^^^^^^^^^^^^^^^^^^


Ну я такий думаю ок, зроблю rubocop -A, хай автоматом підставить те що треба. Зробив, забув.

Нещодавно додавав ще одну команду, дивлюся на той код, а він мені не подобається. Ну от уявіть, замість простого і всім зрозумілого downcase та == я тепер бачу сішне casecmp а потім ще й zero?. Треба пам'ятати що є така функція яка порівнює рядки, і якщо вони співпадають, то вона вертає 0, а якщо не співпадають, то щось відмінне від 0, можливо 1, а можливо і -1.

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

Comparison:
String#casecmp: 6948231.0 i/s
String#downcase + ==: 5017089.5 i/s - 1.38x (± 0.00) slower
String#casecmp?: 3686650.7 i/s - 1.88x (± 0.00) slower


Тобто «оптимізоване» порівняння рядків буде аж на 40% швидше! Ніби непогано! Але сама операція при цьому займає 200 наносекунд! Тих порівняннь у мене по коду п'ять штук далі. З одного боку я розумію що от з таких 50 наносекунд різниці тут і там, потім складається повільний веб, але не у моєму випадку тільки в базу сходити буде коштувати десяток мілісекунд.

Вони б ще туди інтрінсіки запхали, їй-б-гу.

Викинув те правило та повернув все на ==. Чого і вам бажаю.

upd: Уважний читач Ігор Є. помітив, що замість «п'яти порівнянь далі по коду» можна зробити extract variable. І хоча пост не зовсім про це, а більше про читаємість, маю зізнатися що тут я дав маху. Зовісм глупий став.

#робота
permalink | donate
Кислий виноград

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

«Та той порше жере 30 літрів, нашо воно треба?»
«Машина це просто засіб переміщення з точки А в точку Б. Мій кіа ріо нічим не гірший!»
«Та то панянка заробила не власним коштом а їй подарували за красиві очі!»
«Та то вона в кредит купила а сама бідкається!»
«Хаха порше, буде більше часу стояти на СТО!»
«Пф, жебрачка, на гелік не вистачило!»

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

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

Пропоную негайно це усвідомити та припинити брехати cобі й іншим, натомість старанніше працювати щоб наступного разу вже самому сидіти в тому порші, і не в Києві, а в Маямі.

Порше краще за шкоду. Хата в центрі або маєток за містом краще ніж бабусин хрущ на Борщазі. Айфон краще за хуавей. Багатим бути краще ніж «розумним» бідняком.

Такі справи.

P.S.: на півміри теж ні в якому разі не можна погоджуватися.

#лайфстайл #сатира
permalink | donate
Лояльність × Зона комфорту

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

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

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

У термінах концепції корпоративної динаміки що зветься «Gervais Principle», така лояльність а також належність до класу менеджерів середньої ланки зветься Cluelessness, тобто «Безглуздість». Така людина формує у собі збочене почуття лояльності до контори коли очевидно що контора не лояльна до неї. Працює за менші ніж на ринку гроші, готова поступатися власними інтересами заради інтересів компанії і так далі.

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

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

#робота
permalink | donate
Новини @Donate1024Bot: 📈графіки наповнення монобанок та дельта

🇺🇦Доброго ранку!🇺🇦 Чергова порція оновлень👇

Графіки монобанок

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

Для наочності зробив візуалізацію на дашборді. Синя частина графіку—це заповненість банки до публікації в боті та після публікації в боті. Жовтий—в період між публікаціями. Таким чином ви можете чітко побачити зростання балансу банки відразу ж після того як пост з'являється у боті.

Дельта

Маючи історичні дані по банкам я можу сказати скільки було зроблено донатів через бот. Потрібно просто взяти суму в банці на момент наступною публікації та на початок і отримати різницю. Цю різницю я назвав «Δ» і вона тепер відображається в боті та на дашборді. Маючи дельту та кількість користувачів які натиснули кнопку «готово» можна зробити висновки про середній розмір донату.

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

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

Вихідні

На вихідних бот не турбуватиме вас вранці, а відправить збір о 12 дня. Ця штука працює давно, але я забув про неї написати.

Кнопка «Дашборд»

Додав кнопку з посиланням на дашборд до картки збору у боті. Не всі читають канал і дивляться новини.

Експерименти

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

Конверсія

Я зробив для себе теплову карту донатів по якій видно що найбільше грошей приносить 5% користувачів які донатять стабільно. Інші 95% людей роблять один-два донати та відписуються. Power law на практиці. Незабаром додам її на дашборд.

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

На тому все

Підключайте собі @Donate1024Bot та приєднуйтесь до мене у марафоні щоденних донатів по 1024 гривні!

#donate1024 #проекти #війна
permalink | donate