Pull to refresh
23
0
Владимир Харлашкин @kharlashkin

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

Send message

Груг против сложности. Я пролинтил все посты на Хабре про Python, и вот что я нашёл

Reading time52 min
Views59K

В какой-то момент времени я превратился в педанта брюзгу. В фильмах малейшие нестыковки и провалы в логике портят мне весь просмотр. В чатах меня бесит it's вместо its. А в статьях про программирование... Всё плохо. За меня всё уже сказал @AlexanderAstafiev, я лишь процитирую:

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

Самое забавное, что, по моим ощущениям, везде я вижу одни и те же классы проблем. Я даже запилил сервис, где можно закинуть код и получить код ревью, и, собрав немного статистики, понял, что 50 типов ошибок достаточно, чтобы покрыть большую часть проблем в чужом коде. Но выборка у меня была небольшая, и я подумал: а что, если проверить много кода?

И всё заверте...
Total votes 144: ↑139 and ↓5+134
Comments153

Разбираем бобров: дикие инженеры-терраформеры в действии

Reading time13 min
Views68K

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

Представьте себе здоровенного мыша массой чуть побольше косули, отлично приспособленного к воде. Добавьте здоровенные зубы, укреплённые металлом (точнее ферригидритом) и нехилые инженерные навыки в плане «как пустить под откос поезд» или «как затопить какую-нибудь деревню». Знакомьтесь, это бобр. Бобры круты тем, что терраформируют окружающий ландшафт и превращают планету вокруг в безопасную для себя.

Вот конкретный пример. На реке Чёрной как-то завелась пара бобров. Сначала они провели изыскательные работы. Берег оказался низковат для них, то есть не очень удобен для операционных баз и главного укрепления. Бобры взяли и переложили русло реки. Потом построили хатку по всем правилам фортификации. К ней сразу — плотину рядом. Удобно же поднять уровень воды так, чтобы вход стал подводный! Волк такое не поддерживает.

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

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



На этом терраформирование не кончилось. Конечно же, на следующий год на базе надо было построить ещё несколько типов инженерных сооружений.
Читать дальше →
Total votes 433: ↑428 and ↓5+423
Comments121

Что такое ТРИЗ (Теория решения изобретательских задач), применение технологии в бизнесе, кейсы, инструменты

Level of difficultyMedium
Reading time10 min
Views23K

В этой статье я подробно разбираю, что сейчас из себя представляет ТРИЗ для бизнеса, какие инструменты в себя включает и где применяется. Анализирую основные проблемы внедрения бизнес-ТРИЗ.  Делюсь подборками кейсов, привожу подробные примеры применения технологии ТРИЗ и заодно, постараюсь развеять мифы о Теории Решения Изобретательских Задач.

Читать далее
Total votes 27: ↑12 and ↓15-3
Comments103

Фильтр Калмана: разбор навигационной системы БПЛА + исходный код

Reading time14 min
Views24K

В статье я бы хотел объяснить принципиальную разницу между фильтром Калмана (ФК) и классическими фильтрами, кратко рассмотреть преимущество выбранного ФК поделиться опытом использования данного ФК в во встраиваемой системе квадрокоптера для навигации на основе инерциального и ГНСС датчиков и поделиться исходным кодом с демкой для самостоятельного изучения.

Читать далее
Total votes 33: ↑31 and ↓2+29
Comments12

Плавность хода, шум и момент шагового двигателя при управлении микроконтроллером

Reading time11 min
Views35K

В данной статье я опишу решение поставленной мне задачи по снижению шума и повышению плавности движения механизма, движимого шаговым двигателем (далее просто ШД) при ускорении. Данная задача довольна специфична. Описанное мною решение будет полезно при разработке модулей управления ШД .

Далее опишу алгоритм управления ШД с помощью микроконтроллера.

Перед тем, как начать описывать задачу, я изложу основы управления ШД, которые будут включать необходимый минимум для рассмотрения, описанных в статье способов управления.

Рассмотрим необходимый минимум основ управления ШД , необходимый для понимания принципа управления, описанного ниже. А именно:

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

Изменение полярности обмотки с помощью Н-моста.

Принципиальная электрическая схема, включающая в себя 4 драйвера полумоста и 2 Н-моста.

