Search
Write a publication
Pull to refresh
297
0.2
Дмитрий Кашицын @Halt

Программист, линуксоид, паяльник-железячник

Send message

Поддержание положения в сервоприводе: подчинённое регулирование vs шаговый режим

Reading time22 min
Views82K

После выхода предыдущих статьей о векторном управлении электродвигателями поступило много вопросов о позиционном приводе – как приводом отрабатывать заданное положение? Как работает сервопривод в современных станках, как использовать сигнал с датчика положения, чем отличается шаговый привод от сервопривода с подчиненным регулированием? Давайте всё покажу в виде картинок и видео.
Читать дальше →

Как ведут себя покупатели с Хабра

Reading time7 min
Views64K

Привет! Когда хабраэффект в декабре постиг мою книгу, у нас за два дня появилось несколько сотен заказов от людей. Особых людей. Колл-центр осторожно назвал новую для себя категорию «глубоко погружёнными в IT». До этого игры как-то не особо затрагивали самую красноглазую часть сообщества, а книга вот зацепила.

На второй день девушки расслабились и постарались получить удовольствие.

Расскажу, на что это похоже.
Читать дальше →

«Банда четырёх» была неправа, а вы не знаете, что такое делегирование

Reading time6 min
Views71K
«Банда четырёх» была неправа, стандартная библиотека Ruby тоже ошибочна, и Rails – также. Но является ли нечто неправильным, если все так делают?

Да.

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

Они говорят: «композиция прежде наследования». Отлично, в этом есть смысл. Они говорят: «используйте делегирование». Отлично. Хотя в книге нет ни единого примера делегирования.

Делегирование – это приём, которому приписывают возможность внесения гибкости в программы. Обычно говорят, что делегирование – это способ достичь композиции. Но делегирование – это не то, что вы думаете, и «Банда четырёх» ввела вас в заблуждение. Хуже того, почти все упоминания о делегировании содержат лишь совместную работу объектов с пересылкой (forwarding) сообщений. Это примеры вызовов методов, а не делегирования.

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

Реверс-инжиниринг лазерного датчика расстояния

Reading time11 min
Views41K
image
Однажды ко мне попал нерабочий лазерный датчик расстояния Keyence LK-G407. Мало того, что он был нерабочий, так его еще и нельзя было использовать без специального управляющего блока. Но ведь у датчика такие интересные характеристики: измерение расстояния с точностью до единиц микрон, и скорость работы — 50 килоизмерений/с. Так что, чтобы запустить его, придется заметно поковыряться в самом датчике, заодно и ценный опыт получить.
Читать дальше →

Установка Rust на Windows

Reading time5 min
Views31K
Вы можете установить Rust, просто скачав инсталлятор и дважды кликнув по нему. Хотя разработчикам, имеющим дело с более сложными инструментами, или тем, кому нужно собирать "небезопасные" (unsafe) C/C++ библиотеки из исходников, предстоит сделать немного больше. Тем не менее, если проявить немного упорства, разобраться в этом вполне реально.

Во время всего этого процесса следите за тем, что вы устанавливаете правильную версию библиотек: в данный момент для MSVC доступна только 64-битная версия Rust. Вы будете то и дело получать странные ошибки, если попробуете использовать 32-битные библиотеки. Поверьте мне.

Повторюсь: если вам нужен компилятор Rust, идите на официальный сайт и жмите "Install". Если же вы планируете работать с нативными C/C++ библиотеками, читайте дальше!
Читать дальше →

Сказ царя Салтана о потенциале лапласиана

Reading time9 min
Views45K
«Три девицы под окном пряли поздно вечерком.»

image

Ну как пряли. Не пряли, конечно, а лайкали друг на друга. По условиям конкурса «мисс Салтан» девицы должны были выбрать меж собой лучшую.

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

Вскоре «в светлицу вошел царь — стороны той государь» (показан на рисунке). «Во все время разговора...», — ну понятно в общем.
«Собираем лайки нежности — формируем матрицу смежности», — бодро срифмовал он.
Девицы-красавицы с именами Алена, Варвара и Софья засмущались, но лайки (из балалайки) передали.

Вот что там было:
  • Алена получила 1 лайк от Софьи и 2 лайка от Варвары.
  • Варвара получила по лайку от Алены и Софьи.
  • А Софья получила 2 лайка от Алены и 1 от Варвары.

