Pull to refresh
22
0
Игорь Моисеев @kayan

Разработчик C#, Руководитель проектов

Объяснение фильтра Калмана в картинках

Reading time 9 min
Views 30K
Algorithms *Mathematics *
Translation
image

Я обязан рассказать вам о фильтре Калмана, потому что он выполняет просто потрясающую задачу.

Как ни удивительно, о нём, похоже, знают немногие разработчики ПО и учёные, и это печалит меня, потому что это очень обобщённый и мощный инструмент для объединения информации в условиях присутствия неопределённости. Иногда его способность извлечения точной информации кажется почти магической, а если вы думаете, что я слишком много болтаю, то взгляните на это видео, в котором я показываю, как фильтр Калмана определяет ориентацию свободно плавающего тела, посмотрев на его вектор скорости. Потрясающе!
Читать дальше →
Total votes 116: ↑116 and ↓0 +116
Comments 30

Реализуем кооперативную многозадачность на C#

Reading time 6 min
Views 8.1K
.NET *C# *


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

Читать дальше →
Total votes 17: ↑15 and ↓2 +13
Comments 38

Как жили до Kubernetes: сравниваем самый популярный оркестратор с другими решениями

Reading time 24 min
Views 38K
VK corporate blog Cloud computing *DevOps *Kubernetes *


Kubernetes сейчас называют стандартом для оркестрации контейнеров. Он лежит в основе многих облачных платформ контейнеризации: например, мы давно развиваем наш Kubernetes aaS на платформе Mail.ru Cloud Solutions.


Однако Kubernetes далеко не первый подобный инструмент на рынке: некоторые из систем-предшественников продолжают активно использовать и вроде бы даже успешно.


Почему так происходит, несмотря на то, что Kubernetes, можно сказать, одержал победу в своем классе и мы видим много примеров, когда он приходит на смену другим решениям? Например, не так давно разработчики Mesosphere DC/OS, в основе которой лежал Apache Mesos, прекратили ее развитие и сфокусировались на другой своей платформе — D2iQ Kubernetes (DKP). Думаю, что стоит разобраться, всегда ли хорош Kubernetes, когда оправдано использовать другие оркестраторы и о каких подводных камнях стоит знать.


Я Дмитрий Лазаренко, директор по продуктам облачной платформы Mail.ru Cloud Solutions (MCS). В этой статье расскажу об устройстве ряда оркестраторов-предшественников, сравню их с Kubernetes, посмотрю на его преимущества и недостатки по сравнению с ними.

Читать дальше →
Total votes 30: ↑28 and ↓2 +26
Comments 56

Сортировка n-нарной пирамидой

Reading time 8 min
Views 11K
Edison corporate blog Python *Programming *Perfect code *Algorithms *

Сортировку кучей (она же — пирамидальная сортировка) на Хабре уже поминали добрым словом не раз и не два, но это всегда была достаточно общеизвестная информация. Обычную бинарную кучу знают все, но ведь в теории алгоритмов также есть:

n-нарная куча; куча куч, основанная на числах Леонардо; дерамида (гибрид кучи и двоичного дерева поиска); турнирная мини-куча; зеркальная (обратная) куча; слабая куча; юнгова куча; биномиальная куча; и бог весть ещё какие кучи…

И умнейшие представители computer science в разные годы предложили свои алгоритмы сортировки с помощью этих пирамидальных структур. Кому интересно, что у них получилось — для тех начинаем небольшую серию статей, посвящённую вопросам сортировки с помощью этих структур. Мир куч многообразен — надеюсь, вам будет интересно.
Траффик
Total votes 25: ↑24 and ↓1 +23
Comments 5

Руководство по JavaScript, часть 4: функции

Reading time 12 min
Views 51K
RUVDS.com corporate blog Website development *JavaScript *
Tutorial
Translation
Сегодня публикуем четвёртую часть перевода руководства по JavaScript, которая посвящена функциям.