Способ модуляции синусоидального сигнала с помощью широтно-импульсной модуляции (далее просто ШИМ).

Способы подключения обмоток.

Читать далее
Total votes 26: ↑26 and ↓0+26
Comments35

Менять одежду на персонажах из MakeHuman в Unity3d

Reading time11 min
Views10K

Цель стати - перенести персонажа из Makehuman в Unity3d так, чтобы его внешность и одежду можно было менять прямо во время игры. Для этого будет использован бесплатный плагин для юнити UMA.

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

Отказываемся от платных RPA платформ и базируемся на OpenSource (OpenRPA)

Reading time4 min
Views23K

Вводная


Ранее на Хабре очень подробно освещалась тема Автоматизации десктопных GUI приложений на Python. В то время меня очень сильно привлекла эта статья, потому что в ней раскрываются элементы, схожие с элементами создания роботов. А так как по роду своей профессиональной деятельности я занимаюсь роботизацией бизнес-процессов компании (RPA — область, в которой не было полнофункциональных OpenSource аналогов до недавнего времени), данная тема была очень актуальна для меня.

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

Как научиться разработке на Python: новый видеокурс Яндекса

Reading time6 min
Views243K
Осенью прошлого года в московском офисе Яндекса прошла первая Школа бэкенд-разработки. Мы сняли занятия на видео и сегодня рады поделиться на Хабре полным видеокурсом Школы. Он позволит вам научиться промышленной разработке на Python. Авторы лекций — опытные разработчики в Яндексе. К каждому видео приложены ссылки на примеры и полезные материалы.

Для изучения курса нужно знать основы Python и понимать, как приложения развёртываются на серверах. Мы ждём, что вы умеете делать запросы к базам данных и знаете, как создаются веб‑приложения, — хотя бы на начальном уровне.
Читать дальше →
Total votes 70: ↑70 and ↓0+70
Comments41

Практическое руководство по разработке бэкенд-сервиса на Python

Reading time57 min
Views172K
Привет, меня зовут Александр Васин, я бэкенд-разработчик в Едадиле. Идея этого материала началась с того, что я хотел разобрать вступительное задание (Я.Диск) в Школу бэкенд-разработки Яндекса. Я начал описывать все тонкости выбора тех или иных технологий, методику тестирования… Получался совсем не разбор, а очень подробный гайд по тому, как писать бэкенды на Python. От первоначальной идеи остались только требования к сервису, на примере которых удобно разбирать инструменты и технологии. В итоге я очнулся на сотне тысяч символов. Ровно столько потребовалось, чтобы рассмотреть всё в мельчайших подробностях. Итак, программа на следующие 100 килобайт: как строить бэкенд сервиса, начиная от выбора инструментов и заканчивая деплоем.



TL;DR: Вот репка на GitHub с приложением, а кто любит (настоящие) лонгриды — прошу под кат.
Читать дальше →
Total votes 70: ↑68 and ↓2+66
Comments48

Действительно понятное объяснение квантовой запутанности (парадокса ЭПР)

Reading time8 min
Views18K
Понятное для тех, кто захочет разобраться, конечно. Пост состоит из трех частей. Для понимания сути явления, достаточно ознакомиться только со второй частью.

  1. Вводная (зачем, да почему)
  2. Конкретные расчеты
  3. Философско-практическая часть.

1. Вводная (зачем, да почему)

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

А понимания хочется, т.к. по моему глубокому убеждению, все-таки следующий революционный скачок технологий, будет связан с овладением человечеством квантовой мощью. И подобно тому, как в 60-х люди даже вообразить не могли, как эти громадные железки занимающие целые подвалы, изменят нашу жизнь, радикально уменьшив размеры и увеличив мощь, так и сейчас мы не представляем себе весь потенциал неуклюжих прототипов с 50 кубитами.
Читать дальше →
Total votes 27: ↑17 and ↓10+7
Comments141

Как спроектировать корпус для прибора. Полное руководство

Reading time16 min
Views73K
От идеи до серийного производства: подробно об этапах разработки и о технологиях производства корпусов — факты, примеры из практики, фото. Если вам нужен корпус для прибора, обязательно прочитайте.

image
Изучая рунет, я не смог найти ни одной статьи, которая описывала бы ВСЕ этапы разработки и производства корпуса устройства.

