Как стать автором
Обновить
-1
0

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

Отправить сообщение

Темная сторона кода

Время на прочтение3 мин
Количество просмотров87K

«Покой — это ложь. Есть только страсть.
Через страсть я познаю силу.
Через силу я познаю могущество.
Через могущество я познаю победу.
Через победу мои оковы рвутся.
И Великая Сила освободит меня.»

— Кодекс ситов

Я хочу поговорить о темной стороне кода и о том, к чему это приводит. Что я понимаю под темной стороной кода? С моей точки зрения — это такой код, который был написан программистами, которые поддались желанию написать кое-как, исходя из своих собственных целей, а не целей продукта. Они оставили покой (размеренное написание кода согласно практикам) в угоду страсти (код ради кода). А если есть темная сторона, то есть и ее представители — Темные властелины, Дарты. Вот о них мы сегодня и поговорим.
Читать дальше →
Всего голосов 163: ↑125 и ↓38+87
Комментарии78

Обзор шины SPI и разработка драйвера ведомого SPI устройства для embedded Linux (Часть первая, обзорная)

Время на прочтение13 мин
Количество просмотров172K
В этой статье я хочу провести краткий обзор шины SPI (интерфейса, широко распространённого во встраиваемой технике, используемого для подключения различных устройств) и попытаюсь описать процесс создания драйвера протокольного уровня SPI устройства для Linux. Данный документ не претендует на роль полного руководства, а скорее преследует цель указать нужное направление. Так как статья не вошла в размер одного топика, мне пришлось разбить её на две части.

0. Вместо введения


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

Для кого эта статья?
В первую очередь, для новичков, каковым являюсь и я. На форумах по embedded Linux очень часто можно встретить вопрос: «А как на этой плате работать с SPI?». Именно на него я и попытаюсь дать ответ. В качестве примера, я приведу код написанный для работы с моим тестовым SPI устройством.
Читать дальше →
Всего голосов 52: ↑51 и ↓1+50
Комментарии13

Самовосстанавливающиеся предохранители. Мифы и реальность

Время на прочтение9 мин
Количество просмотров187K
В комментариях к моей прошлой статье о способах защиты от неправильного подключения полярности источника питания меня неоднократно корили за то, что не упомянул способ защиты с использованием самовосстанавливающегося предохранителя. Чтобы исправить эту несправедливость поначалу хотел просто добавить в статью дополнительную схему защиты и короткое к ней пояснение. Однако решил, что тема самовосстанавливающихся предохранителей заслуживает отдельной публикации. Дело в том, что устоявшееся их название не слишком отражает суть вещей, а копаться в даташитах и разбираться в принципе работы при применении таких “элементарных” компонентов, как предохранитель, часто начинают уже после того, как начала глючить первая партия плат. Хорошо если не серийная. Итак, под катом вас ждёт попытка разобраться, что же это за зверь такой PolySwitch, оригинальное название, кстати, лучше отражает суть прибора, и понять с чем его едят, как и в каких случаях имеет смысл его использовать.

Читать дальше →
Всего голосов 67: ↑67 и ↓0+67
Комментарии21

STM32: SPI: LCD — Вы всё делаете не так [восклицательный знак]

Время на прочтение8 мин
Количество просмотров86K
Надеюсь сообщество простит меня за такой заголовок, просто в последнее время все чаще и чаще сталкиваюсь с программами в которых к микроконтроллерам STM32 подключают различные дисплеи с интерфейсом SPI и очень часто передачу данных при этом делают не правильно.
Как следствие — либо код не работает совсем и тогда в него внедряют различные задержки, или пишут код таким образом что он гарантированно будет работать медленно (по сравнению с возможной скоростью). А кто то, не разобравшись просто копирует чужой «с костылями» код, и потом такие «произведения» ходят по интернету из примера в пример…
Блок SPI описанный в данной статье точно есть у контроллеров семейств: STM32F1, STM32F2, STM32F4. По другим смотрите Reference Manual.

Откуда растут такие проблемы и каким образом они решаются под катом.
Читать дальше →
Всего голосов 50: ↑45 и ↓5+40
Комментарии44