Царь взял лайки, покрутил гайки, постучал по колесам, пошмыгал носом, причмокнул губами, поскрипел зубами, сгонял в палаты и объявил результаты.

Наибольший вес лайков (7 баллов) получила Софья, но титул «мисс Салтан» достался Алене (15 баллов).

Подробнее о матрице лайков
Для матрицы


вектор потенциалов равен (5, 4, 7), а вектор потоков — (15, 12, 14).

После объявления результатов девицы бросились обратились к царю с просьбой рассказать,- откуда взялись эти странные цифры?
Действительно - откуда?

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

Reading time4 min
Views52K
Приветствуем всех в блоге компании Тион. Продолжаем тему пыльцы и поллиноза. О том, как выглядит аллергенная пыльца и сколько ее летает вокруг нас, мы уже писали. Теперь разберем на клеточном уровне, почему и как возникает аллергия на пыльцу.


Читать дальше →

Советы по написанию библиотек на Rust

Reading time9 min
Views11K

Перевод статьи Pascal Hertleif "Good Practices for Writing Rust Libraries" (2015.10.24).



Прошел примерно год, как меня заинтересовал Rust, язык программирования от Mozilla Research, сосредоточенный на решении трёх задач: безопасность, скорость и параллелизм. Он такой же низкоуровневый, как Си или C++, имеет хорошую систему типов (с обобщениями (generics) и типажами (traits)), дружелюбный компилятор и отличный менеджер пакетов Cargo.


С выпуска Rust 1.0 прошло уже полгода (май 2015): многие библиотеки (пакеты, crates), включая некоторые мои, были опубликованы в центральном регистре crates.io. Вот неплохие практики (еще рановато называть их "лучшими"), которые помогут другим людям находить, использовать и дополнять вашу библиотеку.

Читать дальше →

О преобразовании типов в арифметических выражениях в C++ и C#

Reading time3 min
Views15K
В арифметическом выражении типы операндов могут быть преобразованы к общему типу. Такие преобразования описаны в стандарте языка — в C# они существенно проще чем в C++. Тем не менее, скорее всего далеко не каждый программист знает обо всех тонкостях.
Читать дальше →

Распределенная природа мессенджера Tox

Reading time7 min
Views28K
Пока правообладатели собираются заблокировать централизованный Telegram, сообщество пользователей распределенного мессенджера Tox растет. Сегодня, согласно статистике сайта www.toxstats.com, Россия занимает второе место после США по количеству пользователей отставая всего на какие-то 30-50 узлов.

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

tox logo


Читать дальше →

Математика на пальцах: мендосинский двигатель и теорема Ирншоу

Reading time9 min
Views117K

Постановка задачи


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

Вот на этом видео крайне подробно описан (на русском языке) принцип работы:



Но ещё больше самого двигателя мне показалась любопытной следующая вещь. В описании этого видео Дмитрий Коржевский написал следующую вещь: «Боковую опору заменить магнитом НЕВОЗМОЖНО!!! Не задавайте больше этот вопрос!»

Читать дальше →

Работа с С-объединениями (union) в Rust FFI

Reading time5 min
Views5.1K
Предлагаю вашему вниманию перевод статьи "Working with C unions in Rust FFI" за авторством Herman J. Radtke III.

Примечание: Эта статья предполагает, что читатель знаком с Rust FFI, порядком байтов (endianess) и ioctl.


При создании биндингов к коду на С мы неизбежно столкнёмся со структурой, которая содержит в себе объединение. В Rust отсутствует встроенная поддержка объединений, так что нам придётся выработать стратегию самостоятельно. В С объединение — это тип, который хранит разные типы данных в одной области памяти. Существует много причин, по которым можно отдать предпочтение объединению, такие как: преобразование между бинарными представлениями целых чисел и чисел с плавающей точкой, реализация псевдо-полиморфизма и прямой доступ к битам. Я сфокусируюсь на псевдо-полиморфизме.
Читать дальше →

Ферроэлектрическая (сегнетоэлектрическая) память и электронные чернила — идеальное сочетание для батарейного питания

