Как стать автором
Обновить
-1
0
Юрий Лунев @bitterman

Embedded Linux

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

Обобщенные функции CLOS

Время на прочтение4 мин
Количество просмотров3.7K
Любой разработчик, так или иначе столкнувшийся с объектно-ориентированным программированием, и попытавшийся в нем разобраться, обязательно слышал про CLOS, объектную систему языка Common Lisp, одной из основополагающих фич которой являются так называемые «обобщенные функции», или, в народе, «мультиметоды».

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

Безусловно, множественная диспетчеризация является одной из основных фишек обобщенных функций, но сама их суть не только, и даже не столько, в этом.
Читать дальше →
Всего голосов 38: ↑35 и ↓3+32
Комментарии9

Как бороться с паузами java приложения, не трогая GC

Время на прочтение2 мин
Количество просмотров4K
Сколько раз мне приходилось настраивать GC, чтобы вылечить приложение, у которого время от времени случается приступ, и оно перестает временно выполнять свои функции. Работа, скажу, не самая занимательная и требует хорошего знания матчасти. В данном топике я опишу какие еще есть способы решения данной проблемы.
Читать дальше →
Всего голосов 40: ↑30 и ↓10+20
Комментарии29

Признаки плохого программиста

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

Неспособность рассуждать о коде


«Рассуждать о коде» значит понимать порядок исполнения инструкций («исполнять программу в голове»), зная, каково предназначение кода.

Симптомы

  • Наличие «волшебного», «вуду» кода или кода, который не имеет никакого отношения к целям программы, но всё равно тщательно поддерживается (например, инициализация переменных, которые никогда не используются, вызов функций, не имеющих отношения к цели, создание выходных данных, которые не используются, и т.д.).
  • Многократные вызовы идемпотентных функций (например, вызов save() по нескольку раз, «чтобы уж точно»).
  • Исправление ошибок написанием избыточного кода, который замещает данные, полученные при исполнении неисправного кода.
  • «Йо-йо код», который конвертирует значения в различные представления, а потом конвертирует их обратно ровно в то же представление, с которого начинали (например, преобразование десятичного числа в строку, а потом обратно в десятичное число, или padding строчки с последующим trim'ом).
  • «Бульдозерный код», который создает впечатление рефакторинга посредством разбития кусков кода на процедуры, которые, правда, затем невозможно использовать где-либо еще (высокая когезия).

Читать дальше →
Всего голосов 374: ↑297 и ↓77+220
Комментарии260

Ускоряем Selenium-тесты

Время на прочтение3 мин
Количество просмотров26K
Все, кто использует Selenium тесты в своём билде, знают, что это достаточно дорогое удовольствие, потому что очень медленно. Из-за этого многие не запускают билд полностью перед коммитами или, вообще, запускают билд только по ночам. Итак, делаем наши тесты быстрее.
Читать дальше →
Всего голосов 35: ↑34 и ↓1+33
Комментарии13

Делаем релизы с помощью Maven в Java

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

О чем эта статья?


Эта статья о том:
  1. Что такое релиз?
  2. Как нумеруются релизы?
  3. Зачем при релизе нужен бранч?
  4. Почему релиз это больше, чем просто jar (war, ear, zip, etc)?
  5. Что такое maven-release-plugin?
  6. Делаем бранч c помощью release:branch.
  7. Подготовка к релизу с помощью release:prepare.
  8. Выпускаем релиз с помощью release:perform.

Для чтения и понимания этой статьи я рекомендую освежить свои знания по Maven. Многие термины могут быть непонятны без понимания этой технологии.
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии24

Немного о деревьях

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

Вступление


Встречалась ли вам ситуация, когда необходимо реализовать хранение древовидной структуры в реляционной БД?

PostgreSQL on tree

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

В данном топике мы с вами поговорим об одной из тех возможностей, которые существуют для организации хранения деревьев в PostgreSQL — ltree.
Читать дальше →
Всего голосов 86: ↑84 и ↓2+82
Комментарии54

Компиляция JavaScript проекта с помощью Maven и Closure Compiler

Время на прочтение6 мин
Количество просмотров8.8K
Добрый день, коллеги!

Хотел поделиться своими наработками в области автоматизации процесса сборки javascript проекта использующего Google Closure Compiler и Google Closure Library при помощи Apache Maven. Страничка проекта https://github.com/urmuzov/closure-maven, там же лежит документация по каждому из компонентов проекта.

О проекте


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

Архетип предоставляет средства для решения самых часто встречающихся задач при разработке, а именно:
  • Запаковывает javascript код в maven артефакты для распространения (такие артефакты содержат помеченные пакеты специальной структуры, названные closure-packages);
  • Распаковывает closure-packages из подключенных в <dependencies> артефактов для компиляции;
  • Помогает в объединении и оптимизации js и css файлов при помощи Web Resource Optimizer for Java (wro4j);
  • Предоставляет 5 профилей компиляции для разных целей:
    • compiled — для «боевой» сборки проекта. Уровень компиляции ADVANCED_OPTIMIZATIONS;
    • merged — для склеивания всех исходных js файлов в один, фактически без компиляции. Уровень компиляции WHITESPACE_ONLY, форматирование PRETTY_PRINT;
    • sources — для дебага javascript файлов в бразуере. Компиляция происходит как и в профиле compiled, но в html будут подключены файлы с исходными кодами;
    • sources-no-compile — для дебага html/css файлов. Компиляции не происходит, просто в html подключаются файлы с исходными кодами;
    • jar — для сборки jar-архива для распространения;

  • Генерирует jsdoc и jslint отчеты при выполнении mvn site.

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

Отладка драйверов под Windows: VirtualBox+WinDbg

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

Предисловие


Однажды мне понадобилось написать драйвер под Windows XP SP2. Сразу встал вопрос отладки. Уж очень не хотелось использовать мудреный SoftIce, ребутиться при кадждой ошибке или делать откаты. Поэтому было решено использовать виртуалку VirtualBox, которой я частенько пользуюсь и характеристиками которой вполне доволен, и отладчиком Windows Debugger от Microsoft. Через несколько часов в окошке WinDbg радостно замаячили строчки на Си, и было решено сделать «напоминалку», которая получилась неплохим «HowTo». Итак, начнем…
Читать дальше →
Всего голосов 52: ↑50 и ↓2+48
Комментарии11

Пещерные технологии будущего

Время на прочтение7 мин
Количество просмотров2.7K
Никогда не обращали внимание, как часто старые интерфейсы, старый код и вообще старые решения выглядят странными и уродливыми? Причём всё это может стать старым за считанные годы. Когда приходится очень быстро бежать только, чтобы оставаться на месте, возникает желание как-нибудь срезать, заглянуть немного в будущее, перепрыгнуть через пару пунктов.

Давайте попробуем. Для этого нам необходимо понять по каким принципам идет развитие: внимательно рассмотреть те пещерные технологии, что мы использовали пару лет назад и то, как они превращались в “технологии будущего”, что мы используем сегодня.
Читать дальше →
Всего голосов 102: ↑88 и ↓14+74
Комментарии41

Дешевый планарный датчик положения на основе PS/2 Mouse, MatLab + MBED + PS/2 Mouse

Время на прочтение4 мин
Количество просмотров7.1K
Ну что же, попытка номер два.

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

В чем же плюс Мышки?


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


  • Получение координат с контроллера типа мышь в программном комплексе MatLab

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

FreeRTOS: введение

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

Здравствуйте. В короткой серии постов я постараюсь описать возможности, и подходы работы с одной из наиболее популярной и развивающейся РТОС для микроконтроллеров – FreeRTOS. Я предпологаю базовое знакомство читателя с теорией многозадачности, о которой можно почитать в одном из соседних постов на Хабре или ещё где-то.
Ссылки на остальные части:
FreeRTOS: межпроцессное взаимодействие.
FreeRTOS: мьютексы и критические секции.
Читать дальше →
Всего голосов 53: ↑53 и ↓0+53
Комментарии36

Почему в WiMax и LTE используют OFDM

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


Аббревиатура OFDM расшифровывается как Orthogonal frequency-division multiplexing. В русскоязычной литературе встречается несколько различных переводов, несущих, в принципе, один смысл: OFDM — это механизм мультиплексирования (уплотнения) посредством ортогональных поднесущих.



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





Иллюстраций: 18, символов: 27 399, строк кода: 99.



Читать дальше →
Всего голосов 273: ↑269 и ↓4+265
Комментарии61

Красивый автологин на активное сетевое оборудование

Время на прочтение3 мин
Количество просмотров19K
Добрый день, уважаемые Хабралюди!
Хочу поделиться с вами моим способом упрощения жизни сетевого админа. Предлагаю способ автоматического ввода логина и пароля на все оборудование сразу. Не претендую на новизну и свежесть идеи, но собственное решение гораздо проще, прозрачнее и как-то ближе к сабжу. Добро пожаловать под кат.
Читать дальше →
Всего голосов 39: ↑33 и ↓6+27
Комментарии41

PyCon 2011. Краткое изложение докладов

Время на прочтение26 мин
Количество просмотров4.9K
Известно, что с 11 по 13 марта в Атланте (Джорджия) проходила конференция разработчиков PyCon 2011.

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

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

Читать дальше →
Всего голосов 72: ↑69 и ↓3+66
Комментарии37

Репликация в Postgresql 9.0

Время на прочтение3 мин
Количество просмотров86K
Доброго времени суток. Учитывая, что с момента релиза PostgreSQL 9 прошло уже некоторое количество времени — я решил пощупать одну из его новых функций — нативную репликацию. Как известно, новый механизм основан на пересылке XLOG`a от мастера к слейву. Одним из жирных плюсов можно назвать нормальную обработку ALTER`ов. Иными словами — администратор 9й версии может обойтись без Slony.
Читать дальше →
Всего голосов 58: ↑51 и ↓7+44
Комментарии42

Управление пакетами в Emacs

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


Emacs'ом я пользуюсь уже довольно давно и в общем-то для всего подряд. Хотя число elisp-пакетов распространяемых вместе с этим текстовым комбайном растет постоянно, иногда все же приходится устанавливать сторонние пакеты. Со временем их количество тоже постепенно растет, для них приходится отслеживать зависимости, их также необходимо (или желательно) обновлять, в общем, стандартный набор задач для менеджера пакетов. До недавнего времени для установки elisp-пакетов я пользовался системными пакет-менеджерами под linux типа apt, portage. Определенные неудобства конечно были, но настоящие проблемы начались когда Emacs пришлось использовать под Windows и Mac OS. Кроме собственно управления пакетами, появилась необходимость синхронизировать все установленные файлы, а не только настройки в ~/.emacs.

В итоге я созрел для использования полноценного менеджера elisp-пакетов, желательно обладающего следующими качествами:
  • большая база пакетов
  • удобство создания и поддержания собственных пакетов
  • легкость синхронизации установленных пакетов между компьютерами
  • кросс-платформенность без установки дополнительных приложений

После небольшого исследования существующих возможностей получился этот обзор, в котором я подробно на остановлюсь на elpa и el-get, а также кратко расскажу о других.

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

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

Время на прочтение15 мин
Количество просмотров47K
Это вторая часть моей статьи по разработке драйверов для ведомых SPI устройств в Linux. Предыдущая часть находится здесь.

3. Разработка userspace протокольного SPI драйвера с использованием spidev


Как уже было сказано выше, для SPI устройств существует ограниченная поддержка userspace API, с поддержкой базовых полудуплексных read() и write() вызовов для доступа к ведомым SPI устройствам. Используя ioctl() вызовы, можно производить полнодуплексный обмен данными с ведомым устройством, а также изменение параметров устройства.
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии9

Что должен знать о времени каждый программист

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

Некоторые замечания о времени

  • UTC: время на нулевом меридиане называется Всемирное координированное время, Universal Coordinated Time. Несовпадение акронима было вызвано необходимостью универсальности его для всех языков.
  • GMT: ранее вместо UTC использовалось среднее время по Гринвичу (Greenwich Mean Time, GMT), так как нулевой меридиан был выбран так, чтобы проходить через Гринвичскую королевскую обсерваторию.
  • Прочие часовые пояса могут быть записаны как смещение от UTC. Например, Австралийское восточное стандартное время (EST) записывается как UTC+1000, то есть время 10:00 по UTC есть 20:00 по EST того же дня.
Читать дальше →
Всего голосов 250: ↑237 и ↓13+224
Комментарии100

Как я разработал устройство, от идеи до производства. Часть 1

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


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

На рынке к тому моменту (2006-2007г) уже существовали системы предотвращения протечек воды. Однако эти системы не делали самого главного – они не сообщали хозяину о произошедшей «неприятности». То есть локализовать утечку в своей квартире такие системы могут, но “выйти за рамки”, и сообщить о том, что заливают квартиру соседи сверху, такая система попросту была неспособна. Что уж говорить о других проблемах, вроде возгорания, или проникновения в квартиру постороннего лица, или о других неприятных возможностях.

Так родилась идея сделать информационное устройство, своеобразного “охранника”, который будет сообщать владельцу на телефон о каких-то событиях, происходящих в его отсутствие в квартире.

Читать дальше →
Всего голосов 146: ↑135 и ↓11+124
Комментарии151

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

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

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


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

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

Информация

В рейтинге
Не участвует
Откуда
Таганрог, Ростовская обл., Россия
Зарегистрирован
Активность