Search
Write a publication
Pull to refresh
25
0
Send message

Психология читабельности кода

Reading time12 min
Views26K
Всё, что написано ниже, ни разу не претендует на абсолютную истину, но всё же представляет собой некоторую модель, помогающую лично мне находить способы писать немного лучший код.

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

Магнитный редуктор для бесколлекторного мотора

Reading time5 min
Views51K
image

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

Реверс-инжиниринг прошивки устройства на примере мигающего «носорога». Часть 2

Reading time12 min
Views11K

Представляем вашему вниманию вторую часть статьи о реверс-инжиниринге прошивки устройства «Мигающий носорог» по мотивам мастер-класса на конференции SMARTRHINO-2018.

В первой части статьи прошивка устройства была загружена в дизассемблер IDA и выполнен первичный анализ команд протокола устройства. Отдельные команды были проверены на работающем устройстве.

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

Напомню, после анализа Bluetooth-таска в части управления светодиодами, было решено переключиться на LED-таск, так как исходная задача – создать приложение для управления светодиодами, а для этого необходимо детальное понимание работы прошивки.

Файл прошивки доступен для самостоятельного изучения.

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

Под катом много мигающего носорога.
Читать дальше →

Как мы изобретали оптический рефлектометр

Reading time9 min
Views21K


История про высокий порог входа, забеги по граблям и уверенность в завтрашем дне, а также про оптику, схемотехнику и немного про FPGA. На КДПВ — то, что получилось, работает и используется в production, а ниже — рассказ про процесс создания этого "чуда враждебной техники".


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

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

Реверс-инжиниринг прошивки устройства на примере мигающего «носорога». Часть 1

Reading time16 min
Views49K

26 апреля 2018 года компания ИНФОРИОН провела конференцию для студентов МГТУ им. Баумана SMARTRHINO-2018. Специально для конференции было подготовлено небольшое устройство на базе микроконтроллера STM32F042.

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

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

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

Осторожно, под катом мигающий носорог и его прошивка!
Читать дальше →

Отладка многопоточных программ на базе FreeRTOS

Reading time13 min
Views37K

image

Отладка многозадачных программ дело не простое, особенно если ты сталкиваешься с этим впервые. После того, как прошла радость от запуска первой задачи или первой демо программы, от бесконечно волнительного наблюдения за светодиодами, каждый из которых моргает в своей собственной задаче, наступает время, когда ты осознаешь, что довольно мало понимаешь (вообще не врубаешься) о том, что на самом деле происходит. Классика жанра: «Я выделил целых 3КБ операционной системе и запустил всего 3 задачи со стеком по 128Б, а на четвертую уже почему-то не хватает памяти» или «А сколько вообще стека я должен выделить задаче? Столько достаточно? А столько?». Многие решают данные задачи путем проб и ошибок, поэтому в этой статье я решила объединить большинство моментов, которые, в настоящее время, значительно упрощают мне жизнь и позволяют более осознанно отлаживать многопоточные программы на базе FreeRTOS.

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

В данной статье я расскажу о следующих моментах:


  1. Настройка OpenOCD для работы с FreeRTOS.
  2. Не забываем включать хуки.
  3. Статическое или динамическое выделение памяти?
  4. Сказ, о параметре configMINIMAL_STACK_SIZE.
  5. Мониторинг использования ресурсов.
Читать дальше →

Использование произвольных DataFlash 25-й серии вместо дорогих конфигураторов FPGA Altera без дополнительной аппаратуры

Reading time7 min
Views12K
Из любого описания на популярные FPGA известно, что для хранения их конфигураций используются специальные микросхемы – конфигураторы. В комментариях меня поправили, что потихоньку набирают популярность и FPGA, где это не требуется, но пока многие делают разработки именно на классике, где нужен конфигуратор, и с этим надо считаться. Например, для Altera Cyclone используются микросхемы EPCS. Ниже схема от типичной макетной платы с кристаллом семейства Cyclone IV. На ней мы видим конфигуратор EPCS16. Всё бы ничего, но традиционно эти конфигураторы достаточно дороги, поэтому хотелось бы использовать что-нибудь подешевле.

Подробности в длиннющем тексте ниже. Если же очень интересно, но лень читать так много букв, то можно упростить задачу, посмотрев подробное 20-минутное видео.

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

SamsPcbGuide, часть 3: Предельный ток печатной дорожки

Reading time5 min
Views35K
Шутки в сторону, тема серьёзная, пожароопасная. Поехали. Это третья статья из цикла, в ней рассмотрены модели оценки предельного тока печатной дорожки, который в некоторых ситуациях является определяющим параметром при выборе толщины проводящих слоёв печатной платы.
Читать дальше →

