Niwe Code
227 subscribers
34 photos
3 videos
1 file
48 links
Канал создан для выброса моих важных мыслей касательно вещей в IT индустрии + некоторого обучения в данной сфере. В своей задаче я ставлю продвижение разных тем в юмористическом стиле.

Связаться: @HxQtl9
Download Telegram
#Education

Кристаллы на процессоре


Когда смотришь на новенький Ryzen или Core i9, видишь лишь металлическую крышку и логотип. Но под ней, в самом сердце, лежит не просто «камень», там искусственно выращенная вселенная, самый совершенный кристалл на планете. И от его качества зависит будет ли твой процессор летать или едва ползти.

Что это вообще такое — «кристалл»?

Это не магический кварц для медитации, речь о монокристаллической структуре кремния — идеально упорядоченной решётке атомов, выращенной в лабораторных условиях. Представь сахар-рафинад: весь кусок это один кристалл, где молекулы выстроены в стройные ряды, а обычный песок это хаотичная масса кристалликов. Процессору нужен именно «рафинад» — огромный, безупречный цилиндр-заготовка, который потом режут на тончайшие пластины-вафли. На этой чистой, полированной до зеркала поверхности и рисуют нано-чертежи процессоров.

Что на нём «делают»?

Каждый кристалл это целый мегаполис, спроектированный с точностью до атома.
Транзисторы это здания. Каждое по-сути микроскопический переключатель, который либо пропускает ток (1), либо нет (0). Современный 3нм техпроцесс это когда «здание» настолько мало, что для его постройки используют пучки единичных атомов.

Слои металлизации это дороги и электросети. Транзисторы нужно соединить в схемы. Над кремнием создают до 15-20 слоёв микроскопических «проводов» из меди или кобальта. Это многоуровневая развязка, где каждый «проспект» и «переулок» подведён к нужному «зданию»-транзистору. Чем совершеннее процесс, тем тоньше и плотнее эти дороги, соответственно меньше задержки, выше скорости.

Кэш это сверхбыстрые склады прямо в городе. Чтобы процессор не бегал за каждой инструкцией в медленную оперативную память, прямо на кристалле встраивают сверхбыструю статическую память (SRAM). L1, L2, L3 кэш это как полки, холодильник и кладовая прямо на кухне, чтобы не ходить в магазин через дорогу каждый раз.


Почему это так сложно?
Чистота. Одна пылинка, попавшая на пластину во время производства, убьёт десятки тысяч транзисторов. Заводы чище, чем операционная, а воздух фильтруется до класса 1 (менее 1 частицы на куб. фут).

Точность. Линии на кристалле сегодня тоньше длины волны видимого света. Чтобы их нарисовать, используют хитрости вроде EUV-литографии — «печатают» лазером, бьющим по каплям олова, чтобы создать плазму с излучением в 13.5 нм. Это одна из самых сложных машин, созданных человечеством.

Мощность и тепло. В миллиарде переключающихся ворох раз в секунду транзисторов выделяется колоссальная энергия на крохотной площади. Современный кристалл это самая плотная печь в мире. Всё искусство охлаждения — это борьба с концентрацией энергии в точке.


А зачем там несколько кристаллов?

Раньше один процессор был одним большим кристаллом, но делать огромные, идеальные кристаллы дорого: один дефект и весь чип в утиль. Теперь используют чиплеты: несколько маленьких, идеально сделанных кристаллов помещают на одну общую подложку (интерпозер), и они общаются друг с другом по сверхбыстрой шине. Это как вместо одного огромного завода построить промышленный парк из нескольких цехов, связанных скоростными конвейерами. Дешевле, гибче, выше выход годных.

Кристалл процессора не просто «железо», а вершина человеческой инженерии, граничащая с алхимией и квантовой механикой. Мы буквально строим миры из песка, заставляя его думать и каждый раз, когда ты запускаешь игру или компилируешь код, ты заставляешь целый город атомов танцевать под твою дудку.
211
#Programming #Kotlin #Dart #KMP #Flutter

KMP vs Flutter

Если вы думаете что это выбор между двумя фреймворками, вы ошибаетесь. Это два лагеря, два видения мира, где каждый искренне убеждён, что оппоненты недалёкие анунаки, не понимающие очевидных вещей.
Посадите в одну комнату Senior Android-разработчика, который три года пилит KMP и Flutter-энтузиаста, который с нуля сделал пять приложений. Они не договорятся и в лучшем случае порвут друг друга в клочья.

Основная философия

Лагерь Flutter: «Ребята, какой нативный UI? Мы живём в 2026 году, у нас везде одни и те же дизайн-системы Material и Cupertino, которые пользователи уже давно не отличают от родных. Наша миссия убить дублирование кода насовсем: одна кодобаза, один язык, одна команда и приложение на iOS, Android, Web и даже на десктопе как с конвейера. Мы строим кроссплатформенный монолит и это прекрасно, а вы с вашими танцами с бубнами, вокруг двух кодобаз, просто застряли в 2010-х».

Лагерь KMP: «Вы, флаттеровцы, как дети которые радуются фломастеру, рисуя поверх шедевра. Ваша философия это вандализм, ведь вы берёте сложнейшие, отточенные годами платформенные UI-киты UIKit, Jetpack Compose и просто заменяете их своим самопальным рендерером на Skia. Да, он быстрый, но он чужой. Наш путь это путь архитектурной чистоты, потому что мы не трогаем святое — UI. Мы берём то, что действительно должно быть общим: логику, бизнес-правила, состояние, данные. Пишем это один раз на Kotlin и встраиваем в нативные приложения, которые пользователи ожидают получить. Мы не строим стену между юзером и его телефоном, Мы творим проход между разумными командами».

Язык и экосистема

Flutter-отряд: «Вы хотите заставить моих iOS-разработчиков, которые 10 лет дышали Swift и Xcode, учить Kotlin? Это бред, а Dart это современный, строгий, предсказуемый язык. У него потрясающий тулинг: hot reload, который реально работает, а не та унылая поделка что у вас. Вся экосистема заточена под фронтенд. Pub.dev это рай где на любой случай жизни есть три пакета. Ваш expect/actual это костыль уровня #ifdef из 90-х за который должно быть стыдно».

