Pull to refresh
25
0
Fedor Malyshkin @fedor_malyshkin

Java/Scala developer

Send message

В разрезе: новостной агрегатор на Android с бэкендом. Распределённые системы обработки сообщений (Spark, Storm)

Reading time 9 min
Views 3.8K
Вводная часть (со ссылками на все статьи)

image

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

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

  • Низкая задержка (latency) обработки сообщения;
  • Возможность получения данных из разных источников (БД, message middleware);
  • Возможность обработки данных на нескольких узлах;
  • Отказоустойчивость к ситуациям выхода из строя узлов;
  • Поддержка уровня гарантированной обработки сообщения «at-least-once»;
  • Наличие интерфейса для мониторинга состояния кластера и для управления им (хотя бы частично).

В качестве итогового решения был выбран фреймворк Apache Storm. Для поклонников Apache Spark: с учётом широкой распространённости этого фреймворка (с использованием Spark Streaming или сейчас Spark Structured Streaming), всё дальнейшее повествование будет строиться в сравнении с функционалом Apache Spark.
Читать дальше →
Total votes 10: ↑10 and ↓0 +10
Comments 0

В разрезе: новостной агрегатор на Android с бэкендом. Разработка под Android: выработка архитектуры

Reading time 5 min
Views 6K
Вводная часть (со ссылками на все статьи)

В водной статье я уже писал о том, что планируемым клиентом для проекта должен стать клиент Android: доступный большой аудитории, лёгкий, функциональный, красивый, быстрый (не приложение, а мечта!). Если с основаниями выбора платформы всё понятно, то с тем как реализовывать на базе неё все перечисленные требования – ясно было далеко не всё.

Ранее разработкой под Android не занимался поэтому достаточно ценными источниками информации для меня являлись:


После изучения указанных источников вопросов с архитектурой Android и взаимодействия их компонентов не осталось. Однако остался один наиважнейший вопрос: какова будет структура самого приложения? Пара примеров и прототипов показала, при росте функционала всё быстро начинало превращаться в «лапшу»:

  • Логика работы с объектами Android (Activity, Preferences, TextView ….) перемешивалась с бизнес-логикой;
  • Объекты хранения фигурировали в коде построения интерфейса;
  • Модульное тестирование превращалось в ад из-за необходимости работы с родными объектами Android и их подмены экземплярами Robolectric;
  • Проверка асинхронного кода была возможна только на устройстве или эмуляторе (по принципу: «запустил-проверил-повторил»).
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 2

В разрезе: новостной агрегатор на Android с бэкендом. Система мониторинга и визуализации данных (InfluxDB, Grafana)

Reading time 9 min
Views 8.7K
Вводная часть (со ссылками на все статьи)

Сложные системы (распределённые/крупные/со сложной логикой/сложной системой данных) – как живой организм: подвижный, изменчивый и самостоятельный. Всё это требует постоянного контроля со стороны разработчиков/администраторов/DevOps-инженеров.

К этому выводу я пришёл, когда система несколько раз «загибалась» в ходе её разработки, настройки сервера и эксплуатации. Это натолкнуло меня на мысль, что мониторинг должен осуществляться не только на этапе производственной эксплуатации, но и на этапе разработки.

Обо всём по порядку…
Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Comments 6

В разрезе: новостной агрегатор на Android с бэкендом. Система контроля конфигураций (Puppet)

Reading time 13 min
Views 2.1K
Вводная часть (со ссылками на все статьи)

В ITIL (v3) среди описанных процессов есть 2 особенно интересных: «Процесс управления конфигурациями» и «Процесс управления изменениями», предназначенных для анализа и управления изменениями конфигураций систем. Для продолжения повествования нужно определиться, что такое «система». В это понятие входит огромное количество составляющих, влияющих (прямо или косвенно) на предоставление услуги:

  • серверы

    • настройки безопасности (пользователи, группы, права, межсетевые экраны);
    • установленные приложения и библиотеки;
    • настройки работы приложений (лимиты по дискрипторам, памяти, времени CPU и т.д.);
    • резервное копирование;

  • системы мониторинга за работой прикладного и системного ПО;
  • конфигурационные файлы самого продукта, его компонентов, вспомогательных системных и прикладных приложений
  • ...

Пытаться минимизировать контур системы вашего проекта (тип, резервное копирование не относится к функционированию системы) – значит рыть себе яму, в которую рано или поздно вы провалитесь.
Читать дальше →
Total votes 6: ↑5 and ↓1 +4
Comments 0

В разрезе: новостной агрегатор на Android с бэкендом. Библиотека обхода интернет-сайтов на Java (crawler4j)

Reading time 3 min
Views 3.3K
Вводная часть (со ссылками на все статьи)

