Pull to refresh
-1
0
Send message

Red Architecture — красная кнопка помощи для сложных и запутанных систем

Reading time11 min
Views5.4K


В начале несколько слов о названии, почему Red?


Всё просто. Любому явлению, которое претендует на определённый уровень целостности, необходим идентификатор. На такой идентификатор люди ссылаются в обсуждениях и сразу становится понятно о чём речь. В случае с архитектурой не стоит делать попытку описать в названии суть, любая архитектура это сложная вещь. Поэтому — просто Red!
Читать дальше →
Total votes 8: ↑7 and ↓1+6
Comments5

Используем console на полную

Reading time6 min
Views457K
Метод console.log() — отличный способ вывести отладочную информацию, не мешая пользователю. Но знаете ли Вы, что объект console имеет еще уйму других не менее полезных методов? Очень редко разработчики используют этот функционал, ограничиваясь неблокирующим alert'ом. Что-ж, давайте исправим это положение.

Вкусности console
Total votes 172: ↑168 and ↓4+164
Comments29

Микросервисы: опыт использования в нагруженном проекте

Reading time17 min
Views68K


На конференции HighLoad++ 2016 руководитель разработки «М-Тех» Вадим Мадисон рассказал о росте от системы, для которой сотня микросервисов казалась огромным числом, до нагруженного проекта, где пара тысяч микросервисов — обыденность.

Тема моего доклада — то, как мы запускали в продакшн микросервисы на достаточно нагруженном проекте. Это некий агрегированный опыт, но поскольку я работаю в компании «M-Tех», то давайте я пару слов расскажу о том, кто мы.

Если коротко, то мы занимаемся видеоотдачей — отдаём видео в реальном времени. Мы являемся видеоплатформой для «НТВ-Плюс» и «Матч ТВ». Это 300 тысяч одновременных пользователей, которые прибегают за 5 минут. Это 300 терабайт контента, который мы отдаем в час. Это такая интересная задача. Как это всё обслужить?

Про что сама эта история? Это про то, как мы росли, как проект развивался, как происходило какое-то переосмысление каких-то его частей, какого-то взаимодействия. Так или иначе, это про масштабирование проекта, потому что это всё — ради того, чтобы выдержать ещё больше нагрузки, предоставить клиентам ещё больше функционала и при этом не упасть, не потерять ключевых характеристик. В общем, чтобы клиент остался доволен. Ну и немного про то, какой путь мы прошли. С чего мы начинали.
Читать дальше →
Total votes 78: ↑77 and ↓1+76
Comments65

Создание Angular 2+ компонентов с возможностью переключения темы

Reading time3 min
Views8.8K
Всем привет.

Итак, допустим мы пишем сайт, на котором нужно реализовать возможность динамического переключения настроек внешнего вида, или, проще говоря, темы. Темой (theme) будем называть набор свойств, определяющих внешний вид компонентов (да и вообще всего сайта).
Допустим, у нас есть одностраничное приложение на Angular, и пусть в нем будет ооочень много компонентов, и один из них — ButtonComponent (к компоненту подключим стили из button.component.css), на примере которого и рассмотрим весь механизм. И нужно реализовать возможность переключения между двумя темами: «dark» и «light», которые у нас будут отличаться только цветами (а в общем случае можно выносить в тему что угодно, размеры там, шрифты, картинки бэкграунда и т.п. — все, чем можно управлять из css).
Читать дальше →
Total votes 13: ↑11 and ↓2+9
Comments4

С 0 до 1. Разбираемся с Redux

Reading time9 min
Views330K
Когда вышла версия 1.0 Redux, я решил потратить немного времени на серию рассказов о моем опыте работы с ним. Недавно я должен был выбрать “реализацию Flux” для клиентского приложения и до сих пор с удовольствием работаю с Redux.

Почему Redux?


Redux позиционирует себя как предсказуемый контейнер состояния (state) для JavaScript приложений. Редакс вдохновлен Flux и Elm. Если вы раньше использовали Flux, я советую прочитать, что Redux имеет с ним общего в разделе "Предшественники" новой (отличной!) документации.

Redux предлагает думать о приложении, как о начальном состоянии модифицируемом последовательностью действий (actions), что я считаю действительно хорошим подходом для сложных веб-приложений, открывающим много возможностей.
Читать дальше →
Total votes 15: ↑14 and ↓1+13
Comments16

Игровое управление моделям в условиях неполной информации

Reading time14 min
Views6.8K

В соавторстве с Юлией Филимоновой.


Введение


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


image

А тут, скажем, горочка из тумана/облаков выступает неожиданно, или, что несколько хуже, — вот это… И вам рады, но исключительно в качестве цели:


image

#поравалить — а вот как это делать с математическим уклоном сейчас и будем разбираться.
Да и вообще есть множество случаев, когда необходимо уклониться от неожиданно возникшей помехи/преграды, нашЛось, как говорят в Яндексе, например.

Читать дальше →
Total votes 12: ↑12 and ↓0+12
Comments5

Почему я перешел с React на Cycle.js

Reading time9 min
Views19K

Нетрудно догадаться, что большинство разработчиков сейчас используют какие-либо фреймворки для разработки приложений. Они помогают нам структурировать сложные приложения и экономят время. Каждый день можно наблюдать большое количество обсуждений, какой фреймворк лучше, какой нужно учить, и тому подобное. Так что, в этот раз я поделюсь своим опытом и отвечу на вопрос: «Почему я перешел на Cycle.js с React?».


React, возможно, самый популярный frontend-фреймворк (на момент 2017) с огромным сообществом. Я большой фанат этого фреймворка и он мне помог изменить взгляд на веб-приложения и их разработку. Некоторые любят его, а кто-то считает, что он не так хорош.


Большинство использует React без мысли о том, что есть лучший инструмент или способ разработки веб-приложений. Это дало мне толчок попробовать Cycle.js, как новый реактивный фреймворк, который становится все более и более популярным изо дня в день.


И в этой статье я хочу объяснить:

  1. Что такое реактивное программирование
  2. Как работает Cycle.js
  3. И почему он, на мой взгляд, лучше React
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments24

Post mortem

Reading time5 min
Views33K
После завершения (с любым итогом) проекта менеджер обязан написать т.н. «post mortem». Цель очевидна: сделать хорошее и плохое, что было в ходе проекта явным как для себя, так и для других. Если бы жанр таких post mortem стал более популярен у нас, уверен, процент успешных проектов от этого вырос бы, какими бы ни были критерии «успешности».

В этом тексте я опишу часть истории проекта в весьма бурно сейчас развивающемся домене TNC (Transportation Network Companies), а более точно – ROD (Ride on Demand). Если совсем по-простому, сервис заказа такси. В середине прошлого года одна достаточно крупная западная TNC (далее – «Энтерпрайз») приобрела в России игрока регионального уровня, б.ч. бизнеса которого была сосредоточена в средней полосе России. У этого игрока, назовём его «Такси 666», имелось семейство продуктов собственной разработки: приложения на Андроиде для клиентов и водителей, а также ряд Delphi-приложений, необходимых для управления таким бизнесом (принятие водителей, просмотр статистики и пр.). Отдельно стоит упомянуть Delphi-приложение для операторов, принимающих заявки по телефону. Особенностью, отличавшей модель бизнеса Такси 666 от наиболее известных TNC вроде Uber’а, было то, что телефонные заказы занимали долю около 80%, при этом никакой тенденции к увеличению доли заказов через приложение не наблюдалось. Тем не менее, Энтерпрайз воспринял такое положение вещей не как проблемную ситуацию (за которой много чего скрывалось – см. ниже), а как своего рода конкурентное преимущество для России с её необъятными просторами и в целом ещё низкой (но быстро растущей) долей проникновения мобильного Интернета.
Читать дальше →
Total votes 27: ↑23 and ↓4+19
Comments30

Лекция о двух библиотеках Яндекса для работы с большими данными

Reading time8 min
Views13K
Пару недель назад в Яндексе прошла встреча PyData, посвящённая анализу больших данных с использованием Python. В том числе на этой встрече выступил Василий Агапитов — руководитель группы разработки инструментов аналитики Яндекса. Он рассказал о двух наших библиотеках: для описания и запуска расчетов на MapReduce и для извлечения информации из логов.


Под катом — расшифровка и часть слайдов.

Total votes 35: ↑34 and ↓1+33
Comments2

Простая валидация формы без JS

Reading time4 min
Views104K
imageВ данной статье я бы хотел поделиться методом быстрой валидации полей с помощью разметки и стилей. Данный метод не является кроссбраузерным и рекомендуется к использованию только как дополнительная фича. По ходу статьи мы будем уменьшать наши шансы на кроссбраузерность, но повышать функциональность.

Давайте попробуем собрать стандартную форму, которая будет включать в себя: Имя, E-Mail, Телефон, Ссылку на сайт и допустим Ваш рост, чтобы поэксперементировать с числовым полем.
Total votes 38: ↑30 and ↓8+22
Comments42

Моделирование бизнеса. Основные подходы

Reading time9 min
Views86K
Моделирование бизнесаВ этой статье я хочу поговорить об основных принципах моделирования бизнеса, о тех подходах, которые применяются в этой сфере, и на основе которых создаются языки моделирования и нотации.

Я уже писал о моделировании при помощи IDEF0 (Знакомство с нотацией IDEF0 и пример использования), об организации работы склада и работе с клиентами от лида до сделки (Внедрение CRM. От регистрации лида до закрытия сделки. Кейс и пояснения), о системе Bizagi (Bizagi. Описание. Пример). И везде я использовал при пояснении примеров и практических решений нотации бизнес-процессов.
Читать дальше →
Total votes 13: ↑10 and ↓3+7
Comments12

Что же такое RQL

Reading time7 min
Views13K
Представьте, что у вас есть хранилище данных с REST-интерфейсом. Пусть в нем хранится информация о книгах и вы хотите вывести список всех книг. Можно сделать метод «books», который будет возвращать нам список книг. Но при отображении списка обычно есть паджинация или ленивая подгрузка данных, а еще пользовать хочет фильтровать и сортировать данные. Когда мы добавляем поддержку мобильных устройств у нас появляется еще потребность как-то ограничить объем получаемых данных не передавая часть полей. Всю эту информацию должен уметь понимать почти любой метод получения списка объектов, т.к. списки отображаются с помощью специального виджета. И тут нам на помощь приходит Resource Query Language.

Resource Query Language (RQL) — это язык запросов, разработанный для использования в URI при работе с объекто-подобными структурами данных. С помощью RQL клиент может запрашивать у сервера список объектов соответствующих определенным правилам, т.е., по сути, это синтаксис, который описывает как запрашивать данные. Например, запрос выбирающий все книги авторства Перумова может быть записан как eq(author,Перумов) или в обычном формате URL: author=Перумов.
Читать дальше →
Total votes 24: ↑22 and ↓2+20
Comments19

Перевод Redmine-плагинов с TelegramCLI на Webogram

Reading time3 min
Views5.3K


Ранее мы уже писали о наших плагинах redmine_chat_telegram и redmine_intouch, предназначенных
для того, чтобы ваша работа с Redmine и Telegram была продуктивнее. А сегодня мы хотели бы рассказать о том, как избавились от TelegramCLI. Это большой апдейт, призванный упростить работу с нашими telegram-плагинами.

Читать дальше →
Total votes 6: ↑6 and ↓0+6
Comments3

Pygest #12. Релизы, статьи, интересные проекты из мира Python [20 июня 2017 — 03 июля 2017]

Reading time2 min
Views7.7K
image Всем привет! Это уже двенадцатый выпуск дайджеста на Хабрахабр о новостях из мира Python.

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

А теперь к делу!
Перейти к дайджесту
Total votes 10: ↑10 and ↓0+10
Comments1