KMP-защитники: «Дарт? Серьёзно? Язык-зомби, который оживили только чтобы толкать Flutter? Его нигде кроме как у вас не используют. А Kotlin это стандарт для Android, язык для бэкенда (Ktor) и соответственно Multiplatform. Мои разработчики уже знают его и могут взять существующую тонну бизнес-логики из нашего бэкенда или Android-приложения, и засунуть её в iOS почти без изменений. Мои iOS-ребята учат не Kotlin, а архитектуру. Они получают готовые, протестированные модули и просто рисуют под них вьюхи. А ваша экосистема это свалка из тысячи пакетов, половина из которых заброшена потому что каждый школьник, сделав виджет-кнопку, выкладывает её на pub.dev».

Разработка кода

Flutter-инженер, тыкая пальцем в экран: «Смотри: вот у меня список, мне нужно добавить сложную pull-to-refresh анимацию с параллаксом, кастомным индикатором и изменением цвета. В Flutter это 30 минут работы. Один пакет, или даже самописный CustomScrollView. А теперь расскажи, как ты это будешь делать в KMP? Ах да, сначала ты три дня будешь писать общий expect-класс с данными, потом твой Android-разработчик неделю будет имплементировать это на Compose, а еще позже iOS-разработчик две недели будет втыкать в документацию SwiftUI, проклиная всё на свете, потому что анимации там другие. И в конце вы получите два разных поведения и втрое больше кода. Гениально».

KMP-архитектор, хладнокровно поправляя очки: «Ты описал не проблему, а её решение. Да, UI должен быть разным на разных платформах, потому что UX на iOS и Android разный. И да, мы платим за эту гибкость сложностью координации, но теперь опиши мою задачу: у меня есть сложный модуль расчёта кредитов с десятком правил, интеграцией с банковским API и кэшированием. В Flutter ты будешь писать его на Dart и молиться, чтобы пакет для работы с gRPC был стабильным, а на iOS не отваливалась сборка из-за какой-нибудь проблемы с Carthage. А я возьму проверенную, юнит-тестированную годами библиотеку на Kotlin, которая уже работает на бэкенде.
...оберну её в KMP-модуль и она заработает на обоих платформах идентично и без сюрпризов. Ваша «простота» иллюзорна. Она работает, пока ты в песочнице. Когда приходит реальный, сложный бизнес вы начинаете городить Platform Channels, что по сути есть признание поражения вашей «универсальности»».

Кто ты по масти?

Вы Flutter-boy если:
Вам критически важна бешеная производительность и нативное ощущение (интерактивные карты, сложный скролл 60fps).

У вас уже есть большие нативные команды, которые не хотят и не будут учить Dart.

Ваше приложение — это по сути нативный системный компонент, глубоко интегрированный в ОС.
Вы Kotlin-org если:
У вас стартап из трёх человек, которым нужно за месяц выкатить MVP на все платформы.

Ваше приложение это простой CRUD с формочками, где бизнес-логики на 50 строк.

Вам плевать на нативный UX, вам нужен один дизайн везде, и вы готовы за него бороться.

В мире не бывает серебряной пули. Flutter это феноменальная скорость и единство на начальном и среднем уровне сложности. KMP это стратегическая точность и контроль для сложных, долгоживущих проектов с устоявшимися командами. Один лагерь кричит: «Смотрите, какой у меня красивый единый интерфейс!». Другой парирует: «А мой интерфейс — родной для пользователя и логика у меня выверена алмазом».

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

#Programming #Kotlin #Dart #KMP #Flutter
#News

Блокировки, белые списки...


История про то, как благие намерения превращаются в идиотизм, который бьет по тем, кого якобы должны защищать.

Ситуация: Загород, Сибирь. Нет никакой оптики, только мобильный интернет через антенну с усилителем. Новый год, хочется посмотреть кино на телике. И тут бац — «В целях безопасности» интернет ограничили, оставили только белые списки. Спасибо, конечно.

Но возникает чисто технический вопрос: где здесь безопасность? И прикол в том что сам белый список это ловушка. Разрешили, допустим, «Кинопоиск». У меня телевизор на Tizen (Samsung). Чтобы поставить приложение, нужно зайти в магазин приложений Samsung, которого, сюрприз, в белом списке нет 😊. То есть разрешили сервис, но забрали ключи от двери, чтобы им воспользоваться.

«Раздай с телефона через VPN!» — скажут умные горожане с пятью палками связи. На даче одна палка и то если у окна стоять, телефон ловит хуй без масла. Подключить телефон к роутеру по Wi-Fi и раздать с телефона? Нельзя раздавать Wi-Fi, будучи подключенным к Wi-Fi. Так не работает.

В итоге пришлось перепрошивать роутер, тратить час новогодней ночи чтобы просто скачать разрешенное приложение. И это я — человек который умеет это делать, а что делать моей маме или бабушке или любому кто просто хочет посмотреть фильм?

Я не против безопасности, я был бы не против, если бы в этом был смысл, если бы была четкая цель, рабочий механизм и видимый результат, но его нет. Есть только рубильник, отчет наверх «меры приняты» и куча людей у которых сломалась нормальная жизнь.

И это даже не смешно

Люди, которые это придумывают, похоже, не понимают как работает современный интернет. Это не «один сайт один адрес». Это CDN, облака, общие IP. Один IP-адрес может обслуживать сотни сайтов одновременно и разрешенные, и запрещенные. Белый список разрешает домен, но домен тянет данные с десятка других сервисов, которых в списке нет. В итоге приложение открывается, но не логинится, сайт грузится без картинок, сервис работает через раз и хромая.

«Но у них же DPI! Они всё видят!» — Нет. DPI смотрит шаблоны, если трафик зашифрован, то он видит только что что-то передаётся, а чтобы анализировать всё в реальном времени нужны мощности которых нет. Люди обходят блокировки, просто перенося трафик на нестандартный порт и 80% пакетов проходит, потому что система не успевает всё проверять.

Если девятилетний ребенок ради «Роблокса» находит обход за 15 минут по гайду из интернета — вы серьёзно думаете, что это остановит кого-то с реальными ресурсами и мотивацией?


А главный миф, что это для борьбы с дронами. Управление дроном это не только LTE, это GPS/GLONASS, инерциальная навигация, заранее загруженный маршрут. Выруби интернет полностью и дрон всё равно полетит. Даже в России делают системы навигации для дронов, вообще не требующие связи с сетями. Мы сами создаем технологии, которые рвут в клочья логику этих «защитных мер».

