C# Short Posts 🔞 – Telegram
C# Short Posts 🔞
251 subscribers
110 photos
4 videos
151 links
Здесь я, Дима Афонченко @Undermove1, публикую короткие заметки о разработке (и около). Я не претендую на правильность высказываний и открыт к дискуссиям, исправлениям и конструктивной критике. С любыми деструктивными вещами можно приходить в комменты)
Download Telegram
😅Компильдот! 💡
Самые внимательные заметили, что в прошлую пятницу обошлось без компильдота. А все почему? Потому что я отдыхаю. Отдыхать – важно, посему компильдот про отдых сегодня, товарищи!

Беседуют программист и тестировщик. Программист ноет:
- Начальство совсем оскотинилось, сколько времени можно работать без отпуска!
Тестировщик ему отвечает:
- У меня есть идея, как заработать хотя бы пару дней отдыха.
Вдруг он зацепляется ногой за трубу на потолке и висит вниз головой. Входит продакт. Хочет уже всех посадить за работу, как вдруг замечает тестировщика на потолке:
- Что это тут происходит? Что вы о себе думаете? Почему висите на потолке?
Тестировщик отвечает:
- Ничего особенного - я лампочка, освещаю комнату, почему бы мне и не висеть?
Продак в шоке:
- Знаете, что, мне кажется, вы немного переутомились, идите домой, и, чтобы на этой неделе я вас тут больше не видел!
Тестировщик собирается и уходит. Программист тоже начинает собирать вещи.
- А вы куда? - спрашивает начальник.
- Ну, я же не могу работать без света!

Так-с компильдот запостил, пора бы и ещё отдохнуть. Ставь лайк 👍, если готов лезть на потолок ради пары дополнительных дней отпуска и говняшку Скрэппи 💩, если в этот ноябрь всё еще пашешь, как трактор! 🚜
#компильдот
Please open Telegram to view this post
VIEW IN TELEGRAM
💩3🌚1
😰Постмортем на задачку.
В сентябре мы взялись за задачу, которая изначально показалась сложной, но выполнимой в предсказуемые сроки.

Для меня сроки – это супер-важная штука. Потому что сроки – это про доверие, а доверие, ну сами понимаете. Лучше его беречь в общем.

С момента образования команды в марте, мы соблюдали все поставленные сроки. В крайнем случае укладывались в интервалы погрешности.

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

В чем ситуация?
😞 В сентябре мы взялись за задачу, которую пообещали сделать за две недели. И вот в ноябре мне стыдно, что задача все еще в разработке. Почему стыдно? Ну потому что выполнение этой задачи в срок позволило бы ребятам в пиццериях проще пройти пики в ноябрьские праздники. Время пиздецовое, хотелось успеть функционал, который немного бы помог не сгорать на работе.
 
В общем, тут моя рефлексия на то, что пошло не так, и как бы могло пойти, если бы все было так.
 
Какие были проблемы:
🔘 Один раз код пришлось полностью выкинуть. Из-за того, что логика легаси оказалась несовместима с изначально планируемым дизайном фичи.
🔘Потратили много времени на обсуждение двух вариантов решения, оба из которых через две недели разработки оказались неверными.
🔘Много неуверенности в работе под нагрузкой. Просто не знаем, как поведет себя одна из нагруженных таблиц, которая задействована в функционале.
🔘При планировании сроков не совсем глубоко исследовали старый функционал. В итоге не знали, как он будет работать в интеграци.
🔘Мне показалось, что я уже крутой опытный синьор и легаси мне ни по чём. Поэтому мы положили хуй на фактор легаси и фактор того, что мы мало работали в той области.

Что мы сделали хорошо:
🔘Изначально ограничили количество пиццерий, на которых будем тестировать фичу
🔘Изначально постарались упростить первый вариант задачи по функционалу
🔘Взяли три дня на исследование легаси
🔘Сформулировали приемочные критерии
 
🤟Что бы помогло в следующий раз снизить боль от работы.
🔘Возможно документация по этому легаси нам помогла бы хоть немного. Хотя бы понять, что мы встрянем в это дерьмо надолго. Хотя бы задуматься об этом.
 
Сейчас доделаем наконец этот функционал. Надеюсь, что на проде все будет хорошо. Пишем сценарии для тестов и покрываем ими вот это все. Дальше ждет прод и проверка фичи на одной пиццерии на проде. А потом улучшение этой фичи для раскатки на большее количество пиццерий.
 
