Как стать автором
Обновить
0
Сергей Мальцев @alternativshikread⁠-⁠only

Пользователь

Отправить сообщение

Поиск аномалий во временных рядах

Время на прочтение10 мин
Количество просмотров19K

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

Изучим этот процесс более подробно
Всего голосов 11: ↑11 и ↓0+11
Комментарии11

Прогнозирование временных рядов методом рядов Фурье

Время на прочтение10 мин
Количество просмотров23K
image
Привет, Хабр.

Эта статья посвящена методу долгосрочного прогнозирования временных рядов с помощью рядов Фурье [1-2]. Особенность подхода в том, что в отличие от классических методов прогнозирования и машинного обучения прогнозируется не сама неизвестная функция, а ее коэффициенты разложения в ряд Фурье. Далее по спрогнозированным коэффициентам Фурье восстанавливается неизвестная функция и делается прогноз ее значений на следующий период.

Внимание! Статья содержит множество формул.

Читать дальше →
Всего голосов 8: ↑8 и ↓0+8
Комментарии10

Шаблон backend сервера на Golang — часть 2 (REST API)

Время на прочтение32 мин
Количество просмотров30K

UPD. Ссылка на новый репозиторий проекта с поддержкой развертывания в Kubernetes


Представленный ниже шаблон сервера на Golang был подготовлен для передачи знаний внутри нашей команды. Основная цель шаблона, кроме обучения — это снизить время на прототипирование небольших серверных задач на Go.


Первая часть шаблона посвящена HTTP серверу:


  • настройка HTTP сервера через командную строку и конфигурационный файл
  • настройка параметров TLS HTTP сервера
  • настройка роутера и регистрация HTTP и prof-обработчиков
  • настройка логирования HTTP трафика, логирования ошибок в HTTP
  • HTTP Basic и MS AD аутентификация, JSON Web Token
  • запуск сервера с ожиданием возврата в канал ошибок
  • использование контекста для корректной остановки сервера и связанных сервисов
  • настройка кастомной обработки ошибок и кастомного логирования
  • сборка кода с внедрением версии, даты сборки и commit

Вторая часть шаблона посвящена прототипированию REST API.
Ссылка на репозиторий проекта осталась прежней.


Третья часть посвящена развертыванию шаблона в Docker, Docker Compose, Kubernetes (kustomize).


Пятая часть посвящена оптимизации Worker pool и особенностям его работы в составе микросервиса, развернутого в Kubernetes.


Архитектура шаблона REST API


В ходе тестирования шаблона на стенде были получены следующие результаты.

Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии2

PostgreSQL Antipatterns: вычисление условий в SQL

Время на прочтение4 мин
Количество просмотров14K
SQL — это не C++, и не JavaScript. Поэтому вычисление логических выражений происходит иначе, и вот это — совсем не одно и то же:
WHERE fncondX() AND fncondY()
= fncondX() && fncondY()

В процессе оптимизации плана исполнения запроса PostgreSQL может произвольным образом «переставлять» эквивалентные условия, не вычислять какие-то из них для отдельных записей, относить к условию применяемого индекса… Короче, проще всего считать, что вы заранее не можете управлять тем, в каком порядке будут (и будут ли вообще) вычисляться равноправные условия.

Поэтому если управлять приоритетом все-таки хочется, надо структурно сделать эти условия неравными с помощью условных выражений и операторов.


Данные и работа с ними — основа нашего комплекса СБИС, поэтому нам очень важно, чтобы операции над ними выполнялись не только корректно, но и эффективно. Давайте посмотрим на конкретных примерах, где могут быть допущены ошибки вычисления выражений, а где стоит улучшить их эффективность.
Читать дальше →
Всего голосов 26: ↑26 и ↓0+26
Комментарии0

Рецепты для хворающих SQL-запросов

Время на прочтение7 мин
Количество просмотров51K
Несколько месяцев назад мы анонсировали explain.tensor.ru — публичный сервис для разбора и визуализации планов запросов к PostgreSQL.

За прошедшее время вы уже воспользовались им более 6000 раз, но одна из удобных функций могла остаться незамеченной — это структурные подсказки, которые выглядят примерно так:



Прислушивайтесь к ним, и ваши запросы «станут гладкими и шелковистыми». :)