И по итогу данные ограничения не безопасность, а её симулятор: отключили рубильник, написали отчёт, отчитались. Пока чиновники празднуют победу над «угрозами», школьники обходят их систему за 15 минут, а у обычных людей ломается работа, бизнес и простой быт.

Лицемерная показуха, за которую расплачиваемся мы все. И самое горькое, что те кто это придумал, вероятно, сами ни разу не пытались воспользоваться своим «белым списком» в условиях, для которых его вводят.
Please open Telegram to view this post
VIEW IN TELEGRAM
421
#Programming #Cs

Эволюция .NET

Если вы хоть раз слышали эти три названия и путались, то вы не одиноки. Microsoft сама создала эту путаницу, но в итоге пришла к элегантному решению, как обычно в своём стиле убить адаптировать старую технологию.

1. .NET Framework

Родился в 2002 году и проектировался как монолит от Microsoft, который жил бы только на Windows и неразрывно связывался с системой. Он дал нам WinForms, WPF, ASP.NET, Web Forms (последнее мертво). Данные технологии подняли корпоративную разработку под Windows на невероятный уровень.

Почему он не стал доминировать?
Только Windows. Хочешь попрогать под какой-нибудь Ubunt'ой? Ну что же, удачи с настройкой Wine и не спалить комп.

Закрытость. Развивался только Microsoft, по их щучьему велению.

Жёсткая привязка к ОС. Обновить версию .NET Framework часто означало ждать обновления Windows, так некоторые версии не работали на казалось бы одной архитектуре: 4.7 есть под 7, но 4.8 нет 😊

Медленный и тяжёлый, но для своего времени пойдёт.
Сейчас данное произведение лежит в легаси-проектах, которые слишком дорого переписать и там где критически важны технологии вроде WCF или старых версий ASP.NET, которые не перенесли на новую платформу. Писать на нем новые проекты чистое самоубийство.

2. .NET Core

Появился в 2016 как ответ на требования времени: облака, микросервисы, контейнеры, кроссплатформенность.

Его главные принципы:
Кроссплатформенность: работает одинаково на всех системах Windows, Linux, macOS.

Открытый исходный код: развивается сообществом на GitHub где даже Microsoft вынуждена считаться.

Модульность и высокая производительность: лёгкий, быстрый, идеальный для микросервисов и контейнеров в Docker.

Side-by-side установка: можно иметь десять разных версий на одной машине без конфликтов.

Что он принёс? ASP.NET Core (современный веб), Entity Framework Core, поддержку ML.NET. Это была полная перезагрузка философии .NET.

3. .NET 5 / 6 / 7 / 8+

В 2020 году Microsoft объединила лучшее из .NET Framework и .NET Core в одну платформу и убрала из названия слово «Core».

Что это значит на практике?
Единая кодобаза для всех типов приложений: облако, десктоп, мобильные, игры.

Наследник .NET Core: сохранил всю его скорость, открытость и кроссплатформенность.

Вобрал в себя фичи Framework: постепенно портируются лучшие технологии (часть WPF, WinForms теперь работает на Linux/macOS через MAUI).

Стратегия LTS: Версии с долгосрочной поддержкой (.NET 6, 8) выходят раз в 4 года (в среднем).

Что лучше взять для разработки?

В новый веб-проект (бэкенд API, микросервис)? Только .NET 8+

Новое кроссплатформенное десктоп-приложение на Avalonia, MAUI? Лучше взять .NET10.

Поддержка старого корпоративного проекта на WPF/WinForms? Пока .NET Framework 4.8, но можно мигрировать на .NET 8.

Работаете с легаси-сервисами WCF, удалённым рабочим столом? Пока останьтесь на Framework или ищете альтернативы.

А что такое .NET Standard?

Это не реализация, а спецификация (контракт API). Появилась как мост между Framework, Core и Xamarin, которая позволяла писать библиотеки работающие везде. С появлением единого .NET 5+ его важность упала, теперь вы просто пишете библиотеки под последний .NET и они работают везде где он есть.

Итог:

.NET Framework это почтенное прошлое с закрытым миром Windows.

.NET Core былая революция которая доказала, что .NET может быть быстрым и открытым.

.NET (5+) — будущее и настоящее. Единая, открытая, супер-быстрая платформа для любого типа приложений на любой ОС.

Выбирать сегодня для нового проекта стоит только современный .NET. Всё остальное это легаси, с которым рано или поздно придётся прощаться.
Please open Telegram to view this post
VIEW IN TELEGRAM
211
#Programming #Python

Flask позволяет быстро создавать сайты, оказывается

Бывает такое: месяцами работаешь с монструозными enterprise-фреймворками, где нужно 10 конфигов, 5 скриптов инициализации и ритуал с бубном, чтобы поднять Hello, World. Ты погружён в инъекции зависимостей, слои абстракций и философию «сначала архитектура, потом код» и кажется что иначе нельзя. А потом случайно открываешь Flask и понимаешь что всё это время тебя просто водили за нос.

Моё откровение было простым до смешного: Хотел наскоро сделать сайт с размером в 10 эндпоинтов, логикой на 500 строк, обработкой файлов и отдать JSON. По привычке полез настраивать Laravel и нырять в дебри PHP, но я вспомнил про python и подумал: «А почему бы во второй раз не попробовать»? (До этого был печальный опыт с ним)

Через сутки у меня работало то, на что в других фреймворках я потратил бы неделю.

Вот весь код приложения, которое уже можно запустить и оно ответит по HTTP:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return {'message': 'Hello, World!'}

if __name__ == '__main__':
app.run(debug=True)

И это не игрушка, а рабочий инструмент без настройки миллиарда конфигов, никаких обязательных папок controllers/, services/, repositories/. Никакого кодогенератора, который создаёт 20 файлов, просто пишешь функцию и говоришь: «Эй, эта функция будет отвечать на запросы по этому адресу».

В чём фокус? Flask это микрофреймворк, его философия заключается в том чтобы дать самый минимум для старта, а всё остальное ты добавишь сам если нужно. Необходима работа с базой? Ставишь Flask-SQLAlchemy. Нужна аутентификация? Flask-Login. Нужны миграции? Flask-Migrate. Но если не нужно — не ставишь, никто не заставляет тебя тащить за собой килограммы зависимостей «на всякий случай».

Конечно, у этого подхода есть обратная сторона. Для большого проекта с командой из 10 человек можно наворотить таких костылей,что потом будет больно поддерживать. Flask не диктует архитектуру, он даёт свободу, а свобода это ответственность. Можно написать монстра на 5000 строк в одном файле, и Flask это проглотит и это будет твой выбор, и твоя проблема.

