Долгое молчание прерываю двумя часами контента! Классно поговорили с Димой в подкасте javaswag. В комментариях буду ждать список всех своих оговорок, ошибок и неверных мнений, пишите, поспорим! 😁
И вообще подкаст классный, послушайте и другие выпуски 👍
И вообще подкаст классный, послушайте и другие выпуски 👍
🔥3
Forwarded from javaswag
https://javaswag.github.io/episode/54/
Слушать подкаст в Apple | Spotify | Google | Yandex
В 54 выпуске подкаста Javaswag поговорили с Валерием Овчинниковым о нагруженных сервисах и нестандартных практиках в процессах
00:01:43 О себе
00:10:36 Низкоуровневые трюки
00:18:15 Разница между 500 мс и 5 мс сервисами
00:33:28 Пишем систему с нуля
00:55:45 Центр математических финансов
01:11:01 Ставим задачи по "уму"
01:14:58 Модели мотивации людей
01:23:24 Нестандартные практики в процессах
01:37:52 Дизайн доки и дизайн ревью
01:44:30 Предыдущее непопулярное мнение
01:46:25 Непопулярное мнение
Гость - https://www.linkedin.com/in/valerii-ovchinnikov/
Кип сейф! 🖖
Слушать подкаст в Apple | Spotify | Google | Yandex
В 54 выпуске подкаста Javaswag поговорили с Валерием Овчинниковым о нагруженных сервисах и нестандартных практиках в процессах
00:01:43 О себе
00:10:36 Низкоуровневые трюки
00:18:15 Разница между 500 мс и 5 мс сервисами
00:33:28 Пишем систему с нуля
00:55:45 Центр математических финансов
01:11:01 Ставим задачи по "уму"
01:14:58 Модели мотивации людей
01:23:24 Нестандартные практики в процессах
01:37:52 Дизайн доки и дизайн ревью
01:44:30 Предыдущее непопулярное мнение
01:46:25 Непопулярное мнение
Гость - https://www.linkedin.com/in/valerii-ovchinnikov/
Кип сейф! 🖖
Javaswag
#54 - Валерий Овчинников - нагруженные сервисы и нестандартные практики разработки
В 54 выпуске подкаста Javaswag поговорили с Валерием Овчинниковым о нагруженных сервисах и нестандартных практиках в процессах
❤4🔥4👍1
Там в чате огненный контент про перфоманс java и c++. Зачем вообще использовать java, если так неудобно? Какие есть инструменты замеров производительности? И даже почему Scylla быстрее, чем Cassandra.
Залетайте в чат канала!
Залетайте в чат канала!
🔥3😱1
javaswag
https://javaswag.github.io/episode/54/ Слушать подкаст в Apple | Spotify | Google | Yandex В 54 выпуске подкаста Javaswag поговорили с Валерием Овчинниковым о нагруженных сервисах и нестандартных практиках в процессах 00:01:43 О себе 00:10:36 Низкоуровневые…
Кстати, если перейти в канал подкаста, там в посте ссылочек досыпали на то, что мы обсуждали в подкасте. Например, на Chronicle Wire.
❤1👍1
Короче, я пересмотрел первый семестр физтеховского квантмеха. На этот раз всё было понятно. В прошлый раз (на четвёртом курсе, или на третьем?) было ниче не понятно.
Пришёл к выводу, что избегание дираковских обозначений в начале, чтобы "упростить понимание", только больше запутывает (ПОТОМУ ЧТО УМНОЖЕНИЕ КОММУТАТИВНО ОЛО).
В целом, этот семестр очень базовый, одночастичный, можно всё осознать мозгом обычного человека. Кому интересно, лучший вариант курса ИМХО от господина Геца можно посмотреть вот тут.
Вообще очень интересно было пересмотреть с некоторыми багажом за плечами. Некоторые вещи увидел с другой стороны, некоторые понял (которые раньше не понимал), для других увидел альтернативные способы вычисления.
Повторение — мать учения, в общем.
Пришёл к выводу, что избегание дираковских обозначений в начале, чтобы "упростить понимание", только больше запутывает (ПОТОМУ ЧТО УМНОЖЕНИЕ КОММУТАТИВНО ОЛО).
В целом, этот семестр очень базовый, одночастичный, можно всё осознать мозгом обычного человека. Кому интересно, лучший вариант курса ИМХО от господина Геца можно посмотреть вот тут.
Вообще очень интересно было пересмотреть с некоторыми багажом за плечами. Некоторые вещи увидел с другой стороны, некоторые понял (которые раньше не понимал), для других увидел альтернативные способы вычисления.
Повторение — мать учения, в общем.
👍8😁1
Сократический метод
Как вы знаете, я теперь человек немного образованный, Платонов этих ваших читавший. Так что теперь могу срывать покровы с тех, кто только заявляет, что читал.
Пройдёмся по трём историям.
1. Самое, пожалуй, глупое. Я регулярно прохожу всякие обучения для руководителей в группах, с тренерами. Чаще всего это полезные и иногда даже увлекательные занятия.
Но один раз мне запомнился особенно. Мне где-то на глаза попадалась техника Socratic method для развития сотрудников. Но там, где мне это попалось, было одно только название.
Как раз на курсе про развитие я спросил, кто что знает и думает об этом методе. На что получил ответ, который меня смутил ещё тогда, а теперь уж даже забавляет.
В общем, ребята перепутали сократический и софистический методы, судя по тому, что "ну это плохой метод, уловками наводить на те ответы, которые считаешь правильными".
Пожалуйста, не повторяйте такую ошибку. Сократ не пытается навести на тот ответ, который ему хочется. Он даже может под давлением аргументов изменить свою позицию во время дискуссии (например, в Государстве это прямо явно артикулировано).
2. Поглядывал недавно разные материалы про то, как расти менеджеру среднего звена. Смотрел и матрицы компетенций. И вот там была компетенция: может участвовать в сократическом диалоге.
Если почитать википедию, то может сложиться впечатление, что Сократ это такой коуч. Задаёт вопросы, чтобы человек вынул ответы, которые у него в голове и так уже есть.
Но вот только это нифига не так. Буквально все диалоги выглядят так: Сократ что-то утверждает и спрашивает: "так ли это по-твоему?", а собеседники отвечают: "клянусь Зевсом, Сократ" или "точно так, как ты говоришь" или "ни в каком виде не соглашусь с этим". Всё. Где там ответы из головы собеседника для меня до сих пор загадка.
Да, в Государстве речи оппонентов чуть более содержательные, но там всё равно нет ничего похожего на коучинг.
Нам всё это время врали. Мемы хотели нас спасти, но мы не слушали.
3. Личной истории здесь у меня нет, но постоянно слышу, что Сократ, мол, в своих диалогах путём рассуждений с собеседником приходит к истине. Ну про роль собеседника, думаю, вы уже поняли. А вот к истине Сократ, судя по всему, приходит не во время диалогов, а во время размышлений в свободное время. Помните вот эти выкладки: лемма 1, лемма 2, лемма 3, а том теорема, в которой ЧУДЕСНЫМ ОБРАЗОМ, эти леммы пригождаются для доказательства? У Сократа абсолютно та же структура в его рассказах. Он уже заранее знает, какие ему понадобятся кирпичики и лепит сначала их, а уже потом складывает из них целое.
Один из героев диалогов рассказывает, что на войне Сократ мог часами стоять босиком на морозе не сходя с места и _размышлять_. Видимо, именно в такие моменты он приходил к истине, а не во время диалогов.
Как вы знаете, я теперь человек немного образованный, Платонов этих ваших читавший. Так что теперь могу срывать покровы с тех, кто только заявляет, что читал.
Пройдёмся по трём историям.
1. Самое, пожалуй, глупое. Я регулярно прохожу всякие обучения для руководителей в группах, с тренерами. Чаще всего это полезные и иногда даже увлекательные занятия.
Но один раз мне запомнился особенно. Мне где-то на глаза попадалась техника Socratic method для развития сотрудников. Но там, где мне это попалось, было одно только название.
Как раз на курсе про развитие я спросил, кто что знает и думает об этом методе. На что получил ответ, который меня смутил ещё тогда, а теперь уж даже забавляет.
В общем, ребята перепутали сократический и софистический методы, судя по тому, что "ну это плохой метод, уловками наводить на те ответы, которые считаешь правильными".
Пожалуйста, не повторяйте такую ошибку. Сократ не пытается навести на тот ответ, который ему хочется. Он даже может под давлением аргументов изменить свою позицию во время дискуссии (например, в Государстве это прямо явно артикулировано).
2. Поглядывал недавно разные материалы про то, как расти менеджеру среднего звена. Смотрел и матрицы компетенций. И вот там была компетенция: может участвовать в сократическом диалоге.
Если почитать википедию, то может сложиться впечатление, что Сократ это такой коуч. Задаёт вопросы, чтобы человек вынул ответы, которые у него в голове и так уже есть.
Но вот только это нифига не так. Буквально все диалоги выглядят так: Сократ что-то утверждает и спрашивает: "так ли это по-твоему?", а собеседники отвечают: "клянусь Зевсом, Сократ" или "точно так, как ты говоришь" или "ни в каком виде не соглашусь с этим". Всё. Где там ответы из головы собеседника для меня до сих пор загадка.
Да, в Государстве речи оппонентов чуть более содержательные, но там всё равно нет ничего похожего на коучинг.
Нам всё это время врали. Мемы хотели нас спасти, но мы не слушали.
3. Личной истории здесь у меня нет, но постоянно слышу, что Сократ, мол, в своих диалогах путём рассуждений с собеседником приходит к истине. Ну про роль собеседника, думаю, вы уже поняли. А вот к истине Сократ, судя по всему, приходит не во время диалогов, а во время размышлений в свободное время. Помните вот эти выкладки: лемма 1, лемма 2, лемма 3, а том теорема, в которой ЧУДЕСНЫМ ОБРАЗОМ, эти леммы пригождаются для доказательства? У Сократа абсолютно та же структура в его рассказах. Он уже заранее знает, какие ему понадобятся кирпичики и лепит сначала их, а уже потом складывает из них целое.
Один из героев диалогов рассказывает, что на войне Сократ мог часами стоять босиком на морозе не сходя с места и _размышлять_. Видимо, именно в такие моменты он приходил к истине, а не во время диалогов.
❤6
Для тех, кому стало душно, АНЕКДОТ в тему.
Послушайте трек Метафизикаещё раз . Но держите в голове, что Сократ был очень крепким и выносливым физически (см. прошлый пост), а Платон вообще олимпийский чемпион по панкратиону.
Если понравится, то у них большинство треков такие, мне нравится.
Послушайте трек Метафизика
Если понравится, то у них большинство треков такие, мне нравится.
Yandex Music
Метафизика
🔥2
Самая популярная причина нытья эмигранта
По моим наблюдениям это банки. Не на ровном месте Револют возник. Ребята многие проблемы западного банкинга решают.
Я тут делал кредитку — абсолютно отвратительно.
Местные конторы не хотят давать в аренду тачку с залогом наликом, только кредитку им подавай. Пришлось делать.
1. Кредитка для не банковских резидентов _полностью_ фондируется из средств клиента. Т.е. если я хочу лимит 1к евро, то положить на специальный счёт 1к евро, которые заморозят. Естественно никакого интереста на них не платят.
2. Кредитка "очень выгодная", никаких комиссий нет, беспроцентный период есть. Всего лишь надо только платить страховку каждый месяц, но это не комиссия. Ну и там двухзначные проценты, если промедлил (хотя вроде сам у себя занимал). А еще ты сам погасить долг не можешь, надо письмо менеджеру написать, чтобы сделал. А он том должен по телефону позвонить и подтвердить с тобой, что ты реально просил погасить.
3. Чтобы просто услышать, какие бывают шикарные условия и как все устроено с этими кредитками, нужно согласовывать видео-звонок с банком, где нужно пройти идентификацию с паспортом. Таких звонков нужно минимум три для оформления карты.
4. Несмотря на полное фондирование, нужно заполнить несколько анкет, в том числе одну заполняет работодатель, чтобы кредитное бюро тебя поскорило.
5. Я делал экстремально быстро и вот уже через 15 дней приехал в банк, чтобы отдать оригиналы анкет на скоринг и забрать карту.
Не так уж и долго, но миллион бесполезных встреч посередине выводят из себя.
Этот пост я посвящаю всем, кому Тинькофф присылал в нулевые кредитки по почте, вообще ничего не спрашивая.
По моим наблюдениям это банки. Не на ровном месте Револют возник. Ребята многие проблемы западного банкинга решают.
Я тут делал кредитку — абсолютно отвратительно.
Местные конторы не хотят давать в аренду тачку с залогом наликом, только кредитку им подавай. Пришлось делать.
1. Кредитка для не банковских резидентов _полностью_ фондируется из средств клиента. Т.е. если я хочу лимит 1к евро, то положить на специальный счёт 1к евро, которые заморозят. Естественно никакого интереста на них не платят.
2. Кредитка "очень выгодная", никаких комиссий нет, беспроцентный период есть. Всего лишь надо только платить страховку каждый месяц, но это не комиссия. Ну и там двухзначные проценты, если промедлил (хотя вроде сам у себя занимал). А еще ты сам погасить долг не можешь, надо письмо менеджеру написать, чтобы сделал. А он том должен по телефону позвонить и подтвердить с тобой, что ты реально просил погасить.
3. Чтобы просто услышать, какие бывают шикарные условия и как все устроено с этими кредитками, нужно согласовывать видео-звонок с банком, где нужно пройти идентификацию с паспортом. Таких звонков нужно минимум три для оформления карты.
4. Несмотря на полное фондирование, нужно заполнить несколько анкет, в том числе одну заполняет работодатель, чтобы кредитное бюро тебя поскорило.
5. Я делал экстремально быстро и вот уже через 15 дней приехал в банк, чтобы отдать оригиналы анкет на скоринг и забрать карту.
Не так уж и долго, но миллион бесполезных встреч посередине выводят из себя.
Этот пост я посвящаю всем, кому Тинькофф присылал в нулевые кредитки по почте, вообще ничего не спрашивая.
❤9🤯5👍2😢2😁1
Ещё пара мыслей про док мед. Мысль первая, длинная
Несколько недель назад мне стало интересно, как там психотерапию меряют. А то знаете же, что когнитивно-поведенческая терапия имеет доказательную базу в отличие от всех остальных? Вот и я слышал об этом. Решил немного разобраться и обнаружил ситуацию примерно, как на картинке выше.
Свой путь я начал с вот этого огромного метаанализа (или мета-мета-пост-пост- ). Случайным образом выбирал какой-то метаанализ, смотрел, что внутри. Там выбирал уже по названию, но получилось более или менее случайно.
Первое, что я обнаружил: большинство исследований измеряют результаты с мощью опросников. Т.е. довольно субъективно. Однако в некоторых работах измеряли и объективные показатели.
Второе важное обстоятельство. Вообще во всех исследованиях, что мне попались, используется пассивный контроль. То есть бейзлайн это люди, которые ждут очереди на лечение. Кое-где было несколько вариантов лечения, но контрольная группа всё равно состояла из ожидающих.
Метаанализы чудесным образом выбирают статьи, в которых гигантские дисперсии, чаще всего пересекающие ноль (нет стат значимости), но зато так совпадает, что матожидание у всех с одной и той же стороны! Ну или там и правда грамотные методы отбора статей и я не прав, кто шарит проверьте.
Давайте посмотрим на несколько примеров, которые Я ВЫБРАЛ САМ. 😁
Несколько недель назад мне стало интересно, как там психотерапию меряют. А то знаете же, что когнитивно-поведенческая терапия имеет доказательную базу в отличие от всех остальных? Вот и я слышал об этом. Решил немного разобраться и обнаружил ситуацию примерно, как на картинке выше.
Свой путь я начал с вот этого огромного метаанализа (или мета-мета-
Первое, что я обнаружил: большинство исследований измеряют результаты с мощью опросников. Т.е. довольно субъективно. Однако в некоторых работах измеряли и объективные показатели.
Второе важное обстоятельство. Вообще во всех исследованиях, что мне попались, используется пассивный контроль. То есть бейзлайн это люди, которые ждут очереди на лечение. Кое-где было несколько вариантов лечения, но контрольная группа всё равно состояла из ожидающих.
Метаанализы чудесным образом выбирают статьи, в которых гигантские дисперсии, чаще всего пересекающие ноль (нет стат значимости), но зато так совпадает, что матожидание у всех с одной и той же стороны! Ну или там и правда грамотные методы отбора статей и я не прав, кто шарит проверьте.
Давайте посмотрим на несколько примеров, которые Я ВЫБРАЛ САМ. 😁
👍4
https://www.sciencedirect.com/science/article/abs/pii/S0003999303002399
Итак, неплохой пример.
Звучит многообещающе!
Взяли людей, которые проходят реабилитацию после болезней лёгких. Замеряют расстояние, пройденное за 6 минут это объективный фактор.
Но вот разница получилась только по опроснику. 6MWD не увеличился значимо.
Ещё хочется отметить, что в группе всего 14 испытуемых, средний возраст которых больше 60 лет.
Итак, неплохой пример.
Звучит многообещающе!
Взяли людей, которые проходят реабилитацию после болезней лёгких. Замеряют расстояние, пройденное за 6 минут это объективный фактор.
Но вот разница получилась только по опроснику. 6MWD не увеличился значимо.
Ещё хочется отметить, что в группе всего 14 испытуемых, средний возраст которых больше 60 лет.
😁1🤔1
Тут снова используется объективный фактор (наряду с опросниками): уровень гликированного гемоглобина.
Сначала разочарование — нет стат значимой разницы сразу после прохождения лечения. Но потом приятный сюрприз: в долгосрочной перспективе разница таки есть. То есть хоть какое-то лечение лучше никакого.
Правда, в метаанализе, из которого я взял эту статью, написано, что качество данных в этих статьях довольно плохое. Зачем тогда их брали? Не поясняют.
Сначала разочарование — нет стат значимой разницы сразу после прохождения лечения. Но потом приятный сюрприз: в долгосрочной перспективе разница таки есть. То есть хоть какое-то лечение лучше никакого.
Правда, в метаанализе, из которого я взял эту статью, написано, что качество данных в этих статьях довольно плохое. Зачем тогда их брали? Не поясняют.
У нормального читателя может возникнуть вопрос: а чего они не возьмут какой-нибудь там МРТ, на нём бы замерили, что там с мозгами от лечения?
Судя по всему, наши современные технологии в этой области просто не позволяют делать какие-то надёжные заключения.
Вот вам интересная статья на почитать (популярная, не научная). Там мужик получил шнобелевку. Вообще лучшая премия имхо (привет левитирующим лягушкам).
Так вот. Он замерял с помощью МРТ эмоциональные реакции лосося на человеческие лица, выражающие разные эмоции. Лосось статзначимо различал человеческие эмоции! Это при том, что лосось был мёртвый!
Ноука!
Судя по всему, наши современные технологии в этой области просто не позволяют делать какие-то надёжные заключения.
Вот вам интересная статья на почитать (популярная, не научная). Там мужик получил шнобелевку. Вообще лучшая премия имхо (привет левитирующим лягушкам).
Так вот. Он замерял с помощью МРТ эмоциональные реакции лосося на человеческие лица, выражающие разные эмоции. Лосось статзначимо различал человеческие эмоции! Это при том, что лосось был мёртвый!
Ноука!
Scientific American Blog Network
IgNobel Prize in Neuroscience: The dead salmon study
I have to say that I am incredibly pleased that this study won the Ignobel. Not just because it's a really fun study, but also because it really is one of those studies that makes you laugh, and then makes you THINK. And in the case of this study in particular…
😁17
Мысль вторая. Бесполезная
Периодически случается, что есть какой-то метод лечения, по которому либо нет исследований, либо они не показали эффективности такого лечения. Например, в вастрик клубе как-то обсуждалась специальная диета. Деталей я уже не помню, но точно знаю нескольких людей, достаточно близко причём, которым такое тоже помогало. И в комментариях к посту таких людей, кому помогло, или их родственников было прилично. Кстати, кому не помогло там не было никого.
Ну так вот. Мы ж тут умные, — у меня, судя по похожим на мой каналам, тут все сплош дата саентисты собрались, — мы понимаем, что если не удалось показать стат значимую эффективность, это не то же самое, что доказать, будто метод не работает.
С другой стороны, если он так круто работает, то почему не прокрасился в исследованиях?
Да чёрт его знает.
У меня есть предположение, которое, кажется, не так уж трудно проверить.
Вот мы сейчас находимся в эпохе доказательной медицины. Это значит, что в целом, каждого конкретного человека вылечить исследователь не стремится. Исследователь ищет эффективный для масс метод. Типа жертвуем десятком ради миллиарда или что-то в таком духе.
Уже много лет нам порочат эру персонализированной медицины, т.е. нацеленной на лечение конкретного человека. Но никак не наступает это, антиутопическое по-существу, время.
Тем не менее. Возможно, есть какие-то особенности у людей, которым помогает какое-то там альтернативное лечение.Гусары, не надо тут про мозги, сами небось витамин D жрёте, потому что в Инстаграме так сказали.
Если таких людей достаточно много (а их вон сколько в интернете), значит штука не прям уникальная. Высока вероятность, что это что-то генетическое (или энвайронментальное какпарускепамагити).
Давайте тогда наберём таких людей, которым помогает. Наберём случайный семпл с улицы. И будем исследовать геномы, искать закономерности.
Если ничего не найдём, то будет, что покушать с грантов. А если найдём, то это ж просто Эльдорадо.
Почему бы не отменять/включать этим людям их диету? А потому что метод селекции уже предполагает, что исследование не слепое (мы же их выбрали, потому что они считают, что диета помогает).
Можно, конечно, условный глютен в еду подмешивать, но это неэтично.
На самом деле все мы знаем, что я в вопросе не разбираюсь чуть менее, чем полностью. Но это не мешает мне делиться мыслями. Глядишь, кто-нибудь просвятит, почему так никто до сих пор не делает.
Периодически случается, что есть какой-то метод лечения, по которому либо нет исследований, либо они не показали эффективности такого лечения. Например, в вастрик клубе как-то обсуждалась специальная диета. Деталей я уже не помню, но точно знаю нескольких людей, достаточно близко причём, которым такое тоже помогало. И в комментариях к посту таких людей, кому помогло, или их родственников было прилично. Кстати, кому не помогло там не было никого.
Ну так вот. Мы ж тут умные, — у меня, судя по похожим на мой каналам, тут все сплош дата саентисты собрались, — мы понимаем, что если не удалось показать стат значимую эффективность, это не то же самое, что доказать, будто метод не работает.
С другой стороны, если он так круто работает, то почему не прокрасился в исследованиях?
Да чёрт его знает.
У меня есть предположение, которое, кажется, не так уж трудно проверить.
Вот мы сейчас находимся в эпохе доказательной медицины. Это значит, что в целом, каждого конкретного человека вылечить исследователь не стремится. Исследователь ищет эффективный для масс метод. Типа жертвуем десятком ради миллиарда или что-то в таком духе.
Уже много лет нам порочат эру персонализированной медицины, т.е. нацеленной на лечение конкретного человека. Но никак не наступает это, антиутопическое по-существу, время.
Тем не менее. Возможно, есть какие-то особенности у людей, которым помогает какое-то там альтернативное лечение.
Если таких людей достаточно много (а их вон сколько в интернете), значит штука не прям уникальная. Высока вероятность, что это что-то генетическое (или энвайронментальное какпарускепамагити).
Давайте тогда наберём таких людей, которым помогает. Наберём случайный семпл с улицы. И будем исследовать геномы, искать закономерности.
Если ничего не найдём, то будет, что покушать с грантов. А если найдём, то это ж просто Эльдорадо.
Почему бы не отменять/включать этим людям их диету? А потому что метод селекции уже предполагает, что исследование не слепое (мы же их выбрали, потому что они считают, что диета помогает).
Можно, конечно, условный глютен в еду подмешивать, но это неэтично.
На самом деле все мы знаем, что я в вопросе не разбираюсь чуть менее, чем полностью. Но это не мешает мне делиться мыслями. Глядишь, кто-нибудь просвятит, почему так никто до сих пор не делает.
❤9🔥1🤔1
Джависты здесь?
Отличный совет. Я тоже делал всегда. Но только не люблю сложные булевы условия, проще ещё своих обёрток дописать к гуавовским. И форматные строчки не люблю, лучше отдельными аргументами отдавать, а форматировать уже внутри.
Чтобы было понятнее, скорее всего будут методы типа
И всевозможные комбинации.
Отличный совет. Я тоже делал всегда. Но только не люблю сложные булевы условия, проще ещё своих обёрток дописать к гуавовским. И форматные строчки не люблю, лучше отдельными аргументами отдавать, а форматировать уже внутри.
Чтобы было понятнее, скорее всего будут методы типа
void validateString(String str, int minLength, int maxLength)И всевозможные комбинации.
👍1👏1
Forwarded from microJUG (Zheka Kozlov)
Давайте поговорим про валидацию входных аргументов. На первый взгляд тема кажется совсем банальной, но есть в ней несколько нюансов, которым, на мой взгляд, уделяют недостаточно внимания.
Есть, к примеру, следующая запись:
Чего здесь не хватает? Правильно, проверок на
Как-то слишком длинно. Если у нас в проекте сотни подобных проверок (все ж пишут проверки, так ведь?🙂), то код сильно раздувается. Хочется покомпактнее. Вспоминаем, что в Java 8 появился метод Objects.requireNonNull(). Заменяем:
Гораздо лучше. Но теперь вспоминаем, что
Есть там и другие проверки: checkNotNull(), checkElementIndex(), checkPositionIndex(), checkState(). При этом checkArgument() из них самый универсальный, и с его помощью можно проверить любое boolean выражение:
В итоге мы смогли уложиться в две строчки, что очень хорошо: проверки не должны занимать много места.
В Гуаве при этом решено ещё несколько проблем.
Представим, что нам ещё надо добавить проверку на максимальную длину строки. Мы пишем в обычном if-стиле и случайно допускаем ошибку в шаблоне:
Если в рантайме
Конечно, тут сообщение будет неполное. Но это лучше, чем совершенное левое исключение, не связанное с исходной ошибкой.
Другая фишка – это стремление Гуавы не генерировать мусора. Все помнят, что в Java есть боксинг, а это значит, что простая сигнатура
Например, в этом случае мусора не будет вообще, так как есть перегрузка checkArgument(boolean, String, int, int):
Таким образом,
1. Компактно
2. Безопасно
3. Эффективно
В общем, рекомендую. Валидировать аргументы надо, и надо делать это с хорошими сообщениями.
#guava
Есть, к примеру, следующая запись:
public record Employee(String firstName, String lastName) {}Чего здесь не хватает? Правильно, проверок на
null для firstName и lastName. Ну так давайте добавим:public record Employee(String firstName, String lastName) {
public Employee {
if (firstName == null) {
throw new NullPointerException("firstName must not be null");
}
if (lastName == null) {
throw new NullPointerException("lastName must not be null");
}
}
}Как-то слишком длинно. Если у нас в проекте сотни подобных проверок (все ж пишут проверки, так ведь?🙂), то код сильно раздувается. Хочется покомпактнее. Вспоминаем, что в Java 8 появился метод Objects.requireNonNull(). Заменяем:
public Employee {
Objects.requireNonNull(firstName, "firstName must not be null");
Objects.requireNonNull(lastName, "lastName must not be null");
}Гораздо лучше. Но теперь вспоминаем, что
firstName и lastName также не могут быть пустыми. Objects.requireNonNull() тут уже не поможет. Придётся опять писать трёхстрочные if’ы? Не хочется. Можно создать какой-нибудь утилитный метод типа checkCondition(). Но наверняка в какой-нибудь библиотеке такое уже есть? Я в течение своей многолетней практики сталкивался с разными вариантами и в конце концов понял, что всё-таки лучшим образом эту проблему решили в Guava. В классе Preconditions:public Employee {
...
Preconditions.checkArgument(!firstName.isEmpty(), "firstName must not be empty");
Preconditions.checkArgument(!lastName.isEmpty(), "lastName must not be empty");
}Есть там и другие проверки: checkNotNull(), checkElementIndex(), checkPositionIndex(), checkState(). При этом checkArgument() из них самый универсальный, и с его помощью можно проверить любое boolean выражение:
Preconditions.checkArgument(firstName != null && !firstName.isEmpty(), "firstName must not be null or empty");
Preconditions.checkArgument(lastName != null && !lastName.isEmpty(), "lastName must not be null or empty");
В итоге мы смогли уложиться в две строчки, что очень хорошо: проверки не должны занимать много места.
В Гуаве при этом решено ещё несколько проблем.
Представим, что нам ещё надо добавить проверку на максимальную длину строки. Мы пишем в обычном if-стиле и случайно допускаем ошибку в шаблоне:
if (firstName.length() > MAX_LENGTH) {
throw new IllegalArgumentException(String.format("firstName is too long, max length is %s, got %s", MAX_LENGTH));
}Если в рантайме
firstName оказался слишком длинным, то выбросится исключение, но совсем не IllegalArgumentException с красивым сообщением, а что-то совсем другое (MissingFormatArgumentException). Обидно. Гуава в этом плане более снисходительна. Вариант с Preconditions будет в любом случае бросать llegalArgumentException:Preconditions.checkArgument(firstName.length() <= MAX_LENGTH, "firstName is too long, max length is %s, got %s", MAX_LENGTH);
Конечно, тут сообщение будет неполное. Но это лучше, чем совершенное левое исключение, не связанное с исходной ошибкой.
Другая фишка – это стремление Гуавы не генерировать мусора. Все помнят, что в Java есть боксинг, а это значит, что простая сигнатура
checkArgument() с Object… создавала бы обёртки над примитивными значениями каждый раз. Мелочь, но всё равно не очень приятно. Но в Гуаве у checkArgument() есть множество перегрузок для большинства простых случаев.Например, в этом случае мусора не будет вообще, так как есть перегрузка checkArgument(boolean, String, int, int):
Preconditions.checkArgument(firstName.length() <= MAX_LENGTH, "firstName is too long, max length is %s, got %s", MAX_LENGTH, firstName.length());
Таким образом,
Preconditions в Гуаве – это:1. Компактно
2. Безопасно
3. Эффективно
В общем, рекомендую. Валидировать аргументы надо, и надо делать это с хорошими сообщениями.
#guava
👍5
Я тут полез в своих российских брокеров и обнаружил, что у меня пропал доступ к опционам. А раньше был 🤔.
В общем, статус квала получить я не могу, там нужны какие-то сложные бумажки теперь, мне такие слишком трудно делать.
Решил сдать тест в БКС, чтобы там доступ к опционами получить. Не сдал 😁
В общем, статус квала получить я не могу, там нужны какие-то сложные бумажки теперь, мне такие слишком трудно делать.
Решил сдать тест в БКС, чтобы там доступ к опционами получить. Не сдал 😁
😁13