Search
Write a publication
Pull to refresh
35
0.9
Константин @Cerberuser

Разработчик, экспериментатор

Send message

GitHub Actions как CI/CD для сайта на статическом генераторе и GitHub Pages

Reading time7 min
Views15K


Немного прошерстив Habr удивился тому, что очень мало опубликовано статей на тему (beta-)фичи GitHub'а — Actions.


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

Читать дальше →

ФП vs ООП

Reading time6 min
Views69K

Не так давно на хабре появилось несколько постов противопоставляющих функциональный и объектный подход, породивших в комментариях бурное обсуждение того, что вообще это такое — объектно ориентированное программирование и чем оно отличается от функционального. Я, пусть и с некоторым опозданием, хочу поделиться с окружающими тем, что думает по этому поводу Роберт Мартин, также известный, как Дядюшка Боб.


Читать дальше →

Почему Солнце вращается вокруг Земли

Reading time9 min
Views89K


В России одна известная организация под названием ВЦИОМ проводила социологическое исследование, на котором гражданам предлагали ответить на вопрос: «Согласны ли вы со следующим утверждением: Солнце вращается вокруг Земли?» Данные этого опроса многократно перепечатываются в СМИ, и на различных сетевых ресурсах в комментариях часто ссылаются на него при обсуждении различных общественно-политических проблем.


Если бы я принял участие в этом опросе, я бы, скорее всего, был среди тех 30%, кто ответил утвердительно. Ниже я постараюсь объяснить, почему.

А это нормально вообще? Проблема нормы в психологии

Reading time21 min
Views20K
Понятие нормы – это одно из фундаментальных понятий в психологии. Любая коррекционная работа начинается с того, что мы решаем, что является нарушением (которое можно устранить или, во всяком случае, скомпенсировать), а что – конструктивной особенностью отдельно взятого индивидуума. Многие люди на том или ином этапе своей жизни задаются вопросом о психологической норме. Нормален ли я? Нормален ли мой ребенок? Нормально ли то, что делает мой партнер? Сегодня, соответственно, мы попытаемся разобраться, что означает слово «нормально» применительно к душевной жизни.

Начать здесь нужно с того, что у этого слова может быть несколько разных значений. Одни и те же феномены могут быть «нормальными» с одной точки зрения и «ненормальными» – с другой.

Во-первых, мы можем понимать норму статистически. Многие психологические и психофизиологические характеристики вариабельны в широком диапазоне, и разброс их значений можно описать через нормальное распределение. Если мы будем исследовать какой-то вариант интеллекта (например, измеряя способность решать типовые задачи из тестов Айзенка), то мы увидим небольшое количество исключительно эффективных испытуемых, небольшое количество исключительно неэффективных и много промежуточных, средних результатов. Эти средние результаты мы можем считать нормативными, а краевые результаты, соответственно, интерпретировать как одаренность или, наоборот, интеллектуальный дефицит. Но тут сразу возникает резонный вопрос: если «колокольчик» нормального распределения имеет плавную форму, то что дает нам основание для выделения в нем качественно различных областей? На каком основании мы считаем то или иное значение характеристики пороговым, задающим границы нормы?
Читать дальше →

Конкурс! Истории при свете мерцающих серверов…

Reading time1 min
Views3.6K
image

На Хабре сегодня уже звучали хэллоуинские байки. А как насчет конкурса на самую страшную историю?

Пускай она начинается так:

Пустой ночной офис отзывался холодом. Шум серверов и ветер в холодных коридорах притупляли накрывающее чувство одиночества. Уставший от ослепляющего света монитора, он решил найти минутное освобождение в какао с маковыми сушками. Едва сделав шаг в сторону кофе-поинта, он почувствовал, как запускается ДГУ...

А продолжение этой истории предстоит придумать вам!
Сладость или гадость

О сколько нам открытий чудных готовит Office Microsoft

Reading time5 min
Views116K