Что делаем перед следующим этапом задачи:
🔘Позвали одного из самых охуенных наших инженеров по тестированию, чтобы он помог нам составить и требования к следующей задаче и тест-кейсы и проследил, чтобы мы не филонили в покрытии тестами.
🔘Напишем доку по тому что сделали и тому, что раскопали.
🔘Измерим нагрузку, которую создает наш функционал на нагруженную таблицу и если нужно оптимизируем запрос и работу с базой.
 
🤬А еще будем учитывать фактор осени в следующем году. Ибо осенью мозг работает в пол силы. Нужно брать что-то менее амбициозное. (Кстати, ставь лайкосик, если тоже к осени опадаешь, как кленовый лист! 🍁)
#опыт #процессы #постмортем
3
🤕 Как я случайно справился с зимней хандрой

🅰️ TLDR: Я начал работать только при дневном свете (с 8:30 до 16:00). Получилось меньше рабочих часов, но больше итоговой работы и удовольствия от неё.

Как обычно в ноябре - декабре это бывает, меня поприжало. Собственно, почему и не было постов. Туман в голове, рассеянность, общая слабость, невозможность войти в поток (ой да блин, я даже дышал с трудом, какой там нахер поток).

Справиться с этим состоянием не получалось. Ничего не помогало – ни витамины, ни походы к психологам. Сначала я старался все же делать посты через силу, но в итоге решил не давить из себя раба по капле, и просто забил, сконцентрировавшись на более достижимых аспектах моей жизни – прохождении Red Dead Redemption 2.

🧈 Но вмешался случай и случайным образом я случайно нашел решение проблемы (абсолютно СЛУЧАЙНО). Делюсь с вами.

Итак, для того чтобы в зимний период избавиться от тумана в голове нужно всего лишь… Работать только при дневном свете!

Короче, я начал вставать с рассветом в 8:30, начинать работу в 9:00 и заканчивать в 16:00. По МСК это период с 8:00 до 15:00. Важно еще то, что после окончания работы у меня остается полтора часа светового дня на свои дела. То есть я не работаю от рассвета до заката прям, а немного гуляю при свете дня.

И, о чудо – продуктивность не то что выросла, а вернулась к дозимним показателям!
 
🛌 Засыпать, я, естественно, начал тоже раньше, но этот аспект я не особо контролировал – он сам пришел в норму.
 
Тут возможно меня покритикуют, что я получается меньше работаю: типа 7 часов + перерыв на обед и турнички, итого всего 6 часов. Но йопт, лучше наверное 6 часов продуктивной работы в удовольствие, чем 8 часов недовольного топтания говна в ступе?

🅰️ Итого: Если чувтсвуете, что зимой началась хандра – попробуйте работать только при дневном свете (даже если его прям мало-мало) и заканчивать работу до заката. Возможно вы как и я заметите эффект с первого дня.

П.С.: И да, напишите в комментах или мне в личку, есть ли у вас что-то похожее зимой, и как вы с этим справляетесь? Мне было бы супер-интересно узнать.
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1🤓1
🤶🧧Думаю, что надо подвести итоги года и закончить его на высокой ноте. Последнее время мало тут активничал, но думаю с февраля восстановлю былую регулярность.

А пока итоги такие: Начал вести канал, научился более менее регулярно в него писать. Много какие знания прокачал через написание постов. И вот еще подкаст записал под конец года. Получилось вроде неплохо.

А вообще конечно год для ведения канала я выбрал такой себе. Невольно вспоминается цитата из фильма Аэроплан: "Да, неудачный день я выбрал для того чтобы перестать нюхать клей!"

Но в любом случае всех с наступающим новым годом и спасибо, что читали, лайкали и просто не отписались после всех этих компильдотов!
3
Forwarded from Dodo Engineering
О пути из разработчика в лидеры, внутренней перестройке, погружении в бизнес и о том, что делает СТО в Dodo Engineering

💻 Так совпало, что три года назад наша IT-команда официально стала компанией Dodo Engineering. И сегодня мы празднуем её день рождения. В честь этого и грядущего Нового года — спецвыпуск подкаста.

🎙Гость — Павел Притчин, в роли ведущего — Дмитрий Афонченко, наш разработчик.