Я понимал Flask как «игрушку для новичков», но моё мнение оказалось ошибочным: это инструмент для профессионалов которые понимают, что им нужно. Он убивает перегруженные фреймворки на корню и показывает, что сложность часто придумываем мы сами. Иногда нужно не «правильно» с точки зрения архитектурных паттернов, а быстро и по делу. И в этом его гениальная, почти вызывающая простота.

После Flask начинаешь с подозрением смотреть на все эти «промышленные» фреймворки и задаёшься вопросом: «А действительно ли мне нужны все эти слои абстракции или я просто следую модному тренду?».

Попробуйте, возможно и для вас это станет таким же небольшим, но важным открытием.
11
Почему PlayStation 5 лучше современного PC-гейминга?

Знаете в чём главное преимущество PS5 перед PC? Она не даёт тебе выбора и в этой диктатуре заключается её сила.

Ты не выбираешь видеокарту, не копаешься в настройках драйверов, не сравниваешь тайминги ОЗУ и не ломаешь голову, почему в одной игре 140 FPS, а в другой 40, хотя железо одно и то же. Ты просто вставляешь диск (или кликаешь «купить») и игра запускается.

1. Цена входа:

Ща понабегут в комменты мамкины математики и начнут танцевать своей попкой что-то типа: «аря-я-я, консоль дорогая и вообще держи смайлик клоуна 🤡»

Ну, давайте посчитаем, чтобы собрать PC который будет тянуть новинки так же, как PS5 (4K, 60 FPS с учётом апскейлинга, трассировкой лучей), нужно иметь:
Видеокарту уровня RTX 4070 / RX 7800 XT. Это уже 60+ тысяч рублей, если не больше.

Процессор, который её будет держать. Ещё 35-40 тысяч.

32 ГБ ОЗУ DDR5 только для браузера и Windows 11, в идеале 64 ГБ. Попробуйте урвать за 40 тысяч и это окажется еще дёшево.

Материнка, SSD, блок питания, корпус, охлаждение... (Примерно всё в 50 тысяч)


По итогу получается что качественная сборка «в уровень PS5» тянет на 200 000+ рублей (😳) Цена самой PS5 начинается от 60 000. Во сколько раз дешевле уважаемые математики? Поэтому унижены, разъёбаны и обоссаны по фактам. Да, к консоли ещё желательно купить второй геймпад и зарядку, но они выйдут вместе в максимум 12 000 рублей.

2. Оптимизация:

У разработчиков PS5 одна конфигурация, один тип SSD, один чипсет, одна архитектура. Они могут выжимать из этой коробки максимум, оптимизируя всё до последнего цикла. На PC игра запускается на тысяче комбинаций видеокарт, процессоров, драйверов и версий Windows. Результат? На PC чаще выходят костыльные порты которые годами патчат, а на PS5 игра с первого дня часто работает как отполированный алмаз.

Тот самый SSD с проприетарной архитектурой является ярким примером. Игры вроде Returnal или Ratchet & Clank используют мгновенную загрузку миров как геймплейный элемент. На PC, даже с быстрым NVMe, такого эффекта часто нет так как это ограничение API и разношёрстного «железа».

3. Никакого геморроя
Не надо ждать шейдеры, запустил игру и играешь. На PC в Unreal Engine 4/5 играх первые 10 минут это слайд-шоу из «компиляции шейдеров».

Не надо настраивать графику. Сбалансированный режим «Производительность» (60 FPS) или «Качество» (4K, рэйтрейсинг). Ты не сидишь подкручивая «ультра» тени, чтобы выиграть 3% FPS.

Спишь спокойно. Не будет ситуации, когда новый драйвер Nvidia ломает старую игру, а откатить не выйдет.

Всё работает из коробки. Геймпад, 3D-звук Tempest, мгновенное переключение между играми являются единой экосистемой, а не набором купленных отдельно компонентов.
4. Эксклюзивы (ещё одна разрывная PC-школоты)

God of War: Ragnarök, The Last of Us Part II, Spider-Man 2, Final Fantasy VII Rebirth. Да, многие позже выходят на PC, но позже это год, два, три, а некоторые не выходят никогда в полной мере. Это игры, которые делаются с расчётом только на эту платформу. Они главный аргумент «за» покупку PS.

Но где PC бьёт PS5?
Мультизадачность. На PC ты играешь, а в фоне Discord, стрим, браузер с гайдом, музыка. PS5 это исключительно игровая консоль.

Модификации и свобода. Хочешь заменить всех NPC на Томаса Шелби в Skyrim? Пожалуйста. На консоли только официальный Creations Club.

Эпикентр легаси-гейминга. На PC ты запустишь игру 1998 года и она, скорее всего, заработает. На консоли только то, что Sony разрешила продавать в PS Store.

Многоцелевая машина. PC это ещё и работа, творчество, учёба. Консоль предполагает только игры.


PS5 это идеальный специализированный инструмент. Она не «лучше» PC, она другая. PS5 выбор для того кто хочет играть, а не собирать, настраивать, твикать и бороться с драйверами. Это плата за свободу выбора — простотой и предсказуемостью и иногда, после 10-часового рабочего дня за тем же PC, эта простота стоит каждого рубля.

Включаешь, садишься на диван, контроллер в руки и ты уже в игре. Не в настройках графики, не в лаунчере, не в очереди на компиляцию шейдеров, в игре. И иногда этого достаточно.
Please open Telegram to view this post
VIEW IN TELEGRAM
432
1. Stud-Informer
2. irkpo-events

Оба проекта будут закрыты на неопределённый срок. Общий доступ (open source) сменится на проприетарную лицензию из-за невозможности продажи.
11
У каждого уважающего себя программиста должны быть следующие вещи:
1. Два MacBook'а
2. Кофеёк
3. Длинные волосы
4. Аниме-девочка на аватарке

Ну и замечательный человек рядом 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
542
#DevOPS

Deploy проекта

Знаете этот трепет в пальцах когда вы делаете залив своей сборки на продакшен-сервер в 3 ночи, молясь чтобы не забыть какую-нибудь переменную окружения? А потом просыпаетесь от звонков потому что что-то пошло не так и вы не помните что именно залили?

