• Паттерны для новичков: MVC vs MVP vs MVVM

      Добрый день, уважаемые коллеги. В этой статье я бы хотел рассказать о своем аналитическом понимании различий паттернов MVC, MVP и MVVM. Написать эту статью меня побудило желание разобраться в современных подходах при разработке крупного программного обеспечения и соответствующих архитектурных особенностях. На текущем этапе своей карьерной лестницы я не являюсь непосредственным разработчиком, поэтому статья может содержать ошибки, неточности и недопонимание. Заинтригованы, как аналитики видят, что делают программисты и архитекторы? Тогда добро пожаловать под кат.
      Читать дальше →
    • Disruptor — новая парадигма многопоточного программирования

        На прошлой неделе компания LMAX, где я работаю, получила приз Java Duke's Choice Award 2011 за фреймворк Disruptor. Ранее об этой технологии писал Martin Fowler, известный многим читателям публикациями об объектном программировании.

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

        Читать дальше →
      • Как я объяснил жене, что такое REST

        • Перевод
        Возможно, как и многим, мне не всегда удаётся простым языком объяснять сложные вещи, я становлюсь многословным, уделяю чрезмерное внимание деталям и невольно использую профессионализмы. Наверное, именно поэтому я обратил внимание на статью How I Explained REST to My Wife, в которой Ryan Tomayko вот так запросто рассказывает жене о REST и принципах работы HTTP. В заголовках статьи был перечень языков на которые переведена эта статья и этот список из 6 языков, во-первых, дал понять что я не одинок, во-вторых, показал что статья стоит того что бы добавить перевод на русском.
        Читать дальше →
      • Архитектура приложения Angular. Используем NgModules

        • Перевод
        • Tutorial

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


        Об NgModules можно прочитать здесь.


        image


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

        Читать дальше →
        • +12
        • 29,3k
        • 4
      • Реализуем свой оператор в Entity Framework Core

          Однажды пасмурным мартовским субботним утром я решил посмотреть, как обстоят дела у Майкрософта в благом деле по трансформированию мастодонта Entity Framework в Entity Framework Core. Ровно год назад, когда наша команда начинала новый проект и подбирала ORM, то руки чесались использовать все как можно более стильное и молодежное. Однако, присмотревшись к EFC, мы поняли, что он еще очень далек продакшна. Очень много проблем с N+1 запросами (сильно улучшили во 2й версии), кривые вложенные селекты (пофиксали в 2.1.0-preview1), нет поддержки Many-to-Many (все еще нет) и вишенка на торте — отсутствие поддержки DbGeometry, что в нашем проекте было очень критично. Примечательно, что последняя фича находится в road map проекта с 2015 года в списке высокоприоритетных. У нас в команде есть даже шутка на эту тему: "Эту задачу добавим в список высокоприоритетных". И вот прошел один год с последней ревизии EFC, вышла уже вторая версия данного продукта и я решил проверить, как обстоят дела.

          Читать дальше →
        • Бинарные деревья поиска и рекурсия – это просто

          Существует множество книг и статей по данной теме. В этой статье я попробую понятно рассказать самое основное.

          Бинарное дерево — это иерархическая структура данных, в которой каждый узел имеет значение (оно же является в данном случае и ключом) и ссылки на левого и правого потомка. Узел, находящийся на самом верхнем уровне (не являющийся чьим либо потомком) называется корнем. Узлы, не имеющие потомков (оба потомка которых равны NULL) называются листьями.

          image
          Рис. 1 Бинарное дерево
          Читать дальше →
          • +21
          • 311k
          • 7
        • Трассировка JS ↔ DOM, или Туда и обратно

          • Перевод

          Поиск утечек памяти в Chrome 66 стал гораздо удобней. DevTools теперь могут проводить трассировку, делать снапшоты DOM-объектов из C++, отображать все доступные DOM-объекты из JavaScript вместе со ссылками на них. Появление этих возможностей стало следствием нового механизма трассировки C++ в сборщике мусора V8.


          Напомню, что стабильный Chrome сейчас (20.03.2018) имеет версию 65, поэтому чтобы подивиться на фичу, придётся установить одну из нестабильных сборок (например, Beta имеет версию 66, а Dev и Canary — 67).

          Читать дальше →
        • Optional: Кот Шрёдингера в Java 8

          • Tutorial
          Представим, что в коробке находятся кот, радиоактивное вещество и колба с синильной кислотой. Вещества так мало, что в течение часа может распасться только один атом. Если в течение часа он распадётся, считыватель разрядится, сработает реле, которое приведёт в действие молоток, который разобьёт колбу, и коту настанет карачун. Поскольку атом может распасться, а может и не распасться, мы не знаем, жив ли кот или уже нет, поэтому он одновременно и жив, и мёртв. Таков мысленный эксперимент, именуемый «Кот Шрёдингера».



          Класс Optional обладает схожими свойствами — при написании кода разработчик часто не может знать — будет ли существовать нужный объект на момент исполнения программы или нет, и в таких случаях приходится делать проверки на null. Если такими проверками пренебречь, то рано или поздно (обычно рано) Ваша программа рухнет с NullPointerException.
          Читать дальше →
        • Как я писал telegram-бота и заливал его на удаленный сервер

          Вступление


          Как только на территории РФ вступил в силу запрет на анонимность в мессенджерах, у меня дошли руки написать пост про telegram-бота. По ходу создания бота столкнулся с большим количеством проблем, которые пришлось решать по отдельности, и буквально выцеживать крупинки информации со всего интернета. И вот после нескольких месяцев страданий и мучений (кодинг – не основное моё занятие) я наконец-то закончил с ботом, разобрался со всеми проблемами и готов поведать свою историю Вам.


          Читать дальше →
        • Общение между компьютером и Android-устройством через Processing

          • Tutorial
          Есть определённая категория людей, которая хотела бы писать программы, но боится серьёзных языков программирования. К ним можно отнести детей, гуманитариев, любителей мастерить, людей старшего поколения и т.д. Кто-то пробует использовать «детские» языки типа Scratch или другие упрощённые конструкторы.

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

          Processing — это простенькая среда разработки с языком Java с ограниченным числом классов. Здесь есть переменные, циклы, объекты. В первую очередь Processing расчитан на работу с графикой, анимацией, вычислениями. То, что так нравится детям. Всё наглядно и красиво.
          Если у пользователя появится желание перейти на новый уровень и начать использовать полноценный язык Java, то все наработки не пропадут даром. Большая часть кода не потребует переработки и можно свободно копировать больше участки кода.
          Читать дальше →
          • +11
          • 7,8k
          • 3
        • VMware Dispatch: новый фреймворк для работы с serverless-приложениями

            2017-й стал годом расцвета Kubernetes. Как отметили в RightScale, процент компаний, работающих с Kubernetes, за прошлый год увеличился с 7 до 14%. Kubernetes вошел в пятерку самых популярных DevOps-инструментов, которые «приняли на вооружение» в 2017 году, и стал вторым среди планируемых к внедрению.

            Kubernetes стали чаще использовать средние и малые компании. Кроме того, фреймворк уже внедрили и крупные организации — Google, Red Hat, IBM, Microsoft и другие.

            Одна из причин популярности платформы — богатый набор инструментов, разрабатываемых на её основе. Одним из таких релизов стал проект VMware Dispatch — фреймворк для создания и работы с serverless-приложениями. В этой статье рассмотрим новый продукт, а также расскажем о его особенностях и возможностях.

            Читать дальше →
          • CoffeeMiner: взлом WiFi для внедрения криптомайнера в HTML-страницы

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

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

            Цель этой статьи — объяснить, как провести атаку MITM (человек посередине) для внедрения определённого JavaScript-кода в страницы HTML, чтобы заставить все устройства, подключённые к WiFi, майнить криптовалюту для злоумышленника.

            Задача состоит в создании скрипта, который проводит автономную атаку в сети WiFi. Это то, что мы назвали CoffeeMiner, поскольку атаки такого типа можно проводить в кафе.
            Читать дальше →
          • Малюсенький CI вашего Symfony проекта за 2 минуты

              Без воды о том, как за 10 минут сделать:
              1.Проверяем ваш composer.json на серьезные и несерьезные ошибки, вроде неоптимального autoload
              2.Проверяем ваш composer.lock на security уязвимости в пакетах
              3.Проверяем вашу базу данных, что ничего не забыли
              4.Проверяем ваши YAML файлы
              5.Проверяем Coding Style по Symfony
              Читать дальше →
              • +20
              • 9,5k
              • 7
            • Vibrant.kt — быстрое прототипирование и разработка распределенных приложений (DApps) на JVM

                Нихао!


                Введение


                Я долго ничего не писал, потому что ЕГЭ само себя не сдаст, но к Балтийскому конкурсу я не мог не написать чего-нибудь классное. Хороших идей из ниоткуда я выдавить не мог, поэтому решил окунуться в абсолютно незнакомую мне на тот момент(пол месяца назад) тему, в мир блокчейна, криптовалют, смарт контрактов и других умных английских слов. На уроках утыкался в телефон, читая множество текстов про блокчейн, peer2peer сети и все такое, постепенно разбираясь. Все пошло легче, когда я начал писать простые прототипы на Javascript'e: в очередной раз убеждаюсь, что в коде все понятнее, нежели на тексте. В итоге, когда я вроде разобрался, я определился с темой работы, которую видно в заголовке статьи.

                Читать дальше →
              • JavaScript и ужасы мутаций

                • Перевод
                Мутация — это изменение. Изменение формы или изменение сути. То, что подвержено мутациям, может меняться. Для того чтобы лучше осознать природу мутации — подумайте о героях фильма «Люди Икс». Они могли внезапно получать потрясающие возможности. Однако проблема заключается в том, что неизвестно, когда именно эти возможности проявятся. Представьте себе, что ваш товарищ ни с того ни с сего посинел и оброс шерстью. Страшновато, правда? В JavaScript существуют те же проблемы. Если ваш код подвержен мутациям, это значит, что вы можете, совершенно неожиданно, что-то изменить и поломать.


                Читать дальше →
              • Опыт построения логов на Postgres

                  Мы разработали свою систему логирования на PostgreSQL… Да я знаю, что есть надстройки над ElasticSearch (GrayLog2, Logstash), и что есть другие похожие инструменты, и есть те, про которые не знаю. Тем не менее, наш инструмент на текущий момент построен на PostgreSQL, и он работает.

                  Во время рабочей недели со всех сервисов СБИС в облаке к нам поступает в сутки более 11 млрд записей, хранятся они 3 дня, общий объем занимаемого при этом места не превышает 32 Тб. Все это обрабатывает 8 серверов с PostgreSQL 9.6. Каждый сервер имеет 24 ядра, RAM 16Гб и 4 SSD диска по 1Тб.


                  Читать дальше →
                • Javascript — решение асинхронной проблемы?

                  В этой статье, я хочу рассказать про свое решение проблемы с асинхронной функциональностью javascript, по средствам введения полностью асинхронной модели вычислений. Будет описана сама концепция, и дана ссылка на реализацию. Заинтересовавшихся прошу под кат.

                  Читать дальше →
                  • –2
                  • 6,9k
                  • 9
                • Лабораторная работа: введение в Docker с нуля. Ваш первый микросервис

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

                  Что мы будем рассматривать в данной статье?

                  В Части 0 (теоретической) я расскажу вам о контейнерах, что это и с чем едят
                  В Частях 1-5 будет теория и практическое задание, где мы напишем микросервис на python, работающий с очередью rabbitmq.
                  В Части 6 — послесловие
                  Читать дальше →
                • Истории успеха Kubernetes в production. Часть 7: BlackRock



                    BlackRock — одна из крупнейших инвестиционных компаний мира и крупнейшая по размеру активов под управлением (5,7 трлн USD по состоянию на июль'17). Её также называют крупнейшим в мире «теневым банком». Имея 30-летнюю историю и такие впечатляющие показатели, компания не отстаёт от современных тенденций в ИТ-инфраструктуре. В минувшую пятницу в блоге организации CNCF появилась информация о том, что BlackRock удалось за 100 дней выкатить своё production-окружение на Kubernetes. Как они к этому пришли?
                    Читать дальше →