Паша рассказывает о том,
как выглядит Dodo Engineering со стороны СТО, как происходила его трансформация из простого разработчика в технического лидера, какие навыки и книги помогают ему в работе.

Узнаем, как Паша относится к падениям Dodo IS, когда в последний раз писал код, как фиксирует свои результаты, на каком уровне СТО (джун, мидл, сеньор) находится и откуда у него есть время на подкаст.

И куда, в конце концов, делась рубрика «монолитометр».

🎧 Где послушать:

Web
Apple Podcasts
Google Podcasts
Я.Музыка
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5
🤬Быстрая мысль про ChatGPT.
С новым годом, етить его на право! 🎄

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

Короче, ChatGPT можно использовать в качестве советника для составления имен для доменных сущностей. Я попробовал спросить эту штуку, как мне лучше назвать класс для составного продукта – CompoundProduct или CompositeProduct и вот что он мне ответил. (смотри на скрине)

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

ПС Понятно, что это пока все ненадежное и после каждого такого ответа нужен дополнительный анализ, но тем не менее!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6
⚖️ Равновесие Нэша и конфликты в команде

Если не смотрели фильм “Игры разума” с Расселом Кроу, то обязательно посмотрите, а после просмотра обязательно погуглите про “Равновесие Нэша”.
 
Это довольно несложная теорема, которая говорит о том, что в абсолютно ЛЮБОЙ конечной игре есть такое состояние игроков, когда они не могут увеличить свой выигрыш. Более того, равновесием Нэша называется такое состояние, когда по сути весь набор игроков находится в проигрышном положении.
 
Простым языком – в любой игре может сложиться так, что все игроки будут "жрать говно", хотя если оба одновременно постараются, то могут перестать это делать.
 
Давайте на такой схеме рассмотрим. У нас есть игрок 1 и игрок 2. И они в положении 4:

1) Оба не жрут говно
2) Игрок 1 жрет, а Игрок 2 не Жрёт
3) Игрок 2 жрет а Игрок 1 не Жрёт
4) Оба жрут говно
 
Тут все будут жрать говно. Почему? Да потому что переход в состояние 1 возможен только через состояние, когда один из игроков выбрался из говна (2 или 3), а это обидно для другого игрока, и он всеми силами будет тащить второго игрока обратно.

🤔 Смекаете? Ситуация, думаю, более чем знакомая. И, как мы теперь понимаем, математически неотвратимая.
 
💩Теперь к конфликтам в команде.
Конфликт в команде, это состояние, когда все жрут говно. В чем задача талантливого лидера в таком случае? Перевести одновременно всех в состояние 1. Но знаете в чем фишка? Математику не обманешь, кто-то все равно будет жрать говно…

🅰️(UPD)Прикладное значение: Думал, писать или не писать. Но все же решил дописать.

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

(UPD2)Еще важно, что это работает только для игр “все против всех”. То есть есть еще возможность решить конфликт, попытавшись перевести игру из условия “все против всех”, в условия, “все друг другу помогают”. Тогда возможны более приятные расклады.
#процессы
🔥2👍1
🙏 Kafka #5: Сегменты и индексы. Как брокер указывает консьюмеру на своё место?
Пояснительные дикпики 1 и 2
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
🙏 Kafka #5: Сегменты и индексы. Как брокер указывает консьюмеру на своё место?

Кажись у меня появилась энергия даже на такую душную тему, как кафка.

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

🚸 Начнем с того, что кафка работает по TCP и использует свой бинарный протокол. Как он работает?

1️⃣ Когда консьюмер подключается к брокеру, он посылает в него запрос на поиск нужного оффсета: void seek(TopicPartition, offset). Есть еще seekToBeginning или seekToEnd, они работают почти так же, только ищут по времени, а не по оффсету.
2️⃣ Брокер находит нужный оффсет.
3️⃣ Консьюмер вызывает метод poll(timeout) и начинает консьюмить.
(Пояснительный дикпик 1)

🅰️ Как брокер быстро находит нужный оффсет? Понятное дело по индексу. Обычно индекс кажется загадочной структурой, которая магически ускоряет всё в этой жизни, но на деле это тупо файл.

Мне проще разбирать штуки на конкретных примерах, поэтому представим, что нам пришел запрос seek() с параметрами TopicPartition = "configured-topic-0" и offset = 1.
 