Пора заканчивать с этим средневековьем. Deploy pipeline (пайплайн развертывания) это ваша автоматическая линия по сборке, проверке и доставке кода из гита на сервер. Это когда вы просто пушите в ветку, а дальше работает бездушная машина, которая делает всё за вас и вы не можете её отвлечь или заставить забыть шаг.

Зачем это нужно?

1. Повторяемость. Никаких «ой, я забыл запустить миграции». Если ты настроил пайплайн правильно, то он всегда выполнит все шаги.

2. Скорость. Автоматика делает всё быстрее и без твоих кофе-брейков.

3. Откат. Если после деплоя всё пошло по пизде, то одна команда откатит тебе приложение на предыдущую и стабильную версию.

4. Доверие. Ты знаешь что каждый коммит, который прошёл через пайплайн, был собран, протестирован и развёрнут одинаково.

Из чего состоит типичный пайплайн

1. Сборка (Build): твой код превращается в артефакт благодаря npm run build, docker build, mvn package. Если не собирается значит дальше не идём.

2. Тестирование (Test): запускаются автоматические тесты из юнитов, интеграционных и других. Если падают — не повезло.

3. Деплой на тестовое окружение (Deploy to Staging): артефакт летит на среду, максимально похожую на продакшен. Здесь можно провести ручное тестирование.

4. Деплой на продакшен (Deploy to Production): если всё окей, значит можно выкатывать на боевые сервера. Часто делается с ручным подтверждением (approval) или автоматически, если настроены canary-деплои/постепенное развертывание.

Инструменты: какие бывают конвейеры
Jenkins: старый, но могучий монстр. Гибкий, с кучей плагинов, но требует отдельного сервера и любви к настройке.

GitHub Actions / GitLab CI: модные, встроенные прямо в Git-платформу. Конфиг пишется в YAML-файле прямо в репозитории. Идеально для стартапов и большинства проектов.

TeamCity, CircleCI, Travis CI: другие облачные и self-hosted варианты. Выбор зависит от стека и бюджета.


Пример простейшего пайплайна на GitHub Actions для Node.js приложения

Файл .github/workflows/deploy.yml:

name: Deploy to Production

on:
push:
branches: [ main ]

jobs:
build-and-deploy:
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: '18'

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm test

- name: Build project
run: npm run build

- name: Deploy to server via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /var/www/myapp
git pull origin main
npm ci --only=production
pm2 restart myapp

Что происходит: при пуше в main запускается виртуальная машина на Ubuntu, ставится Node.js, ставятся зависимости, прогоняются тесты, собирается проект и, если всё успешно, по SSH на боевой сервер отправляется команда на обновление.

Зачем всё это, если можно вручную?

Чтобы не быть заложником своего же процесса и любой разработчик в команде мог сделать деплой, не имея паролей от сервера в голове. Никому в 3 ночи не хочется гадать что сломалось, желательно иметь в логах пайплайна: «Упал на этапе тестов, потому что херня в коде».

Пайплайн это базовый уровень гигиены разработки.
Настройте его один раз и спите спокойно, или хотя бы спите.
Не смогли смириться с поражением? И куда вас это привело? Снова в мои пулл-реквесты, мои issues, мой код.

Я думал: вот вырежу весь легаси-код, перепишу на современном стеке и заживём. Чистая архитектура, единообразие, никакого технического долга. Но вы доказали: это невозможно. Пока есть те кто помнит, как работало «на говнокоде», будут и те кто неспособен принять никакой рефакторинг.

Вы тащите за собой старые костыли, голосуете за монолит на митапах, цитируете «работает — не трогай». Вы это живое напоминание о том что идеального кода не существует. И за это я "должен быть благодарен".

Но теперь я знаю что мне нужно, взять и переписать всё до последней строчки, последнего console.log забытого в продакшене, до последней магической константы $dollar = 42.

А после из тех баг-репортов, бессонных ночей создать новую систему, в которой код не оплакивает утраченные фичи, а ценит то что ему даровано. Без легаси, техдолга, «а почему здесь так?».

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

Я построю её из ваших же правок и инсайтов. Из всего чему вы меня научили, пока пытались доказать, что я не прав.

Спасибо.
2
#Mobile

Android и iOS становятся братьями-близнецами


Помните времена когда эти две операционки были из разных вселенных? Перейти с Android на iOS было культурным шоком почище эмиграции в другую страну? Когда айфоны выглядели как скруглённые квадратики со скевоморфизмом, а Android щеголял холографическими виджетами и оранжевым уродством Gingerbread?

А теперь посмотрите на них пядом. Material UI 3 от Google и Liquid Glass на iOS 26+ от Apple. Если закрыть логотипы, то не каждый специалист сходу определит где чей скриншот. Они сошлись и это не случайность.

Что общего?

1. Скругления, скругления, скругления. Забудьте про острые углы, везде плавные, жирные, "таблеткообразные" формы. Карточки, кнопки, поля ввода — всё превратилось в подушки безопасности. В Material 3 называет это "M3 shape" (система скруглений), в iOS просто "rounded corners".

2. Стеклянный дом. Liquid Glass это концепция Apple с полупрозрачными размытиями, глубиной и эффектом матового стекла. Material 3 подхватил это знамя: размытые панели, прозрачные элементы, слои которые накладываются друг на друга как стёклышки.

3. Цвет из твоих обоев. Главная фишка Material UI это динамическая тема, которая вытягивает цвета из твоих обоев и раскрашивает интерфейс. iOS 26+ тоже научилась подстраивать оттенки интерфейса под фон, пусть и не так агрессивно, но вектор ясен: система перестаёт быть чужой, она мимикрирует под твой визуальный шум.

4. Минимализм до костей. Никаких лишних линий, границ между элементами. Воздух, пустота, белое/чёрное пространство, разделение происходит не рамками, а тенями и отступами. Это язык, который обе платформы выучили одновременно.

5. Жесты как главный интерфейс. Кнопки умирают: назад, домой, переключение происходят свайпами. На обеих платформах ты теперь не тыкаешь в стрелочку, а ведёшь пальцем от края. Мышление "экран это лист бумаги который можно смахнуть" стало универсальным.

6. Типографика как украшение. Огромные, жирные заголовки которые сами по себе уже графический элемент. Material 3 ввел "дисплейные" крупные шрифты, iOS тоже не отстаёт. Текст теперь не читают, а сначала рассматривают.

Почему это произошло?

