C# Short Posts 🔞 – Telegram
C# Short Posts 🔞
250 subscribers
111 photos
4 videos
151 links
Здесь я, Дима Афонченко @Undermove1, публикую короткие заметки о разработке (и около). Я не претендую на правильность высказываний и открыт к дискуссиям, исправлениям и конструктивной критике. С любыми деструктивными вещами можно приходить в комменты)
Download Telegram
1️⃣ OneOf<> (aka Discriminated Unions) в ASP.NET

В программировании часто бывает так: что-то очень простое называют так сложно, что хочется плакать. Так произошло для меня с 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 (ну не прям так, но типа). За что многие и любят эти язычки.
 
3️⃣ Так вот в по сути библиотечка OneOf и позволяет делать то же самое! И вот как это выглядит (вариант для чемпиОнов):
 
public Task<OneOf<User, UserAlreadyExists, EmailValidationFailed>> CreateUser(string userName, string email);


🅰️ Итого: Если метод может возвращать разные типы в результате своей деятельности – не делай енумы со статусами успешности или не делай булеановские поля типа IsSuccess, а поработай с библиотечкой OneOf. Правда пока я бы только для пет-проектов это юзал, а для рабочего прода дождался бы официальной реализации в языке. Пропозал есть, значит все сокро будет – надо только подождать.

Я не буду тут приводить примеры кода, а напишу, что попробовал на своих пет-проектах все это дело и скажу, что смог неплохо так упростить пару свитчей. Причем, что мне нравится. Код упростился как в методе, так и в обработчиках результатов.
 
Короче, супер-рекомендую обратить внимание на библиотечку OneOf, втрепать ей звезду на гитхабе, и посмотреть видос от Ника Чапсаса. Я-то думаю, что все заебись объяснил, но он там еще и по коду все это дело раскидывает.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63👍2👌2
🪄 Хочу чтоб у всех руководителей был канал в телеге.

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

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

Или вот у нас есть канал у Димы Карпова про то, как ребята делают кассы. Несмотря на то, что у команды касс есть апдейты, я на них не успеваю ходить. А тут вечерком канальчик в телеге почитал, какой там пиздец бывает с терминалами и хоп-хоп и уже интересно, а что у них там делается? И уже такой вовлекаешься в их проблемы, думаешь, что может как-то помочь можно? Ну или просто на будущее мотаешь себе на ус, что если когда-то будешь работать с чем-то подобным, то вот какой опыт бывает.
 
У нас есть еще всякие каналы с новостями в корпоративном мессенджере. Но что-то там та же самая инфа ну прям не читается. Все пишут скучно, канцелярским тоном, без личных деталей. Оно и понятно, в корпоративном мессенджере личное чувствуются неуместно.
 
А в телеге, если уж пиздец, так пиздец, а не "незапланированное изменение сроков." Или вот захотел человек кружочек записать и отправить, ну и отправил.
 
🅰️ Короче, каналы в телеге рулят. Заводите себе канал. Особенно, если вы в какой-то степени руководитель, или просто свое мнение имеете. (А вот сторисы тут – ебаное говно. Хотя визуально сделаны грамотно, просто сам формат не нравится. Рад что их можно позаблочить все.)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥63💯3
This media is not supported in your browser
VIEW IN TELEGRAM
2
💟 Анимированный, сочный, шарпный стикерпак.

Год назад я возмутился, что в мире все еще нет нормального стикерпака для шарпа. Не какого-нибудь с конференций, с рафинированными контурами и надписями .NET на блевотно-фиолетовом кружочке, а нормального такого, со здоровой сумасшедшинкой (читай ебанцой). Чтобы был анимированный и содержал в себе основные паттерны общения, типа "спасибо", "пожалуйста" и "пошел-ка ты на хуй".
 
Короче, год назад я замутил именно такой. Сделал на питоне, что немного иронично. Но самым сложным оказалось не сделать анимации (это заняло пару часов суммарно), а выложить все это говно в телегу. Это столько геморроя, что ни в сказке сказать.

