• Стилер паролей в антивирусном ПО Avira Free Antivirus

      Что если я Вам скажу, что единственной функцией одного из компонентов антивирусного ПО, имеющего доверенную цифровую подпись, является сбор всех Ваших учетных данных сохраненных в популярных Интернет-браузерах? А если я скажу что ему без разницы в чьих интересах их собирать? Наверное подумаете что я брежу. А давайте посмотрим как на самом деле?

      Читать дальше →
    • Монады как паттерн переиспользования кода


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


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


        Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


        Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.


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


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

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

          image

          Недавно я наткнулся на канал Ивана Новикова (D0znpp), CEO Wallarm, который пишет свои выпуски без монтажа и почти каждый день (про жизнь в Америке, Y Combinator, продажи и инвестиции), и обнаружил там для себя массу полезного. Решил поделиться с хабрасообществом парой выпусков «про хакеров».

          Про Александра Матросова, главного железного безопасника Nvidia


          • offensive hardware security
          • путь от reverse engeneering и ESET до Intel и NVidia
          • вирусы и изюминки
          • уважение к вирусостроителям
          • два рабочих ноутбука
          • обсуждение Windows
          • про Stuxnet и его реверсинг
          • как утекают сертификаты
          • сколько русских в Intel
          • в каждой компании есть русский безопасник
          • совет студентам

          Читать дальше →
          • +17
          • 21.1k
          • 1
        • Мультиплеер в быстрых играх (части I, II)



          1. Части I, II (синглплеер с авторитарным сервером)
          2. Часть III (Появление врага)
          3. Часть IV (Хэдшот!)


          Предлагаю вашему вниманию перевод статьи Fast-Paced Multiplayer (Part I): Introduction.

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

          От переводчика:
          Предлагаю вашему вниманию перевод краткого (действительно краткого) руководства по ES6. В нём можно ознакомиться с основными понятиями стандарта.
          Оригинальный текст в некоторых случаях был дополнен или заменён на более подходящий источник. Например, часть определения ключевого слова const является переводом документации с MDN.
          Чтобы лучше разобраться в некоторых концепциях (для выполнения качественного перевода) использовалось описание стандарта на сайте MDN, руководство "You Don't Know JS: ES6 & Beyond" и учебник Ильи Кантора.


          Перевод выложил на Гитхаб: https://github.com/etnolover/ES6-for-humans-translation. В случае нахождения ошибок пишите, исправлю.
          Ссылка на оригинальный текст: https://github.com/metagrover/ES6-for-humans


          Update 22.07.2016: добавил опрос про const


          Содержание



          Читать дальше →
        • Микросервисная архитектура, Spring Cloud и Docker

          • Tutorial

          Привет, Хабр. В этой статье я кратко расскажу о деталях реализации микросервисной архитектуры с использованием инструментов, которые предоставляет Spring Cloud на примере простого концепт-пруф приложения.



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

          Читать дальше →
        • Стек стеком погоняет, или преобразование байткода виртуальной машины Java в байткод машины Фантом ОС

            ОС Фантом — экспериментальная операционная система, содержащая на прикладном уровне виртуальную байткод-машину в персистентной оперативной памяти.

            Один из двух ключевых запланированных для ОС Фантом путей миграции существующего кода — преобразование байткода Java в байткод Фантом.

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

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

            Естественно, что и набор операций стековых машин местами схож как две капли.

            Но, безусловно, есть и весьма существенные отличия.
            Читать дальше →
          • Java и время: часть вторая

            • Tutorial
            Эта статья написана в продолжение к первой части и посвящена новому Date Time API, который был введен в Java 8. Я изначально хотел оформить эту тему отдельно, поскольку она достаточно большая и серьезная. Я еще сам не в полной мере начал использовать этот API в проектах, поэтому разбираться будем вместе по ходу. В принципе в переходе на новый API нет никакой срочной необходимости, более того многие еще и не начинали проекты на Java 8, а это означает, что время на освоение еще есть.

            В статье я постараюсь не скатываться в банальный перевод штатной документации, больше я хотел бы сконцентрироваться на том, что мне показалось особенно важным.
            Читать дальше →
            • +28
            • 144k
            • 4
          • Java и время: часть первая

            • Tutorial
            Восемь лет назад я принимал участие в проектировании и разработке сервиса, который был должен обслуживать запросы пользователей со всех уголков земного шара и координировать их действия. Работая над проектом я понял, что очень часто многие важные аспекты работы со временем просто игнорируются. Иногда это действительно не очень критично: если сервис локален и им пользуются только на определенной территории, либо пользователи естественным образом разделены на почти не взаимодействующие между собой географические кластеры. Однако же, если сервис объединяет пользователей по всему миру, то без четкого понимания принципов работы со временем уже не обойтись. Представим сервис, в котором общие события (совещания например) начинаются в какое-то строго определенное время, а пользователи рассчитывают на это. Какое время им показывать, в какой момент их беспокоить уведомлениями, что такое день рождения и когда можно поздравить человека — в статье я попробую это осмыслить.



            Статья не претендует на глубину и/или академичность. Это попытка систематизировать опыт и обратить внимание разработчиков на не очень очевидные аспекты.

            Читать дальше →
          • Интерактивная карта клиентов — Apache Spark Streaming и Яндекс.Карты

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

              и т.д. Если вы так не умеете, то смузи уже не нальют.

              Читать дальше →
            • Вливаемся в tox-сообщество или установка ноды за 5 минут

              • Tutorial
              Приветствую тебя, о жадный читатель, буквоед и борец за справедливость в интернетах! В нашей оружейной пополнение, называется оно tox. Сейчас я покажу тебе, %username%, его сборку-разборку.

              debian_tox_dht

              Есть такая замечательная система, которая называется TOX. Вот их официальный сайт, а вот профиль на github.

              О tox уже писали множество раз, но я перечислю основные плюшки: DHT — нет зависимости от центрального сервера, достаточно хотя бы одной ноды, шифрование на клиенте — Вася пишет Маше, telegram Паша ничего не прочитает.
              Читать дальше →
            • Первые шаги с Java 9 и проект Jigsaw – часть первая

              • Translation
              Доброе утро, Хабр!

              Еще со времен книги "Java. Новое поколение разработки" мы следим за развитием давно анонсированных новых возможностей этого языка, объединенных под общим названием "Project Jigsaw". Сегодня предлагаем перевод статьи от 24 ноября, вселяющей достаточную уверенность, что в версии Java 9 Jigsaw все-таки состоится.
              Читать дальше →
              • +22
              • 51k
              • 8
            • Пример решения типичной ООП задачи на языке Go

              • Tutorial
              Недавно попалась на глаза занимательная статья с аналогичным названием о языке Haskell. Автор предлагал читателю проследить за мыслью программиста, решающего типичную ООП задачу но в Хаскеле. Помимо очевидной пользы расширения представлений читателей о том, что ООП — это отнюдь не «классы» и «наследование», подобные статьи полезны для понимания того, как правильно пользоваться языком. Предлагаю читателю решить ту же самую задачу, но на языке Go, в котором ООП тоже реализован непривычно.
              Читать дальше →
            • Observer vs Pub-Sub

                Observer и Pub-sub, наверное самые известные паттерны взаимодействия в мире разработки интерфейсов и JavaScript. Но несмотря на свою известность, некоторые разработчики считают эти паттерны одинаковыми, что и послужило подспорьем написать данную статью.



                Пофилософствуем
              • Критическая уязвимость в ряде Java Application Server


                  Вчера в блоге Apache FSF появилась интересная запись. Уязвимым оказалось практически все ПО, которое использует сериализацию и десереализацию данных совместно с apache commons collections и некоторыми другими библиотеками.
                  Сама уязвимость была описана 6 ноября, а сегодня Oracle выпустил первые патчи к WebLogic.

                  Кратко


                  Тип: Удаленное исполнение кода
                  Опасность: высокая
                  Уязвимое ПО: Oracle WebLogic, IBM WebSphere, JBoss, Jenkins, OpenNMS и другое ПО с commons collections в classpath.
                  Описание: Уязвимость позволяет злоумышленнику создать такой пакет сериализованных данных, который при распаковке заставит уязвимый сервер исполнить произвольный код.
                  Читать дальше →
                • Как я победил в конкурсе BigData от Beeline

                  image

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

                  • Translation
                  Мартин Л. Эббот и Майкл Т. Фишер, авторы книги «Искусство масштабируемости», перечисляют наиболее распространенные архитектурные, организационные и технологические проблемы масштабировании в product-группах. Список был сформирован на основе их опыта, а также в ходе коммуникаций с клиентами и лег в основу первой книги.

                  Архитектурные ошибки



                  Читать дальше →
                • Из Java в Scala: 7 причин для изучения нового языка

                  Много свободного времени только у студентов. Если вы не студент, то должны появиться очень веские причины для того, чтобы начать изучать новый язык программирования. Особенно это касается Java-программистов, потому что этот язык является лидером в своём сегменте. Тем не менее причины для изучения нового языка есть.
                  Читать дальше →
                • У нас проблемы с промисами

                  • Translation
                  Разрешите представить вам перевод статьи Нолана Лоусона «У нас проблемы с промисами», одной из лучших по теме из тех, что мне доводилось читать.

                  У нас проблемы с промисами


                  Дорогие JavaScript разработчики, настал момент признать это — у нас проблемы с промисами.

                  Нет, не с самими промисами. Их реализация по спецификации A+ превосходна. Основная проблема, которая сама предстала передо мной за годы наблюдений за тем, как многие программисты борются с богатыми на промисы API, заключается в следующем:

                  — Многие из нас используют промисы без действительного их понимания.

                  Если вы мне не верите, решите такую задачку:

                  Вопрос: В чем разница между этими четырьмя вариантами использования промисов?

                  doSomething().then(function () {
                    return doSomethingElse();
                  });
                  
                  doSomething().then(function () {
                    doSomethingElse();
                  });
                  
                  doSomething().then(doSomethingElse());
                  
                  doSomething().then(doSomethingElse);
                  

                  Узнайте решение задачи