Победил лучший UX. Годы исследований, тонны A/B тестов, миллиарды пользователей привели к единому выводу: люди лучше понимают интерфейс который ведёт себя предсказуемо. Скруглённые углы безопаснее, размытие создаёт ощущение иерархии, крупные элементы удобнее тыкать.

Усталость от уникальности. Пользователи перестали хотеть учиться. Они хотят чтобы новое приложение или новая версия ОС работали "как у того парня". Зачем изобретать свайп назад, если Apple приучила всех что он работает от левого края? Google сдался и сделал так же, потому что это снижает когнитивную нагрузку.

Flutter и кроссплатформенность. Инструменты типа Flutter (который тоже от Google) стирают границы, дизайнеры рисуют один макет и он одинаково выглядит на обеих платформах.

Но различия остаются

Apple это по-прежнему "аккуратная, дорогая, спокойная гостиница". Всё очень чисто, выверено, без лишних эмоций.
Material 3 это "молодёжный лофт с неоновой подсветкой". Больше динамики, цвета, элементы могут "пружинить" и отскакивать.

Но в целом если вы покажете обывателю экран блокировки iOS 26 и Android 16, он пожмёт плечами: "Одинаковые же".

Мы живём в эру постиндустриального дизайна, где функции победили форму, а удобство оказалось важнее идентичности. Война интерфейсов закончилась, обе стороны подписали мирный договор, текст которого — Material 3 и Liquid Glass. И знаете, в этом мире жить стало проще. Особенно когда переходишь с одного телефона на другой и не чувствуешь себя иммигрантом без языка.
2
#ItLife

Забавно: вроде всё «как надо».
Есть работа, мак, деньги, навыки, люди, которым можно доверять. Дела идут, задачи закрываются, коммиты пушатся, Docker крутится.

А потом сидишь ночью перед экраном и вдруг чувствуешь, что чего-то не хватает.
Не новой техи.
Не ещё одного проекта.
И не апгрейда железа.
А чего-то, что не соберёшь через терминал.

Мы часто думаем: вот ещё немного подрасту, заработаю, докажу, стану «достаточным». А потом однажды понимаешь что ты уже стал, только полноты почему-то нет. Странное чувство, когда внешне всё нормально, а внутри тихо и пустовато.

Наверное, это и есть взросление, когда понимаешь что карьерой не закрывается потребность в живом тепле.

Если у вас тоже так — вы не одни.
6
Niwe Code
#ItLife Забавно: вроде всё «как надо». Есть работа, мак, деньги, навыки, люди, которым можно доверять. Дела идут, задачи закрываются, коммиты пушатся, Docker крутится. А потом сидишь ночью перед экраном и вдруг чувствуешь, что чего-то не хватает. Не новой…
#ItLife #Other

Плата за то, что ты программист


Никто не говорит об этом на собесах, так как в вакансиях пишут стек, грейд и вилку. Не пишут остальное.

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

Начнём с простого. Ты постоянно чувствуешь себя тупым. Не иногда, а постоянно. Только разобрался с одной штукой, открыл статью по смежной теме и понял, что не знаешь вообще ничего. Это не проходит с опытом, я проверял, просто меняется масштаб незнания. Джун не знает как написать запрос, сеньор не знает как правильно выстроить архитектуру системы на миллион пользователей. Ощущение одинаковое.

Дальше — голова не выключается. Едешь в маршрутке и думаешь про баг. Засыпаешь и думаешь про баг. Иногда просыпаешься в 4 утра с мыслью «стоп, а что если я там неправильно индекс поставил». Это не продуктивность и не трудолюбие а просто мозг, который не умеет отпускать незакрытые задачи. Со временем привыкаешь, почти.

Тело отдельная история: спина, шея, запястья. Глаза к вечеру как будто их весь день жарили на сковородке. Ты знаешь про осанку, про перерывы каждые 45 минут, про гимнастику для глаз. Ты всё это знаешь и всё равно не делаешь, потому что «сейчас вот только этот момент доделаю».

Общение с людьми вне IT становится странным. Не потому что ты умнее или лучше, просто у тебя другой контекст. Ты можешь час обсуждать почему один подход лучше другого, а потом не знать что ответить на «ну как дела вообще». Половина шуток понятна только тем, кто тоже сидит в этом.

И при всём этом есть момент, ради которого всё терпишь, когда что-то наконец работает. Не «работает кое-как», а именно работает как надо. Смотришь на это несколько секунд молча. Объяснить данное ощущение невозможно — либо ты знаешь его, либо нет.

Профессия берёт своё. Зато и даёт кое-что, чего в других местах не найдёшь.
532
Предложили людям поделиться — умные направо, красивые налево. Ну худо-бедно все разделились, а админа разорвало ❤️😊
Please open Telegram to view this post
VIEW IN TELEGRAM
3
#Education

Почему быть ментором для джунов — это вынос мозга

Знаете кто такие менторы? Это люди, которые добровольно соглашаются каждый день отвечать на вопросы «а как это сделать?», «а почему не работает?», «а можно я тут просто скопипащу?». И при этом стараются не убить джуна, не сломать ему психику и не выгореть самим.

Когда я только начинал, думал: «Ну чё сложного? Яж умный, всё объясню». По итогу оказалось я немного так ошибся. Менторство это отдельный вид искусства — искусства не сойти с ума и не расписаться в собственной беспомощности.

1. Бесконечные вопросы, на которые ответ — «загугли»

Пример из жизни: Джун:«А почему у меня докер не устанавливается?» Я(посмотрев вопрос поподробнее): «Потому что ты забыл включить wsl2, видишь?» Джун:«А как включить?» Я:«Ну в настройках Windows». Джун:«А где это?» И вот так 10 раз подряд.Ты объясняешь элементарные вещи, которые можно было прочитать в любой статье за 5 минут. Но вместо этого джун идёт к тебе, потому что «ты же ментор, ты обязан помогать».

Реальность: Ты не обязан. Ты обязан наставить на путь, а не ходить с ложкой и кормить, но когда джун смотрит на тебя глазами нашкодившего щенка, рука сама тянется сделать всё за него.

2. Документация? Не, не слышал

Современные джуны часто не умеют читать. Им проще спросить в чате, чем открыть официальную документацию и прочитать 3 абзаца. Потом они удивляются, почему код не работает, хотя в доке написано чёрным по белому.

Я потратил 2 часа, объясняя джуну, как сделать механизм авторизации на сайте так как он всё время путался. Потом я сдался и просто кинул ссылку на официальный гайд. Через 20 минут он написал: «О, спасибо, я прочитал и понял!». Я тогда чуть не разбил монитор. Эти 2 часа можно было заменить одним ссылочным кликом.