Часть 1: первая программа, особенности языка, стандарты
Часть 2: стиль кода и структура программ
Часть 3: переменные, типы данных, выражения, объекты
Часть 4: функции
Часть 5: массивы и циклы
Часть 6: исключения, точка с запятой, шаблонные литералы
Часть 7: строгий режим, ключевое слово this, события, модули, математические вычисления
Часть 8: обзор возможностей стандарта ES6
Часть 9: обзор возможностей стандартов ES7, ES8 и ES9



Функции в JavaScript


Поговорим о функциях в JavaScript, сделаем их общий обзор и рассмотрим подробности о них, знание которых позволит вам эффективно ими пользоваться.
Читать дальше →
Total votes 35: ↑31 and ↓4 +27
Comments 2

Браузерные расширения для GitHub, которые увеличат продуктивность вашей работы

Reading time 3 min
Views 17K
Skillbox corporate blog Programming *GitHub *Studying in IT


Сейчас GitHub — самый популярный среди разработчиков сервис для совместной разработки программного обеспечения и размещения исходников в «облаке». Его используют как независимые разработчики, у которых в портфолио 1-2 приложения, так и технологические гиганты, включая Microsoft, Google и Facebook, у которых тысячи проектов.

Собственно, рассказывать на Хабре о том, что такое GitHub, смысла нет; этот пост посвящен его браузерным расширениям, которые позволяют увеличить скорость и продуктивность работы. Вообще говоря, расширений этих очень много, поэтому мы выбрали те из них, которые используем в своей работе сами или которые порекомендовали коллеги.
Читать дальше →
Total votes 32: ↑32 and ↓0 +32
Comments 6

Запуск кластера RabbitMQ в Kubernetes

Reading time 10 min
Views 24K
True Engineering corporate blog High performance *DevOps *Kubernetes *
Tutorial
При микросервисной организации приложения существенная работа ложится на механизмы интеграционной связи микросервисов. Причем эта интеграция должна быть отказоустойчива, с высокой степенью доступности.

В наших решениях мы используем интеграцию и с помощью Kafka, и с помощью gRPC, и с помощью RabbitMQ.

В этой статье мы поделимся нашим опытом кластеризации RabbitMQ, ноды которого размещены в Kubernetes.

image

До RabbitMQ версии 3.7 его кластеризация в K8S была не очень тривиальной задачей, со множеством хаков и не очень красивых решений. В версии 3.6 использовался autocluster плагин из RabbitMQ Community. А в 3.7 появился Kubernetes Peer Discovery Backend. Он встроен плагином в базовую поставку RabbitMQ и не требует отдельной сборки и установки.

Мы опишем итоговую конфигурацию целиком, попутно комментируя происходящее.
Читать дальше →
Total votes 29: ↑28 and ↓1 +27
Comments 13

C#: обратная совместимость и перегрузки

Reading time 8 min
Views 9.8K
Издательский дом «Питер» corporate blog .NET *C# *Professional literature *
Translation
Здравствуйте, коллеги!

Напоминаем всем, что у нас вышла отличная книга Марка Прайса "C# 7 и .NET Core. Кросс-платформенная разработка для профессионалов". Обратите внимание: перед вами уже третье издание, первое издание было написано по версии 6.0 и на русском языке не выходило, а 3-е издание вышло в оригинале в ноябре 2017 года и охватывает версию 7.1.


После выхода такого компендиума, который прошел отдельную научную редактуру для проверки обратной совместимости и прочей корректности изложенного материала, мы решили перевести интересную статью Джона Скита о том, какие известные и малоизвестные сложности с обратной совместимостью могут возникать в языке C#. Приятного чтения.
Читать дальше →
Total votes 19: ↑19 and ↓0 +19
Comments 5

А вы еще не платите премию за вовремя сделанные проекты?

Reading time 3 min
Views 16K
Development Management *Personnel Management *
Беседовал я как-то с техническим директором одного из крупнейших банков России. В какой-то момент речь у нас зашла о премировании сотрудников. Тогда я ему говорю, что у нас в компании есть премирование сотрудников за вовремя сделанные проекты и задачи. Тут он завис секунд на пять, долгое молчание, недоумение в глазах:
– Кхм… Так за это же программистам зарплату платят! – говорит он.
– Да, платят. Но если изучить статистику успешных проектов в IT, становится грустно и хочется платить премию за выполненные в срок задачи.