🤬 Начиная с того, что у телеги есть кастомный формат для анимаций TGA который можно скомпилить только в Adobe After Effects. И заканчивая требованиями по времени (не больше 3 секунд) и разрешении (512 на 512).
 
Но я ж программист, я попытался найти свободные кодеки для этого дела, но они в итоге работали через пень-колоду.
 
Короче, год спустя, я плюнул на все, скомпилировал все в формате webm и выложил видеостикерпак. И теперь представляю его вам!

🅰️ Шлите себе и своим корешам. С этим стикерпаком можно полноценно общаться и спорить на технические темы. Там сейчас всего 10 стикеров, которые уже позволяют спорить о том, что лучше C# или F#, говорить твердое НЕТ продакту, который принес новые фичи и ласковое спасибо корешу, который поправил вашу багулю на проде.
 
Распространите.

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

А еще можно что-то придумать, чтобы этот стикрепак обновлялся по коммиту в мастер. Это будет вообще мегакруто! Тогда у шарпа будет ваще первый программируемый стикерпак (правда на питоне, что опять же слегка иронично). У меня пока до такого руки не дошли.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥53🎉3
😎️️️️️️ Иду в отпуск. Надеюсь в этом году вовремя.

🍁Осень – тяжелая пора для меня. Солнца становится все меньше, а работы все больше. Ибо скоро новый год и все в компании к нему готовятся так, словно следующий год не наступит.
 
На мой взгляд, в такую пору самое главное – максимально сохранить энергию и вообще как можно лучше и эгоистичнее позаботиться о себе. К примеру, не брать на себя доп. ответственность, не обещать многого, не работать допоздна, и как можно больше стараться отдыхать.

Но в Додо я каждый год наблюдаю, как люди на планировании последнего квартала года дают убер-оптимистичные прогнозы, берут доп. ответственность и забивают на отдых. 
- Переделать все приложение до конца декабря?
- Да, конечно успеем! Вон сколько за лето успели!
 
📆 Год назад один из наших тогдашних топов Ваня Тихов, прям во время мобилизации (ебанись какого стрессового момента, когда количество тревог о друзьях, родителях и вообще обо всем зашкаливает и провоцирует нервный думскроллинг примерно у всех) написал пост о том, что собирается ЕБОШИТЬ. Это привело к печальным последствиям, и я рад, что обошлось без кошмарных исходов для здоровья Вани. Кстати, Ваня сейчас сам рефлексирует этот опыт, и про это очень интересно читать.

Короче, в прошлом году я заебался, долого не хотел идти в отпуск, в итоге взял его изрядно позже чем было нужно. Как следствие, херово отдохнул и со всеми ругался даже после отпуска.

После такого я решил, что в следующий раз возьму отпуск заранее. То есть в тот момент, когда кажется, что в отпуск еще не надо. Цель у меня такая – не пересраться со всеми в команде в период с октября по январь. И, если повезет, преодолеть шестинедельный перерыв в производительности, который случился в прошлом ноябре.
 
Потом расскажу, что получилось, и получилось ли. А может выгорю и ничего не расскажу.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥83👍3
🏓 Дашборды для вашей графаны.

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

🅰️ Итого: Не нужно каждый раз настраивать дашборды в графане с нуля – как минимум, полезно воспользоваться шаблоном.

⭐️ И это, надо бы звезду репозиторию поставить. У Джеймса Ньютона Кинга этих звезд, конечно, как грязи, но не думаю, что он будет жаловаться на пару-тройку лишних.
#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥62🤩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🤩31
🐘 Как делать API которые не сосут по Дереку Комартену.

Приятно делать что-то, что не сосет. Если это не пылесос, конечно (честно скажу, весь пост писал только ради этой шутки). Вот Дерек Комартен тоже так считает и поэтому выпустил видос, как делать несосущие API.
 