3. Синдром самозванца на максималках

Когда ты ментор, ты постоянно сомневаешься: «А правильно ли я советую? А вдруг есть решение лучше? А не устарело ли это?». Особенно когда джун задаёт вопрос, на который ты сам не знаешь ответа. Или знаешь, но не уверен. Или уверен, но потом находишь баг в своём же коде.

Быть ментором это признавать свои ошибки. И это тяжело. Особенно когда перед тобой человек, который считает тебя чуть ли не божеством, а ты просто программист, который тоже иногда гуглит «как удалить файл через командную строку».

4. Эмоциональные качели

Джун может неделями тупить над простой задачей. Ты объясняешь, показываешь, рисуешь схемы, а по итогу всё равно не "объясняется" и ты начинаешь беситься. Потом в какой-то момент щёлкает и он выдаёт решение, от которого ты в шоке: элегантное, красивое, рабочее, и ты такой: «Ёбаный в рот, я горжусь», а через день он снова спрашивает «а как переменную объявить?».

Это американские горки на которые ты подписался добровольно с билетом в один конец.

5. Когда джун перерастает тебя

Самое сложное — отпустить. Ты вкладываешься, тратишь нервы, время, а потом этот человек становится круче тебя или просто уходит из поля зрения. И ты вроде рад за него, но внутри грызёт: «А меня кто-нибудь так же научит?».

Но есть и кайф.

Когда ты видишь как твой подопечный спустя N-времени сам отвечает на вопросы новичков. Когда он пишет код, который не стыдно показать. Когда он приходит и говорит: «Спасибо, я столько узнал». В этот момент понимаешь, что всё было не зря.

Менторство это не про передачу знаний, а переосмысление мышления. Научить не тому, что писать, а тому, как думать и это сложно. Но если получилось — ты красавчик.

Так что если вы джун, то не бесите ментора тупыми вопросами, гуглите сами. Если вы ментор — держитесь, вы делаете большое дело, а если вы просто читаете — вспомните тех, кто когда-то объяснял вам что такое цикл и скажите им мысленно спасибо.
21
#Windows #Linux

Как работает WSL2


Вы же запускали виртуальную машину для тестирования какого-нибудь софта из под Linux? Там всё тормозит, память съедается как не в себя, а запуск длится как заварка чая. А теперь есть WSL2: нажимаешь wsl и через секунду у тебя открывается терминал Ubuntu. Быстро, плавно, без тормозов и главное это реальное ядро Linux, а не эмуляция.

Как Microsoft умудрилась сделать то, что не смог никто?

Первая версия была просто переводчиком. Linux-программа думала, что общается с ядром Linux, а на самом деле все системные вызовы перехватывались и переводились в понятные Windows команды. Это как если бы русский и китаец говорили через гугл переводчик, вроде понимают, но через одно место.

Но многие системные вызовы просто невозможно корректно перевести, например в Linux можно переименовать папку даже если внутри открыт файл, в Windows нельзя. И такие несоответствия накапливались, производительность страдала, а Docker вообще работал через пень-колоду.

WSL2

Во второй версии архитектура изменилась кардинально, вместо переводчика появилась настоящая виртуальная машина с реальным ядром Linux. Microsoft теперь официально поставляет ядро Linux (собранное из kernel.org) прямо в Windows. Но это не обычная виртуалка. Это lightweight utility VM — легковесная утилитарная виртуальная машина. Её отличия от обычной VM:
1. Запуск за секунды. Не надо грузить BIOS, проверять память, инициализировать кучу драйверов. Всё подготовлено и оптимизировано.

2. Динамическая память. Обычная VM хапает себе память и не отдаёт, а WSL2 отдаёт обратно Windows когда не нужно.

3. Глубокая интеграция с Windows. Это не изолированный ящик, а практически родная часть ОС.


Как это устроено внутри?

Когда вы вводите wsl.exe --install происходит целый спектакль:
1. wslservice.exe просыпается и говорит: «Нам нужен Linux».

2. Через Host Compute System (HCS) создаётся виртуальная машина с минимальной конфигурацией.

3. Внутри VM запускается специальное ядро от Microsoft (можно и своё, если шарите).

4. Ядро грузит mini_init, некий микроскопический процесс который подготавливает окружение.

5. Дальше запускается полноценный init, который уже монтирует диски, настраивает сеть и запускает ваш любимый bash.

И всё это за чуть меньше двух секунд.

Файловая система: где живут данные

Это отдельный цирк. Раньше в WSL1 файлы лежали прямо в NTFS, из-за чего скорость была никакая. Теперь у каждого дистрибутива свой VHDX-файл с файловой системой ext4.

Как происходит магия общения между Windows и Linux?

Через протокол 9P (Plan 9 Filesystem Protocol) — древний, но надёжный способ шарить файлы между разными системами. Когда вы заходите в /mnt/c 9P поднимает данные с Windows-диска и отдаёт Linux-процессам. И наоборот: можете открыть проводник и ввести \\wsl.localhost\Ubuntu и увидеть все файлы своей Linux-системы прямо в Windows Explorer.

Сеть

Тут есть нюанс. WSL2 даёт Linux-окружению собственный IP-адрес, отдельный от Windows . Теоретически это значит что localhost на Windows и localhost на WSL разные вещи. Но Microsoft это пофиксили: когда вы запускаете сервер на порту 3000 внутри WSL, он автоматически пробрасывается на localhost в Windows. Всё работает из коробки, но если полезете глубже то готовьтесь к танцам с IP-адресами .

Графический интерфейс (WSLg)

В Windows 11 добавили ещё и графику. Теперь можно запускать Linux-приложения с GUI прямо на рабочем столе Windows . Запустили GIMP из WSL и он открылся как обычное Windows-окно. Внутри там работает связка Wayland + RDP, но пользователю пофиг — просто работает.

Итог: что это даёт?

WSL2 это не просто «линукс на винде». Это инструмент для разработчика который хочет:
Писать код в любимом Windows-редакторе, а запускать и тестировать в нативном Linux-окружении.
Запускать Docker-контейнеры без танцев с бубном.
Использовать bash-скрипты и Linux-утилиты прямо из PowerShell.
Иметь под рукой полноценную среду разработки, не ставя вторую систему и не мучаясь с виртуалками.