Попрощались мы, так и не придя к общему мнению по этому вопросу. В этой статье я и предлагаю разобраться, следует ли платить премию программистам за вовремя сделанные задачи и проекты. И вообще, когда стоит платить премии.
Читать дальше →
Total votes 22: ↑19 and ↓3 +16
Comments 37

[DotNetBook] Реализация IDisposable: правильное использование

Reading time 22 min
Views 33K
Seminars by Stanislav Sidristy corporate blog Programming *.NET *C# *
Tutorial
С этой статьей я начинаю публиковать целую серию статей, результатом которой будет книга по работе .NET CLR, и .NET в целом. Тема IDisposable была выбрана в качестве разгона, пробы пера. Вся книга будет доступна на GitHub: DotNetBook. Так что Issues и Pull Requests приветствуются :)

Disposing (Disposable Design Principle)



Сейчас, наверное, практически любой программист, который разрабатывает на платформе .NET, скажет, что ничего проще этого паттерна нет. Что это известный из известнейших шаблонов, которые применяются на платформе. Однако даже в самой простой и известнейшей проблемной области всегда найдется второе дно, а за ним еще ряд скрытых кармашков, в которые вы никогда не заглядывали. Однако, как для тех, кто смотрит тему впервые, так и для всех прочих (просто для того, чтобы каждый из вас вспомнил основы (не пропускайте эти абзацы (я слежу!))) — опишем все от самого начала и до самого конца.

IDisposable



Если спросить, что такое IDisposable, вы наверняка ответите что это

public interface IDisposable 
{
	void Dispose();
} 


Для чего же создан интерфейс? Ведь если у нас есть умный Garbage Collector, который за нас чистит всю память, делает так, чтобы мы вообще не задумывались о том, как чистить память, то становится не совсем понятно, зачем ее вообще чистить. Однако есть нюансы.

Примечание


Глава, опубликованная на Хабре не обновляется и возможно, уже несколько устарела. А потому, прошу обратиться за более свежим текстом к оригиналу:




Читать дальше →
Total votes 45: ↑40 and ↓5 +35
Comments 66

Геометрия данных 5. Преобразование базиса

Reading time 9 min
Views 9.2K
Mathematics *
Под преобразованием базиса системы координат понимается замена одного набора базовых вершин (реперов) на другой. По сравнению с обычной системой координат на векторах изменение системы координат на точечном базисе имеет особенности, связанные с тем, что базисы могут принадлежать разным пространствам.



В предыдущей части было рассмотрено определение базиса низкой размерности в пространстве высокой размерности и показано, каким образом можно определять дистанции между вершинами, не принадлежащими пространству базиса. При замене базиса требование сохранения метрических свойств системы координат также является ключевым.
Читать дальше →
Total votes 14: ↑14 and ↓0 +14
Comments 0

Моделирование объектов, функций и операций. Мереологические отношения между объектами данного типа

Reading time 10 min
Views 4.9K
Semantics *System Analysis and Design *IT Standards *
В прошлых статьях я разобирал моделирование объектов, типов и атрибутов.

Понятия: множество, тип, атрибут
Как запутать аналитика. Часть первая
Как запутать аналитика. Часть вторая: что такое моделирование предметной области?
Как запутать аналитика. Часть третья. Глаголы и числительные

Вкратце мы затронули жизненный цикл объекта с точки зрения его трансформации и трансформации наших представлений о нем.

Как запутать аналитика — 4. Вероятность и точность

Далее я начал рассмотрение моделирования операций, функций и объектов с единой точки зрения.

Как запутать аналитика — 5. Понятийный аппарат

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

Для создания адаптера нам надо научиться моделировать одно и то же разными способами: как объект и как действие. Для философской мысли это не ново, потому что объекты не существуют вне времени, и действия не могут быть совершены без объектов. Фактически, нам предстоит посмотреть на мир так, как смотрят на него буддисты: объект и действие – одно и то же. Необходимость такого мировоззрения проистекает из необходимости объединения разных точек зрения на одно и то же происходящее. в данной статье я рассмотрю возможные представления реальности и мереологические отношения (отношения часть-целое) между ними.
Читать дальше →
Total votes 9: ↑8 and ↓1 +7
Comments 6