Вот таймкоды советов и краткое описание:

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
🔥8👍2🙏2🤔1
Если вы делаете поллинг, то полезно отдавать время интервала поллинга в ответах вашего АПИ.

Продолжаю привыкать к работе с мобилками. И вот наткнулся на еще одну особенность, которую хотел бы знать чуть раньше.
 
📦 Сделали курьера на карте и поняли, что координаты хочется обновлять чаще. А таймаут обновления зашит на мобилке.
 
Для вебчика, это никогда не было проблемой – захотел поменять, поменял и все тут. Какой-нибудь скрипт, который смотрит за апдейтами клиента, обновит страницу у пользователя и все.
 
Но для мобилки все не так. Там нужно ждать релиза в две недели минимум. Что делать, чтобы не ждать? Правильно, отдавать таймаут поллинга в ответах АПИшки.
 
Этот совет кажется будет полезен практически в любом случае, если вы решили делать поллинг.

🅰️ Итого: Любые таймауты поллинга для мобилки нужно присылать с бэка.

А может стоит пойти дальше? И, если в мобилке есть какие-то интервалы обновления, то возможно стоит, чтобы их можно было присылать с бэка?
 
Что думаете? Я бы с удовольствием почитал в комментах или в личке.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🤔3🔥2
😮 Entity Framework или Dapper?

Года два назад задался вопросом. Как решить, что использоваться для взаимодействия с базкой в своем проекте ORM или миниORM?
 
Вот в Додо исконно принято использовать даппер. Хотя это и не обязательно, и в ряде проектов, к примеру в Базе знаний используется EF. Но почему-то если проект у нас критический, то там используется именно даппер.
 
В своих пет-проектах я год пользовался EF, ну а в работе понятное дело юзал даппер. И вот к каким выводам я пришел.
 
Entity Framework:
🟣Практически в любом случае проще и лучше использовать EF.
 
🟣Для старта любого проекта, на котором большая нагрузка либо не предвидится, либо пока неясно, будет ли она, лучше использовать EF.
 
Dapper:
🟠Если у вас проект, который использует какие-то особенности базы для работы, то есть у вас сложная иерархия таблиц, с индексами, вьюхами, прости Господи хранимками, и по сути часть вашей бизнес-логики лежит в базе (что я не приветствую), то лучше юзать даппер.
 
🟠Если у вас меганагруженный проект с огромным количеством (несколько сотен в секунду) чтений из базы и вы по какой-то причине не можете использовать кэширование для оптимизации, то тоже можно использовать даппер.
 
🟠Если у вас бОльшая часть команды ОЧЕНЬ глубоко знает работу какой-то конкретной базы данных и прям использует по максимуму все её фичи, то тоже даппер.
 
🅰️ Короче, я для себя пока аккуратно сделал вывод, что по дефолту буду юзать EF, а над использованием Dapper скорее буду думать, надо ли.
 

Понимаю, что многие делают выбор в сторону даппера из-за скорости. Но как часто действительно важна эта скорость? Ник Чапсас снял видос про то, что EF хорошо ускорился в основных сценариях использования и в принципе не сильно отстает от даппера. То есть скорее всего бутылочным горлышком у вас окажется не библиотечка, а кривой запрос/отсутствие индекса и так далее.

Такие пироги! Если что, это мнение не конечное, и я бы с удовольстием послушал ваш опыт. Было бы пиздатенько, если бы в коментах кто-то рассказл кейс, как EF что-то сломал в проекте, а Dapper даппер или что-то такое это починило. Ну или может еще накидал разных поинтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥3🤔2
🗡 Топовая Polytopia!

Я вообще не играю в мобильные игры. Когда-то давно пробовал гонять во всякие клэш рояли, шутаны и прочую ерунду, но все не заходило. А вот Политопия жесть как зашла. Да так, что я не могу вам её не порекомендовать!
 
Самое просто описание Политопии – это мини-цива (цива – она же цивилизация Сида Мэйера) с партиями на 15 минут и небольшим деревом технологий. Так что, если вам нравилась когда-либо хоть какая-то Цивилизаиця, то эта игруха точно вам зайдет.
 
По ощущениям немного напоминает шахматы, только без задроченных комбинаций эндшпилей, этюдов, миттеншпилей и прочей вот этой душной поебени (когда-то играл в шахматы сам, но потом у меня проявилась аллергия на снобизм от любителей этой игры).
 
В игрухе отличный баланс и есть много классных механик, когда приходится придумывать и считать ходы, чтобы выкрутиться из изначально проигрышного положения. К примеру:

🥇 По ресурсам враг опережает тебя в два раза. То есть может строить в два раза больше армий, и в два раза быстрее может открывать технологии. Казалось бы – победа за ним.
🏔 Но у тебя есть рядом горы, в которых урон твоим юнитам снижается, а значит, ты можешь посчитать, что по армии у вас получается паритет.
🎄 А значит тебе нужно только сфокусироваться на нужной ветку технологий, на такой, которая позволит тебе добывать или экономить ресурсы лучше противника, пока он будет качать все подряд, тратя ресурсы на расфокус.

И вариативность довольно высокая. А еще с этой игрой очень удобно ждать в очередях – время проходит незаметно. Жалко, что это не поможет моим застрявшим сообщениям в кафке.

В общем, горячо рекомендую. И наивно полагаю, что эта игра помогает развивать интеллект 😭
Please open Telegram to view this post
VIEW IN TELEGRAM
4🔥4🦄4👾3
🙏 or 🤬 Хвалить или ругать?

После того как у нас отключили слак, мы переехали на другой мессенжер, название которого почему-то никто не употребляет публично. Я хз почему, может НДА и все такое. Короче, назову его тут "Яблочко".

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

А еще Яблочко нещадно тупит и периодически не находит людей, как ты ни перебирай комбинации их имени и фамилий. Короче, в нашем уютном и нетоксичном коллективе Яблочко считается заслуженным говном.
 
Лучших аналогов у Яблочка, таких, чтоб подходили нам по всем параметрам – нет.

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

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

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

И вот ставлю я себя на место разработчиков Яблочка: Что я бы думал, если бы видел такие отзывы? Стал бы я работать лучше? Пропитался бы к людям понимаем и эмпатией и, как следствие, делал бы для них фичи быстрее, качественнее и с любовью? Хуй там! Однозначно – нет.

Такой я человек – если меня похвалить, то могу неделю работать с полной самоотдачей, без перерывов на обед и даже на выходные. Потому что чувствую, что нужен людям и "как же они там без меня". А если меня поругать, то это вызовет обратный эффект.

🅰️ Не подумайте. Тут я не защищаю разработчиков и менеджеров Яблочка, и не выступаю за оголтелую похвалу по делу и без, но кажется, что если сочетать похвалу и честную обратную связь, это как минимум не навредит, а как максимум ускорит решение твоих проблем. Это ж экономически выгодно – затраты на "спасибо" нулевые, а профит возможен с некоторой долей вероятности. Так почему бы не воспользоваться? И это не только про Яблочко, так со всеми.

Или все же у похвалы есть какие-то экономичские издержки?
Please open Telegram to view this post
VIEW IN TELEGRAM
💯65💔1
🪙 Сходил на вебинар про Developer Experience

Если и есть на свете чувак из айтишки, на которого я хочу быть похожим (по скиллам и профессиональным навыкам, внешне мы и так похожи), то это Федор Борщев. Чел топит за чистый и понятный код, руководит своей компанией по заказной разработке (при этом все еще пишет код!) и вообще всячески продвигает принципы no-bullshit и всего вот этого.
 
Не смог удержаться и сходил на его вебинар по Developer Experience. Он же DevEx. Если кто не знает, что это такое – то, коротко, это про то как сделать работу программиста охуенно удобной.

