• Еще один DSL для валидаций

      Недавно я написал небольшой гем для валидаций и хотел бы поделиться с вами его реализацией.


      Идеи, которые преследовались при создании библиотеки:


      • Простота
      • Отсутствие магии
      • Легкость в освоении
      • Возможность кастомизации и минимум ограничений.

      Почти все эти пункты завязаны на первом — простоте. Итоговая реализация невероятно маленькая, поэтому я не отниму у вас много времени.


      С исходным кодом можно ознакомиться здесь.

      Читать дальше →
    • Боремся со слишком большими Msg в Elm приложениях

      • Tutorial

      Согласно Elm Architecture, вся логика приложения сконцентрирована в одном месте. Это довольно простой и удобный подход, но с ростом приложения можно увидеть функцию update длиной 700 строк, Msg с сотней конструкторов и Model, не умещающуюся в экран.


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

      Читать дальше →
    • Могу ли я использовать функциональное программирование в своем языке?

      • Translation
      Перед вами любительский перевод эссе Эрика Норманда — консультанта и спикера, продвигающего функциональное программирование.

      Я был довольно волен с терминами, не стеснялся использовать англицизмы вроде "фича". Меня смущает дословный перевод программистских терминов. Приятного чтения

      Резюме: мы отвечаем на вопрос напрямую, но потом разбираем предубеждения, скрытые за ним.


      Довольно часто опытные разработчики спрашивают меня: "Что может дать мне функциональное программирование такого, чего у меня нет? Могу ли я просто начать использовать ФП на своем языке?". Это отличный вопрос, я надеюсь, что смогу дать на него достойный ответ.

      Read more →
    • Настройка домашней среды для разработки (docker + gitlab + DNS)

      • Tutorial

      Intro


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


      У большинства из нас есть какие-нибудь мелкие личные поделки, которые не выходят за рамки наших домов. Кто-то хостит их на рабочем компьютере, кто-то — на Heroku, кто-то — на VPS, а у кого-то есть домашний сервер. На реддите даже есть сообщество r/homelab, в котором люди обсуждают разные железки и софт для т.н. домашней лаборатории.


      Я не настолько увлечен этим вопросом, но у меня дома стоит Intel NUC, который проигрывает музыку с NAS с помощью MPD. Помимо MPD на нем крутятся мои мелкие поделки, которые помогают мне с ним работать: ныне мертвый бот для телеграма, HTTP API на синатре и корявенький фронтенд для него.


      В посте я без особых подробностей (многих из которых сам не понимаю) опишу процесс установки DNS-сервера для работы с доменными именами для сервисов, схему одновременной работы нескольких сервисов с помощью Docker и установку Gitlab с CI. Ничего нового вы не узнаете, но вдруг кому-нибудь пригодится этот "гайд". К тому же я бы хотел услышать предложения по поводу того, как можно было бы сделать это проще/элегантнее/правильнее.

      Читать дальше →
    • Деплой webpack-приложения на github.io с помощью Travis CI

      • Tutorial

      Задача


      Есть приложение, сгенерированное с помощью create-react-app. Нужно развернуть его на github.io.


      Проблемой является то, что Github Pages работает только со статическим кодом и Jekyll.

      Читать дальше →
    • Я ненавижу константы в Ruby

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


        Несмотря на заголовок, гнева в посте не будет.

        Читать дальше →
      • ruby -e для упрощения работы в консоли

          Как, думаю, многим известно, Ruby создавался под влиянием Perl, поэтому нет ничего удивительного в том, что Ruby может подменить Perl в его нише "практического извлечения данных и составления отчетов". В данном небольшом посте речь пойдет об использовании ruby для мелкой обработки текста в консоли.

          Читать дальше →
        • Как я использую git

            Intro


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


            • git add <path>
            • git commit
            • git checkout <path/branch>
            • git checkout -b <new branch>

            И дополнительно:


            • git push/pull
            • git merge <branch>
            • git rebase master (а что, можно еще и на другие ветки ребейзить? О_о)

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

            Читать дальше →
          • Настройка голосовых команд Mac OS для запуска произвольного кода

              Предыстория


              Когда вышла Mac OS Sierra, одной из громких новостей было появление Siri. Меня, как пещерного человека, очень удивила и заинтересовала возможность управления ноутбуком с помощью голоса (да-да, это не инновации, но лично я с этим до этого никогда не пользовался и считал это чем-то бесполезным).


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


              Но тут я неожиданно узнал о голосовых командах, которые есть в маке уже черт знает сколько времени (лет?)


              Читать дальше →
            • ruby -run

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


                Intro


                Относительно недавно искал способ в одну строчку запустить веб-сервер в текущей директории.


                На просторах Stack Overflow нашел примерно такую команду:


                ruby -run -e httpd -- -p 9090 [DIR]

                Что же это за загадочная опция -run и почему ее нет в мануале?


                Читать дальше →
              • Использование lambda в качестве локальных функций

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


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

                  Читать дальше →
                • ActiveResource, prefix и вложенные ресурсы

                    Предыстория


                    Я программист с очень небольшим стажем (недавно накопилось около года в трудовой).
                    Около полугода назад я начал работать с Ruby (вне Rails) и сразу же познакомился с Active Resource и Redmine.

                    Это был очень интересный опыт, сейчас мне кажется, что Ruby — практически идеальный язык (именно язык, я не задаюсь вопросом потребления памяти и скорости работы).

                    Однако в нем весьма много магии, которую бывает сложно понять, когда читаешь исходный код сколько-нибудь крупных проектов (ActiveResource я отношу к ним, хотя по сравнению с rails, частью которого он является, этот гем кажется каплей в море).

                    Проблема


                    Проект заключался в создании консольной утилиты (Thor-based), работающей с Redmine REST API и предоставляющей всякие ништяки (кстати, вдохновленный проектом, я в данный момент работаю над подобной утилитой, частично дублирующей функционал: https://github.com/Nondv/redmine_cli).

                    Если посмотреть на документацию по Versions или Issue Relations (http://www.redmine.org/projects/redmine/wiki/Rest_IssueRelations), то можно обратить внимание, что для получения списка отношений используется адрес вида issues/<id>/relations.xml, а для конкретного объекта — relations/<id>.xml.
                    Читать дальше →
                  • Обзор мини-клавиатуры Ducky Mini

                      Здравствуйте все!

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

                      Многие, кто интересуется механическими клавиатурами, слышали про тайваньскую компанию Ducky Channel. Недавно у них появился официальный ресселер в России, что не может не радовать (еще бы курс доллара был пониже, тогда счастья были бы полны мои шорты).

                      У этого ресселера (не буду называть его, поскольку будет рекламой, посмотреть можете на сайте компании в разделе Where to buy) я и приобрел данную клавиатуру по предзаказу.


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