iMX6ULL. Переход к процессорным модулям

Reading time8 min
Views26K

Доброго времени суток!
Внимание, много текста и фоток. На рынке можно встретить множество вариаций одноплатных ПК с шилдами или решения «все в одном». Одни заточены под конкретные задачи, например, сбор и отображение данных, другие универсальные и включают в себя всевозможные интерфейсы на все случаи жизни. Существенные отличия наблюдаются также и в конфигурации, типах крепления, соединительных разъемам, форм-факторе и т.д. Для чего разрабатывать свое устройство, спросите Вы, если можно выбрать уже имеющееся в продаже? Несколько лет назад, вертя в руках плату на IMX6Q – «BD-SL-i.MX6» от Freescale (читаем NXP) появилась идея сделать модуль, который бы …
Читать дальше →

Преобразователи Time-To-Digital (TDC): что это такое и как они реализованы в FPGA

Reading time8 min
Views19K

На рисунке — первый в мире спутник квантовой связи «Мо-Цзы», который запустили из Китая в 2016 году, в нем летает TDC, реализованная в FPGA.

Объяснить своей девушке (или парню), что такое ADC и DAC, и в каких домашних приборах они используются, может каждый человек, называющий себя инженером. А вот что такое TDC, и почему у нас дома их нет, зачастую можно узнать только после свадьбы.

TDC — это time-to-digital converter. По-русски говоря: времяизмерительная система.

Основные потребители быстродействующих TDC — научные группы. Как правило, под определенный исследовательский проект требуется что-то очень специфическое. То каналов надо много, то разрешение очень высокое, то исполнение компактное. А уровень развития современных FPGA и их доступность как раз дают исследователям возможность экспериментировать с реализациями и подстраивать их под собственные нужды.

В этой хабрастатье приводится детальное описание простенькой времяизмерительной системы на FPGA Cyclone IV. Статья будет полезна не только для расширения кругозора, но и с методической точки зрения, поскольку реализация системы нетривиальная.
Читать дальше →

Иммиграция в Чили: поиск работы и получение вида на жительство

Reading time10 min
Views90K
Всем привет, меня зовут Надежда, и в этой статье я расскажу, как мы с супругом переехали жить из Петербурга в Чили. По сравнению с переездом в условную Европу (нашли работу — подали документы — переехали) эта история больше смахивает на авантюру и вам будет интересно её прочитать.

1. Почему Чили?


Чили — не самое популярное направление для иммиграции, поэтому мало кто знает, что здесь:
  • Открытая миграционная политика. Гражданам РФ на границе ставится туристическая виза на 90 дней. Если вы за это время нашли работу, то можно получить временный внж на один год (visa temporaria). После временного дают бессрочный внж (permanecia definitiva) и через пять лет гражданство. Чилийский паспорт — вездеход, дает право безвизового въезда во множество стран включая всю Европу и США.
  • Самая развитая в Южной Америке экономика.
  • Средиземноморский климат, по сравнению с которым ночь-улица-фонарь-аптека с ноября по март ощутимо проигрывают.

Так и вышло, что в октябре 2015 года мы, frontend developer и QA engineer купили билеты в один конец и отправились покорять новый континент.
Читать дальше →

Автоматное программирование – новая веха или миф? Часть 1. Введение

Reading time22 min
Views41K
Тема автоматного программирования ( AP, АП) уже много лет занимает заметное место в научно-популярных СМИ. Однако, несмотря на это, АП не стало магистральным трендом. Главная причина здесь — недостаточный опыт использования, и как следствие, отсутствие популяризаторов. Нельзя сказать, что недостаточно статей посвященных АП, но круг обсуждаемых в статьях вопросов по большому счёту сводится к описанию UML Statechart, т.е. инструменту описания автоматов, либо к вопросу «Как реализуются программные автоматы?». Это печально но факт, отсутствует обсуждение того, какие перспективы для программистов-профессионалов открываются при использовании данной технологии.

Эта статья – попытка взглянуть на программаты глазами прагматика, на примере задачи, взятой из реальной практики программирования микроконтроллеров. Однако она может заинтересовать не только embedderов, поскольку автоматный подход может эффективно использоваться для создания и драйверов и интерактивных приложений в системах основанных на обработке событий, как например Windows.

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

Минимальный multiboot загрузчик

Reading time12 min
Views23K

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


Я попытался объяснить всё в деталях и оставить код максимально простым, насколько это возможно. Если у вас возникли вопросы, предложения или какие-либо проблемы, пожалуйста, оставьте комментарий или создайте таску на GitHub. Исходный код доступен в репозитории.


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

О портировании проекта MIPSfpga

Reading time10 min
Views3.3K


