• Поняв Docker

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


      К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


      UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


      Что мы имеем сегодня


      • Зоопарк дубовых VPS-хостингов.
      • Дорогие IaaS и PaaS с гарантированным vendor lock in.
      • Уникальные сервера-снежинки.
      • Ворох устаревших зависимостей на неподдерживаемой операционке.
      • Скрытые связи частей приложения.
      • Незаменимый админ полубог на скейтборде.
      • Радуга окружений: development, testing, integration, staging, production.
      • Генерация конфигов для системы управления конфигами.
      • Feature flagging.
      docker run docker
    • МТС: яйцом к клиенту, или как бороться с заменой sim

        На хабра-сайтах не раз (см. тут и здесь) выходили статьи о том, как защитить себя от замены sim-карты. Но, не смотря на то, что все эти советы — дельные, в них есть одно слабое и при этом — очень значимое место, которое с юридической точки зрения называется добросовестность одной из сторон, т.е. провайдера.

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

        Цель статьи простая — дать людям, не имеющим специальных юридических знаний, краткий список норм, спасающих от произвола операторов сотовой связи, в частности, МТС, потому как заменить sim могут не только без вашего ведома, но даже без поддельного паспорта и просто — по сговору с сотрудником, т.е. технически тут помочь нечем.

        При подготовке искового изучил несколько десятков форумов, на которых повторялись типовые вопросы по нормативной базе. Попробовал изложить их в систематизированном виде.
        Читать дальше →
      • Делаем скриншоты правильно: практические советы

        • Tutorial
        Устройство для снимка экрана на первых компьютерах (Command-Shift-3)
        Устройство для снимка экрана на первых компьютерах (Command-Shift-3)

        Если вы когда-либо делали хелп или мануал для своего приложения, наверняка вы отметили, как неожиданно много времени и сил занимает создание скриншотов.

        Ведь кажется, что скриншот — это “секунда работы, Alt+PrintScreen и Ctrl+V!”. Некоторые клиенты удивляются, когда слышат, что скриншот в мануале может стоить и $2 и даже $5.

        В этой статье я расскажу, как правильно делать скриншоты, почему это не просто “два клика” и какие подводные камни встречаются на пути неопытного скриншотера. Рассматривайте ее как чеклист или список практических советов для тех, кто документирует ПО. Надеюсь, это поможет вам избежать разочарований и порадовать юзеров красочными понятными картинками.
        Читать дальше →
      • Электронная библиотека для PocketBook: автоматическая обработка

        Наверное каждому электрочитателю хотелось бы всю свою коллекцию книг содержать прямо на электронной книге-читалке, и при этом, не смотря на общую тормознутость устройства, иметь удобную навигацию.
        Зачастую в электронной книге проблематично содержать сотни и тысячи книжек: либо аппарат долго тупит, считывая информацию о каждой книге из ее внутренностей, либо вручную поддерживать коллекцию с разбивкой по каталогам — тот еще геморрой.
        Читать дальше →
      • Новый гаджет покажет, где прячутся ключи



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

          Читать дальше →
        • Сервис поиска русскоязычных книг для Kindle

            Kindle
            После того как у меня появился Kindle 3 стала проблема наполнения его книгами на всем нам понятном русском языке. Сама книжка поддерживает кириллицу с коробки, но вот русской раскладки в ней не предусмотрено. Отличная возможность пользоваться встроенным в книгу браузером частично страдает из-за отсутствия русской раскладки.

            Конечно, возможно использовать хаки прошивки для локализации устройства, но это не всегда удобно, так как при обновлении прошивки эти хаки придется откатывать назад, вдобавок мы можем потерять гарантию. Подключать же постоянно через USB книгу проводом тоже не удобно, ведь зачем же в конце концов в ней WiFi и 3G? Выходом из сложившейся ситуации может стать русифицированная экранная клавиатура.

            За один вечер была найдена подходящая экранная клавиатура написанная на JavaScript и оптимизирована под экран Kindle. Зарегистрировано доменное имя kin3lib.ru для нашего проекта. Сервис перебрасывает поисковый запрос набранный на виртуальной клавиатуре в библиотеку Флибуста, где можно спокойно закачать затем книгу в ее родной mobi формат. В дальнейшем можно реализовать выбор библиотек на которых производить поиск, но, к сожалению, я нашел только одну, которая позволяет скачивать книги в формате mobi. Если кто знает еще такие библиотеки пишите мне.

            Мне будет приятно выслушать мнения хабравчан о таком сервисе, а также кто и каким образом решает данную проблему.
          • Компьютер вашей мечты. Часть 3: Скрытые горизонты

              Часть 1 | Часть 2
              К прочтению обязательны — материал является их прямым продолжением.


              image

              В предыдущей части статьи были рассмотрены ключевые компоненты современного ПК, однако окончательного вывода сделано не было. Да, мы рассмотрели наиболее важные характеристики и их влияние на производительность. Зная это, можно взглянуть на предлагаеммый ассортимент и подобрать нужный девайс. Но за более высокие характеристики в любом случае придётся заплатить больше, а ведь это делать так не хочется…
              Есть ли способы преодолеть различия между младшими и старшими моделями железок, или просто повысить производительность системы, не доплачивая за это? Определенно есть =)
              Читать дальше →
            • «Регулярные выражения» или «Просто о некрасивом»

                «Регулярные выражения» или «Просто о некрасивом»




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

                Я специально не буду заглядывать ни в какие мануалы, и пичкать Вас информацией которую я сам не запомнил, уверен, для того чтобы заинтересоваться и начать пользоваться будет достаточно того, что умею и использую сам.
                Читать дальше →
              • Современный бэк-офис IT-компании

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

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

                  Всё ниженаписанное касается компаний/отделов, в которых работает работает квалифицированный персонал, то есть курсы «офис для начинающих» им не нужны. Так же как не нужны групповые политики на рабочих станций и специальный админ для перекладывания ярлычков на рабочем столе и установки любимой программы. Другими словами, это бэк-офис айтишников, значительно отличающийся от бэк-офиса остальных отделов.

                  Краткий спойлер содержимого: VCS, репозиторий исходного кода, code-review, build-сервера, CI, таск-трекер, вики, корпоративный блог, функциональное тестирование, репозиторий для пакетов, система управления конфигурацией, бэкапы, почта/jabber.

                  Картинка с фрагментом обсуждаемой инфраструктуры:


                  Читать дальше →
                • Лекции от Яндекса для тех, кто хочет провести каникулы с пользой. Дискретный анализ и теория вероятностей

                  • Tutorial
                  Для тех, кому одного курса на праздники мало и кто хочет больше, продолжаем нашу серию курсов от Школы анализа данных Яндекса. Сегодня подошла очередь курса «Дискретный анализ и теория вероятностей» – даже более фундаментального, чем предыдущий. Но без него нельзя представить ещё большую часть современной обработки данных.

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



                  Читает курс Андрей Райгородский. Доктор физико-математических наук. Профессор кафедры математической статистики и случайных процессов механико-математического факультета МГУ им. М. В. Ломоносова. Заведующий кафедрой Дискретной математики ФИВТ МФТИ. Профессор и научный руководитель бакалавриата кафедры «Анализ данных» факультета инноваций и высоких технологий МФТИ. Руководитель отдела теоретических и прикладных исследований компании «Яндекс». (Ещё больше можно узнать в статье о нём на Википедии).

                  Содержание курса и тезисы лекций
                • Настройка IDEA для чистокодеров

                    Я люблю две вещи: Intellij IDEA и чистый код (Clean Code).
                    IDEA создана для чистого кода. Многие настройки по умолчанию уже стимулируют вас писать как надо.


                    Но она всё ещё не идеальна.
                    Когда я устанавливаю новую копию IDEA, я пробегаю по настройкам и выставляю свои любимые галочки.
                    Хочу ими с вами поделиться в надежде, что когда-нибудь и они станут стандартом.

                    Мои любимые настройки IDEA с картинками
                  • Инфраструктура и жизненный цикл разработки веб-проекта

                      Когда проект маленький, особых проблем с ним не возникает. Список задач можно вести в текстовом файле (TODO), систему контроля версий, по большому счёту, можно и не использовать, для раскладки файлов на живой сервер их можно просто скопировать (cp/scp/rsync) в нужную директорию, а ошибки всегда можно посмотреть в лог-файле. Глупо было бы, например, для простенького сервиса с двумя скриптами и тремя посетителями в день поднимать полноценную систему управления конфигурациями серверов.

                      С ростом проекта требования растут. Становится неудобно держать в TODO-файле несколько десятков задач и багов: хочется приоритетов, комментариев, ссылок. Появляется необходимость в системе контроля версий, специальных скриптах/систем для раскладки кода на сервер, системе мониторинга. Ситуация усугубляется, когда над проектом работает несколько человек, а уж когда проект разрастается до нескольких серверов, появляется полноценная инфраструктура («комплекс взаимосвязанных обслуживающих структур или объектов, составляющих и/или обеспечивающих основу функционирования системы», Wikipedia).

                      На примере нашего сервиса "Календарь Mail.ru" я хочу рассказать о типичной инфраструктуре и жизненном цикле разработки среднего по размерам веб-проекта в крупной интернет-компании.

                      Срыв покровов
                    • Настраиваем HTTPS-сервер на nginx

                      Для чего я это пишу?


                      В последнее время в связи с кучей факторов (АНБ, DPI с рекламой и другое) у меня начала просыпаться паранойя и я подумал полностью перевести свой небольшой сайт на https. На хабре было несколько статей с техническими подробностями работы SSL/TLS, однако поискав информацию на тему настройки https-вебсервера обнаружил традиционное деление статей — либо это статьи «Делайте вот так», где просто даны настройки без каких-либо разъяснений и вариантов использования, либо это большие теоретические статьи, где обсуждаются различные схемы использования, но без практически применимых готовых вариантов. На хабре была статья о настройке, однако в ней нет информации про DH-кодировки, да и некоторые параметры не описаны. Подумал, что стоит упорядочить найденное в виде статьи, которая будет полезна тем, кто хотел бы развернуть https у себя на сервере, но не слишком углубляться в дебри SSL.

                      Повествование будет вестись с учетом того, что веб-сервером выступает nginx (и в одном месте будет параметр для php-fpm).
                      Читать дальше →
                    • Горячие клавиши в Eclipse

                        туториал по горячим клавишам в Eclipse
                        Есть желание уменьшить время путешествий по менюшкам-окошкам — нажмите Control-Shift-L для быстрого доступа к списку горячих клавиш (←). Большинство функций доступны не отрываясь от клавиатуры.

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

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

                          В 2012м я начал потихоньку делать pymorphy2 (github, bitbucket) — думаю, самое время представить эту библиотеку тут: pymorphy2 может работать в сотни раз быстрее, чем pymorphy (втч без использования C/C++ расширений) и при этом требовать меньше памяти; там лучше словари, лучше качество разбора, лучше поддержка буквы ё, проще установка и более «честный» API. Из негатива — не все возможности pymorphy сейчас реализованы в pymorphy2.

                          Эта статья о том, как pymorphy2 создавался (иногда с довольно скучными техническими подробностями), и сколько глупостей я при этом наделал; если хочется просто все попробовать, то можно почитать документацию.

                          Читать дальше →
                        • Хинты планера в PostgreSQL

                            Известно, что SQL — декларативный язык, который указывает, «что» мы хотим выбрать из базы, а «как» это сделать — СУБД решает сама. Задачу выбора для SQL-запроса конкретного способа его выполнения(плана) решает планировщик запросов, который есть практически в любой СУБД. Но иногда он выбирает не самый лучший план. Многие коммерческие СУБД предоставляют на этот случай «хинты», которые позволяют в ручном режиме подсказывать базе, как лучше выполнить запрос. В Open Source СУБД PostgreSQL такого механизма не было.

                            И вот, наконец, случилось то, о чем многие мечтали и чего уже устали ждать, а другие боялись. Японские разработчики из NTT реализовали хинты планера PostgreSQL. Причем, им удалось это сделать, не меняя ядро, в виде отдельного модуля pg_hint_plan, поддерживающего версии PostgreSQL 9.1 и 9.2. Модуль реализует хинты, позволяющие устанавливать методы сканирования и соединения таблиц, установку значений GUC. За деталями установки и использования добро пожаловать под кат.

                            Читать дальше →
                          • Альтернативный терминал для Windows

                              Часто путают терминал и шелл. В тех же *nix есть шеллы (bash, csh, zsh, …) и терминалы (konsole/guake/yaquake/tilda и т.д. и т.п.) Для мира Windows общеизвестный терминал только один – стандартное консольное окошко, которое часто ошибочно называют «cmd.exe». И мало кто знает о существовании множества других эмуляторов терминала. Известных шеллов больше, их целых два: cmd.exe и powershell.exe. И хотя есть как минимум три порта bash (MinGW, CygWin, GIT) многие юниксоиды предпочитают ругать cmd.exe.

                              Меня не устраивал ни один из найденных альтернативных терминалов (как в 2009-м, когда я начал работу над ConEmu, так и сейчас). Казалось бы требований немного, вот основные:
                              Читать дальше →
                            • Параллельное программирование с помощью вычислительного графа

                                Есть приложения, которые хорошо реализуются как системы передачи сообщений. Сообщениями в широком смысле может быть что угодно – блоки данных, управляющие «сигналы» и т.д. Логика же состоит из узлов, обрабатывающих сообщения, и связей между ними. Такая структура естественно представляется графом, по рёбрам которого «текут» сообщения, обрабатываемые в узлах. Наиболее устоявшееся название такой модели – вычислительный граф.

                                С помощью вычислительного графа можно установить зависимости между задачами и в какой-то мере программно реализовать «dataflow архитектуру».

                                В этом посте я опишу, как реализовать такую модель на С++, используя библиотеку Intel Threading Building Blocks (Intel TBB), а именно класс tbb::flow::graph.


                                Читать дальше →
                                • +48
                                • 27k
                                • 9
                              • Функциональное программирование в шелле на примере xargs

                                • Tutorial
                                Abstract: рассказ о том, как быстро и красиво делать обработку списков в шелле, немного мануала по xargs и много воды про философию то ли программирования, то ли администрирования.

                                Немного SEO-оптимизации: карринг, лямбда-функция, композиция функций, map, фильтрация списка, работа с множествами в шелле.

                                Пример



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

                                Это не реальная «задача», это учебный пример, решая который (в решении будет однострочник) я расскажу про очень необычный и мощный инструмент системного администрирования — линейное функциональное программирование. Линейное оно, потому что использование пайпа "|" это линейное программирование, а использование xargs позволяет превратить сложную программу с вложенными циклами в однострочник функционального вида. Целью статьи будет не показать «как найти размер библиотек» и не пересказать аргументы xargs, а объяснить дух решения, пояснить стоящую за ним философию.

                                Лирика


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

                                Другой выглядит так:
                                Применить к списку функцию, которая применяется к каждому элементу списка, если этот элемент непустая строка и размер файла, с этим именем не нулевой, добавить к сумме.

                                Даже словами видно, что второй вариант короче.
                                Читать дальше →
                              • Как распознать кракозябры?

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

                                  Итак, вуаля!


                                  За источник информации была взята статья из вики. В блок-схеме «UTF-16 → CP 866» означает, что исходная кодировка была «UTF-16», а распозналась она как «CP 866».

                                  Как всегда — кликабельно. Исходник в .docx: здесь.