1️⃣ Сначала по имени партиции находим нужную папку.
2️⃣ Потом в нужной папке находим файл с индексом.
3️⃣ В файле индекса находим нужный offset.
4️⃣ В файле сегмента находим нужное сообщение по offset.
(Пояснительный дикпик 2)

Так и работают индексы в кафке. Индексы по времени устроены так же, только мы лезем в файл с расширением .timeindex.

Мне было прикольно во всем этом разобраться, но возможно я где-то накосячил. Так что не стесняйтесь в комментариях или личке писать мне всякие критические доводы по этому посту. А в следующий раз я думаю разобрать механизмы реплицирования топиков.
#kafka
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
🤖 Tralebot

🏇Недавно прошёл Red Dead Redemtion 2. Прохождение заняло 60 часов чистого времени и три месяца в целом.
 
Игра невероятна! Столько пищи для размышлений я давно не получал. Словно прочитал какой-нибудь многотомный эпос. Да и по времени, кстати, так и выходит. Единственный момент в том, что в игре дохрена каких-то новых для меня английских слов.

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

Так я начал мутить себе телеграм-бота переводчика, который умеет заносить слова в словарь, а потом гонять по ним квизы.
 
Прикольный и небольшой проект, на котором я решил лишний раз Clean Architecture паттерн (хер его знает, паттерн ли это или типа такая структура проекта просто). Заодно подтянул своего хорошего друга Сашу Коновалова на настройку инфраструктуры, ибо мне возиться со всеми этими деплоями лень, а он вроде как недавно курсы девопса прошёл (а не как я Red Dead Redemption).
 
Собственно, поэтому я сюда и не писал. Что-то увлекся этим ботом и допиливанием фич по нему, а еще за этот месяц с помощью него выучил 124 новых слова.
 
🅰️ Тут я хочу поделиться репозиторием, который будет полезен, если хотите посмотреть:
1️⃣ Как по-быстрому настроить деплой на сервак с докером по коммиту в мастер

2️⃣ Как настроить секреты, чтобы они не лежали в репе

3️⃣ И как настроить оплату в телеге через нативный телеговский виджет.

4️⃣ Ну и хз, можете подсмотреть еще архитектуру бота. Там много что есть еще что допиливать с технической стороны, но мне что-то лень, я сейчас в основном фичи новые пилю. (Хочу чтобы эта штука сыпала в меня ачивками за каждое дейсвтие и тешила мое ЧСВ)

5️⃣ Чуть позже хочу сделать там еще запись в логи через Loki, это чтобы можно было смотреть их прям в графане и не деплоить и не лазить в кибану.

Секретный пункт 6️⃣ Ой и да, там нет тестов. Это плохо, но я пока типа в творческом поиске, поэтому положил на них с прибором ибо переписывать их после каждого нового переосмысления мне лень. Простите, не делайте так – тесты это очень и очень хорошо.
 
Самого бота пока не рекламирую, так как он в стадии пре-альфа тестирования. Но в ридмихе репозитория ссылка есть, так что можете опробовать, если хотите. 😉
#петпроекты #cleanarchitecture
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
По минутам.

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

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

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

Возвращаясь к “По минутам” Не знаю, всем ли подойдет такое чтиво. Оно заставляет окунуться в 24-ое февраля снова, только теперь со всеми теми знаниями о будущем, что мы успели увидеть за год.

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

Ну и наконец, надеюсь, что через год этот ад прекратится и везде наступит мир. Всем мира!

#нетвойне
🕊51
🌴 Expression Trees

Рубрика задротские штучки.

Если вы заглядывали в репозиторий TraleBot’а, то видели там метод IsApplicable у каждой команды. Этот метод в тупую проверяет пользовательский ввод, и, если тот подходит под условия, то вызывается метод Execute у команды.
 
Я подумал, что было бы круто как-то ускорить все эти проверки, и вспомнил, что когда-то давно на одной работе тимлид советовал мне переписывать большие if'ы на Expression Tree. Тогда я поверил, что это всё ускоряет и вопросов не задавал, а сейчас решил проверить, а реально ли оно быстрее работает?
 
🅰️ Оказалось и правда быстрее. К примеру вот такое выражение

return person != null
&& person.Name != null
&& person.Age < 9;
 
Оказалось примерно в два раза медленее, чем аналгичное скомпилированное ExpressionTree (тут неполный код, чисто для примера):