А если серьезно, то многие ситуации, которые делают запрос медленным и «прожорливым» по ресурсам, типичны и могут быть распознаны по структуре и данным плана.

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



Давайте чуть подробнее рассмотрим эти кейсы — как они определяются и к каким рекомендациям приводят.
Всего голосов 23: ↑23 и ↓0+23
Комментарии28

Celery throttling — настраивам rate limit для очередей

Время на прочтение6 мин
Количество просмотров11K

​ В этой статье я покажу как решить одну из проблем, возникающих при использовании распределенных очередей задач — регулирование пропускной способности очереди, или же, более простым языком, настройка ее rate limit'a. В качестве примера я возьму python и свою любимую связку Celery+RabbitMQ, хотя алгоритм, который я использую, никак не зависит от этих инструментов и может быть реализован на любом другом стэке.


Celery+RabbitMQ


So what's the problem?


​ Для начала пара слов о том, какую проблему я вообще пытаюсь решить. Дело в том, что 99.9% сервисов в интернете запрещают бесконтрольно закидывать их сотнями/тысячами запросов в секунду, угрожая дать в ответ какой-нибудь 403 или 500. Нет, ну правда, жалко им чтоле? Иногда таким сервисом может выступать даже своя собственная БД… Вобщем, доверять нынче нельзя никому, поэтому приходится себя как-то сдерживать.


​ Конечно, если вся работа ведется внутри 1го процесса, то никакой проблемы нет, но т.к мы работаем с Celery, то у нас может быть не только N процессов (далее воркеров), но и M машин, и задача все это дело синхронизировать уже не кажется столь тривиальной.

Читать дальше →
Всего голосов 14: ↑14 и ↓0+14
Комментарии6

15 лучших и крупнейших библиотек иконок

Время на прочтение3 мин
Количество просмотров35K


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

Сразу уточняем: это не 15 самых лучших библиотек, а 15 из лучших. Разумеется, есть и другие, не менее замечательные, о которых я не упомянул или не знаю.
И, нет, это не рейтинг — список маркированный, а не нумерованный.
Читать дальше →
Всего голосов 26: ↑24 и ↓2+22
Комментарии12

Python Testing с pytest. Начало работы с pytest, Глава 1

Время на прочтение24 мин
Количество просмотров198K

Вернуться Дальше


Я обнаружил, что Python Testing с pytest является чрезвычайно полезным вводным руководством к среде тестирования pytest. Это уже приносит мне дивиденды в моей компании.

Chris Shaver
VP of Product, Uprising Technology


Читать дальше →
Всего голосов 31: ↑22 и ↓9+13
Комментарии2

Проектирование дашбордов для веб-аналитики e-commerce сайта. Часть 1: Удобный интерфейс

Время на прочтение4 мин
Количество просмотров16K
Дашбордами называют массив данных, представленный в наглядной форме в виде таблиц, графиков, элементов инфографики. Иногда дашборд — это любой красиво оформленный набор цифр. Как, например, изображенная на картинке информационная панель.


Дашборд для автомобилиста

Цикл публикаций будет состоять из статей с описанием содержания дашбордов для веб-аналитики e-commerce сайтов. Поговорим о создании удобного интерфейса дашборда.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+8
Комментарии5

Как создавать специальные предложения (офферы), которые увеличат вовлеченность пользователей?

Время на прочтение5 мин
Количество просмотров11K
Сегодня хочу вам предложить перевод статьи Lee W. Frederiksen, управляющего партнера компании Hinge. Hinge специализируется на брендинге и маркетинге профессиональных услуг. Поехали!

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

Что случится после того, как посетитель прочитает ваш пост в блоге или посмотрит видео?

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

На что обратить внимание при создании специальных предложений
Всего голосов 27: ↑13 и ↓14-1
Комментарии9

Несколько интересностей и полезностей для веб-разработчика #30

Время на прочтение6 мин
Количество просмотров51K
Доброго времени суток, уважаемые хабравчане. За последнее время я увидел несколько интересных и полезных инструментов/библиотек/событий, которыми хочу поделиться с Хабром.

Cloudtunes



