• Алгоритм Брезенхема в паяльной печи — теория

      Алгоритм Брезенхема является одним из старейших алгоритмов в машинной графике. Казалось бы, как можно применить алгоритм построения растровых прямых при создании домашней паяльной печи? Оказывается, можно, причем с очень достойным результатом. Забегая вперед, скажу, что данный алгоритм очень хорошо скармливается маломощному 8-битному микроконтроллеру. Но обо всем по порядку.
      Читать дальше →
    • Как давать и получать обратную связь, если ты воробушек-социофобушек


        Геннадий — middle-разработчик в большой IT-компании. Он интересуется джавой, кодит с 11 до 20, ездит на работу на самокате, ходит в бар с коллегами по пятницам и скучает на эджайл-митингах. Геннадий участвует в код-ревью и легко даёт советы младшим товарищам, когда дело касается прямых рабочих обязанностей. Проблема в том, что прямыми рабочими обязанностями работа не ограничивается, и тогда начинается адок.


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


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

        Читать дальше →
      • Обновление прошивки сломало кроссовки Nike

          Пользователи кроссовок Nike испытывают технические трудности из-за ошибок программистов. Кроссовки Adapt BB за $350 — самая последняя модель в линейке высокотехнологичной обуви Nike с функцией автоматической шнуровки. В хайтек-обуви «шнурки» можно завязать простым нажатием кнопки в приложении на смартфоне (на самом деле шнурков там нет, а посадка регулируется более интеллектуально, но проблема возникла всё равно).


          Читать дальше →
        • Неожиданная эффективность квазислучайных последовательностей

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


          Рисунок 1. Сравнение различных квазислучайных последовательностей с низким расхождением. Заметьте, что предлагаемая мной $R$-последовательность создаёт более равномерно распределённые точки, чем все остальные методы. Более того, все остальные методы требуют тщательного подбора базовых параметров, а в случае неправильного подбора приводят к вырожденности (например справа вверху)

          Рассматриваемые в статье темы

          • Последовательности с низким расхождением в одном измерении
          • Методы с низким расхождением в двух измерениях
          • Расстояние упаковки
          • Множества с многоклассовым низким расхождением
          • Квазислучайные последовательности на поверхности сферы
          • Квазипериодический тайлинг плоскости
          • Маски дизеринга в компьютерной графике

          Какое-то время назад этот пост был выложен на главной странице Hacker News. Можете прочитать там его обсуждение.
          Читать дальше →
          • +90
          • 16.8k
          • 7
        • Суверенный LPWAN, часть 1: лицензирование и эксплуатация LPWAN-сетей в России — старые новые требования ГКРЧ

            Привет, Хабр!

            В конце прошлого года причастные к «интернету вещей» сайты, блоги и каналы всколыхнула новость — якобы ГКРЧ приняла решение, согласно которому базовые станции любых IoT-сетей LPWAN должны быть только российского производства, а при установке их в обязательном порядке необходимо регистрировать.


            Базовая станция LoRaWAN российского производства

            Хотя для самой популярной из открытых технологий — LoRaWAN — российские БС вполне себе существуют, это, например, новосбириская Вега БС-2, новость вызвала у многих серьёзное волнение. Во-первых, одной Вегой сыт не будешь, Kerlink, Multitech и даже Sagemcom тоже иногда хочется. Во-вторых, ну хорошо, сегодня все строят LoRaWAN, а завтра? Такое решение попросту закрыло бы путь на российский рынок для новых стандартов — зарубежное оборудование эксплуатировать нельзя, а в разработку аналогичного российского вкладываться никто не будет, пока не станет хоть как-то понятна окупаемость и перспективы.

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

            Давайте разбираться.

            Читать дальше →
          • MQTT/UDP, предвесенние итоги: дистанционная конфигурация и цифровая подпись

              Зима кончается, и это повод подвести очередную черту и рассказать, что нового появилось в MQTT/UDP.

              Для начала, ссылки на предыдущие введение и статью.

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

              • Появился механизм гибкого расширения протокола: Tagged Tail Records, TTRs
              • На его базе сделана схема цифровой подписи пакетов
              • Сделан механизм дистанционной конфигурации компонент
              • Поднят полный цикл CI: сборка, юнит-тесты, сквозные тесты протокола (4*4 языка программирования)
              • Реализация на Си теперь поддерживает разные архитектуры и умеет интегрироваться с разными ОС и мониторами.
              • Есть публичные пакеты для Питона и Луа, хотя, конечно, они уже устарели.

              Ну и многое по мелочи: интеграция с OpenHAB, конфиг-файлы и логгинг, проверка совместимости с облачным MQTT сервисом, сделан тестовый пример для Wemos D1 (NodeMCU), сделан тестовый пример для atmega128+ethernet (не ардуино), сделан пример протокольного коннектора на Яве (CCU825), сделан пример информера-контроллера в desktop tray (наконец-то я могу включать свет в комнате в два клика мышки:), и ещё разное.

              Теперь по порядку.
              Читать дальше →
              • +19
              • 4.1k
              • 2
            • О линтерах, качестве кода, качестве вообще и управлении качеством

                Бойтесь своих желаний, они могут исполниться.
                Народная мудрость.

                Одна пара пожелала пожениться и обрести вечное счастье. Я взорвал их машину у церкви сразу после венчания.
                One Wish Grant, фильм Трасса 60.

                image

                Ещё одна философская заметка про управление, а данном случае качеством, состоит из трёх частей: очень абстрактной, в меру абстрактной, конкретной и отдельного вывода. Содержит критику существующей практики применения линтеров.
                Читать дальше →
              • DIY тепловизор на Raspberry PI или «Кажется теперь я знаю, чем займусь этим летом»

                  image

                  Всем привет!

                  Пришла зима, а с ней и задача проверить теплоизолирующие свойства построек загородной резиденции дачи. А тут ещё оказалось, что на известном китайском сайте появились вполне доступные тепловизионные модули. Не собрать ли себе экзотическую и, возможно, даже полезную вещь — самодельный тепловизор? Почему бы и нет, вроде и Raspberry где-то валялась… Что из этого вышло — расскажу под катом.
                  Читать дальше →
                • Восстановление когнитивных способностей 100 пациентов (перевод статьи Дейла Бредесена)

                  image

                  Привет, Хабр! Представляю вашему вниманию перевод оригинальной статьи Дейла Бредесена, директора отдела нейродегенеративных заболеваний медицинского факультета Калифорнийского университета в Лос-Анджелесе (UCLA), автора «The End of Alzheimer's: The First Program to Prevent and Reverse Cognitive Decline» (Конец болезни Альцгеймера: первая программа предотвращения и восстановления когнитивных функций). Если у вас есть родственник или знакомый, страдающий болезнью Альцгеймера, то описанный здесь протокол, возможно, сможет помочь.
                  Читать дальше →
                • Дополнительные программные средства безопасности для NAS


                    Цикл статей назван "Построение защищённого NAS". Поэтому в данной статье будет рассматриваться повышение уровня защищённости. Также, будут описаны и те инструменты, которые я не использовал, но возможно применить.

                    Читать дальше →
                    • +7
                    • 8.3k
                    • 7
                  • Расшифровка трассировщика лучей размером с открытку

                    • Translation

                    «Он снова это сделал!», — вот, что первое пришло мне в голову, когда я посмотрел на оборотную сторону флаера Pixar [1], полностью заполненную кодом. Скопление конструкций и выражений была подписана в правом нижнем углу не кем иным, как Эндрю Кенслером. Для тех, кто его не знает, скажу: Эндрю — это программист, придумавший в 2009 году 1337-байтный трассировщик лучей размером с визитку.

                    На этот раз Эндрю придумал нечто более объёмное, но с гораздо более интересным визуальным результатом. Так как я закончил писать свои Game Engine Black Books про Wolf3D и DOOM, у меня появилось время на изучение внутренностей его загадочного кода. И почти сразу меня буквально очаровали обнаруженные в нём техники. Они сильно отличались от предыдущей работы Эндрю, основанной на «стандартном» трассировщике лучей. Мне было интересно узнать о ray marching, функциях конструктивной объемной геометрии, рендеринге Монте-Карло/трассировкой пути, а также множестве других трюков, которые он использовал, чтобы ужать код в такой небольшой кусок бумаги.

                    Читать дальше →
                  • Мой однострочный клиент Dropbox под Linux

                    • Translation
                    Хочу рассказать о своей попытке создать простой однострочный клиент Dropbox под Linux, используя только бесплатные компоненты с открытым исходным кодом, в том числе rclone, entr и systemd.

                    Контекст


                    Недавно проприетарный клиент Dropbox под Linux отказался от поддержки всех файловых систем Linux, кроме незашифрованной ext4. А мой домашний каталог, «к сожалению», зашифрован.

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

                    • Tutorial
                    image

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

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

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

                    Поиск по документам представляется достаточно просто. Но что делать с поиском по мультимедиа контенту? Для полноценного сервиса пользователя надо обязать заполнить описание, дать название видеоролику или картинке, не помешает несколько тегов. К сожалению, далеко не все хотят тратить время на подобные улучшения контента. Обычно пользователь загружает ссылку на youtube, сообщает что это новое видео и нажимает сохранить. Что же делать сервису с таким “серым” контентом. Первая идея — спросить у YouTube? Но YouTube тоже наполняют пользователи (часто это один и тот же пользователь). Часто видеоматериал может быть и не с Youtube сервиса.
                    Так мне пришла идея научить наш сервис “слушать” видеоролик и самостоятельно “понимать”, о чем он.
                    Читать дальше →
                    • +18
                    • 8.7k
                    • 3
                  • Реалистичные тени для roguelike

                    image

                    Доброго времени, Хабр-сообщество.

                    Много лет назад, натолкнулся на пост (1). Тогда меня озадачила возможность создать интересные элементы для геймплея в roguelike (2). Допустим противник может находиться за стеной, мы его не видим, пока мы не столкнёмся с ним в зоне прямой видимости. Но более мне по душе ситуация, когда мы, путешествуя по коридорам подземелья, раскрываем особенности расположения объектов постепенно на основе области видимости.
                    Читать дальше →
                  • Нечеткая логика против ПИД. Скрещиваем ежа и ужа. Авиадвигатель и алгоритмы управления АЭС

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


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


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


                      Как только модель превратилась из листинга Fortran в структурную схему, с ней стало просто и удобно работать, проводя любые, самые «изощренные» эксперименты. Совершенно не случайно у меня оказались реальные алгоритмы управления АЭС. Что позволило быстро собрать модель для экспериментов, не используя при этом никаких формул, да да, только картинки.

                      Читать дальше →
                    • Давайте уберём кватернионы из всех 3D-движков

                      • Translation
                      image

                      Для записи трёхмерных поворотов программисты графики используют кватернионы. Однако в кватернионах сложно разобраться, потому что изучают их поверхностно. Мы просто принимаем на веру странные таблицы умножения и другие загадочные определения, и используем их как «чёрные ящики», поворачивающие векторы так, как нам нужно. Почему $\mathbf{i}^2=\mathbf{j}^2=\mathbf{k}^2=-1$ и $\mathbf{i} \mathbf{j} = \mathbf{k}$? Почему мы берём вектор и превращаем его в «мнимый» вектор, чтобы преобразовать его, например $\mathbf{q} (x\mathbf{i} + y\mathbf{j} + z \mathbf{k}) \mathbf{q}^{*}$? Да кому это интересно, если всё работает, правда?

                      Существует способ описания поворотов под названием ротор, который относится к области и комплексных чисел (в 2D), и кватернионов (в 3D), и даже обобщается до любого количества измерений.

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

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

                      Было бы здорово, если бы начали вытеснять использование и изучение кватернионов, заменяя их роторами. Заменить их очень просто, а код останется почти таким же. Всё, что можно делать с кватернионами, например, интерполяцию и устранение блокировки осей (Gimbal lock), можно сделать и с роторами. Но понимать мы начинаем гораздо больше.
                      Читать дальше →
                    • Домашняя электросеть

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

                        Это не столько инструкция, сколько объяснение, что должно быть сделано, так как каждое подключение по сути индивидуально. В любом случае необходима консультация с учетом реальной ситуации.
                        Читать дальше →
                      • Контроль консистентности кода в Go


                          Если вы считаете консистентность важной составляющей качественного кода — эта статья для вас.


                          Вас ждут:


                          • Разные способы сделать одно и то же в Go (эквивалентные операции)
                          • Менее очевидные факторы, влияющие на однородность вашего кода
                          • Способы увеличения консистентности вашего проекта
                          Читать дальше →
                        • Почему Wi-Fi не будет работать, как планировалось, и зачем знать, каким телефоном пользуется сотрудник



                            Привет!

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

                            Для разминки — небольшая задачка. Представьте себе беспроводную сеть Wi-Fi, состоящую из точки доступа (AP) и двух одинаковых клиентских устройств (STA1 и STA2).

                            Читаем надписи на коробках:
                            AP: 1733,3 Мбит/c
                            STA1, STA2: 866,7 Мбит/c

                            Внимание, вопрос. Оба клиента одновременно начинают загружать с сервера большой файл. На какую пропускную способность может рассчитывать каждое из устройств?
                            Читать дальше →