Reading time7 min
Views16K
Когда Texas Instruments оснастил свою знаменитую низким энергопотреблением серию MSP430 ферроэлектрической памятью, работать с ней стало еще легче и приятней, ведь такая память совмещает преимущества флэша и оперативной памяти. А новые лончпады с сегментным индикатором — просто готовая платформа для какой нибудь домашней автоматизации. А что если нужен графический дисплей? Тут на помощь приходят электронные чернила, ведь они потребляют энергию только при обновлении и способны годами радовать красивой контрастной картинкой, питаясь от одного комплекта батарей. Если вам интересен опыт программирования подобного устройства — добро пожаловать под кат. Я расскажу о том, что такое ферроэлектрическая память, и зачем она нужна, как добиться максимально низкого энергопотребления и получить красивую картинку на электронной бумаге и при этом воспользоваться на техасе кодом, написанным под ардуино.


Читать дальше →

Удивительные свойства программируемых полимагнитов

Reading time2 min
Views24K

Магнитное поле обычного магнита (слева) и двух полимагнитов

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

Главное, что вы задаёте произвольные свойства в программном редакторе, а потом за несколько минут печатаете нужный магнит. Свойства магнита выбираются из каталога заранее запрограммированных полимагнитов или задаются произвольно.
Читать дальше →

Заблуждения программистов о телефонных номерах

Reading time3 min
Views66K
Список составили разработчики Java, C++ и JavaScript библиотеки libphonenumber для парсинга, форматирования и проверки телефонных номеров

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

1. Телефонные номера, действительные сейчас, останутся действительными всегда. Телефонные номера определённого типа (например, мобильные), никогда не сменят тип.

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

Подсказка. Не сохраняйте свойства телефонного номера, такие как валидность или тип. Проверяйте эту информацию с помощью библиотеки, когда необходимо.
Читать дальше →

Deep Reinforcement Learning (или за что купили DeepMind)

Reading time5 min
Views43K
Продолжаю рассказывать про успехи DeepMind. Этот пост про их первое известное публике достижение — алгоритм, который обучается играть в игры Atari, не зная об играх ничего, кроме пикселей на экране.

Вот, собственно, главный артефакт (если вы это видео не видели, посмотрите обязательно, оно взрывает мозг)


Вот столько примерно публично известно про компанию, когда ее покупают за полмиллиарда долларов.
Давайте разбираться, как это работает

Модули расширения Python на Rust

Reading time9 min
Views17K


“Absolute statements are the root of all evil.
The key is balance. There are no answers, only questions.”
????


Автор статьи: zolkko.
Оптимизации

Когда говорят про оптимизацию в контексте ПО, часто подразумевают оптимизацию производительности программиста и/или оптимизацию самого ПО.

Исходя из YAGNI-принципа, Python позволяет программисту сосредоточиться на реализации ПО, избавив его от необходимости заботиться о низкоуровневых вещах: регионах памяти, в которых выделяются объекты, освобождении памяти, соглашениях о вызовах.

На обратную проблему в одной из его лекций о Haskell указал Саймон Джонс. У него был слайд со стрелкой, закрашенной градиентом. В начале было написано “no types”, посередине — “Haskell”, в конце — “Coq”. Указав на Coq, он сказал: “This stresses power over usability. Right?! You need a PhD here!”[1]. Несмотря на то, что это была шутка, мантра Python — одна из любимых программистами особенностей этого языка. По моему опыту, это то, что позволяет выпускать готовый продукт несколько быстрее.
Читать дальше →

Суперскалярный стековый процессор: скрещиваем ужа и ежа

Reading time11 min
Views14K

В данной статье мы будем разрабатывать (программную) модель суперскалярного процессора с OOO и фронтендом стековой машины.
Читать дальше →

Когда ВВС США осознали изъян со средними числами

Reading time9 min
Views132K
Отрывок из книги "The End of Average" Тодда Роуза


В начале 1950-х американцы измерили тела более 4000 пилотов по 140 характеристикам, чтобы спроектировать идеальную кабину для среднего пилота

В конце 1940-х у американских военно-воздушных сил была серьёзная проблема: пилоты теряли контроль над самолётами. Тогда наступала эпоха реактивных двигателей, так что самолёты стали более быстрыми и сложными в управлении. Но катастрофы случались так часто и на таком количестве разнообразных самолётов, что ВВС США столкнулись с реальной проблемой спасения жизней. В худшее время разбивалось до 17 пилотов за день.
Читать дальше →

Rust в деталях, часть 2

Reading time27 min
Views15K

Часть 2: Отправка и получение сообщений


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

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

Information

Rating
2,834-th
Location
Алматы (Алма-Ата), Алма-Атинская обл., Казахстан
Date of birth
Registered
Activity