• Выбор библиотеки ассертов для проекта на Kotlin

      В одном из старых проектов в кучу были навалены ассерты из JUnit, kotlin.test и AssertJ. Это было не единственной его проблемой: его вообще писали как письмо Дяди Федора, а времени остановиться и привести к единому виду не было. И вот это время пришло.


      В статье будет мини-исследование про то, какие ассерты лучше по субъективным критериям. Хотел сначала сделать что-то простое: накидать набор тестов, чтобы быстренько копипастом клепать варианты. Потом выделил общие тестовые данные, некоторые проверки автоматизировал, и как поехало все… В результате получился небольшой розеттский камень и эта статья может пригодится вам для того, чтобы выбрать библиотеку ассертов, которая подойдет под ваши реалии.


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


      Читать дальше →
    • Как убить на мелкий скрипт кучу времени или история одного пулл-реквеста

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


        Понадобилось мне дублировать информацию из markdown-заметок в телеграм-канал. Казалось быть, что тут рассусоливать — Ctrl+C и Ctrl+V в помощь. Однако выяснился маленький нюанс: markdown в телеге не совсем полноценный и ссылки в таком формате [text](http://example.com) клиент не поддерживает. Ладно, подумал я, попробуем что-то с этим сделать.


        Делов там на 5 минут максимум
      • Читаете ли вы Scaladoc для «очевидных» методов коллекций? Или почему лениться не всегда хорошо

          Если вы не знаете, чем отличаются


          someMap.map{ case (k, v) => k -> foo(v)}

          и


          someMap.mapValues(foo)

          кроме синтаксиса или сомневаетесь/не знаете, к каким плохим последствиям это отличие может привести и причем тут identity, то это статья для вас.


          В противном случае — поучаствуйте в опросе, расположенном в конце статьи.

          Я заинтригован
          • +22
          • 2.2k
          • 6
        • Автоматизация загрузки логов из Kibana в Redmine

            Типичный юзкейс для Kibana — смотрим логи, видим ошибки, создаем тикеты по ним. Логов у нас довольно много, места для их хранения мало. Поэтому просто вставить ссылку на документ из Elasticsearch/Kibana недостаточно, особенно для низкоприоритетных задач: пока доберемся до нее, индекс с логом может быть уже удален. Соответственно, приходится документ сохранять в файл и прикреплять к тикету.

            Если один раз это делать, то это еще куда ни шло, но создавать уже десять тикетов подряд будет тупо лень, поэтому я решил это «быстренько» (ха-ха) автоматизировать.


            Под катом: статья для пятницы, экспериментальная фича javascript, пара грязных хаков, небольшая регулярка с галочками, reverse proxy, проигрыш безопасности удобству, костыли и очевидная картинка из xkcd.
            Поехали!
          • Опыт использования библиотеки Puniverse Quasar для акторов

              В прошедшем, 2017 году, был небольшой проект, который почти идеально ложился на идеологию акторов, решили поэкспериментировать и попробовать использовать их реализацию от Parallel Universe. От самих акторов особо много не требовалось — знай себе храни состояние да общайся с другими, иногда изменяйся по таймеру и не падай.

              Библиотека вроде достаточно зрелая, почти 3 тысячи звезд на гитхабе, больше 300 форков, пара рекомендаций на Хабре… Почему бы и нет? Наш проект стартовал в феврале 2017, писали на Kotlin.


              Казалось бы, что могло пойти не так?
            • Зачем мне твои неизменяемые коллекции? Они же медленные

                Бывает так, что когда человек начинает писать на Kotlin, Scala или %language_name%, он делает манипуляции с коллекциями так, как привык, как “удобно”, как “понятнее” или даже “как быстрее”. При этом, разумеется, используются циклы и изменяемые коллекции вместо функций высшего порядка (таких как filter, map, fold и др.) и неизменяемых коллекций.

                Эта статья — попытка убедить ортодоксов, что использование “этой вашей функциональщины” не влияет существенно на производительность. В качестве примеров использованы куски кода на Java, Scala и Kotlin, а для измерения скорости был выбран фреймворк для микробенчмаркинга JMH.

                image
                Читать дальше →
              • Как себе выстрелить в ногу в Kotlin

                  Совсем недавно вышел релиз Kotlin, а его команда разработчиков предлагала задавать вопросы про язык. Он сейчас на слуху и, возможно, многим хочется его попробовать.
                  Пару недель назад тимлид сделал для компании презентацию о том, что в Котлине хорошо. Одним из самых интересных вопросов был «А как в Котлине выстрелить себе в ногу?» Так получилось, что ответил на этот вопрос я.

                  Disclaimer:
                  Не стоит воспринимать эту статью как «Kotlin — отстой». Хотя я отношусь скорее к категории тех, кому и со Scala хорошо, я считаю, что язык неплохой.
                  Все пункты спорные, но раз в год и палка стреляет. Когда-то вы себе прострелите заодно и башку, а когда-то у вас получится выстрелить только в полночь полнолуния, если вы предварительно совершите черный ритуал создания плохого кода.

                  Наша команда недавно закончила большой проект на Scala, сейчас делаем проект помельче на Kotlin, поэтому в спойлерах будет сравнение со Scala. Я буду считать, что Nullable в Kotlin — это эквивалент Option, хотя это совсем не так, но, скорее всего, большинство из тех, кто работал с Option, будут вместо него использовать Nullable.

                  Читать дальше →
                • О стилистике ответов на форумах

                    Ему про Ерему, а он про Фому.
                    Довольно часто сталкиваюсь на форумах с ситуацией, когда какой-то человек (иногда это я) просит о помощи в настройке/установке/чем-нибудь, а ему, не отвечая на исходный вопрос, пытаются высказать свое мнение. Хочу обратить внимание людей на данную проблему. Для наглядности поясню на отстраненном от IT-области примере.

                    Спрашивает человек на форуме: «А где бы купить козьего молочка в родной деревеньке Гадюкино?»
                    А ему отвечают:
                    «Не, козье вредно — ты лучше нормального, коровьего, купи, оно лучше!»
                    «Да-да! Козье — гадость полная, на вкус противное, мне не нравится, пей коровье!»
                    «Не покупай в Гадюкино! В Верхних Валенках гораздо вкуснее продают!»

                    Знакомая ситуация? Если нет, дальше читать не имеет смысла.
                    Читать дальше →