Объединение печатных плат с gerbmerge

Время на прочтение7 мин
Количество просмотров17K
Мы — небольшой стартап, который занимается разработкой современной электроники. Разумеется, мы регулярно делаем тестовые партии небольшого размера, для изготовления которых заказывать полноценное производство не имеет смысла — стоимость подготовки будет самой крупной статьёй бюджета. Поэтому мы регулярно придумываем, как быстрее, дешевле и эффективнее собирать эти партии самостоятельно. Иногда в процессе рождается что-то новое или допиливается что-то старое. Результатом мы и будем с вами периодически делиться.

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

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

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



Это — один проект. В нём 32 платы 13 разных видов. Как собрать такой проект за четверть часа — ниже.

Читать дальше →
Всего голосов 29: ↑27 и ↓2+25
Комментарии48

Просто о Qt. Библиотека контейнеров

Время на прочтение7 мин
Количество просмотров155K
Привет, хабр!

Сегодня я хотел бы рассказать о интересной и полезной фиче. Имя ее — Библиотека контейнеров. Это не одна, а целая группа полезных фич. А их назначение — организация и обработка групп элементов. Звучит интересно, да? Сейчас рассмотрим поближе — добро пожаловать под кат.
Читать дальше →
Всего голосов 38: ↑29 и ↓9+20
Комментарии45

Десять возможностей C++11, которые должен использовать каждый C++ разработчик

Время на прочтение12 мин
Количество просмотров534K
В данной статье рассматривается ряд возможностей С++11, которые все разработчики должны знать и использовать. Существует много новых дополнений к языку и стандартной библиотеке, эта статья лишь поверхностно охватывает часть из них. Однако, я полагаю, что некоторые из этих новых функций должны стать обыденными для всех разработчиков С++. Подобных статей наверное существует много, в этой я предприму попытку составить список возможностей, которые должны войти в повседневное использование.

Сегодня в программе:
  • auto
  • nullptr
  • range-based циклы
  • override и final
  • строго-типизированный enum
  • интеллектуальные указатели
  • лямбды
  • non-member begin() и end()
  • static_assert и классы свойств
  • семантика перемещения
Читать дальше →
Всего голосов 133: ↑125 и ↓8+117
Комментарии115

Редизайн Qt Creator своими руками

Время на прочтение7 мин
Количество просмотров62K


Многие из тех кто занимаются разработкой на C++/Qt знакомы с такой средой как Qt Creator, создатели которой потрудились над дизайном не меньше чем над функциональностью. Но меня, как любителя темных цветовых схем и плоского минимализма, всегда не устраивали светлый фон панелек и градиентные заголовки.

Казалось бы, открытый исходный код — бери да меняй, но неопытность и лень останавливали меня, пока я не узнал про такую вещь как Qt Style Sheets, позволяющюю описать вид виджетов в формате css.

Читать дальше →
Всего голосов 32: ↑30 и ↓2+28
Комментарии22

Особенности переустановки предустановленной Windows 8

Время на прочтение8 мин
Количество просмотров543K
… или как создать себе проблему, а затем героически её преодолеть.

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

Итого, имеем ультрабук с Windows 8, рабочим разделом восстановления и отсутствием каких-либо дисков в комплекте поставки (этот момент важен). Бук в качестве стартового ПО имеет UEFI, что в принципе для использования с Windows 8 логично, и даже было бы удобно, если бы не одно но — ключ для установки системы зашит в таблицу данных ACPI, в поддтаблицу MSDM. На тот момент я ещё этого не знал, да и не думал, что мне это понадобится.

Читать дальше →
Всего голосов 112: ↑106 и ↓6+100
Комментарии142

1-Wire slave на МК. Часть 2: Реализация в коде

Время на прочтение5 мин
Количество просмотров9.8K

Первая статья цикла: 1-Wire slave на МК. Часть 1: Железо

Что есть в инетрнете по 1-Wire slave