Pygest #11. Релизы, статьи, интересные проекты из мира Python [6 июня 2017 — 19 июня 2017]

Reading time2 min
Views10K
image Всем привет! Это уже одиннадцатый выпуск дайджеста на Хабрахабр о новостях из мира Python.

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

А теперь к делу!
Перейти к дайджесту
Total votes 17: ↑17 and ↓0+17
Comments3

Фреймворк Jobs-To-Be-Done: наш опыт использования

Reading time1 min
Views9.3K


Outcome-driven innovation — это фреймворк, в основе которого приоритизация планов разработки компании на основе задач, для которых клиенты эти продукты покупают — Jobs to be done. Фреймворк дает хорошее методическое описание и обоснование идей и практик, которые каждый product owner, по идее, и так применяет или должен применять, но обычно — интуитивно и на менее системном уровне.

На Codefest 2017 Аркадий Рушкевич, product-manager Wrike, рассказал о собственном опыте использования Jobs to be done и ODI — как и зачем Wrike начал заниматься этим, какие плюсы и минусы мы увидели, чего добились.

Делимся видеозаписью и презентацией доклада. Надеемся, что интересно будет и продакт оунерам с опытом, и тем, кто только начинает думать, как расставлять приоритеты и находить новые точки роста продукта.
Смотреть
Total votes 17: ↑16 and ↓1+15
Comments2

Web Scraping с помощью python

Reading time7 min
Views562K

Введение


Недавно заглянув на КиноПоиск, я обнаружила, что за долгие годы успела оставить более 1000 оценок и подумала, что было бы интересно поисследовать эти данные подробнее: менялись ли мои вкусы в кино с течением времени? есть ли годовая/недельная сезонность в активности? коррелируют ли мои оценки с рейтингом КиноПоиска, IMDb или кинокритиков?
Но прежде чем анализировать и строить красивые графики, нужно получить данные. К сожалению, многие сервисы (и КиноПоиск не исключение) не имеют публичного API, так что, приходится засучить рукава и парсить html-страницы. Именно о том, как скачать и распарсить web-cайт, я и хочу рассказать в этой статье.
В первую очередь статья предназначена для тех, кто всегда хотел разобраться с Web Scrapping, но не доходили руки или не знал с чего начать.

Off-topic: к слову, Новый Кинопоиск под капотом использует запросы, которые возвращают данные об оценках в виде JSON, так что, задача могла быть решена и другим путем.
Читать дальше →
Total votes 40: ↑31 and ↓9+22
Comments48

Основы парсинга с помощью Python+lxml

Reading time6 min
Views187K
Добрый день, уважаемые читатели.
В сегодняшней статье я покажу основы разбора HTML разметки страниц с помощью библиотеки lxml для Python.
Если вкратце, то lxml это быстрая и гибкая библиотека для обработки разметки XML и HTML на Python. Кроме того, в ней присутствует возможность разложения элементов документа в дерево. В статье я постараюсь показать, насколько просто ее применение на практике.

Читать дальше →
Total votes 42: ↑38 and ↓4+34
Comments9

Почти манифест дизайн-мышления

Reading time11 min
Views16K
Большинство людей готово безмерно трудиться, чтобы избавиться от необходимости немного подумать. Простые и полезные инструменты для анализа системы, поиска новых решений и создания уникальных продуктов лежат у нас под ногами – остается их только взять и использовать. В Программе «Единая Фронтальная система» мы генерим огромное количество идей. Выявлять самые жизнеспособные из них и успешно решать существующие проблемы помогает дизайн-мышление.



В этой статье мы покажем универсальный процесс проектирования, расскажем, почему надо тренировать дизайн-мышление, и пройдем по всей проектной цепочке, используя проверенные олдскульные методы.
Читать дальше →
Total votes 30: ↑21 and ↓9+12
Comments6

Великобритания планирует запретить end-to-end шифрование

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

Читать дальше →
Total votes 29: ↑25 and ↓4+21
Comments55

Information

Rating
Does not participate
Date of birth
Registered
Activity