Ни одной. Всё, что есть в интернете, касается лишь одного или двух аспектов этого процесса. Ну например: давайте набросаем корпус и распечатаем на 3D-принтере. Или купим типовой и насверлим в нём отверстий. Хотя на Хабре и есть пара материалов, но они тоже не так полны информацией, как могли бы быть.

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

Как спроектировать корпус — схема работы


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

Разработка корпуса — процесс, разбитый на несколько обязательных этапов. Это даже обсуждать не буду: проверено много раз. Даже если вы не собираетесь связываться с «большим» производством (например, если планируете делать устройство только для себя), всё равно лучше бы вам соблюдать правильную последовательность этапов.

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

Вот схема, по которой мы пойдем:
Читать дальше →
Total votes 149: ↑149 and ↓0+149
Comments69

Руководство пользователя Kibana. Визуализация. Часть 1

Reading time9 min
Views56K
Доброго времени суток. Всем пользователям ElasticStack рано или поздно нужно визуализировать данные. Большинство использует Kibana. Под катом перевод официальной документации для версии 6.6.

Ссылка на оригинальный материал: Kibana User Guide [6.6] » Visualize

Содержание:

  1. Creating a Visualization
  2. Line, Area, and Bar charts

Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments0

Регулярные выражения в Python от простого к сложному. Подробности, примеры, картинки, упражнения

Reading time25 min
Views1.4M

Регулярные выражения в Python от простого к сложному




Решил я давеча моим школьникам дать задачек на регулярные выражения для изучения. А к задачкам нужна какая-нибудь теория. И стал я искать хорошие тексты на русском. Пяток сносных нашёл, но всё не то. Что-то смято, что-то упущено. У этих текстов был не только фатальный недостаток. Мало картинок, мало примеров. И почти нет разумных задач. Ну неужели поиск IP-адреса — это самая частая задача для регулярных выражений? Вот и я думаю, что нет.
Про разницу (?:...) / (...) фиг найдёшь, а без этого знания в некоторых случаях можно только страдать.

Плюс в питоне есть немало регулярных плюшек. Например, re.split может добавлять тот кусок текста, по которому был разрез, в список частей. А в re.sub можно вместо шаблона для замены передать функцию. Это — реальные вещи, которые прямо очень нужны, но никто про это не пишет.
Так и родился этот достаточно многобуквенный материал с подробностями, тонкостями, картинками и задачами.

Надеюсь, вам удастся из него извлечь что-нибудь новое и полезное, даже если вы уже в ладах с регулярками.
Читать дальше →
Total votes 99: ↑98 and ↓1+97
Comments66

OpenAI Gym+ROS+Gazebo: обучение автономного робота в домашних условиях. Часть 1

Reading time6 min
Views15K
За последние несколько лет мы стали свидетелями внедрения технологий искусственного интеллекта в нашу повседневной жизни — от роботов-пылесосов до беспилотных дронов. Все они, управляемые искусственным интеллектом, уже являются для нас обыденностью. Но несмотря на это, процесс разработки, от проектирования до реализации, занимает годы и обходится не дешево. Кроме того, алгоритмы машинного обучения требуют большие данные и нет никаких гарантий, что в конечном счете все сработает.

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

Похожие мысли были и у доктора Эндрю Ховарда, когда он со своим учеником Нейтоном Кенигом в 2002 году приступил к разработке 3D симулятора Gazebo в Университете Южной Калифорнии. Концепция симулятора высокой точности возникал из-за необходимости тестировать роботов в различных сложных условиях вне помещений. На первых этапах разработки такой подход позволяет сэкономить время и средства на приобретении необходимого оборудования.

В этой серии статей я бы хотел поделиться своим опытом симуляции и обучения беспилотного автомобиля имея только одну обычную камеру в качестве сенсора.
Читать дальше →
Total votes 16: ↑16 and ↓0+16
Comments16

«20 тысяч IOPS на узел — хорошие показатели с учётом задержек в 5 мс». Для OLTP — нет

Reading time14 min
Views39K

КДПВ


