Как стать автором
Обновить
205.2
Карма
54.1
Рейтинг
Антон Околелов @varanio

Тимлид, ведущий подкаста «Цинковый прод»

  • Подписчики 184
  • Подписки 61

Цинковый meetup #1

ПрограммированиеУправление персоналомСоциальные сети и сообщества

Всем привет, это подкаст "Цинковый прод", и у нас есть небольшой анонс. Мы решили разнообразить нашу развлекательно-познавательную программу, и сделать митап, который пройдет онлайн 29 июля в 20:00 МСК.


Участие без регистрации и смс, просто на ютубе:



У нас будет аж 5 докладов:

Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Просмотры492
Комментарии 4

Когнитивные искажения с примерами для айтишников

Блог компании KarunaПрограммированиеНаучно-популярноеМозг

Про когнитивные искажения много пишут и много говорят.


Однако всегда не хватало более чёткого понимания, как именно это влияет на профессиональную деятельность, мою и моих коллег. Какие решения я как тимлид и программист принимаю неправильно. Что мне подправить, на что обратить внимание.


Поэтому я решил взять справочник когнитивных искажений и поискать примеры из реальной IT-жизни по каждому пункту.


Если вам интересно, добро пожаловать под кат.


Ладно, по каждому пункту — это я погорячился, так как я нашел аж 176 видов искажений. Поэтому выберу рандомно лишь некоторые из них.

Читать дальше →
Всего голосов 53: ↑50 и ↓3+47
Просмотры20K
Комментарии 56

Дженерики в языке Go

Блог компании KarunaПрограммированиеGo
func Map[F, T any](s []F, f func(F) T) []T {
    r := make([]T, len(s))
    for i, v := range s {
        r[i] = f(v)
    }
    return r
}

Как вы уже наверняка знаете, proposal по дженерикам в Golang принят (официально это называется type parameters) и будет имплементирован в go 1.18. Бета будет доступна уже в конце этого года. А это значит, что пора разобраться, на чём в итоге остановились разработчики языка — ведь черновик type parameters постоянно менялся в течение последних лет.


Технология новая, на практике толком никто не использовал. Поэтому если увидите какую-то неточность в статье, не стесняйтесь указать это в комментариях.


Самостоятельно поиграться с дженериками можно здесь


Итак, поехали.

Читать дальше →
Всего голосов 43: ↑43 и ↓0+43
Просмотры11K
Комментарии 44

Можно ли пингвина наследовать от птицы?

Разработка веб-сайтовПрограммированиеООП

Опрос на telegram-канале Cross Join "Можно ли наследовать класс Пингвин от класса Птица?" удивил. Большая часть людей ответили вполне определённо "да" или "нет" (результаты опроса приложены в конце статьи). Не ожидал такого расклада, поэтому решил написать короткую заметку.


На самом деле, если вам зададут такой вопрос на собеседовании, знайте: тут есть подвох. Даже два.


image

Читать дальше →
Всего голосов 46: ↑21 и ↓25-4
Просмотры8.4K
Комментарии 160

Чем синьор отличается от джуниора?

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

Это способность построить в голове модель того, что происходит в создаваемом софте. И помнить ее долго хотя бы в общих чертах.

Вам может быть наплевать на выгоды бизнеса (привет, fillpackart ), или вы наоборот живете только работой. Вы можете знать или не знать детали реализации gc в jvm и вертеть красно-черные деревья.


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

Читать дальше →
Всего голосов 34: ↑19 и ↓15+4
Просмотры8.9K
Комментарии 14

Радикальный перфекционизм в коде

Разработка веб-сайтовПрограммированиеIT-стандарты

Идея взята с постов telegram-канала Cross Join


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

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

Бред, правда? Ну да, слишком радикально. Пусть в целом люди ходят как хотят, и чувствуют себя хорошо. Исключительные ситуации нужно решать частным порядком (уволить хулигана?), ну в крайнем случае ввести правило, что кроме белья должно быть что-то еще.


И правда, бред. Ну а зачем тогда мы сами себе вводим бешеный фашизм в коде?