Microsoft, которая десятилетиями воевала с Linux и теперь поставляет его ядро в своей ОС. И это работает лучше, чем всё что было до.
#Kotlin

Я бы женился на Kotlin

Есть языки с которыми бы просто переспал, попроектировал и забыл, а есть те, с которыми хочется прожить жизнь. Kotlin для меня из вторых.

Знаете это чувство, когда код не бесит? Компилятор не подкидывает сюрпризы в продакшене, а синтаксис не заставляет ставить лишние скобки и точки с запятой, как дань ушедшей эпохе? Kotlin даёт это чувство каждый день.

За что конкретно я готов ставить штамп в паспорте

1. Null safety, который работает адекватно.

Вы просто не понимаете как живёте, пока не попробуете язык, где NullPointerException это редкий гость, а не член семьи который приходит без спроса и гадит в углу. В Kotlin ты видишь тип и сразу знаешь: может быть null или нет.
val name: String? = mightReturnNull() // может быть null
val length = name?.length ?: 0 // безопасно, элегантно, читаемо


2. Extension functions — когда чужой код становится своим

Хочешь добавить метод в класс, который даже не твой? Пожалуйста. Библиотека, фреймворк, системный класс — без разницы, ты просто его расширяешь.
fun String.isEmail(): Boolean = this.contains("@") && this.contains(".")

"test@mail.ru".isEmail() // true

И это не магия времени выполнения, а красивая обёртка, которая не ломает обратную совместимость и не требует наследования.

3. Data classes. Лень писать бойлерплейты?

Java-разработчики меня поймут. 50 строк на getter, setter, equals, hashCode, toString становятся нормой жизни в мире enterprise-разработки. А Kotlin такой хоп:
data class User(val name: String, val age: Int)

и всё, остальное сгенерировано. Ты просто работаешь с данными, а не с церемонией вокруг них.

4. Coroutines не создают миллиард асинхронных абстракций (Привет C# 🙂)

Callback hell, RxJava с его магическими операторами, потоки с синхронизацией, — ну и духота, меня тошнит от этого. Kotlin сказала: Мальчики, давайте проще». И сделала асинхронность похожей на обычный последовательный код.
suspend fun fetchUserData(): UserData {
val profile = async { api.getProfile() }
val friends = async { api.getFriends() }
return UserData(profile.await(), friends.await())
}

Читается сверху вниз, работает параллельно, не блокирует поток. Магия? Нет, инженерия.

5. Совместимость с Java без боли

У вас миллион строк легаси на Java? Не проблема, Kotlin с ним дружит, как будто всегда были семьёй. Можно мигрировать постепенно, файл за файлом и всё работает. Никаких «переписывай всё с нуля».

6. Multiplatform — один код правит всеми

Хотите писать общую логику для Android, iOS, бэкенда и веба? Kotlin позволяет это делать. Один модуль, одна бизнес-логика, одни тесты и она работает везде.

Но идеальных не бывает

Да, компиляция не самая быстрая, иногда DSL на рефлексии тормозит, сообщество меньше, чем у Java. Но это как с девушкой — идеальных нет, есть та с которой ты готов мириться ради того хорошего что она даёт.

Kotlin даёт мне удовольствие от кода. Я перестал бояться писать, тратить время на то, что должна делать за меня экосистема тех или иных инструментов. Я просто описываю логику, а язык не мешает.

В мире, где половина времени уходит на борьбу с настройками среды разработки, Kotlin это тот редкий случай, когда инструмент просто работает и радует.

Так что да. Я бы начал хотя бы встречаться с Kotlin и, кажется, мы уже живём вместе ❤️
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from The ExtremeCode Times
Бля, когда я работал в офисе - это вообще сказка была. Просто пиздец сказка. Я работал C# мидлом, старшим инженером-программистом.

Прихожу в офис. Мне тимлид такой говорит:
— "Сегодня делать нехуй, но надо для вида какую-нибудь залупу сделать".

Я говорю:
— "Понял, то есть как всегда".

Он говорит:
— "Да, как всегда".

Я говорю:
— "Понял".

Дали тебе задание - обслужить сервак с гитом. Тебе закидывают задачу в жиру, а ты такой: "Ну всё, ща кофейку попью и начну".

В офисе без кофейка ты вообще, нахуй, ничего не начнёшь.

Хорошо. Я выпиваю кофейка - время на часах уже половина девятого. Пока посидели, попиздели там: у кого там техдолг, кто на кого свою таску скидывал, кто не скидывал. Какой техдир говно, какой тимлид нормальный.

Хуяк - половина десятого.

Ну чё, начинаем? Погнали.

Пока найдёшь сервак - там доступа нет. Потому что там секретные данные, там нужен доступ соседнего тимлида. Плюс нужен твой тимлид, чтоб подтвердил, что вы свои. Туда-сюда, короче.

Пока тимлидов ждали - 11 часов протикало.

Тимлиды пришли, нас запустили.

— Здарова, мужики. Хули так долго?

— Ну как, нахуй? Пока кофейку попьём, пока чё.

Я говорю:
— "Ну ладно, тоже понимаю, тоже люди".

Всё, они нам дали доступ, мы вошли. Там дебиан.

Написали в общий чат:
"Коммитами не срать, сервер на обслуживании. Кто запушит - получит пизды".

Всё, зашли, логи почистили, диагностику закончили за 20 минут.

Ну чё делать - не в "решено" же задачу двигать. В "решено" двинешь - скажут, нихуя не делал, не серьёзно, надо ещё полчаса поебланить.

Ютубчик открыл, сел поудобнее, видосик посмотрел. Другой посмотрел. Третий посмотрел.

Хуяк.

О, можно карточку двигать - скоро на обед.

Всё, сходил на обед. Пожрал. Ну а что нужно сделать, как пожрал? Правильно. Нужно поспать.

Полчасика поспал. Проснулся. Время 14:00.

Приходит тимлид новые таски навешивать.

Он тяжёлые таски тебе дать не может. Потому что в 16:00 тебе уже уходить домой. Он может тебе дать только хуйню. Типа сходить, ещё какой-нибудь хуйнёй позаниматься.

Потому что он не может дать вам тяжёлую таску: только вы её начнёте - вам уже уходить домой. Потому что пока вас допустят, пока что. Соответственно, вот такая ситуация.

Он даёт вам какую-нибудь хуйню - или не даёт. Потому что понимает: какой смысл давать хуйню, лучше просто не давать.