В интернете про реализацию 1-Wire мастера можно найти множество информации, статей, application notes для микроконтроллеров на любой вкус и цвет.
А вот для реализации со стороны Slave материалов немного. Исходных кодов и того меньше. В итоге был найден один исходник для PIC, с ассемблерными вставками и ошибками. Недавно появилась статья на хабре для MSP430 от resetnow. Под катом наш вариант реализации задачи.
Читать дальше →
Всего голосов 10: ↑10 и ↓0+10
Комментарии0

delete, new[] в C++ и городские легенды об их сочетании

Время на прочтение5 мин
Количество просмотров73K
Если в коде на C++ был создан массив объектов с помощью «new[]», удалять этот массив нужно с помощью «delete[]» и ни в коем случае не с помощью «delete» (без скобок). Разумный вопрос: а не то что?

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

В соответствии со Стандартом C++, в этой ситуации поведение не определено. Все предположения – не более чем популярные городские легенды. Разберем подробно, почему.
Читать дальше →
Всего голосов 69: ↑63 и ↓6+57
Комментарии30

Размещай и властвуй! Используем размещающий new для оптимизации кода на C++

Время на прочтение14 мин
Количество просмотров47K


Создавая объект за объектом, мы часто не обращаем внимания на такую «мелочь», как динамическое выделение памяти. Наравне с копированием и сериализацией, выделение памяти из кучи через new постепенно сводит на нет преимущества C++ в скорости. Чем интенсивнее мы пользуемся заветным new, тем сложнее становится приложению, поскольку память кончается, фрагментируется и всячески стремится утекать. Эта участь уже постигла удобные, но неявно опасные для производительности контейнеры STL: vector, string, deque, map. Особенно обидно терять скорость на выделении небольших объектов в больших количествах. Но есть способ обработать размещение памяти таких объектов на стеке, при этом скрывая детали реализации в специальный класс данных. В этом нам поможет механизм размещающего new — непревзойденный способ оптимизации приложения, полного частых и мелких выделений памяти из кучи.
Читать дальше →
Всего голосов 29: ↑23 и ↓6+17
Комментарии31

Знакомство с межпроцессным взаимодействием на Linux

Время на прочтение11 мин
Количество просмотров210K
Межпроцессное взаимодействие (Inter-process communication (IPC)) — это набор методов для обмена данными между потоками процессов. Процессы могут быть запущены как на одном и том же компьютере, так и на разных, соединенных сетью. IPC бывают нескольких типов: «сигнал», «сокет», «семафор», «файл», «сообщение»…

В данной статье я хочу рассмотреть всего 3 типа IPC:
  1. именованный канал
  2. разделенная память
  3. семафор
Отступление: данная статья является учебной и расчитана на людей, только еще вступающих на путь системного программирования. Ее главный замысел — познакомиться с различными способами взаимодействия между процессами на POSIX-совместимой ОС.
Читать дальше →
Всего голосов 79: ↑78 и ↓1+77
Комментарии22

Практика работы с сигналами

Время на прочтение6 мин
Количество просмотров108K
Хочу запечатлеть небольшой опыт работы с сигналами в Linux. Ниже будут представлены примеры использования наиболее значимых конструкций в этой области. Постараюсь разложить все по отдельным полочкам, чтобы всегда было легко глянуть и вспомнить, что и как использовать.
Читать дальше →
Всего голосов 73: ↑62 и ↓11+51
Комментарии61

Основы Linux от основателя Gentoo. Часть 2 (3/5): Управление процессами

Время на прочтение7 мин
Количество просмотров58K
В этом отрывке рассмотрены команды управления процессами. Вы научитесь замораживать процессы, размораживать, отправлять в фоновый режим, изменять приоритет, просматривать запущенные процессы и жестоко их убивать. Введено понятие сигналов. Рассмотрены такие команды, как bg, fg, jobs, kill, nohup, nice, renice, ps и top.



Навигация по основам Linux от основателя Gentoo:

Часть I
  1. BASH: основы навигации (вступление)
  2. Управление файлами и директориями
  3. Ссылки, а также удаление файлов и директорий
  4. Glob-подстановки (итоги и ссылки)

Часть II
  1. Регулярные выражения (вступление)
  2. Назначения папок, поиск файлов
  3. Управление процессами
  4. Обработка текста и перенаправления
  5. Модули ядра (итоги и ссылки)