Неотъемлемой частью системы сбора новостей является робот для обхода сайтов (crawler, круалер, «паук»). В его функции входит отслеживание изменений на указанных сайтах и внесение новых данных в базу данных (БД) системы.

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

  • простота настройки;
  • возможность настройки для обхода нескольких сайтов;
  • нетребовательность к ресурсам;
  • отсутствие дополнительных инфраструктурных вещей (координаторов работы, БД для «паука», дополнительных сервисов и т.д.).
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 0

В разрезе: новостной агрегатор на Android с бэкендом. Система последовательной интеграции

Reading time 5 min
Views 2.3K
Вводная часть (со ссылками на все статьи)

«Система последовательной интеграции», не уверен, что перевод правильный – лучше называть система непрерывной интеграции (continuous integration).
С ними первый раз я столкнулся в начале своей работы, когда 5-7 программистов усиленно писали код и тесты, меняли конфигурационные файлы и лили все свои результаты в trunk/master. В итоге частенько (так частенько, что аж бесило) в основной ветке появлялось нечто нерабочее. Причём выявлялось это тогда, когда нужно было развернуть тестовый стенд, что сильно замедляло работу группы тестирования (ждали исправления) и разработчиков (соответственно исправляли). Т.е. работоспособность кода не контролировалась после помещения его в репозиторий.
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 1

В разрезе: новостной агрегатор на Android с бэкендом. Система сборки

Reading time 5 min
Views 2.3K
Вводная часть (со ссылками на все статьи)

Лет 10-15 назад, когда программы состояли из исходников и небольшого количества двоичных файлов с работой по сборке итоговых программ отлично справлялись всевозможные «?make». Однако сейчас современные программы и подходы к разработке сильно изменились – это:
множество различных файлов (не считаю исходников) – стили, шаблоны, ресурсы, конфигурации, скрипты, бинарные данные и.т.д;

  • предпроцессоры;
  • системы проверки стиля исходников или всего проекта (lint, checkstyle и т.д.);
  • методики разработки, основанные на тестах, с их запуском при сборке;
  • различного типа стенды;
  • системы развёртывания на базе облачных технологий и т.д. и.т.п.
Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 2

В разрезе: новостной агрегатор на Android с бэкендом. Система контроля версий

Reading time 4 min
Views 2.4K
Вводная часть (со ссылками на все статьи)

Когда я выделил необходимое время для написания статьи об опыте использования системы контроля версий, я переговорил с несколькими людьми занимающимися разработкой (новичками и профессионалами) о системах контроля версий – плюсы и минусы использования, особенности их систем, сценарии использования. Разговор всегда начинался примерно одинаково: каждый считал, что может ответить на все мои вопросы и поделиться своим опытом, однако заканчивался разговор по-разному: кто-то прямо говорил, что в тонкостях не специалист, кто-то говорил, что это мне не понадобится – отсюда можно сделать вывод, что системы контроля версий не настолько простой инструмент совместной работы как многие о нём думают.
Читать дальше →
Total votes 7: ↑5 and ↓2 +3
Comments 2

В разрезе: новостной агрегатор на Android с бэкендом. Вводная часть, идея, технологии

Reading time 2 min
Views 5.9K
Так сложилось, что работу, которая мне нравилась и которую, как мне кажется, я делал хорошо, мне пришлось сменить на более стабильную и прибыльную, но уже не такую интересную – работу линейного менеджера в подразделении информатизации в крупном банке. Сказать, что эта работа полная противоположность прежней сложно, но в ней нет, того, что было в разработке: драйва, необходимость решения сложных задач, изучения новых технологий, что тут говорить – не было даже английского языка (знание которого терять не хотелось). Откровенно говоря, несмотря на заявляемую гибкость и передовые технологи, во многих банках царит IT-совок и ручной труд.

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

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

В качестве проекта была выбрана идея реализации новостного агрегатора (с клиентом на Android) и его серверной стороны для сбора, обработки, хранения и представления данных.
Читать дальше →
Total votes 5: ↑5 and ↓0 +5
Comments 2

О влиянии TDD на разработку (мнения читателей)

Reading time 1 min
Views 2.5K
Добрый день уважаемые посетители habrahabr.ru!

Давным-давно, когда я работал в одном из стартапов, где я был основным иницатором и продвиженцем внедрения TDD, у меня возник спор с моим «техническим директором» (если его можно было так назвать) на тему того как TDD влияет на получаемый в итоге код. Он сделал одно простое замечание, на которое я не смог тогда найти, что ему ответить – «При подобном подходе к разработке в коде появляются дополнительные интерфейсы (я практиковал подход к тестированию с помощью Mock'ов, Stub'ов и подмены реализаций интерфейсов) и уровни, усложняющие и замедляющие код».
Что бы Вы ответили?
Читать дальше →
Total votes 38: ↑30 and ↓8 +22
Comments 89

Графематический модуль. Выделение предложений

Reading time 2 min
Views 5.3K
Выделение предложений из сплошного текста – процедура необходимая для дальнейшего анализа текста в любой системе анализа естественных языков.

Что такое предложение?