А вы уже применяете R в бизнесе?

Reading time 4 min
Views 9.3K
Data Mining *Big Data *R *

Настоящая публикация не содержит ни кода, ни картинок, поскольку суть вопроса несколько шире, а на конкретные вопросы всегда можно ответить в комментариях.


За последние пару лет мне довелось применять R для решения весьма разнообразных задач в различных вертикалях. Естественно, что применение R заведомо подразумевает решение задач, связанных с той или иной математической обработкой цифровых данных, а разнообразность задач определялась, в первую очередь, самой предметной областью в которой эти прикладные задачи возникали. Частично отдельные задачи кратко упоминались в предыдущих публикациях. Разные предметные области, от земли (АПК) и заканчивая применением для прикладных задач с использованием летательных аппаратов, вплоть до космических.


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


Независимое подтверждение этого тезиса можно получить путем наблюдения за экспоненциальным ростом успешного применения R в обычном бизнесе (не ИТ) на Западе. Например, практически половина докладов с конференции EARL 2017 (Enterprise Applications of the R Language), прошедшей в сентябре этого года, содержат кейсы по использованию R для решения бизнес-задач. В докладах есть примеры по анализу данных в недвижимости, автоматизация деятельности аудиторов, анализ транспортных систем, анализ системы канализации и многие другие отрасли...

Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Comments 26

Геометрия данных 1. Симплексы и графы

Reading time 11 min
Views 19K
Mathematics *
Звездное небо напоминает, — точки являются фундаментальной абстракцией, основой окружающего пространства.



Введение


Это первая статья серии, посвященной описанию свойств базисов пространств на основе элементов (а не векторов). Базис определяет систему координат — описание элементов пространства в виде набора чисел, характеризующих положение элемента относительно базиса.
Читать дальше →
Total votes 22: ↑22 and ↓0 +22
Comments 23

Текстонезависимая идентификация по голосу

Reading time 18 min
Views 15K
Programming *Algorithms *Machine learning *
Sandbox

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


Однако, я не умею строить летающие тарелки или синтезировать вирусы, а потому речь пойдет про терминаторов, а точнее о том как этим трудягам помочь отыскать Джона Коннора.


image


Мой рукодельный терминатор будет несколько упрощён — он не сможет ходить, стрелять, говорить "I'll be back". Единственное на что он будет способен — распознать голос Коннора, ежели он его услышит (ну или, например, Черчилля, если его тоже надо будет найти).

Читать дальше →
Total votes 39: ↑37 and ↓2 +35
Comments 6

«Магическая константа» 0x5f3759df

Reading time 9 min
Views 114K
Инфопульс Украина corporate blog Abnormal programming *Sport programming *Entertaining tasks Programming *
Translation
В этой статье мы поговорим о «магической» константе 0x5f3759df, лежащей в основе элегантного алгоритмического трюка для быстрого вычисления обратного квадратного корня.

Вот полная реализация этого алгоритма:

float FastInvSqrt(float x) {
  float xhalf = 0.5f * x;
  int i = *(int*)&x;  // представим биты float в виде целого числа
  i = 0x5f3759df - (i >> 1);  // какого черта здесь происходит ?
  x = *(float*)&i;
  x = x*(1.5f-(xhalf*x*x));
  return x;
}

Этот код вычисляет некоторое (достаточно неплохое) приближение для формулы

image

Сегодня данная реализация уже хорошо известна, и стала она такой после появления в коде игры Quake III Arena в 2005 году. Её создание когда-то приписывали Джону Кармаку, но выяснилось, что корни уходят намного дальше – к Ardent Computer, где в середине 80-ых её написал Грег Уолш. Конкретно та версия кода, которая показана выше (с забавными комментариями), действительно из кода Quake.
В этой статье мы попробуем разобраться с данным хаком, математически вывести эту самую константу и попробовать обобщить данный метод для вычисления произвольных степеней от -1 до 1.