var hasNameAndAge = Expression.AndAlso(
Expression.AndAlso(
objectNotNull,
hasNameNotNull),
hasAgeLessThanParam);



SimpleCodeScenario: 2.662 ns
ExpressionsScenario: 1.213 ns

И вот я пока что-то ХЗ почему так.

P.S: код самого бенчмарка я загнал в sharplab.io, про который когда-то давно рассказывал. Вот ссылочка на него

Может кто-то знает ответ, почему так? Напишите в комменты или мне в личку, а то я так по форумам поискал, но что-то внятного ничего не нашел. Только пост на StackOverflow, где люди нашли ту же зависимость, но внятно ответить, почему так не смогли.
#петпроекты #бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
2
🌴 Expression Trees. Часть 2

Пока искал причину, почему Expression Tree работает быстрее, решил проверить, а что быстрее pattern matching выражения или обычные операторы сравнения?

🅰️ И офигеть, но pattern matching выражения реально быстрее! То есть все эти подсказочки райдера, это еще и нехилая такая оптимизация, а не просто синтаксический опиум для народа!
 
[Benchmark]
public bool SimpleCodeScenario()
{
      return person != null

&& person.Name !=null
&& person.Age < 9;
}
 
[Benchmark]
public bool PatternMatchingExpressionScenario()
{
     return person is {Name: {} , Age : <
9 };
}
 
Вышли вот такие данные: 

SimpleCodeScenario 2.5764 ns
PatternMatchingExpressionScenario 0.2032 ns


Кто-то, конечно, скажет, что это всего две наносекунды, но разница в 10 раз – это разница в 10 раз.
#бенчмарки
🔥2🌚1
🌴 Pattern Matching.

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

Я только что прогнал оба варианта кода через Sharplab.io чтобы посмотреть какой шарповый код сгенерирует компилятор и знаете что, вот так он выглядит:

Вот так:
public bool PatternMatchingExpressionScenario()
{
PersonRecord personRecord = person;
return (object)personRecord != null && personRecord.Name != null && personRecord.Age < 9;
}


В целом ничего не поменялось, ну кроме разве что копирование переменной для тред-сейфности добавилось, ну и привидение к типу object. Наверное в этом и кроется вся загадка. 🦆
#бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤓1
🌴 Pattern Matching 2: Паттерн-матчинг и тайны перфоманса.

Так, вроде докопался до сути. Если просто прикопать персону var personCopy = person;

[Benchmark]
public bool SimpleCodeScenario()
{
var personCopy = person;
return personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}


То ничего не изменится. Но если добавить каст к объекту, то производительность выправится

[Benchmark]
public bool SimpleCodeScenarioWithCast()
{
var personCopy = person;
return
(object)personCopy != null && personCopy.Name != null && personCopy.Age < 9;
}


🅰️А если долго смореть IL код, то (IL код начнет смотреть в ответ) можно увидеть, что вот такой вариант, приведением к объекту приводит к тому, что объект person кладется на стек всего один раз, а в случае с отсутствием такого каста, при каждой проверке условия объект будет класться на стек заново. То есть в первом случае его положат на стек аж три раза, а во втором случае всего один.

Дело раскрыто, ducktective Димас удоляется на выходные. 🦆

P.S.: И, да, какой же топовый инструмент sharplab.io! Без него в таком душном деле, как без рук. Всем советую.
#бенчмарки
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉2👍1🤩1🌚1
🤖OpenAi API для шарпистов.

Короче, у меня есть охуенная новость, которую я не могу сдержать.

👸 Знаете ли вы что у OpenAI есть изичный туториал для знакомства с их API? Ну типа за пару часов можно сделать херню внутри которой будет встроен ChatGPT (ну почти)?
 
👉 Если не знаете, то вот ссылка: https://platform.openai.com/docs/quickstart
 
Там всё как два пальца, но есть нюанс – примеры кода либо на ноде либо на питоне. Для бывалых не проблема, но для шарповых любителей – как минмум неудобство.

🅰️ Но не спешите прокрастинировать! Короче, сели вчера с Саней Коноваловым и в четыре руки запилили пример для оного туториала на шарпе! https://github.com/Undermove/openai-quickstart-csharp

Теперь ничто не остановит вас от изучения ChatGPT Api. Отмазок больше нет!
 