Читать дальше →
Всего голосов 94: ↑52 и ↓42+10
Просмотры13K
Комментарии 216

В языке Go наконец-то появятся дженерики. Proposal принят

ПрограммированиеGo

Как сообщает телеграм-канал Cross Join, предложение по добавлению дженериков в Go наконец-то приняли.


Ссылка на сам документ здесь: type parameters.


type Stringer interface {
    String() string
}

type Plusser interface {
    Plus(string) string
}

func ConcatTo[S Stringer, P Plusser](s []S, p []P) []string {
    r := make([]string, len(s))
    for i, v := range s {
        r[i] = p[i].Plus(v.String())
    }
    return r
}
Читать дальше →
Всего голосов 26: ↑22 и ↓4+18
Просмотры8K
Комментарии 58

Tagged Unions в PHP (примерно как в Rust)

Разработка веб-сайтовPHPПрограммирование

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


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


Однако та реализация enums — лишь часть глобального плана. Сегодня мы рассмотрим следующий пункт, tagged unions, по-русски это переводится как "тип-сумма".


Голосования по нему пока не проходило, но предлагается также включить его в PHP 8.1.


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


Зачем всё это вообще нужно?


Result как в Расте


Если вы писали на языке Rust, то наверняка встречали встроенный enum Result. В Rust, Go и т.д. нет механизма exception, так как в этих языках считается, что явная обработка ошибок гораздо надёжнее. Язык вынуждает тебя явно проработать все варианты событий, а не кидать исключение в надежде, что кто-то наверху знает о нём и умеет правильно обрабатывать. (Не будем здесь холиварить, на тему exceptions vs return type, у каждого своё мнение). Если говорить конкретно про Раст, то результатом вызова функции, которая может породить ошибку, часто делают значение типа Result.


Result состоит из двух вариантов (case-ов в терминологии enum в PHP): Ok и Err. Варианты мы могли бы сделать и с помощью предыдущего функционала enum, или даже констант, но нам нужно возвращать еще и сами значения. Причем, в случае успеха значением может быть строка, а в случае ошибки какой-нибудь другой тип. Например, integer (статус HTTP-ответа).


Как это будет выглядеть в PHP, если голосование будет успешным:


enum Result {
    case Ok(public string $json);
    case Err(public int $httpStatus);
}

function requestApi($url): Result {
    //
}
Читать дальше →
Всего голосов 19: ↑18 и ↓1+17
Просмотры3.2K
Комментарии 48

Enum в PHP 8.1 — для чего нужен enum, и как реализован в PHP

Разработка веб-сайтовPHPПрограммирование

Через несколько дней заканчивается голосование по первой итерации реализации enum в PHP 8.1 . Уже видно, что голосов “за” гораздо больше, так что давайте кратко пройдемся и посмотрим, что же нам приготовили авторы языка.


Зачем нужны enum?


Зачем вообще нужны enum? По сути они служат цели улучшенного описания типов. Давайте рассмотрим пример без енумов и с ними. Допустим, у нас продаются машины трех цветов: красные, черные и белые. Как описать цвет, какой тип выбрать?


class Car {
    private string $color;

    function setColor(string $color): void {
        $this->color = $color;
    }
}

Если мы опишем цвет машины как простой string, то во-первых при вызове $myCar->setColor(..) непонятно, что за строку туда писать. “red” или “RED” или “#ff0000”, а во вторых, легко ошибиться, просунув туда случайно что-то не то (пустую строку, к примеру). То же самое будет, если использовать не строки, а числа, например.

Читать дальше →
Всего голосов 35: ↑33 и ↓2+31
Просмотры8.6K
Комментарии 5

Mutation Driven Development

Программирование

Статья написана на основе поста в telegram-канале Cross Join.


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


Мутационное тестирование


Когда вы пишете тесты, по TDD или нет, даже с формальным 100% покрытием, вы никогда не будете уверены в том, что в коде на самом деле протестировано всё. Например, можно банально ошибиться в вызове assert в самом тесте.


assertEquals($a, $a);

И если даже при тестировании удалось дойти до какого-то if, не факт, что в этом if правильно проверены все условия.

Читать дальше →
Всего голосов 19: ↑11 и ↓8+3
Просмотры2.6K
Комментарии 14

Упрощенный синтаксис для jsonb в PostgreSQL 14

Разработка веб-сайтовPostgreSQLПрограммированиеSQL

Как сообщает telegram-канал Cross Join, в репозиторий Postgres упал комит, упрощающий работу с jsonb. Теперь можно обращаться к частям jsonb с помощью квадратных скобок, причем это работает как на чтение, так и на запись.


Прощай jsonb_set  и прочие костыли типа data = data - 'a' || '{"a":5}'


Несколько примеров:


Обновляем значение объекта по ключу. 25 здесь является числом, но взято в кавычки, потому что присваиваемое значение должно быть jsonb


-- (person_data имеет тип jsonb)
UPDATE users 
SET person_data['age'] = '25'; 
Читать дальше →
Всего голосов 53: ↑53 и ↓0+53
Просмотры6.6K
Комментарии 28

Подкасты — самый простой способ повышения кругозора программиста

Программирование


Всем привет, меня зовут Антон Околелов, вы можете меня знать по подкасту "Цинковый прод"


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


Часто кандидаты отвечают что-то вроде "Ну, я почитываю Хабр, иногда смотрю видосы с конференций, но сейчас вообще-то времени нет, на работе вечный аврал, а дома — у меня ребёнок родился, сам понимаешь, не до саморазвития".


Так вот, это bullshit. Если есть уши, и они способны слушать, то времени для развития полно.

Читать дальше →
Всего голосов 55: ↑29 и ↓26+3
Просмотры8K
Комментарии 48

Twitter взломали. Пострадали аккаунты Apple, Барака Обамы, Билла Гейтса и множества других звезд твиттера

Информационная безопасностьTwitter API

Огромное количество самых звездных акканутов Твиттера вчера было взломано (Ким Кардашьян, Илон Маск, Джеф Безос, Билл Гейтс, Барак Обама, Уоррен Баффет и другие). От их лица было опубликовано объявление о раздаче биткоинов небывалой щедрости. Сообщение гласило, что все биткоины, которые будут переведены на определенный кошелек, вернутся обратно в двойном размере:

Читать дальше →
Всего голосов 16: ↑13 и ↓3+10
Просмотры6.7K
Комментарии 16

PHP — какая ниша у языка и поможет ли PHP8 решить насущные проблемы (спойлер: имхо нет)

Разработка веб-сайтовPHPПрограммирование
class Number {
    private int|float $number;

    public function setNumber(int|float $number): void {
        $this->number = $number;
    }

    public function getNumber(): int|float {
        return $this->number;
    }
}

В одном из выпусков подкаста "Цинковый прод" мы мельком обсуждали, что нового будет в языке PHP8. После записи я решил написать статью, чтобы сформулировать свои мысли по положению PHP в современной разработке.

Давайте определимся в целом, какую нишу занимал/занимает язык, и куда он движется

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


С одной стороны, это действительно так: без дополнительных библиотек можно, например, вытащить из суперглобальной переменной $_POST параметры POST-запроса и вставить их в mysql с помощью встроенных функций, и это вроде как здорово.


Также очень важно, что модель "рожден, чтобы умереть" (например, в php-fpm) упрощала и упрощает разработку до безумия: не нужно знать, что такое локи, дедлоки, утечки памяти и т.д. Не надо писать await перед каждой строкой кода и т.д.


Скрипт начал работать над входящим HTTP-запросом, поработал в отдельном процессе, ни с кем не общаясь, и сдох, очистив все после себя. Очень просто программировать. Порог входа — около нуля.


Опять же, можно обойтись без роутинга: имя файла — это уже описание роутов.


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

Читать дальше →
Всего голосов 85: ↑65 и ↓20+45
Просмотры19K
Комментарии 228