Cloudtunes один из тех проектов, глядя на которые я не понимаю мотивации разработчиков выкладывать такие наработки в открытый доступ. Не сочтите меня за сугубо меркантильную личность, но данный проект — это грубо говоря клон iTunes в облаке и это просто великолепный сервис. Cloudtunes обеспечивает единый интерфейс для вашей медиатеки, синхронизируя данные между Dropbox, Youtube, Lastfm и тд. Серверная часть написана на Python (Tornado, Celery, Mongo DB, MongoEngine, Redis), а клиентская на CoffeeScript (Backbone.js, SocketIO, Handlebars, Compass, SoundManager).

Читать дальше →
Всего голосов 75: ↑71 и ↓4+67
Комментарии13

Как мы делали каркас приложения на AngularJS и Django

Время на прочтение5 мин
Количество просмотров32K
image

Весной нам в голову пришла идея сделать простой сервис для облачного бэкапа серверов. Поскольку в то время работа над проектом велась преимущественно по вечерам и по выходным, для ускорения процесса было решено использовать только те технологии, в которых у нас есть опыт. Для backend-части был выбран Django, а реализация клиентской части предполагалась в виде SPA на базе AngularJS. Задумка была в следующем: сделать продукт с минимальным функционалом, а затем постепенно добавлять новые возможности. Для этого необходимо было сделать достаточно гибкую и масштабируемую систему. Немного пораскинув мозгами, мы приступили.
Читать дальше →
Всего голосов 39: ↑36 и ↓3+33
Комментарии10

Как бороться с репостами или пара слов о перцептивных хешах

Время на прочтение11 мин
Количество просмотров30K
В этой публикации речь пойдет о подходах к построению перцептивный хешей изображения и возможностях их использования (например, поиск дубликатов).

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

Если хэши отличаются, значит, данные разные. Если хэши совпадают, то данные, скорее всего, одинаковые (поскольку существует вероятность коллизий, то одинаковые хэши не гарантируют совпадения данных). В этой статье речь пойдет о нескольких популярных методах построения перцептивный хешей изображения, а также о простом способе борьбы с коллизиями. Всем кому интересно, прошу под кат.
Читать дальше →
Всего голосов 55: ↑54 и ↓1+53
Комментарии26

Знай сложности алгоритмов

Время на прочтение2 мин
Количество просмотров988K
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Всего голосов 312: ↑296 и ↓16+280
Комментарии99

Item-based коллаборативная фильтрация своими руками

Время на прочтение10 мин
Количество просмотров19K
Робот-рекомендатель

Одной из наиболее популярных техник для построения персонализированных рекомендательных систем (RS, чтобы не путать с ПиСи) является коллаборативная фильтрация. Коллаборативная фильтрация бывает двух типов: user-based и item-based. User-based часто используется в качестве примера построения персонализированных RS [на хабре, в книге Т.Сегаран,...]. Тем не менее, у user-based подхода есть существенный недостаток: с увеличением количества пользователей RS линейно увеличивается сложность вычисления персонализированной рекомендации.

Когда количество объектов для рекомендаций большое, затраты на user-based подход могут быть оправданы. Однако во многих сервисах, в том числе и в ivi.ru, количество объектов в разы меньше количества пользователей. Для таких случаев и придуман item-based подход.

В этой статье я расскажу, как за несколько минут можно создать полноценную персонализированную RS на основе item-based подхода.
Читать дальше
Всего голосов 36: ↑35 и ↓1+34
Комментарии13

Qt 5.2, от желания до Google Play

Время на прочтение7 мин
Количество просмотров66K
Здравствуйте, коллеги.

Случилось так, что мне рассказали о Qt5.2 и его новой возможности быстро и легко создавать кроссплатформенные приложения под Android и iOS. С Qt я знаком был уже давно, но в последнее время работа была связана с другими технологиями и я немного запустил его развитие. Узнав это, я отправился на сайт Qt, посмотрел красивое видео, где за 10 минут HelloWorld приложение создается сразу под android и ios. Впечатления были очень положительные.

Было принято решиение заняться мобильной разработкой. Появился план пройти путь от желания сделать приложение до его публикации в Google Play. Но на первом этапе хотелось пройти это с тем что не жалко и в чем можно делать ошибки. И все это на новом Qt5.2.

Читать дальше →
Всего голосов 40: ↑36 и ↓4+32
Комментарии28

Информация

В рейтинге
Не участвует
Откуда
Украина
Дата рождения
Зарегистрирован
Активность