PS Есть одно маленькое но. Для взаимодействия с API используется бибилиотечка https://github.com/OkGoDoIt/OpenAI-API-dotnet которая пока что не поддерживает модель gpt3.5-turbo, но скоро её добавят – это дело одного вечера на самом деле и если не терпится, то можете форкнуться и добавить сами. ПР на добавление там уже висит и думаю, что на следующей неделе уже дойдет до релиза.

PPS Ну и втрепите звезду что ли моему репозиторчику, а мне будет притяно ❤️

PPPS Распространите 🗣
#openai #chatgpt
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2🤩1
🏳️Как внедрять изменения, даже если вы не смогли никого переспорить.

Короче, я очень часто имею свое мнение, а посему дохера спорю. И в спорах я чаще всего остаюсь при своем мнении.

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

Сегодня прочитал историю чувака по имени Нараян Писапати, который в Индии в городе Хайдарабаде обнаружил, что уровень грунтовых вод стал охуеть как снижаться.

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

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

И вот тут Нараян показал, что не лыком шит! Вместо того, чтобы обвинить весь мир в непонимании, он подумал, а что если каким-то образом поднять спрос на просо?

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

Короче, хочу мыслить, как Нараян!

История взята из статьи: "Воплощение прорывных идей" Сирил Буке, Жан-Луи Барсу, Майкл Вейд.
#harvardbusinessreview
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2🤔2
😆 Шутка-минутка.
Блин, простите, сейчас будет несмешная штука, но я не могу её не запостить.

Если у вас у программистов есть Дональд Кнут, то почему нет Дональда Пряника? И, если такие здоровенные книги пишет Дональд Кнут, то какие тогда книги мог бы писать Дональд Пряник?

Простите еще раз. 🍪🌚
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚5🦄2
☕️ Сколько кофеина в кофе ☕️
Не знаю как вы, а я обожаю кофе. Злоупотребляю эспрессо, варю колд-брю, чтобы штырило и прошу бариста намутить мне самую горькую кофеиновую таблетку.
 
Всю свою жизнь я думал, что эспрессо это самый лютый способ заварки, но челики с канала Russian Barista тут сделали фееричный видос, в котором прогнали разные способы заварки через лабораторию и посмотрели что к чему.

🅰️ В общем, я сделал для вас таблицу, чтобы вы не тратили времени на просмотр видоса. На первом месте кофеиновый король – гейзерная кофеварка 👑

1️⃣ Гейзерная кофеварка 15,34 мг кофеина на 100 г кофе (почему-то в этом пункте измерение ведется не так как в остальных, да к тому же в видосе это значение меняется на граммы, короче, намудрил монтажер что-то)

2️⃣ Американо полным проливом 11,07 мг на 1 грамм зерна

3️⃣ Суперавтоматическая кофемашина 10,56 на 1 г зерна (они тестили в какой-то рожковой типа такой)

4️⃣ Лунго примерно как суперавтоматическая кофемашина (авторы не показали результат, видимо его сожрала реклама)

5️⃣ Фильтр-кофе 9,68 мг на 1 г зерна

6️⃣ Аэропресс 9,21 мг на 1 г зерна

7️⃣ Колд-брю 8,31 на 1 г зерна

8️⃣ Френч-пресс 7,48 мг на 1 г зерна

9️⃣ Эспрессо 7,33 мг на 1 г зерна

🔟 Ристретто 6,34 мг на 1 г зерна
 
По факту, эспрессо – это безалкогольное пиво от мира кофе. Значит не такой уж я и кофеман! Офигенно! (ловит паническую атаку от седьмой кружки эспрессо 😵‍💫)
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7😈1
🐑 Читшиты для прометеуса и не только.

Намедни впиливали с Саней Коноваловым метрики для Тралебота в графане и, пока копались, нашли неплохой чит-шит для запросов в Prometheus.

Читшит годный, покрывает много базовых метрик (да что уж там, покрывает больше, чем мне нужно!).

🅰️ Я попользовался, пошел ставить звезду на гитхабе и увидел, что там так-то много еще годных читшитов. Там есть и по докеру и по куберу и по MySQL. Короче, довольно много быстрых и полезных подсказок. Горячо рекомендую.

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

Абсолютно без стыда и зазрения совести шарахнул репозиторию звезду 🙂(если вам понравится, то тоже не стесняйтесь сыпать звездами), занес в закладочки.
#инструменты
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5🤩1