Разговоры про PostgreSQL. Интервью с Алексеем Лесовским в подкасте «Цинковый прод». Часть первая

Разработка веб-сайтовPostgreSQLПрограммированиеSQLАдминистрирование баз данных
Недавно мы пригласили в эфир "Цинкового прода" Алексея Лесовского из компании Data Egret. Разговор получился интересный и познавательный, поэтому предлагаю вашему вниманию расшифровку этого выпуска. Из-за внушительного объема пришлось разбить текст на части. Если лень ждать продолжения — можно просто послушать аудиоверсию здесь.

Всем привет, это сороковой выпуск подкаста "Цинковый прод", и с нами в студии постоянные ведущие Антон Околелов, Никита Васильченко и Грицак Олег.


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

Читать дальше →
Всего голосов 14: ↑12 и ↓2+10
Просмотры3.9K
Комментарии 4

Что делать тимлиду, чтобы команда не выгорала

ПрограммированиеУправление проектамиУправление персоналом

Недавно в подкасте "Цинковый прод" мы обсуждали выгорание. Я решил структурировать некоторые мысли и оформить в виде статьи


История первая


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


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


И вот я начал фрилансить по вечерам.

Читать дальше →
Всего голосов 47: ↑41 и ↓6+35
Просмотры18K
Комментарии 39

Часть вторая. Как проходить code review по версии Google

Разработка веб-сайтовПрограммированиеСовершенный код
Возможно вы читали первую часть статьи про код ревью со стороны ревьювера (кстати, мы уже успели ее обсудить в последнем выпуске подкаста "Цинковый прод").

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

Как обычно, будем говорить MR (Merge Request) вместо CL, потому что термин CL мало кто понимает.


Оригинал инструкции для авторов MR по версии Google можно посмотреть здесь, а я дам краткую выжимку.


Итак, поехали

Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Просмотры19K
Комментарии 36

Как проводить Code Review по версии Google

Разработка веб-сайтовПрограммированиеСовершенный код
Вопросы код-ревью меня интересуют очень давно. Много раз возникали те или иные проблемы то с качеством кода, то с климатом в коллективе. И действительно, code review — это если не единственное, то одно из самых главных мест для возникновения конфликтов в коллективе разработчиков.

И вот недавно при подготовке к очередному выпуску подкаста "Цинковый прод" я узнаю, что Google опубликовал свод правил по проведению Code Review, битком набитый ценными мыслями. Весь материал довольно объемный и не влезет в одну статью, поэтому я постараюсь выделить наиболее интересные (мне) мысли.


Итак, поехали

Читать дальше →
Всего голосов 154: ↑147 и ↓7+140
Просмотры96K
Комментарии 134

FFI: пишем на Rust в PHP-программе

Разработка веб-сайтовPHPПрограммированиеRust

В PHP 7.4 появится FFI, т.е. можно подключать библиотеки на языке C (или, например, Rust) напрямую, без необходимости писать целый extension и разбираться в его многочисленных нюансах.


Давайте попробуем написать код на Rust, и используем его в PHP-программе
Читать дальше →
Всего голосов 76: ↑76 и ↓0+76
Просмотры15K
Комментарии 23

Понимание джойнов сломано. Продолжение. Попытка альтернативной визуализации

Разработка веб-сайтовPostgreSQLПрограммированиеSQL
Многие из вас читали предыдущую статью про то, как неправильная визуализация для объяснения работы JOIN-ов в некоторых случаях может запутать. Круги Венна не могут полноценно проиллюстрировать некоторые моменты, например, если значения в таблице повторяются.

При подготовке к записи шестого выпуска подкаста "Цинковый прод" (где мы договорились обсудить статью) кажется удалось нащупать один интересный вариант визуализации. Кроме того, в комментариях к изначальной статье тоже предлагали похожий вариант.


Все желающие приглашаются под кат

Читать дальше →
Всего голосов 41: ↑35 и ↓6+29
Просмотры25K
Комментарии 29

Информация

В рейтинге
81-й
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Работает в
Дата рождения
Зарегистрирован
Активность