По сообщениям в комментариях к статье про блокнот, во всех версиях Microsoft Excel, начиная по крайней мере с '97 и до самых новых, в имени листа не всегда можно ввести большую букву Ж. Данная проблема обсуждается в сети уже давно, например на этом форуме забавно наблюдать, как некоторые утверждают, что у них проблемы нет, а у других есть, но не всегда, и никто не понимает, почему так. На первый взгляд можно подумать, что это просто недоработка программистов: они хотели не дать пользователю ввести символ ':', и просто не подумали о том, что Ж находится на той же кнопке.

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

Байки из ЦОДа: хэллоуинские страшилки о дизелях, дипломатии и саморезах в калорифере

Reading time9 min
Views22K
Мы с коллегами подумали: почему бы перед любимым хоррор-праздником вместо успехов и интересных проектов не вспомнить всякие ужастики, с которыми сталкиваются люди в цодостроительстве. Итак, выключите свет, включите тревожную музыку, сейчас будут истории, от которых мы до сих пор иногда просыпаемся в холодном поту.


Читать дальше →

Пссс, хотите немного ужасных IT-историй?

Reading time4 min
Views32K
Боитесь ли вы темноты? Может быть, зомби-апокалипсиса или чудовища под кроватью? Мы знаем, что нет. У нас, айтишников, свои источники ужаса: криворукие пользователи, далёкие от IT начальники, упавшие сервера, пропавшие или не сделанные бэкапы, легаси код и Agile-митинги, когда на самом деле вся разработка управляется вскриками «ещё вчера», «заказчик мечет», «там критикал на проде». Накануне Хэллоуина мы решили найти самые ужасные истории, рассказать пару своих, а заодно услышать ваши. Ну что, готовы рассказать холодящие душу байки? 

Это такой интернет мы хотим: как социальные медиа превратились в смертельное оружие

Reading time9 min
Views26K
Мы уже привыкли, что социальные сети влияют на выборы и политику в странах Запада. Но они могут стоить жизни людям, и решения проблемы пока нет.

image
Читать дальше →

Неформальные отношения в команде: зачем и как ими управлять

Reading time13 min
Views47K


Много лет назад я пришёл на должность разработчика в одну компанию и вскоре стал свидетелем необычной сцены. Тимлид соседнего отдела подозвал своего подчинённого посреди рабочего дня и довольно громко и развязно сказал ему: «Слышь, на вот тебе денег. Сгоняй в магазин, купи вискаря и закуски». 

Я подумал: «Да ладно! Странно всё это...». Но ситуация повторялась ещё несколько раз. Проработав в компании какое-то время, я понял, что подобное поведение там было нормой. Одни команды дружили против других, процветала подковёрщина, а топ-менеджмент абсолютно никак не реагировал на это. Я ушёл оттуда, несмотря на то, что и задачи были интересные, и условия неплохие. Но моральный климат был невыносим. 

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

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

В последние десять лет я занимаюсь тем, что руковожу командами разработки, семь из них — в Badoo. Эта статья написана по мотивам моего  выступления на Saint TeamLead Conf 2019: в ней я попытаюсь объяснить, как и зачем нужно работать над неформальными отношениями в коллективе. 
Читать дальше →

Игровая агрессия, или как кооператив превращается в кровавую баню и что делать, чтобы он этого не делал

Reading time53 min
Views29K


В прошлый раз мы остановились на том феномене, что игра, которая изначально задумывалась как кооператив (например, D&D или многопользовательская песочница типа Space Station 13), почему-то может использоваться игроками совершенно по другому назначению, становясь пространством насилия и травли. Сегодня, соответственно, будем разбираться в том, как устроена детская (и не только детская) агрессия, как работает формат песочницы, что делает агрессия в песочнице (и вообще в игре) и как можно ей управлять.

Физика эмоции


В дальнейшем изложении мы будем использовать гидродинамическую модель эмоции. Представим себе, что, например, гнев – это жидкость. Чем больше накапливается гнева, тем сильнее становится напор жидкости в трубе – отдельно взятом индивидууме. На выходе есть два вентиля. Один соответствует внутреннему тормозу – представлению, например, о том, что обижать других людей дурно, некрасиво, недостойно… Второй соответствует внешнему тормозу – страху перед наказанием или какими-то другими негативными последствиями. Что будет, если давление жидкости нарастает, а вентили (хотя бы какой-то один из них) намертво закручены?
Читать дальше →