Читать дальше →
Всего голосов 63: ↑61 и ↓2+59
Комментарии20

Настройка отступов в VIM

Время на прочтение2 мин
Количество просмотров70K
Процесс смены Komodo IDE на VIM я начал с изучения всевозможных туториалов и хау ту, однако, что удивительно, ни в одном из них мне не удалось встретить человеческого описания процесса настройки отступов. В одних предлагали регулировать ширину отступа с помощью опции tabstop, в других — с помощью softtabstop, в третьих — выставлять и то и другое и shiftwidth в придачу. После нескольких часов экспериментов с настройками я понял, что единственный способ не только заставить все работать, но и понять, почему оно работает — читать документацию. Своими «открытиями» я и хочу с вами поделиться.
Читать дальше →
Всего голосов 43: ↑37 и ↓6+31
Комментарии39

Настоящее sock_raw'вище

Время на прочтение5 мин
Количество просмотров36K
image

Raw сокеты предоставляют программисту более широкие возможности по сравнению с остальной частью сокетного API. Все знают об этих «широких» возможностях, но более или менее систематизированное их описание встречается в Интернете нечасто. Попробуем, восполнить данный пробел и разобраться с предназначением raw cокетов и вариантами их применения в сетевом ПО.
Читать дальше →
Всего голосов 7: ↑6 и ↓1+5
Комментарии0

Графический стек Linux

Время на прочтение19 мин
Количество просмотров98K
(оригинал — Jasper St. Pierre, разработчик GNOME Shell, взято отсюда)

Это обзорная статья о составных частях графического стека Linux и том, как они уживаются вместе. Изначально я написал её для себя после разговоров об этом стеке с Оуэном Тейлором, Рэем Строудом и Эдэмом Джексоном (Owen Taylor — мэйнтейнер Gnome Shell; Ray Strode — мэйнтейнер большого количества десктопных пакетов сообщества RedHat; Adam Jackson — разработчик графического стека Gnome Shell и интеграции с XOrg; прим. переводчика)

Я постоянно дёргал их, снова и снова расспрашивал о всяких мелочах, а потом эти мелочи благополучно забывал. В конце концов, я задал им вопрос — а нет ли какого-нибудь обзорного документа, уткнувшись в который я бы избавил ребят от своего назойливого внимания? Не получив утвердительного ответа я решил написать эту статью, которая по завершению была вычитана Эдэмом Джексоном и Дэвидом Эйрли. Они оба работают над этим стеком.
Читать дальше →
Всего голосов 196: ↑191 и ↓5+186
Комментарии49

Делаем учебник или документацию за час на Сфинксе

Время на прочтение4 мин
Количество просмотров56K
Я веду курс веб-программирования. Когда учишь людей, поговорка «сапожник без сапог» к тебе относиться не должна: ты должен делать всё без видимых усилий и быстро. Учебник должен делаться легко и просто, и выглядеть хорошо.

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

Пустая страница новой документации
Хочу себе такую же!
Всего голосов 45: ↑42 и ↓3+39
Комментарии6

Простой способ переноса больших файлов по частям

Время на прочтение1 мин
Количество просмотров30K
Бывает, что необходимо перенести большой файл, например, на flash с файловой системой FAT16/32 или загрузить на сервер по частям. На помощь придут две программы, которые, как правило, присутствуют в любом дистрибутиве Linux и Mac OS.

Команда split

$ split -a 1 -d -b 4000M sample.iso sample.iso.part

разобьет исходный файл sample.iso на части по 4 Гбайта (максимальный размер файла в FAT), каждая из которых будет именоваться как sample.iso.partN, где N = 0, 1, 2,… .
Собрать части воедино на целевой системе поможет команда cat:

$ cat sample.iso.part* > sample.iso

Применение маски приведет к тому, что утилита cat переберет все файлы по порядку, начиная с sample.iso.part0.

Этот наглядный пример показывает, как можно перенести большой файл. Более подробную информацию по использованию cat и split можно получить в справке (--help) и руководствам (man) к программам.
Всего голосов 82: ↑59 и ↓23+36
Комментарии69
1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность