• Big Data головного мозга

      Наверно, в мире данных нет подобного феномена настолько неоднозначного понимания того, что же такое Hadoop. Ни один подобный продукт не окутан таким большим количеством мифов, легенд, а главное непонимания со стороны пользователей. Не менее загадочным и противоречивым является термин "Big Data", который иногда хочется писать желтым шрифтом(спасибо маркетологам), а произносить с особым пафосом. Об этих двух понятиях — Hadoop и Big Data я бы хотел поделиться с сообществом, а возможно и развести небольшой холивар.
      Возможно статья кого-то обидит, кого-то улыбнет, но я надеюсь, что не оставит никого равнодушным.


      image
      Демонстрация Hadoop пользователям

      Читать дальше →
    • Глубокое обучение в гараже — Две сети

        Пример работы системы
        Это вторая статья из серии про определение смайла по выражению лица.

        Глубокое обучение в гараже — Братство данных
        Глубокое обучение в гараже — Две сети
        Глубокое обучение в гараже — Возвращение смайлов

        Калибрация


        Итак, с классификатором, разобрались, но вы наверняка уже заметили, что заоблачные 99% как-то не очень впечатляюще выглядят во время боевого теста на детекцию. Вот и я заметил. Дополнительно видно, что в последних двух примерах очень мелкий шаг движения окон, так в жизни работать не будет. В настоящем, реальном запуске шаг ожидается больше похожим на картинку для первой сети, а там хорошо видно неприятный факт: как бы хорошо сеть не искала лица, окна будут плохо выровнены к лицам. И уменьшение шага — явно не подходящее решение этой проблемы для продакшена.
        Как быть?
      • Ansible и ChatOps или как управлять 100+ серверами из чата

        • Перевод
        • Tutorial
        Обновлено: 21 февраля 2017

        Ansible и ChatOps при помощи StackStorm, Slack и Hubot

        Что такое ChatOps?


        ChatOps все еще свежее и редкое явление в мире DevOps, когда работа с инфраструктурой переносится в общий чат. Вы можете запускать команды прямо из чата, при этом разработчики/сисадмины видят что происходит в режиме реального времени, могут просматривать историю изменений, запускать свои команды, поддерживать коммуникацию вокруг работы и даже обмениваться опытом. Таким образом информация и рабочий процесс принадлежит всей команде — а это несет в себе много преимуществ.

        Можно придумать такие вещи как деплой кода или развертывание серверов из чата, просмотр графиков мониторинга, отправку SMS, управление кластерами или просто запуск shell команд. ChatOps может быть высокоуровневым представлением вашей действительно сложной CI/CD системы, неся простоту с помощью команды в чате вроде: !deploy that thing. Такой подход делает чудеса для улучшения видимости и снижения сложности вокруг процесса развертываний.

        Читать дальше →
      • Ускоряем Nginx за 5 минут

          image
          Попытайтесь повторить это сами

          Как правило, настроенный должным образом сервер Nginx на Linux, может обрабатывать 500,000 — 600,000 запросов в секунду. Но этот показатель можно весьма ощутимо увеличить. Хотел бы обратить внимание на тот факт, что настройки описанные ниже, применялись в тестовой среде и, возможно, для ваших боевых серверов они не подойдут.

          Минутка банальности.

          yum -y install nginx
          

          На всякий пожарный, создадим бэкап исходного конфига.

          cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig
          vim /etc/nginx/nginx.conf
          

          А теперь можно и похимичить!
          Бдыжь-бдыжь
        • Elasticsearch — сортируем выдачу руками

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

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

            Другой пример. Параметр, влияющий на сортировку, меняется слишком часто: Elasticsearch построен на базе Lucene и использует append-only хранилище, обновление документов фактически отсутствует. Каждое изменение документа приводит к его переиндексации и влечет периодическое перестроение сегментов хранилища. Иными словами, если вы хотите отсортировать выдачу по количеству просмотров документа на сайте, то самое тупое, что можно сделать, — это записывать каждый просмотр в Elasticsearch. И здесь, похоже, назрел вопрос использования внешнего хранилища мета-информации, используемой для сортировки документов.


            Читать дальше →
          • Pattern matching с помощью макросов

              Язык Julia не поддерживает такую технику программирования, хорошо зарекомендовавшую себя в языках Haskell, Prolog, Erlang, Scala, Mathematica, как pattern matching. Но разрешает писать макросы, которые позволяют исправить этот фатальный недостаток. Выглядит это примерно так:
              julia> immutable X a end
              
              julia> immutable Y a ; b end
              
              julia> @case(Y(X(9),2),  Y(4,3)-> 55, Y(X(k),2)->1+k)
              10
              

              Исходный код доступен на github.
              Похожую (но гораздо более развитую и готовую для использования) можно взять здесь, но она слишком большая, что бы разбирать ее как пример в статье.
              Макромагия с полным разоблачением
              • +10
              • 4,8k
              • 2
            • Наследование комбинаторных парсеров на Julia

                Комбинаторные (монадические) парсеры достаточно хорошо известны (wikibooks). Они представляют из себя библиотеку маленьких парсеров, которые распознают простые элементы грамматики, и способы объединять несколько парсеров в один (комбинировать — от сюда и название). Монадические они потому что один из способов комбинирования, порождения парсера остатка текста на основе результата разбора начала, удовлетворяет условиям, накладываемым на математический объект «монада». В языке Haskell это позволяет воспользоваться мощным сервисом, предоставляемым языком и библиотеками. В других языках название «монадические» можно смело игнорировать — это не будет мешать их реализации и использованию, включая упомянутую выше операцию «bind».

                Проще всего комбинаторные парсеры реализуются в языках с поддержкой замыканий, но можно воспользоваться и классическим ООП (пример описан Rebecca Parsons в книге Мартина Фаулера «Предметно-ориентированные языки»).
                К преимуществам комбинаторных парсеров относится простота использования (запись на языке программирования практически не отличается от обычного описания грамматики), независимость от препроцессора (как yacc/bison, happy или ocamlyacc), возможность реализовать некоторые элементы, плохо укладывающиеся в контекстно-свободную грамматику, прямо на языке программирования общего назначения.

                К недостаткам — сложность составления сообщений об ошибке, неспособность работать с леворекурсивной грамматикой (приводит к зацикливанию), а так же то, что очень легко сделать этот парсер не эффективным по быстродействию и памяти. (Одна из причин — компилятор не может произвести оптимизацию в терминах грамматики, так как работает на уровне языка программирования. Но есть и другие тонкости, требующие внимания, если требуется эффективность.)
                Как альтернативу можно рассмотреть реализации в виде макросов (например OCaml streams parsers). В Perl6 поддержка грамматик встроена в язык.

                Наследование

                Персер конкретного языка состоит из множества более специализированных парсеров, ссылающихся друг на друга. В этом отношении парсеры напоминают методы некого объекта. Возникает желание порождать парсеры новых версий языков, подменяя отдельные подпарсеры (как это делается в паттерне проектирования «шаблонный метод» из ООП). Для экспериментов с этим подходом (а так же в порядке изучения очередного языка) я выбрал язык Julia — динамически-типизированном с особым подходом к наследованию (подобному CLOS из Common Lisp и R).
                В отличие от обычных комбинаторных парсеров, подход с наследованием является экспериментальным (хотя в некотором виде поддерживается библиотекой макросов OCaml и языком Perl6). Пока он порождает не очень читабельный код. Исходный код доступен на Github.
                Читать дальше →
              • Как попасть в топ на Kaggle, или Матрикснет в домашних условиях

                Хочу поделиться опытом участия в конкурсе Kaggle и алгоритмами машинного обучения, с помощью которых добрался до 18-го места из 1604 в конкурсе Avazu по прогнозированию CTR (click-through rate) мобильной рекламы. В процессе работы попытался воссоздать оригинальный алгоритм Мактрикснета, тестировал несколько вариантов логистической регрессии и работал с характеристиками. Обо всём этом ниже, плюс прикладываю полный код, чтобы можно было посмотреть, как всё работает.

                Рассказ делю на следующие разделы:
                1. Условия конкурса;
                2. Создание новых характеристик;
                3. Логистическая регрессия – прелести адаптивного градиента;
                4. Матрикснет – воссоздание полного алгоритма;
                5. Ускорение машинного обучения в Python.
                Читать дальше →
              • «Он видел их семью своими глазами»

                  Можешь выбрать подходящую к заголовку поста картинку?





                  Тогда научи робота! Он тоже хочет.


                  Команда проекта Открытый корпус просит хабралюдей помочь разметить свободно доступный (CC-BY-SA) корпус текстов. Под катом мы расскажем о том, что такое корпус, зачем он нужен, как обстоят дела с корпусами в России и за рубежом, почему так плохо и какой у нас план.

                  Читать дальше →
                • Lock-free структуры данных. Concurrent map: разминка


                    Мне оказали честь — пригласили выступить на первой конференции C++ 2015 Russia 27-28 февраля. Я был насколько наглым, что запросил 2 часа на выступление вместо положенного одного и заявил тему, наиболее меня интересующую — конкурентные ассоциативные контейнеры. Это hash set/map и деревья. Организатор sermp пошел навстречу, за что ему большое спасибо.
                    Как подготовиться ко столь ответственному испытанию выступлению? Первое — нарисовать презентацию, то есть кучу картинок, желательно близко к теме. Но надо ещё и два часа озвучивать картинки, — как все это запомнить? Как избежать глубокомысленных «ээээмммм», «здесь мы видим», «на этом слайде показано», несвязных прыжков повествования и прочих вещей, характеризующих выступающего c не очень хорошей стороны в части владения родным языком (это я про русский, с C++ я разобрался быстро — никакого кода в презентации, только картинки)?
                    Конечно, надо записать свои мысли, глядя на слайды. А если что-то написано, то не худо бы и опубликовать. А если публиковать, — то на хабре.
                    Итак, по следам C++ 2015 Russia! Авторское изложение, надеюсь, без авторского косноязычия, без купюр и с отступлениями по теме, написанное до наступления события, в нескольких частях.
                    Читать дальше →
                  • Необычные модели Playboy, или про обнаружение выбросов в данных c помощью Scikit-learn

                      Мотивированный статьей пользователя BubaVV про предсказание веса модели Playboy по ее формам и росту, автор решил углубиться if you know what I mean в эту будоражащую кровь тему исследования и в тех же данных найти выбросы, то есть особо сисястые модели, выделяющиеся на фоне других своими формами, ростом или весом. А на фоне этой разминки чувства юмора заодно немного рассказать начинающим исследователям данных про обнаружение выбросов (outlier detection) и аномалий (anomaly detection) в данных с помощью реализации одноклассовой машины опорных векторов (One-class Support Vector Machine) в библиотеке Scikit-learn, написанной на языке Python.
                      Читать дальше →
                    • 300 потрясающих бесплатных сервисов

                      • Перевод


                      Автор оригинальной статьи Ali Mese добавил ещё 100 новых бесплатных сервисов. Все 400 потрясающих сервисов доступны здесь. И еще подборку +500 инструментов от 10 марта 2017 г. смотрите здесь.



                      A. Бесплатные Веб-Сайты + Логотипы + Хостинг + Выставление Счета

                      • HTML5 UP: Адаптивные шаблоны HTML5 и CSS3.
                      • Bootswatch: Бесплатные темы для Bootstrap.
                      • Templated: Коллекция 845 бесплатных шаблонов CSS и HTML5.
                      • Wordpress.org | Wordpress.com: Бесплатное создание веб-сайта.
                      • Strikingly.com Domain: Конструктор веб-сайтов.
                      • Logaster: Онлайн генератор логотипов и элементов фирменного стиля (new).
                      • Withoomph: Мгновенное создание логотипов (англ.).
                      • Hipster Logo Generator: Генератор хипстерских логотипов.
                      • Squarespace Free Logo: Можно скачать бесплатную версию в маленьком разрешении.
                      • Invoice to me: Бесплатный генератор счета.
                      • Free Invoice Generator: Альтернативный бесплатный генератор счета.
                      • Slimvoice: Невероятно простой счет.

                      Читать дальше →
                    • Искусственный рассвет

                      Началось всё год назад. Перед Новым 2014 годом несколько пришел в упадок жизненный тонус. Процесс самокопания привел к следующей мысли:



                      — А, что ж так темно-то, Господи? © День радио.

                      Впрочем, для человека, живущего зимой по летнему времени — мысль вполне естественная.
                      Что же делать?
                    • OEM-активация Windows Vista/7/8/8.1 под гипервизором QEMU

                        OEM-версии ОС от Microsoft, начиная с Vista, используют проверку подлинности, основанную на сличении трех компонентов:

                        • OEM-сертификата, вшитого в дистрибутив ОС
                        • бинарного ключа, вшитого в BIOS, а конкретно — в таблицу ACPI SLIC
                        • лицензионного 25-значного ключа производителя, вшитого в дистрибутив ОС

                        При успешном сличении трех этих компонентов происходит оффлайн-активация ОС. На корпусе ПК в этом случае имеется наклейка, содержащая лицензионный ключ конкретного экземпляра ОС (а не производителя), которым можно произвести онлайн-активацию ОС в случае ее установки не с образа, предоставляемого производителем ПК, а с «чистого» (MSDN) OEM-образа от Microsoft.

                        Кроме того, лицензионный ключ конкретного экземпляра ОС может быть вшит в текстовом виде в BIOS, в таблицу ACPI MSDM. В этом случае, при установке ОС ключ будет извлечен из BIOS и вшит в конкретный экземпляр ОС. OEM-наклейка на корпусе ноутбука в этом случае может уже не содержать лицензионный ключ. Такой способ используется для активации Windows 8/8.1
                        Читать дальше →
                      • pymorphy2

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

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

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

                          Читать дальше →
                        • Нечёткий поиск в тексте и словаре

                            Введение


                            Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

                            В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
                            • Расстояние Левенштейна
                            • Расстояние Дамерау-Левенштейна
                            • Алгоритм Bitap с модификациями от Wu и Manber
                            • Алгоритм расширения выборки
                            • Метод N-грамм
                            • Хеширование по сигнатуре
                            • BK-деревья
                            А также проведу сравнительное тестирование качества и производительности алгоритмов.
                            Читать дальше →
                          • Способы представления словарей для автоматической обработки текстов

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

                              В общем виде словарь — множество записей вида {строка, данные ассоциированные с этой строкой}.

                              Например, для морфологического анализа словарь состоит из троек {словоформа, нормальная форма, морфологические характеристики}. При анализе слова «мыла» из предложения «мама мыла раму» надо уметь получать следующие варианты анализа:
                              Нормальная форма Характеристики
                              МЫЛО S (существительное), РОД (родительный падеж), ЕД (единственное число), СРЕД (средний род), НЕОД
                              (неодушевленность)
                              МЫЛО S (существительное), ИМ (именительный падеж), МН (множественное число), СРЕД (средний род), НЕОД (неодушевленность)
                              МЫЛО S (существительное), ВИН (винительный падеж), МН (множественное число), СРЕД (средний род), НЕОД (неодушевленность)
                              МЫТЬ V (глагол), ПРОШ (прошедшее время), ЕД (единственное число), ИЗЪЯВ (изъявительное наклонение), ЖЕН (женский род), НЕСОВ (несовершенный вид)


                              Читать дальше →
                            • Еще одна Змейка не в 30 строк на Android

                                Привет всем! Сегодня я хочу рассказать историю создания одной игрушки для Android. Что будет:
                                • Зачем ещё одна змейка для андроида?! Объяснение (c описанием);
                                • Как я это сделал — использованные приемы, немного кода;
                                • Немного о дизайне;
                                • Google Play Games, нестандарное использование.



                                Всех заинтересовавшихся прошу под кат!
                                Хочу подробностей!
                              • Open-source решение для крауд-мэппинга: Nextgis Crowd

                                  Пару дней назад Максим Дубинин и Иван Ковалев официально выпустили свой долгострой — Nextgis Crowd — опенсорсный редактор геоданных.

                                  image

                                  github.com/nextgis/nextgiscrowd

                                  NextGIS Crowd (NGC) позволяет совместно редактировать расположение и описание точек с любым наборов атрибутов. Последние несколько лет NGC успешно использовался в краудсорсинговом проекте УИК ГЕО для сбора информации по участковым избирательным комиссиям (помните, тогда были выборы? ) — сотня юзеров внесла десятки тысяч УИКОВ с описанием (не без помощи некоторой автоматизации ;)

                                  Как поставить?


                                  И зачем собственно это нужно?
                                • IPv6, miredo, dynamic DNS AAAA



                                    Захотелось странного — чтоб мои IPv6-enabled (miredo) хосты еще и динамически обновляемую DNS запись имели. Поизучав вопрос выяснил, что многие распространённые dyndns сервисы или не предоставляют возможность регистрации AAAA (IPv6 эквивалент записи типа A для IPv4), или не предоставляют её бесплатно, или имеют мутные настройки динамического обновления неизвестного уровня безопасности (или вовсе http/plaintext). Перепробовал с десяток сервисов и решил остановиться на freedns.afraid.org
                                    Плюсы:
                                    • Человеко-понятная админка (без всяких «купить AAAA за $0 USD»)
                                    • Бесплатно дают AAAA
                                    • Безопасное (https) обновление
                                    • URL-based обновление (не приходится испытывать сомнений о конфиге для агентов типа ddclient)

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