В программировании часто бывает так: что-то очень простое называют так сложно, что хочется плакать. Так произошло для меня с Discriminated Unions. Когда кто-то у нас на встречах рассказывал про эту штуку, упоминая при этом F#, я плакал.
Было ничего не понятно. Ни зачем, ни что, ни как.
А все из-за названия, которое непонятно как перевести на русский. Вон даже гугл не справляется
Короче, на деле это оказалась очень простая и практичная штука. И её пока официально нет в шарпе, но её все ждут, а для тех, кто не дождался есть библиотечка (и я снова призываю вас въебать ей звезду как можно оперативнее), которая имплементит эту фичу.
Что эта штука помогает делать. Предположим у вас есть метод:
public Task<User> CreateUser(string userName, string email);
Что возвращает этот метод? Ну понятное дело юзера. Но это в лучшем случае. А что если такой пользователь уже создан? А если email не по формату? Что вернуть тогда?
Есть несколько вариантов.
1️⃣ Можно сделать так (вариант для джуниОров):
<exception cref="UserExists"></exception>
<exception cref="EmailValidationException"></exception>
public Task<User> CreateUser(string userName, string email);
Это, конечно, мде. За логику на эксепшонах будут ругать. Но если никто не видит, то по-честному это самый удобный способ.
2️⃣ Второй способ заключается в том, чтобы возвращать не юзера, а некий UserCreationResult, в котором будет что-то типа такого (вариант для сениОров):
public class UserCreatedResult
{
public bool IsCreationSuccess { get; set; }
public User? User { get; set; }
}
Понятно, что IsCreationSuccess можно превратить в enum и так далее. Но этот способ неудобен, так как мы возвращаем в случае неудачи избыточное поле User. Оно, конечно, нулловое, но согласитесь, это-то и плохо.
Было бы удобно что-то типа такого:
public Task<User || UserAlreadyExists || EmailValidationFailed> CreateUser(string userName, string email);
Это удобный вариант, так как под каждый случай, мы вернем ровно те данные которые нужны для обработки этого случая. Так можно делать в F#, в TypeScript (ну не прям так, но типа). За что многие и любят эти язычки.
public Task<OneOf<User, UserAlreadyExists, EmailValidationFailed>> CreateUser(string userName, string email);
🅰️ Итого: Если метод может возвращать разные типы в результате своей деятельности – не делай енумы со статусами успешности или не делай булеановские поля типа IsSuccess, а поработай с библиотечкой OneOf. Правда пока я бы только для пет-проектов это юзал, а для рабочего прода дождался бы официальной реализации в языке. Пропозал есть, значит все сокро будет – надо только подождать.
Я не буду тут приводить примеры кода, а напишу, что попробовал на своих пет-проектах все это дело и скажу, что смог неплохо так упростить пару свитчей. Причем, что мне нравится. Код упростился как в методе, так и в обработчиках результатов.
Короче, супер-рекомендую обратить внимание на библиотечку OneOf, втрепать ей звезду на гитхабе, и посмотреть видос от Ника Чапсаса. Я-то думаю, что все заебись объяснил, но он там еще и по коду все это дело раскидывает.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6❤3👍2👌2
Понял, что для любого руководителя канал в телеге это масхэв. В Додо сейчас хотят переосмыслить дизайн приложения. Для этого все чуваки сверху должны, как мне кажется, прям транслировать свой вижен будущего.
Для такой трансляции пришел к нам на девфорум Арсенний Васильев. И вот рассказал все классно. Мне понравилось, но гораздо для меня понятнее было все что он говорит, потому что у него есть телега, которую я регулярно читаю. Без нее, я бы примерно половину сказанного не понял. А так, вспомнил вот про этот пост и смог сложить картинку.
Или вот у нас есть канал у Димы Карпова про то, как ребята делают кассы. Несмотря на то, что у команды касс есть апдейты, я на них не успеваю ходить. А тут вечерком канальчик в телеге почитал, какой там пиздец бывает с терминалами и хоп-хоп и уже интересно, а что у них там делается? И уже такой вовлекаешься в их проблемы, думаешь, что может как-то помочь можно? Ну или просто на будущее мотаешь себе на ус, что если когда-то будешь работать с чем-то подобным, то вот какой опыт бывает.
У нас есть еще всякие каналы с новостями в корпоративном мессенджере. Но что-то там та же самая инфа ну прям не читается. Все пишут скучно, канцелярским тоном, без личных деталей. Оно и понятно, в корпоративном мессенджере личное чувствуются неуместно.
А в телеге, если уж пиздец, так пиздец, а не "незапланированное изменение сроков." Или вот захотел человек кружочек записать и отправить, ну и отправил.
🅰️ Короче, каналы в телеге рулят. Заводите себе канал. Особенно, если вы в какой-то степени руководитель, или просто свое мнение имеете.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Стартап Продюсер⚡️
Эмоциональный дизайн
Дизайн — это не только нарисовать К Р А С U В О. Это проектирование клиентского опыта. И не для всех очевидно то, как вещи должны работать, абстрагируясь от каких-то привычных паттернов и решений, принятых в индустрии.
Спотифай подстраивает…
Дизайн — это не только нарисовать К Р А С U В О. Это проектирование клиентского опыта. И не для всех очевидно то, как вещи должны работать, абстрагируясь от каких-то привычных паттернов и решений, принятых в индустрии.
Спотифай подстраивает…
🔥6❤3💯3
Год назад я возмутился, что в мире все еще нет нормального стикерпака для шарпа. Не какого-нибудь с конференций, с рафинированными контурами и надписями .NET на блевотно-фиолетовом кружочке, а нормального такого, со здоровой сумасшедшинкой (читай ебанцой). Чтобы был анимированный и содержал в себе основные паттерны общения, типа "спасибо", "пожалуйста" и "пошел-ка ты на хуй".
Короче, год назад я замутил именно такой. Сделал на питоне, что немного иронично. Но самым сложным оказалось не сделать анимации (это заняло пару часов суммарно), а выложить все это говно в телегу. Это столько геморроя, что ни в сказке сказать.
Но я ж программист, я попытался найти свободные кодеки для этого дела, но они в итоге работали через
Короче, год спустя, я плюнул на все, скомпилировал все в формате webm и выложил видеостикерпак. И теперь представляю его вам!
🅰️ Шлите себе и своим корешам. С этим стикерпаком можно полноценно общаться и спорить на технические темы. Там сейчас всего 10 стикеров, которые уже позволяют спорить о том, что лучше C# или F#, говорить твердое НЕТ продакту, который принес новые фичи и ласковое спасибо корешу, который поправил вашу багулю на проде.
Распространите.
PS А еще этот стикерпак опенвсосный, так что вы можете покоммитить в него, сделать свой форк и поставить мне звездочку на гитхабе. Я за это буду вам признателен и покраснею от смущения
А еще можно что-то придумать, чтобы этот стикрепак обновлялся по коммиту в мастер. Это будет вообще мегакруто! Тогда у шарпа будет ваще первый программируемый стикерпак
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤3🎉3
🍁Осень – тяжелая пора для меня. Солнца становится все меньше, а работы все больше. Ибо скоро новый год и все в компании к нему готовятся так, словно следующий год не наступит.
На мой взгляд, в такую пору самое главное – максимально сохранить энергию и вообще как можно лучше и эгоистичнее позаботиться о себе. К примеру, не брать на себя доп. ответственность, не обещать многого, не работать допоздна, и как можно больше стараться отдыхать.
Но в Додо я каждый год наблюдаю, как люди на планировании последнего квартала года дают убер-оптимистичные прогнозы, берут доп. ответственность и забивают на отдых.
- Переделать все приложение до конца декабря?
- Да, конечно успеем! Вон сколько за лето успели!
Короче, в прошлом году я заебался, долого не хотел идти в отпуск, в итоге взял его изрядно позже чем было нужно. Как следствие, херово отдохнул и со всеми ругался даже после отпуска.
После такого я решил, что в следующий раз возьму отпуск заранее. То есть в тот момент, когда кажется, что в отпуск еще не надо. Цель у меня такая – не пересраться со всеми в команде в период с октября по январь. И, если повезет, преодолеть шестинедельный перерыв в производительности, который случился в прошлом ноябре.
Потом расскажу, что получилось, и получилось ли. А может выгорю и ничего не расскажу.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Заметки Ивана Тихова
Адекватно оценить ситуацию
А теперь посчитаю все вместе.
Я оставался СЕО Додо Пиццы. В октябре, помимо всего прочего, как раз начинается интенсивный период — годовое планирование. Одновременно с этим, я стал временным СЕО Донер 42 — в кризисный момент для…
А теперь посчитаю все вместе.
Я оставался СЕО Додо Пиццы. В октябре, помимо всего прочего, как раз начинается интенсивный период — годовое планирование. Одновременно с этим, я стал временным СЕО Донер 42 — в кризисный момент для…
🔥8❤3👍3
Воу, я только задумался о том, какие метрики я бы хотел видеть для своих проектов и составить минимальный список, как вдруг вышел видос Ника Чапсаса о новых метриках для дашбордов. И в самом видосе я нашел просто бриллиант: вот этот репозиторий.
Это темплейт с дашбордами, который вам нужно просто импортировать в графану. Вам останется лишь настроить свой сервис, как указано в видосе у Ника, и все необходимые метрики будут у вас в кармане.
Бесконечно просто и полезно.
🅰️ Итого: Не нужно каждый раз настраивать дашборды в графане с нуля – как минимум, полезно воспользоваться шаблоном.
#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6⚡2🤩2🤔1
Короче, самое главное после отпуска – не перегружать голову в первый день. Естественно, я этот момент проебал, и целый день на свежих силах проработал, а потом еще и пошел на халявный «Troubleshooting workshop для разработчиков» от Слерма. Вел его, Александр Лукьянченко руководитель юнита PaaS из Авито.
Охуенный воркшоп, вот что могу сказать. Ребята из слерма настроили тестовый стенд, с графаной, ягерем и киали. В процессе сломали его два раза и показали, как с помощью выданных инструментов и kubectl найти ошибки.
Когда только пришел в Додо, был моложе и зеленее и не умел пользоваться кубом, то мечтал пройти что-то похожее. Но ничего похожего похоже не было. Поэтому я мучил ребят из команды, а Диму Зуева раскрутил на то чтобы нарисовать мне структуру сущностей в кубе
🅰️ В общем, если увидите в рассылке что-то типа «Troubleshooting workshop для разработчиков», и давно хотели потыкать кубер, ягер, графану, и киали, то не проходите мимо.
А еще там книгу интересную порекомендовали про Systems Performance от Брендана Грэгга. Из интересного, в книге обещают рассказать, почему все молятся на SLI и почему он так взлетел. Буду читать сразу после текущей.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥5🤩3❤1
Приятно делать что-то, что не сосет. Если это не пылесос, конечно
Вот таймкоды советов и краткое описание:
UPD Примечание редакции: каждый совет в видосе снабжается припиской “Это может быть удобно, применяйте осознанно”. Так что не переживайте, если в вашем АПИ чего-то из этого нет, это не значит, что ваше АПИ сосет. Ну или чье-то АПИ сосет.
1️⃣ ID шники должны что-то значить. Ну то есть Idшник не такой 556F673F-3013-423D-8AC7-14BF1E9C316E , а такой CA-ON-556F673F-3013-423D-8AC7-14BF1E9C316E, где CA-ON означает Canada-Ontario, ну и соответственно мы понимаем, что эта сущность как-то связана с этой локацией.
2️⃣ Не душите себя форматом вывода. Типа в ответе не отдавайте JSON массив объектов, а JSON объект с полем в виде массива. Во втором случае будет удобнее изменять ответ, если что-то понадобистся добавить в корень. Кстати, недавно у меня ровно такой случай был. Так что совет прям актуальный.
⭐ 3️⃣и 4️⃣ совет. Возвращать набор действий, которые вы можете совершить с объектом и ссылки на них. То есть если у вас в ответе на запрос GetOrder пришел заказ в статусе “ожидает”, то отправьте список запросов, которые можно сделать по этому заказу. И так же отправьте ссылки на эти запросы.
5️⃣ Используйте доменные определения вместо технических. Ну то есть CancelOrder это не UpdateOrder с параметром Cancel, а это прям CancelOrder. Да, что-то будет CRUDом, но не все.
Для меня самым интересным с одной стороны и самым спорным стали 3 и 4 совет. Действительно круто, когда ты прям присылаешь клиенту, что можно сделать с объектом прямо сейчас, избавляя его от необходимости самому догадываться об этом:
{
orderId: CA-ON-556F673F,
status: Pending,
actions: [
{
name: "CancelOrder",
uri: "https://mylittleoregano.org/order/CA-ON-556F673F/cancel",
method: "PUT"
}
]
}Почему это удобно? Если вдруг имя метода поменяется или формат параметров, то не придется версионировать АПИ и просить клиентов перейти на новую версию.
С другой стороны, я не вполне понимаю, как это защитит от ситуации, если, к примеру, заказ перестает быть возможным отменить в статусе Pending? Ну типа логику на клиенте все равно придется переписывать. Хотя это и станет удобнее, разумеется.
🅰️ Итого: Вы можете отправлять с бэка набора действий, которые можно совершить с объектом. Это может помочь вам избавиться от необходимости версионирования АПИ, так как вы сами контролируете формат ссылок. Также этим вы избавите клиентов от необходимости помнить, что можно и когда, так как вы будете присылать только те действия, которые можно совершить.
Если кто-то юзал такое, или юзает, вот было бы интересно узнать опыт использования и всякие подводные камни.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Want to build a good API? Here's 5 Tips for API Design.
Want to build better APIs that can evolve over time as your system requires changes? Here are 5 tips that will help you change your API design over time without creating breaking changes.
🔗 EventStoreDB
https://eventsto.re/codeopinion
🔔 Subscribe: http…
🔗 EventStoreDB
https://eventsto.re/codeopinion
🔔 Subscribe: http…
🔥8👍2🙏2🤔1
Продолжаю привыкать к работе с мобилками. И вот наткнулся на еще одну особенность, которую хотел бы знать чуть раньше.
📦 Сделали курьера на карте и поняли, что координаты хочется обновлять чаще. А таймаут обновления зашит на мобилке.
Для вебчика, это никогда не было проблемой – захотел поменять, поменял и все тут. Какой-нибудь скрипт, который смотрит за апдейтами клиента, обновит страницу у пользователя и все.
Но для мобилки все не так. Там нужно ждать релиза в две недели минимум. Что делать, чтобы не ждать? Правильно, отдавать таймаут поллинга в ответах АПИшки.
Этот совет кажется будет полезен практически в любом случае, если вы решили делать поллинг.
🅰️ Итого: Любые таймауты поллинга для мобилки нужно присылать с бэка.
Что думаете? Я бы с удовольствием почитал в комментах или в личке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔3🔥2
Года два назад задался вопросом. Как решить, что использоваться для взаимодействия с базкой в своем проекте ORM или миниORM?
Вот в Додо исконно принято использовать даппер. Хотя это и не обязательно, и в ряде проектов, к примеру в Базе знаний используется EF. Но почему-то если проект у нас критический, то там используется именно даппер.
В своих пет-проектах я год пользовался EF, ну а в работе понятное дело юзал даппер. И вот к каким выводам я пришел.
Entity Framework:
Dapper:
🅰️ Короче, я для себя пока аккуратно сделал вывод, что по дефолту буду юзать EF, а над использованием Dapper скорее буду думать, надо ли.
Понимаю, что многие делают выбор в сторону даппера из-за скорости. Но как часто действительно важна эта скорость? Ник Чапсас снял видос про то, что EF хорошо ускорился в основных сценариях использования и в принципе не сильно отстает от даппера. То есть скорее всего бутылочным горлышком у вас окажется не библиотечка, а кривой запрос/отсутствие индекса и так далее.
Такие пироги! Если что, это мнение не конечное, и я бы с удовольстием послушал ваш опыт. Было бы пиздатенько, если бы в коментах кто-то рассказл кейс, как EF что-то сломал в проекте, а Dapper даппер или что-то такое это починило. Ну или может еще накидал разных поинтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Entity Framework Core vs Dapper Performance in 2023
Check out my courses: https://dometrain.com
Become a Patreon and get source code access: https://www.patreon.com/nickchapsas
Hello everybody I'm Nick and in this video I will compare Entity Framework Core's and Dapper's performance to see which one is faster…
Become a Patreon and get source code access: https://www.patreon.com/nickchapsas
Hello everybody I'm Nick and in this video I will compare Entity Framework Core's and Dapper's performance to see which one is faster…
👍9🔥3🤔2
Я вообще не играю в мобильные игры. Когда-то давно пробовал гонять во всякие клэш рояли, шутаны и прочую ерунду, но все не заходило. А вот Политопия жесть как зашла. Да так, что я не могу вам её не порекомендовать!
Самое просто описание Политопии – это мини-цива (цива – она же цивилизация Сида Мэйера) с партиями на 15 минут и небольшим деревом технологий. Так что, если вам нравилась когда-либо хоть какая-то Цивилизаиця, то эта игруха точно вам зайдет.
По ощущениям немного напоминает шахматы, только без задроченных комбинаций эндшпилей, этюдов, миттеншпилей и прочей вот этой душной поебени
В игрухе отличный баланс и есть много классных механик, когда приходится придумывать и считать ходы, чтобы выкрутиться из изначально проигрышного положения. К примеру:
🏔 Но у тебя есть рядом горы, в которых урон твоим юнитам снижается, а значит, ты можешь посчитать, что по армии у вас получается паритет.
И вариативность довольно высокая. А еще с этой игрой очень удобно ждать в очередях – время проходит незаметно.
В общем, горячо рекомендую. И наивно полагаю, что эта игра помогает развивать интеллект
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥4🦄4👾3
После того как у нас отключили слак, мы переехали на другой мессенжер, название которого почему-то никто не употребляет публично. Я хз почему, может НДА и все такое. Короче, назову его тут "Яблочко".
Яблочко выглядит как слак, но в целом это не слак. Тут нет таких же охрененных шрифтов, как в слаке, нет всех тех же фичей, что и в слаке. Вот только недавно добавили возможность отправлять отложки, но при этом их нельзя редактировать после постановки в очередь – только удалять и откладывать заново.
А еще Яблочко нещадно тупит и периодически не находит людей, как ты ни перебирай комбинации их имени и фамилий. Короче, в нашем уютном и нетоксичном коллективе Яблочко считается заслуженным говном.
Лучших аналогов у Яблочка, таких, чтоб подходили нам по всем параметрам – нет.
Яблочко постоянно улучшается, с той скоростью, с которой может. Для стимуляции улучшений менеджеры Яблочка создали в своем же сервисе канал обратной связи, где собирают отзывы от всех нас на свой сервис.
И вот каждый раз, заходя в этот канал, я читаю недовольные отзывы наших ребят и девчат, что вот мол там не так, тут тупит, там не едет и так далее. Менеджеры Яблочка всегда отвечают вежливо – из чего я заключаю, что на том конце сидят не мудаки.
При этом, если у Яблочка появляется какая-то фича, которая устраняет боль, то не то чтобы люди совсем не говорят там массовое спасибо, но до сообщений с благодарностями долистать у меня не получается.
И вот ставлю я себя на место разработчиков Яблочка: Что я бы думал, если бы видел такие отзывы? Стал бы я работать лучше? Пропитался бы к людям понимаем и эмпатией и, как следствие, делал бы для них фичи быстрее, качественнее и с любовью?
Такой я человек – если меня похвалить, то могу неделю работать с полной самоотдачей, без перерывов на обед и даже на выходные. Потому что чувствую, что нужен людям и "как же они там без меня". А если меня поругать, то это вызовет обратный эффект.
🅰️ Не подумайте. Тут я не защищаю разработчиков и менеджеров Яблочка, и не выступаю за оголтелую похвалу по делу и без, но кажется, что если сочетать похвалу и честную обратную связь, это как минимум не навредит, а как максимум ускорит решение твоих проблем. Это ж экономически выгодно – затраты на "спасибо" нулевые, а профит возможен с некоторой долей вероятности. Так почему бы не воспользоваться? И это не только про Яблочко, так со всеми.
Или все же у похвалы есть какие-то экономичские издержки?
Please open Telegram to view this post
VIEW IN TELEGRAM
💯6❤5💔1
Если и есть на свете чувак из айтишки, на которого я хочу быть похожим
Не смог удержаться и сходил на его вебинар по Developer Experience. Он же DevEx. Если кто не знает, что это такое – то, коротко, это про то как сделать работу программиста охуенно удобной.
И это не столько про удобные кресла в офисе, кальяны и печеньки на кухне, сколько про сам процесс написания кода.
В общем как сделать процесс написания кода максимально пиздатеньким. Основные тезисы, которые я для себя отметил:
Любой опыт работ с кодом состоит из пяти этапов:
По всем пунктам кроме третьего в общем-то ничего необычного я не услышал:
Получение доступов – настраиваем SSO. Настройка проекта – сделайте так, чтобы запускался в контейнере, чтоб не тянуть лишние зависимости + настройте dependabot. Написание кода – покрывайте все тестами и не забывайте про линтеры + чистый код. Починка прода – настройте мониторинг с базовыми метриками.
В Додо проходит дохуя встреч. Это какая-то прям напасть. Когда я только пришел их тоже было много, но они как будто были по делу. Сейчас я порой прихожу на PBR, где обсуждается какая-то таска для iOS и Android и я никакого инпута принести не могу. Но ходить просят – вдруг че полезного скажу.
В последнее время меня начали бесить синки. Хотя они длятся меньше 10 минут, но что-то в них такое есть, что вырывает тебя из потока. Думаю дело в том, что на них для меня нет никакой полезной информации, а все это нужно тупо для контроля выполнения задач. Хотя я не понимаю, неужели не хватает задач на доске?
🅰️ Так вот топ-совет от Федора Борщева (в моем скромном рейтинге) по поводу синков – нахуй синки! Нужна ровно одна встреча – "встреча 50%". Перед началом задачи у разработчика нужно спросить: "к какому дню сможешь сделать?" Он ставит срок. По истечении половины спрашиваешь: "Получилось ли сделать половину?" Если нет, то корректируешь срок.
Все остальные кейсы регулируешь асинхронной коммуникацией. Ну то есть – сделал раньше, напиши, и бери следующую.
Короче, теперь буду топить за то чтобы попробовать такой подход.
🅰️ Еще мне понравилась идея – прикреплять к задаче бизнес-метрику, на которую эта задача влияет. Чтобы сразу было видно, что конкретно ты принес.
В прошлой команде очень очень хотел такое сделать. Помешало только то, что метрика была очень иннерционная и увидеть импакт от задачи можно было только через несколько месяцев. Но первый шаг мы сделали – начали метрику собирать и регулярно на неё смотреть и это уже было лучше, чем просто делать таски вслепую.
В общем, мне вебинарчик понравился. Несмотря на то, что я не узнал много нового, просто приятно было прийти туда, где твои взгляды разделяют.
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
FEDOR BORSHEV
Рассказываю, как руководить программистами
fborshev@pm.me / borshev.com
Реклама не продаётся
fborshev@pm.me / borshev.com
Реклама не продаётся
👍4❤3👏2🤔1
У Дерека Комартина во многих видосах явно проявляется нелюбовь к такому окончанию. Когда он видит в репозитории что-то там Service то недовольно фыркает и говорит "It doesn't say anything about what it's doing!”
И вот знаете что, я с ним согласен. Более того, для меня это превратилось в небольшое правило, которое помогает писать код лучше.
Каждый раз, когда я хочу назвать что-то Service, я задаюсь теперь вопросом, а что эта штука будет делать на самом деле? И всегда это приводит к тому, что либо я лучше понимаю, что хочу написать, и какие тесты нужно под это придумать, либо к тому, что я понимаю, что то что я хочу нужно разделить на более специфичные классы.
Как и со всеми остальными правилами написания понятного кода, всегда есть исключения и компромиссы, но, скажем так, иметь такой маленький триггер, как по мне – полезное дело.
P.S. Напоминаю, что я могу быть не прав, поэтому можно в комментариях все обсудить. Может и норм все называть Service? А это правило только душнит.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥3
Media is too big
VIEW IN TELEGRAM
🐞Багуля в дебагере.
Короче, знаете есть такой Мармок? Он типа ловит баги в играх и пилит смешной контент на эту тему. Я кажется такой же Мармок, только я ловлю баги при разработке. Только у меня глючат СУКА ИНТСРУМЕНТЫ. То дебаггер залагает, то райдер что-то не подсветит. Сегодня я заснял это дерьмо. И вот подобного в моей работе овердофига порой.
В играх у меня вообще все заебись. Лучше, чтобы все было наоборот. Сегодня вот чуть кукухой не двинул из-за этой штуки.(я не удивлюсь, если ссылка, которая у меня прекрасно работает вдруг возьмет и не заработает. Я все уже ПОВИДАЛ)
Будьте бдительны.
Короче, знаете есть такой Мармок? Он типа ловит баги в играх и пилит смешной контент на эту тему. Я кажется такой же Мармок, только я ловлю баги при разработке. Только у меня глючат СУКА ИНТСРУМЕНТЫ. То дебаггер залагает, то райдер что-то не подсветит. Сегодня я заснял это дерьмо. И вот подобного в моей работе овердофига порой.
В играх у меня вообще все заебись. Лучше, чтобы все было наоборот. Сегодня вот чуть кукухой не двинул из-за этой штуки.
Будьте бдительны.
🤯7😱2👍1😢1🙏1
Попереводил тут пару сообщений на грузинский через ChatGPT. В общем, не рекомендую.
Если в вопросе с женщинами я еще не уверен, то слива точно никакая не шимби и не чацера!
Чекнул и на четверке и на тройке, результат такой
P.S. Взял себе на заметку профессию, которую бездушные машины у вас пока не отнимут.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁3👌1💯1