Первый ответ на этот вопрос – это что-то, заканчивающееся на символы «.», «!», или «?». Но если рассмотреть встречающиеся тексты более внимательно, то можно обнаружить, что «.» используется не только для определения конца предложения, но и для аббревиатур и сокращений, а иногда выполняет обе эти роли. Вне зависимости от этого точка в 90% случаев является индикатором конца предложения (Riley 1989).
Читать дальше →
Total votes 37: ↑25 and ↓12 +13
Comments 12

Потоковый JSON-парсер YAJL

Reading time 2 min
Views 13K
В связи, с возникшей недавно потребностью работе с данными в JSON-формате, решил исследовать вопрос о существующих библиотеках для работы с JSON для С/С++.Сразу хочу оговориться, что детального рассмотрения всего множества библиотек для работы c JSON я представлять не собирался. На текущий момент их существует более-менее большое кол-во. Вот список с сайта json.org (http://www.json.org):
Читать дальше →
Total votes 18: ↑16 and ↓2 +14
Comments 21

Использование статистических методов для генерации парадигмы по каноническим формам новых слов

Reading time 3 min
Views 905
Вот и настал момент, когда можно будет поговорить об интересном методе заполнения базы/словаря модуля морфологии с использованием данных уже имеющихся в нём и статистических методов.

Имеем:
  1. Базу Зализняка из 94 тысячcлемми почти 3 миллионових словоформ
  2. Базу из 52 тысячи новых слов с информацией об их грамматической принадлежности (род, число, одушевлённость и прочее…)
  3. Интерпретатор Ruby
  4. Некоторое кол-во свободного времени после работы
  5. Необходимость дополнить базу модуля парадигмами новых слов (имеются лишь их канонические формы)

Читать дальше →
Total votes 4: ↑4 and ↓0 +4
Comments 9

Сравнение характеристик структур для операций поиска

Reading time 1 min
Views 447
При рассмотрении реализаций поиска нашёл интересную таблицу с характеристиками структур, применяемых для реализации символьных таблиц. Причём рассматриваются худшие и средние случаи.
Читать дальше →
Total votes 11: ↑5 and ↓6 -1
Comments 4

Использование скрытых Марковских моделей для снятия морфологической омонимии

Reading time 3 min
Views 2.2K
В предыдущем посте я писал о том, что такое морфологическая омонимия (пример со словом «стали») и упоминал о том, что для её разрешения используют скрытые Марковские модели (Hidden Markov Model, HMM).
Вначале немного о разметке теста (в английской литературе этот процесс называется «part-of-speech tagging» (POST)) – это ручной или автоматический процесс, в результате которого каждому слову текста приписывает атрибутивная информация (тэг), которая определяет какой частью речи является это слово: существительное, глагол, прилагательное, наречие, местоимение, частица, союз, междометие и т.д. Именно тут мы и наткнёмся на проблему «стали».
Читать дальше →
Total votes 13: ↑13 and ↓0 +13
Comments 4

О смысле. Деревья синтаксического подчинения (деревья подчинения)

Reading time 2 min
Views 2.5K
В предыдущем посте я обмолвился о деревьях подчинения и использовал (возможно, зря) спорный пример с «туманностью».
Теперь просто необходимо объяснить, почему я интерпретировал данный текст таким образом. Хотя, как оказалось, по комментариям специалистов в творчестве Пушкина – неверно, но будем рассматривать данный пример не в аспекте исторической точности, а в аспекте способов интерпретации текста на естественном языке машиной.
Начнём с определения того, что же такое деревья синтаксического подчинения (в простонородье – деревья подчинения)? Это упорядоченный граф (т.е. дерево), где узлами являются слова предложения, а их иерархия и система подчинения определяет, какие слова являются главными в предложении и какие от каких зависят.
Для наглядности приведу пару снимков того, что я имею в виду:
Читать дальше →
Total votes 18: ↑15 and ↓3 +12
Comments 4

Извлечение фактов. Синонимия и омонимия

Reading time 2 min
Views 3.1K
Данный пост возник как результат общения с одним наивным человеком и результат собственных размышлений о таком сложном и неоднозначном предмете, как язык (в данном случае русский).
О разговоре: суть заключалась в том, что (назовём его Некто) Некто заявлял, что процесс извлечения фактов из текста на естественном языке – вещь достаточно простая и легко реализуемая, мол, ищем глаголы (слова, заканчивающиеся «ет/ют/ел/…») и рядом стоящие существительные (слова длинной более 4 букв), составляем триплеты и загоняем в базу онтологий – вот и движок по извлечению фактов.
Тут же, по моей собственной системе классификации интеллекта, человек получил одну из самых наименьших оценок, но это заставило меня задуматься о некоторых аспектах представления информации в ЕЯ и сложностях, возникающих при извлечении информации из него.

Сегодня будет разговор о синонимии и омонимии.
Читать дальше →
Total votes 26: ↑19 and ↓7 +12
Comments 21

Information

Rating
Does not participate
Location
Россия
Registered
Activity