Статический анализ IntelliJ IDEA против человеческого разума

Reading time4 min
Views13K

Не так давно я изучал вывод статического анализатора IntelliJ IDEA для Java-кода и наткнулся на интересный случай. Так как соответствующий фрагмент кода не является open source, я его анонимизировал и отвязал от внешних зависимостей. Будем считать, что он выглядел так:


private static List<Integer> process(Map<String, Integer> options, List<String> inputs) {
    List<Integer> res = new ArrayList<>();
    int cur = -1;
    for (String str : inputs) {
        if (str.startsWith("-"))
            if (options.containsKey(str)) {
                if (cur == -1) cur = options.get(str);
            }
            else if (options.containsKey("+" + str)) {
                if (cur == -1) cur = res.isEmpty() ? -1 :
                        res.remove(res.size() - 1);
                if (cur != -1) res.add(cur + str.length());
            }
    }
    return res;
}

Код как код, что-то преобразуется, что-то делается, но статическому анализатору он не понравился. Здесь мы видим целых два предупреждения:


Code screenshot

Читать дальше →

Хороший разработчик мудр, а не гениален

Reading time5 min
Views18K


Одним из самых важных уроков, которые я постиг в качестве разработчика 15 лет назад, была эта простая мысль:


Хороший код выразителен, а не впечатляющ.

Я помню, как услышав это спросил «А в чём разница?», и получил ответ.


«Выразительный» — понятный, однозначный и конкретный. А раз так, написание выразительного кода потребует работы с конкретной задачей. Вложение сил и времени в его создание служит конкретной цели, а результат соответствует ожиданию.


«Впечатляющий» — код, который запоминается. Написание кода, запоминающегося своими сложными структурами и алгоритмами, хотя и почешет ваше эго, станет настоящей болью для того, кто будет поддерживать его в будущем. И если последний окажется маньяком, узнавшим ваш адрес, храни вас Господь от его гнева.


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


«Гениальные» разработчики, так же обладая умом, напротив, думают лишь о настоящем. Они умеют решать текущие проблемы быстро и эффектно. Вот только гора от их хаков и выкрутасов постоянно накапливается и однажды обрушает код, хороня под собой репутации всех причастных. Вот почему Стив Макконнелл однажды верно заметил:


Программирование — не работа в ЦРУ, вам не нужно быть смекалистым.

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




Вот ещё несколько принципов мудрых разработчиков.


Читать дальше →

15 попугаев: выбираем хостинг-провайдера VPS/VDS-серверов

Reading time15 min
Views76K

Выборы, выборы, кандидаты — хостинги.


«Нам нужен новый хостинг», — осенило нашего шефа в начале весны. Это не было весенним обострением, это было объективной необходимостью, потому что старая кобра пережила свой яд предыдущий почему-то решил, что раз клиенты из-за 152-ФЗ идут сами, то можно предоставлять услуги кое-как и забить на SLA. И тут я узнал новое: хостингов очень много, а вот хостингов с приемлемыми характеристиками — поискать. И это я ещё не читал отзывы клиентов — вот где портал в ад!

Итак, я вооружился мозгом, Google, нашими требованиями и стал выбирать лучший VPS хостинг, с которым мы, вероятно, продолжим свою жизнь. В процессе выбора получилась неплохая аналитика, и я решил её частично выложить на Хабр — вдруг поможет такому же админу-страдальцу? Enjoy my work, как говорится.

Читать дальше →

Обзор дешевых VPS-серверов

Reading time7 min
Views281K

Вместо предисловия


или как так получилось, что появилась эта статья


в котором рассказывается, зачем и почему проводилось это тестирование

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

Читать дальше →

Семантический браузер или жизнь без сайтов

Reading time6 min
Views10K
image