И это не столько про удобные кресла в офисе, кальяны и печеньки на кухне, сколько про сам процесс написания кода.

В общем как сделать процесс написания кода максимально пиздатеньким. Основные тезисы, которые я для себя отметил:
 
Любой опыт работ с кодом состоит из пяти этапов:
🟠получение доступов,
🟠настройка проекта у себя и работа с окружением,
🟠работа с задачами (таск-трекер и общение вокруг задач),
🟠написание кода,
🟠починка прода в случае поломок
 
По всем пунктам кроме третьего в общем-то ничего необычного я не услышал:
Получение доступов – настраиваем SSO. Настройка проекта – сделайте так, чтобы запускался в контейнере, чтоб не тянуть лишние зависимости + настройте dependabot. Написание кода – покрывайте все тестами и не забывайте про линтеры + чистый код. Починка прода – настройте мониторинг с базовыми метриками.

⭐️ А вот по поводу общения вокруг таско мне было, что узнать нового. Потому что это касается личной боли.

В Додо проходит дохуя встреч. Это какая-то прям напасть. Когда я только пришел их тоже было много, но они как будто были по делу. Сейчас я порой прихожу на PBR, где обсуждается какая-то таска для iOS и Android и я никакого инпута принести не могу. Но ходить просят – вдруг че полезного скажу.

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

🅰️ Так вот топ-совет от Федора Борщева (в моем скромном рейтинге) по поводу синков – нахуй синки! Нужна ровно одна встреча – "встреча 50%". Перед началом задачи у разработчика нужно спросить: "к какому дню сможешь сделать?" Он ставит срок. По истечении половины спрашиваешь: "Получилось ли сделать половину?" Если нет, то корректируешь срок.

Все остальные кейсы регулируешь асинхронной коммуникацией. Ну то есть – сделал раньше, напиши, и бери следующую.

Короче, теперь буду топить за то чтобы попробовать такой подход.🌚

🅰️ Еще мне понравилась идея – прикреплять к задаче бизнес-метрику, на которую эта задача влияет. Чтобы сразу было видно, что конкретно ты принес.

В прошлой команде очень очень хотел такое сделать. Помешало только то, что метрика была очень иннерционная и увидеть импакт от задачи можно было только через несколько месяцев. Но первый шаг мы сделали – начали метрику собирать и регулярно на неё смотреть и это уже было лучше, чем просто делать таски вслепую.

В общем, мне вебинарчик понравился. Несмотря на то, что я не узнал много нового, просто приятно было прийти туда, где твои взгляды разделяют.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍43👏2🤔1
🙅 Не называть классы …Service

У Дерека Комартина во многих видосах явно проявляется нелюбовь к такому окончанию. Когда он видит в репозитории что-то там Service то недовольно фыркает и говорит "It doesn't say anything about what it's doing!” 😡
 
И вот знаете что, я с ним согласен. Более того, для меня это превратилось в небольшое правило, которое помогает писать код лучше.
 
Каждый раз, когда я хочу назвать что-то Service, я задаюсь теперь вопросом, а что эта штука будет делать на самом деле? И всегда это приводит к тому, что либо я лучше понимаю, что хочу написать, и какие тесты нужно под это придумать, либо к тому, что я понимаю, что то что я хочу нужно разделить на более специфичные классы.
 
К примеру IQuestService. Что он вообще делает? Ну что-то с квестами. Либо позволяет их создавать, либо редактировать, либо награду за него выписывает. Короче, вы поняли, ни зги не видно.

А можно назвать так: IQuestStartRequierementsChecker – сразу понятно, что эта штука проверяет, можем ли мы начать квест или нет.
 
Как и со всеми остальными правилами написания понятного кода, всегда есть исключения и компромиссы, но, скажем так, иметь такой маленький триггер, как по мне – полезное дело.

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 не умеет в грузинский.

Попереводил тут пару сообщений на грузинский через 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