Поводом написать эту статью стал весьма достойный обзор Как мы тестировали VMware vSAN... компании КРОК. Обзор-то достойный, но в нем есть фраза, с которой я борюсь уже больше десятка лет. Админы СХД, виртуализаторы и интеграторы раз за разом повторяют: "Задержки в 5 мс — это отличный показатель". Даже цифра в 5 мс десять лет не меняется. Я это слышал вживую от весьма уважаемых админов уже не меньше десятка раз. От менее уважаемых — десятки, а уж сколько раз читал в интернете… Нет, нет, нет. Для OLTP нагрузок 5 мс, особенно так, как их обычно измеряют — это epic fail. Мне приходилось объяснять причины этого уже много раз, на этот раз я решил собрать свои мысли в переиспользуемую форму.


Сразу оговорюсь, что в упомянутой выше статье этих ошибок нет, скорее фраза сработала как триггер.

Читать дальше →
Total votes 73: ↑71 and ↓2+69
Comments58

Кластер хранилища Ceph на VMWare за 10 минут

Reading time10 min
Views52K


Этот мануал написан для желающих попробовать гибкость и удобство распределенного файлового хранилища Ceph в виртуальной среде на домашнем ПК. Сразу поясню, что 10 минут — это время на разворачивание самого кластера (установка и настройка Ceph на виртуальных машинах). Но на создание и клонирование виртуальных машин и на установку ОС потребуется отдельное время.

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

Кто еще не в теме Ceph, можно прочитать вводную статью Знакомство с Ceph в картинках и посмотреть модное промо от производителя.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments49

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

Reading time9 min
Views120K
В этой статье мы поговорим о «магической» константе 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
Comments188

VR-приложение с нуля на libgdx: часть 1

Reading time21 min
Views12K

Виртуальная реальность стремительно набирает популярность среди пользователей, но все еще остается недоступной для многих разработчиков. Причина банальная — многие пишут игры в фреймворках, к которым нельзя прикрутить Cardboard SDK, а учиться работать в другом фреймворке нет возможности или просто лень. Так и с Libgdx, где несмотря на попытки скрестить ужа с ежом, все еще до сих пор нет возможности создавать VR игры и приложения. Пару месяцев назад я загорелся желанием создать собственную VR игрушку, а поскольку я хорошо знаком с Libgdx и давно с ним работаю, то у меня оставался только один путь: изучить все самому и реализовать свой собственный VR велосипед движок в рамках Libgdx. Глаза боятся — руки делают, и через месяц ночных посиделок игра была готова. Буквально через пару дней после публикации мне начали заваливать личку просьбами поделиться кодом или хотя бы объяснить, как оно работает. Я не жадный, поэтому решил замутить пару статей с примерами приложений, и в этой части я расскажу о том, как из показаний датчиков смартфона получить его ориентацию (т.н. head tracking), а так же выводить на экран стереопару.
Читать дальше →
Total votes 22: ↑22 and ↓0+22
Comments13

Управление бесколлекторным двигателем по сигналам обратной ЭДС – понимание процесса

Reading time13 min
Views112K
Когда я начал разрабатывать блок управления бесколлекторным двигателем (мотор-колесом), было много вопросов о том, как сопоставить реальный двигатель с абстрактной схемой из трех обмоток и магнитов, на которой, как правило, все объясняют принцип управления бесколлекторными двигателями.

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

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

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


Читать дальше →
Total votes 21: ↑20 and ↓1+19
Comments18

Робот промоутер — Oscar. Манипулятор

Reading time4 min
Views9.1K


Сегодня мы хотим рассказать об устройстве манипулятора промо-робота Oscar. Хотя изначально к манипулятору не были предъявлены жесткие индустриальные требования, тем не менее нашей целью было сделать практичное и эстетичное решение, при этом не очень дорогое и относительно несложное в изготовлении в домашних условиях.

Длина манипулятора от плеча до кончиков пальцев составляет 0.6 метров, вес — 2.25 кг. Материалы изготовления — PLA. Манипулятор условно можно разделить на 3 компонента:

  • Бионическая кисть
  • Запястье (2 степени свободы)
  • Локтевой и плечевой суставы (5 степеней свободы)

Связано это с тем, что каждый из компонентов имеет свое техническое решение.
Total votes 19: ↑19 and ↓0+19
Comments26
1

Information

Rating
Does not participate
Location
Северодонецк, Луганская обл., Украина
Date of birth
Registered
Activity