Перенос программного обеспечения с одной компьютерной архитектуры на другую в принципе, с некоторыми оговорками, дело относительно простое. Здесь на помощь приходят такие общеизвестные инструменты, как autoconf / automake/ libtool / gnulib. Собрать программу из исходников на каком нибудь Raspberry/ARM бывает так же просто, как и на ПК с Ubuntu/x86-64.

А вот как заставить проект ПЛИС разработанный для одной платы работать на другой плате? Там и сама ПЛИС может быть другой и на плате совершенно другие компоненты могут стоять. Простой перекомпиляцией проекта не обойтись.

Расскажу о своем опыте портирования проекта MIPSfpga для платы Марсоход3 с ПЛИС MAX10 Intel. Статьи о проекте MIPSfpga неоднократно появлялись на хабре. Они были так интересны, что мне захотелось и самому попробовать этот проект в имеющейся у меня плате. В своей работе я опирался на хабровские статьи


И многие другие…

Итак, что нужно сделать, чтобы портировать проект ПЛИС на другую плату?

SamsPcbGuide, часть 2: Выбор структуры печатной платы

Reading time7 min
Views29K
Это вторая статья из цикла, в ней рассматривается процесс выбора структуры печатной платы (англ. PCB stackup), даются базовые рекомендации по формированию структуры, а также приводятся типовые решения сборок для многослойных печатных плат с указанием их преимуществ и недостатков.
Читать дальше →

Разработка драйвера PCI устройства под Linux

Reading time19 min
Views60K

В данной статье я рассматриваю процесс написания простого драйвера PCI устройства под OC Linux. Будет кратко изучено устройство программной модели PCI, написание собственно драйвера, тестовой пользовательской программы и запуск всей этой системы.

В качестве подопытного выступит интерфейс датчиков перемещения ЛИР940/941. Это устройство, отечественного производства, обеспечивает подключение до 4 энкодеров с помощью последовательного протокола SSI поверх физического интерфейса RS-422.

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

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

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

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

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


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

Пиролизный котел в быту, или когда цена на газ не имеет значения

Reading time16 min
Views158K
Можно ли построить систему отопления собственного жилища без газовой трубы так, чтобы это было комфортно, не утомительно и даже увлекательно? И что может получиться, если приправить всё это информационными технологиями?


Давайте вместе в этом разберемся.
Читать дальше →

10 лучших игр о хакинге, кодинге и вычислениях

Reading time11 min
Views99K

Как все знают из новостных лент, мы живём в постоянно эволюционирующей киберпанковской антиутопии. Люди подключают туалеты к Интернету! Если этот гибсоновский мир кажется вам слишком РЕАЛЬНЫМ, то вы можете поиграть в десять лучших видеоигр о взломе, программировании и вычислениях, чтобы сбежать в мета-антиутопию. Которая, я уверен, является намного лучшим местом.


10. TIS-100


[официальный сайт]

Да-а-а, приготовьтесь к тому, что ваш мозг начнёт болеть. TIS-100 — это игра студии Zachtronics, разработчика игр-головоломок, выпустившей Infinifactory и SpaceChem. В маркетинге она позиционируется как «игра о программировании на языке ассемблера, о которой вы не просили», и хотя я обычно игнорирую маркетинговые слоганы, здесь не могу не согласиться.

Игрок получает в своё распоряжение таинственный компьютер из 70-х, найденный в вещах покойного дядюшки. Когда-то он игрался с ним, пытаясь разобраться. Теперь это ваша задача. Если вкратце, то вам нужно получить числа, чтобы провести машину из точки A в точку B, выполнив на каждом уровне «цели» (например, сначала вывести положительное число, а затем отрицательное). Для этого у вас есть список команд, изложенных в смутном руководстве пользователя. Игра советует вам распечатать это руководство в бумажном виде. В нём есть сделанные дядей примечания и пометки маркером, дающие подсказки о сущности этой машины.
Читать дальше →

Проектирование процессора (CPU Design) [First ver.]

Reading time5 min
Views23K
Это начальный вариант статьи о процессоре, конечный вариант этой же статьи здесь.

Спроектируем в Logisim'е устройство, позволяющие суммировать наборы чисел, хранящихся в памяти. Возьмем набор восьмиразрядных чисел и подключим его к мультиплексору, переход от одного числа к другому будем осуществлять с помощью счетчика, подключенного к выбирающему входу мультиплексора, а к выходу мультиплексора подключим сумматор и аккумулятор. В качестве тактового генератора будем использовать кнопку. Данные будут загружаться в аккумулятор при отпускании кнопки (это осуществляется с помощью элемента НЕ, подключенного к кнопке).


Information

Rating
Does not participate
Location
Челябинск, Челябинская обл., Россия
Date of birth
Registered
Activity