• Jenkins Pipeline Shared Libraries

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

      Задача была следующей: есть определенный набор скриптов для развертывания сервисов, которые нужно запускать на каждом сервере каждого дата-центра. Скрипты выполняют серию операций: проверка статуса, вывод из-под load balancer’а, выпуск версии, развертывание, проверка статуса, отправка уведомлений через email и Slack и т.д. Это просто и удобно, но с ростом числа дата-центров и сервисов процесс выкатки новой версии может занять целый день. Кроме того, за некоторые действия отвечают отдельные команды, например, настройка load balancer’а. Также хотелось, чтобы управляющий процессом код хранился в общедоступном репозитории, дабы каждый член команды мог его поддерживать.

      Решить задачу удалось с помощью Jenkins Pipeline Shared Libraries: этапы процесса разделились визуально на логические части, код хранится в репозитории, а осуществить доставку на 20 серверов стало возможно в один клик. Ниже приведен пример подобного тестового проекта:

      image

      Сейчас я расскажу и покажу примеры как этого достичь. Надеюсь эта статья поможет сохранить время другим разработчикам, а также буду рад дельным комментариям.
      Читать дальше →
    • Развертывание и сопровождение Redmine, правильный путь

      • Translation


      Дисклеймер: это не обычное руководство вида «Как установить Redmine». В нем я не буду погружаться в настройку базы данных или установку веб-сервера. Я также не буду рассказывать о настройке Redmine. Документация по Redmine в этом плане является достаточно полной. А для того, что не упоминается в официальной документации, есть общая процедура запуска Rails-приложений, которую можно легко найти в Интернете.


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


      Готовы? Тогда начнём.

      Читать дальше →
    • Создание архитектуры программы или как проектировать табуретку

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

      К моему удивлению оказалось, что на вроде бы актуальный вопрос: «Как построить хорошую/красивую архитектуру ПО?» — не так легко найти ответ. Не смотря на то, что есть много книг и статей, посвященных и шаблонам проектирования и принципам проектирования, например, принципам SOLID (кратко описаны тут, подробно и с примерами можно посмотреть тут, тут и тут) и тому, как правильно оформлять код, все равно оставалось чувство, что чего-то важного не хватает. Это было похоже на то, как если бы вам дали множество замечательных и полезных инструментов, но забыли главное — объяснить, а как же «проектировать табуретку».

      Хотелось разобраться, что вообще в себя включает процесс создания архитектуры программы, какие задачи при этом решаются, какие критерии используются (чтобы правила и принципы перестали быть всего лишь догмами, а стали бы понятны их логика и назначение). Тогда будет понятнее и какие инструменты лучше использовать в том или ином случае.

      Данная статья является попыткой ответить на эти вопросы хотя бы в первом приближении.
      Читать дальше →
    • Лучшие плагины для Sublime Text

        WebInspector


        Мощный инструмент для дебаггинга JavaScript, полноценный инспектор кода для Sublime. Фичи: установка брейкпоинтов прямо в редакторе, показ интерактивной консоли с кликабельными объектами, остановка с показом стек трейса и управление шагами дебаггера. Все это работает на ура! А еще есть Fireplay от Mozilla, который позволяет подключаться к Firefox Developer tools и максимально простой дебаггер JSHint.



        Читать дальше →
      • Расширение функционала телевизоров LG и оскал корейского капитализма

        image
        Небольшая заметка о том, как исследовались прошивки для телевизоров LG, о том, что удалось добиться, какие проблемы встретились на пути и как обстоят дела сейчас. О реакции на всё происходящее корпорации LG, решившей попросту перешагивать через законы.
        Читать дальше →
      • Мониторинг серверов с Intel RMM средствами Zabbix

          Исторически сложилось так, что в своей работе мы используем серверы компании Intel. И сейчас, при создании комплексной системы мониторинга, появилась задача — снимать статистику не только по операционной системе, но и по состоянию железа. Но температуру, напряжение, скорость вращения кулеров и многое другое на этих серверах можно получить с BMC только посредством IPMI.
          Intel RMM3
          Чем мы и займёмся
        • «Правильное» ограничение скорости в Nginx. Миф или реальность?



          Вот уже много лет пользователей Nginx мучает один и тот же вопрос: «Как можно ограничить скорость в целом для IP адреса независимо от числа сессий (соединений)? Почему Nginx этого не умеет? Почему разработчики Nginx так упорно не хотят реализовать этот простой функционал?» И ответить мне им нечего, о чём думают разработчики Nginx — не понятно и известно, наверное, только господу богу.

          Бороться с этим можно по разному, кто-то использует скрипты на подобие htb.init, кто-то пишет скрипты шейпинга самостоятельно и делится удачным опытом на Хабре, а некоторые и вовсе используют PHP для ограничения скорости отдачи файлов. Только представьте себе, каким будет оверхед и расход памяти, при использовании PHP в подобных целях.
          Читать дальше →
        • Deploy с помощью Salt


            До сих пор во многих компаниях deploy создает большие проблемы и может занимать дни, недели и в особо запущенных случаях месяцы. Но ситуация не безнадежна. Существует много инструментов и практик, способных помочь в этом нелегком деле. Вот только эти инструменты чаще всего за один-два дня не освоишь, а сроки горят.

            Чего обычно хочется:
            • Возможность поднять проект локально на машине разработчика. Весь или хотя бы частями. Причем очень хочется, чтобы Dev конфигурация отличалась от Prod в минимуме параметров. Это позволит избежать “work on my machine” багов. Да и вообще, когда один разработчик работает на OS X, другой на Windows, а продакшен на Debian, то жди беды, это не считая того, что каждый делает работу по настройке окружения.
            • Dev конфигурацию хочется разворачивать на любой машине и ОС в пару команд в консоли. Это опять же позволит уменьшить фактор “work on my machine” багов. А еще позволит привлекать других разработчиков в проект за минимальное время (vagrant up и поехали).
            • Конфигурация должна быть понятна и программисту, и админу.

            Всего этого мы добьемся на связке Salt + Vagrant на примере Django проекта. Но большинство техник будут полезны разработчикам не только на Python, но на других языках.
            Читать дальше →
          • Интеграция интернет-магазина с Google Merchant

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

            Хочу поделиться опытом и рассказать о некоторых нюансах.
            Для начала немного информации о самой Google Merchant (далее GM). Это сервис от Гугл, в некотором роде — каталог продуктов всяких разных категорий, который позволяет покупателям искать товары, а продавцам, соответственно — выставлять их на показ.
            Продукты (информация о них), загруженные в сервис, могут быть использованы в поиске товаров (Google Product Search) рекламе (Google Product Ads, т.е. можно связывать рекламные сообщения сразу с товаром) и при прокладке инфраструктуры (Google Commerce Search).
            Читать дальше →
            • +3
            • 40.8k
            • 7
          • DivShot — онлайн-сервис прототипирования Bootstrap

              DivShot — отличный новый инструмент для работы с Twitter Bootstrap. С помощью него создавать прототипы интерфейсов с использованием популярного CSS-фреймворка стало до безобразия просто.

              Читать дальше →
              • +135
              • 73.1k
              • 21
            • AdMe.ru: Тэги, полнотекстовый поиск и всё такое…

                В этой статье я открою секреты того, как работает adme.ru, а именно я расскажу о том как устроено хранение статей и тэгов, как работает полнотекстовый поиск, поиск по тэгам и всё такое…

                В статье приведён пример структуры таблиц, рабочий конфиг Sphinx и немного php кода с примерами выборок.
                Читать дальше →
              • Шпаргалка начинающего Debian/Ubuntu администратора по управлению пакетами

                  Долгое время меня глодало незнание того, как сделать некоторые элементарные вещи в дебиановских менеджерах пакетов, но, как часто бывает, спросить рядом было не у кого, а до написания куда-либо руки не доходили. И вот наконец вопросы вызрели и я написал свой вопрос в дебиановскую рассылку. Естественно оказалось что пропустил что-то очевидное, но и узнал много неочевидных полезностей, посему решил набросать шпаргалку, авось кому пригодится.
                  Читать дальше →
                • Wi-Fi: неочевидные нюансы (на примере домашней сети)

                    Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.
                    [!!]: после замечаний касательно публикации первой части привожу текст целиком. Если вы читали первую часть — продолжайте отсюда.
                    Читать дальше →
                  • Добавляем информативности RSS-лентам от RuTracker.org

                      Введение


                      В своем первом топике я писал как организовать скачивание избранных раздач с любимого torrent-трекера, не отвлекаясь от чтения новостей. В этом топике будет описан оверкилл-способ, позволяющий еще более упростить процесс получения информации о каждой конкретной раздаче, пришедшей к нам в виде записи RSS-ленты. Как известно, сам по себе RuTracker.org публикует в RSS-ленте только ссылки на соответствующие ветки форума. Никакого описания раздачи элемент ленты не содержит, а хотелось бы иначе.

                      Предвидя возражения в духе «Хватит изобретать велосипед, лучше возьми готовые RSS. Например, от xpoft.ru» (спасибо egor_bulychev за наводку; без сарказма, правда, спасибо), скажу следующее: инструмент интересный, шустрый, лента с нужным содержимым формируется в несколько кликов мышью. Но, к сожалению, сгенерированные им RSS-ленты не радуют постоянством содержимого элементов: то придет исчерпывающая информация о раздаче, а то только название, да постер. Причем зависимости содержимого ленты от фактического описания раздачи на RuTracker.org выявлено не было. Такой расклад меня не устраивает: хочется и описание почитать, и media-info со скриншотами посмотреть, да еще и не переходя на оригинальную страницу с описанием.
                      Далее в картинках описан вариант решения такой задачи
                    • Как качать торренты не выходя из Google Reader – способ для ленивых

                      Введение


                      Я активно пользуюсь сервисом Google Reader для чтения RSS-каналов в общем и для отслеживания появления интересующих меня раздач на torrent-трекерах в частности. А также частенько качаю с торрентов любимые сериалы. В некоторый момент захотелось избавиться от промежуточных шагов между просмотром записи канала и скачиванием торрента и немного автоматизировать процесс вылавливания из сети интересной и нужной информации.

                      Вряд ли для кого-то окажется откровением то, что если не все, то почти все современные torrent-клиенты поддерживают загрузку RSS-каналов и даже автоматическую загрузку торрентов из этих каналов. Но, как правило, большая часть выдаваемых определенным каналом раздач мне просто не нужна. Да и дисковое пространство далеко не резиновое и выкачивать все возможные раздачи любимого, например, сериала не представляется возможным. Я не настолько большой фанат, чтобы держать на дисках одновременно несколько версий одной и той же серии или фильма.

                      На этом месте внимательный читатель непременно заметит: так ведь можно на каждый RSS-канал средствами torrent-клиента настроить фильтры и выкачивать только те раздачи, которые представляют реальный интерес. Заметит и получит резонный, по-моему, ответ: на все случаи жизни фильтры не настроишь. Нужен более универсальный вариант.

                      Таким вариантом для меня стала автоматическая закачка раздач, отмеченных в Google Reader. О том, как это реализовать подручными средствами, рассказано под катом.
                      Читать дальше →
                    • Упорядочивание аудиотеки. Практические советы

                        Введение


                        Вообще, я во многих вопросах перфекционист. Если есть — нужно, чтобы было безупречно (иногда это сказывается отрицательно, но сейчас не об этом). Свою аудиоколлекцию я тоже привык держать в чистоте. Но со временем, при пополнении стало накапливаться много мелких неприятностей. Вот некоторые из них:
                        • Разные шаблоны для имен файлов: 4 — Звезда | 04 — Звезда | 04. Звезда
                        • Разные имена исполнителей в тегах: Чиж & Co | Чиж и Ко. | Mylene Farmer | Mylène Farmer
                        • Не указаны исполнители альбома (что приводит к полному бардаку в альбомах-компиляциях)
                        • Не совсем корректная информация об альбомах, состоящих из нескольких дисков
                        • Путаница в годах изданий и переизданий (ремастеринг, и т.д.)
                        Ну и прочие мелочи.
                        Часто у пользователей коллекции составляют несколько тысяч, а иногда — несколько десятков тысяч записей. Так что, перелопачивать все вручную — долго и неэффективно.

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

                        Итак, начнем...
                      • Оффлайновый способ хранить пароль

                          Есть сервис passwordcard который позволяет генерировать и распечатывать такие вот карточки паролей.

                          image

                          Суть заключается в том, чтобы запоминать только картинки и длину, например вертикаль «О» запоминаем только вертикаль, получается JQ3xqZkE

                          Карточку можно распечатать и положить в удобное место.
                          Хорошая альтернатива менеджерам и проч. программ.

                          UPD: Для особо умных ребят уточню, что комбинаций здесь гораздо больше и facepalm писать не следует, потому как пароль можно как по диагонали брать, по змейке, зиг-загом, в обратном порядке, через один и так далее

                          UPD2: судя по всему сервер упал под хабраддосом (:
                        • Linux: Ускоряем софтрейд и RAID6 в домашнем сервере

                            Чем можно заниматься в 0 часов 0 минут в Москве? Сидеть за праздничным столом и праздновать? Как бы не так. В этот праздничный миг я хочу поделиться с вами моими сегодняшними изысканиями по тюнингу производительности софтрейда в домашнем сервере. Можно пропустить теорию и сразу читать последний абзац где основная соль.

                            Почему RAID-6?


                            Как известно, RAID-5 выдерживает смерть одного веника, и после этой самой смерти – до момента когда закончится восстановление рейда с новым винчестером ваши данные под угрозой – восстановление обычно занимало до 70 часов для больших массивов и еще один веник может легко умереть в это время.
                            RAID-6 выдерживает смерть 2-х любых веников. Из минусов – общепризнанное мнение что тормозит, особенно запись, даже по сравнению с RAID-5. Что-ж, проверим.
                            Читать дальше →
                          • Linux USB phone howto

                              Документ описывает установку и настройку USB телефона для Linux, на базе Yealink P1K. В результате было достигнуто полное управление вызовами с телефона, без участия мышки и клавиатуры.

                              Введение

                              Всегда хотелось иметь мобильный VoIP телефон. Это такой телефон, который всегда с тобой, прямо как мобильник, но при этом это VoIP телефон, т.е. подключенный к твоему собственному серверу IP АТС (варианты типа Nokia E65 и аналогичные не предлагать, не хочется греть уши мобильной Wi-Fi микроволновкой, поэтому остаются только USB телефоны). Пользователям Windows жить просто, всякие там X-Lite и прочие включают в себя драйвера для всевозможных USB телефонов, а всевозможные USB телефоны поставляются с диском с разными софтфонами. А вот тем, у кого на десктопе Linux, легкие пути заказаны Но тем не менее, в путь!
                              Читать дальше →