Мысль о неизбежности перехода глобальной сети от сайтоцентристской структуры к юзероцентристской я высказал еще 2012 году (Философия эволюции и эволюция интернета или в сокращенном виде WEB 3.0. От сайтоцентризма к юзероцентризму). В этом году я попытался развить тему нового интернета в тексте WEB 3.0 — второй подход к снаряду. Сейчас же выкладываю вторую часть статьи WEB 3.0 или жизнь без сайтов (советую просмотреть перед чтением этой страницы).

Итак, что же получается? Интернет в версии web 3.0 есть, а сайтов нет? А что же тогда есть?
Читать дальше →

Почему от 3D болит голова / Часть 8 Расфокус и будущее 3D

Reading time22 min
Views20K

S3D: No pain IS gain



Когда-то давно в далекой галактике Geektimes был опубликован цикл статей о том, почему 3D-фильмы так сложно снимать без головной боли у зрителей. Как это часто бывает, цикл безвременно оборвался из-за недостатка времени у автора. При том, что тонны материалов остались лежать (иногда даже аккуратно подобранные).

В декабре этого года исполнится 10 лет волне съемок 3D-фильмов, поднятой триумфальным успехом фильма «Аватар»‎, впервые в истории собравшего более $2 миллиардов в прокате. С тех пор, по мнению журналистов, «3D умер»‎. По факту это, конечно, не так. По сравнению с ситуацией 13-летней давности количество фильмов, выпускаемых в 3D, выросло на порядок, а количество залов, где можно показывать 3D, выросло в 400 раз (!) и продолжает быстро расти с CAGR порядка 12–14%. Всем бы технологиям такую «смерть»‎. Тем не менее проблемы у 3D-фильмов, очевидно, есть. И мы уже много лет занимаемся их анализом и исправлением.

Хотелось бы понять, что с этими фильмами происходит. Почему «3D мертв»‎, а кинотеатры с 3D активно строят? 

Один уважаемый российский стереограф неоднократно публично называл нас патологоанатомами за то, как мы детально разбирали проблемы фильмов. Звучит обидно, особенно учитывая, что у нас активно разрабатываются и средства «реанимации»‎. С другой стороны еще Авиценна, помнится, говаривал пациентам: «Существуют я, ты и болезнь. Чью сторону ты примешь, тот и победит»‎. Поэтому не будем идти против мудрости веков. Если пациент сказал в морг, значит в морг! Медицина тут бессильна.


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


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

Идентификация клиентов на сайтах без паролей и cookie: заявка на стандарт

Reading time68 min
Views50K
image

Уважаемые Хаброжители! Уважаемые эксперты! Представляю на вашу оценку новую концепцию идентификации пользователей на веб-сайтах, которая, как я надеюсь, с вашей помощью станет открытым интернет-стандартом, сделав этот интернет-мир чуточку лучше. Это вариант черновика протокола беспарольной идентификации, оформленный в виде вольной статьи. И если идея, положенная в его основу, получит от вас, уважаемый читатель, положительную оценку, я продолжу публикацию его на reddit.com и rfc-editor.org. И надеюсь, мне удастся заинтересовать в его реализации разработчиков ведущих браузеров. Потому ожидаю от вас конструктивную критику.

Внимание: очень много текста.

Рецензировать

Почему полезно изобретать колёса

Reading time4 min
Views7.7K


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

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

Но увы. Да, было очевидно, что подобный код встречался ему раньше. Он в общих чертах знал, как там все работает. Нам хватило бы наброска решения, который демонстрировал бы понимание концепта. Однако код, который кандидат писал на доске, был полной бессмыслицей. У него сложилось крайне туманное представление о том, что такое промисы в JavaScript и он не мог толком объяснить, зачем они нужны. Для джуниора это было бы еще простительно, но на позицию сениора уже не тянуло. Как бы этот разработчик сумел устранить баги в сложной цепочке с промисами и объяснить остальным, что именно он сделал?
Читать дальше →

Телефонные мошенники. Действие четвертое, заключительное…

Reading time3 min
Views89K

Information

Rating
3,142-nd
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity

Specialization

Fullstack Developer
Senior