Да, понадобится немного математики, но школьного курса будет более, чем достаточно.
Читать дальше →
Total votes 212: ↑210 and ↓2 +208
Comments 188

TSP problem. Mixed algorithm

Reading time 13 min
Views 10K
Algorithms *Matlab *
Всем доброго времени суток. В прошлых статьях мы сравнивали два эвристических алгоритма оптимизации на симметричной задаче коммивояжера таких как: ACS (ant colony system — муравьиный алгоритм) и SA (simulating annealing — алгоритм имитации отжига). Как мы убедились у каждого свои плюсы и минусы.


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

Математический детектив: поиск положительных целых решений уравнения

Reading time 9 min
Views 51K
Entertaining tasks Mathematics *
Translation
«Я экспериментировал с задачами кубического представления в стиле предыдущей работы Эндрю и Ричарда Гая. Численные результаты были потрясающими…» (комментарий на MathOverflow)
Вот так ушедший на покой математик Аллан Маклауд наткнулся на это уравнение несколько лет назад. И оно действительно очень интересно. Честно говоря, это одно из лучших диофантовых уравнений, которое я когда-либо видел, но видел я их не очень много.

Я нашёл его, когда оно начало распространяться как выцепляющая в сети нердов картинка-псевдомем, придуманная чьим-то безжалостным умом (Сридхар, это был ты?). Я не понял сразу, что это такое. Картинка выглядела так:


«95% людей не решат эту загадку. Сможете найти положительные целочисленные значения?»

Вы наверно уже видели похожие картинки-мемы. Это всегда чистейший мусор, кликбэйты: «95% выпускников МТИ не решат её!». «Она» — это какая-нибудь глупая или плохо сформулированная задачка, или же тривиальная разминка для мозга.

Но эта картинка совсем другая. Этот мем — умная или злобная шутка. Примерно у 99,999995% людей нет ни малейших шансов её решить, в том числе и у доброй части математиков из ведущих университетов, не занимающихся теорией чисел. Да, она решаема, но при этом по-настоящему сложна. (Кстати, её не придумал Сридхар, точнее, не он полностью. См. историю в этом комментарии).

Вы можете подумать, что если ничего другое не помогает, то можно просто заставить компьютер решать её. Очень просто написать компьютерную программу для поиска решений этого кажущегося простым уравнения. Разумеется, компьютер рано или поздно найдёт их, если они существуют. Большая ошибка. Здесь метод простого перебора компьютером будет бесполезен.
Читать дальше →
Total votes 127: ↑126 and ↓1 +125
Comments 57

Нестандартная кластеризация, часть 3: приёмы и метрики для кластеризации временных рядов

Reading time 16 min
Views 36K
Data Mining *Mathematics *Machine learning *
Часть первая — Affinity Propagation
Часть вторая — DBSCAN
Часть третья — кластеризация временных рядов
Часть четвёртая — Self-Organizing Maps (SOM)
Часть пятая — Growing Neural Gas (GNG)

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

Кластеризация временных рядов — неблагодарное дело. Даже при группировке статических данных часто получаются сомнительные результаты, что уж говорить про информацию, рассеянную во времени. Однако нельзя игнорировать задачу, только потому что она сложна. Попробуем разобраться, как выжать из рядов без меток немного смысла. В этой статье рассматриваются подтипы кластеризации временных рядов, общие приёмы и популярные меры расстояния между рядами. Статья рассчитана на читателя, уже имевшего дело с последовательностями в data science: о базовых вещах (тренд, ARMA/ARIMA, спектральный анализ) рассказываться не будет.

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

Тестовая документация. Превращаем таблицы в деревья

Reading time 9 min
Views 85K
Touch Instinct corporate blog Development for iOS *Development of mobile applications *Development for Android *Mobile applications testing *


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

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

Вид тестовой документации также зависит от ситуации на проекте и ожиданий заказчика.
Читать дальше →
Total votes 28: ↑28 and ↓0 +28
Comments 12

Information

Rating
Does not participate
Location
Иннополис, Татарстан, Россия
Date of birth
Registered
Activity