Успешно завершив тестирование последней версии железа в прошедшее воскресенье, спешим поведать читателям о функциях и особенностях нашего долгожданного DMMR2 — диммера в форм-факторе микромодуля, встраиваемого в стандартный стенной проем (за выключатель), подключающегося к стандартной электропроводке (к разрыву одной линии 220V без каких-либо переделок), управляемого по стандартному Wi-Fi-каналу (уже имеющемуся в практически всех квартирах и домах этой страны).
Привет, Geektimes. Мы тут что-то серьёзно увлеклись темой здоровья гиков и хотим опять поговорить об этом. На этот раз решено было коснуться хоть и довольно-таки заезженной, но окруженной кучей мифов и глупостей темы — кофе.
Действительно, о кофе не писал только ленивый. Буквально каждый ресурс, так или иначе касающийся темы работы и фриланса, тут отметился. Неудивительно — кофе уже даже не одно десятилетие является напитком №1 в офисах всего мира, да и дома люди предпочитают начать день с чашечки ароматного напитка, дабы побыстрее согнать с себя остатки сна и нормально осознать окружающую реальность. И несмотря на то, что, казалось бы, врачи и учёные только и делают, что изучают кофе и его влияние на организм человека, про него по-прежнему рассказывают кучу небылиц. Да что там — учёные по многим нюансам воздействия кофе сами не могут прийти к компромиссу, так как многие исследования прямо опровергают друг друга. И постоянно проводятся новые…
Итого, давайте-ка поговорим о кофе в контексте только действительно подтверждённых (или, по крайней мере, подтверждённых большинством исследователей) фактов — что от него бывает, что не бывает, как его правильно пить и пить ли вообще.
Почему-то в интернете мало документации про qbs, и я решил немного исправить эту ситуацию. Попробую описать в виде повествования, что необходимо сделать, что бы в QtCreator можно было компилировать (и не только) что угодно под что угодно.
PushAll предоставляет платформу для рассылки мгновенных уведомлений в браузер пользователя или в его мобильное устройство, что позволяет ему получать отфильтрованную свежую информацию из интересующих его источников. Интерфейс сайта позволяет пользователю подписаться на новый канал всего в 2 клика, а унифицированное приложение дает возможность получать уведомления с множества источников. Это куда проще, чем скачивать для каждого сайта отдельное приложение. Вместе с этим компании и разработчики могут экономить время и деньги на разработке и поддержке своего приложения.
Сама система позволяет легко подписываться и отписываться от тех или иных каналов. Что исключает возможность внезапного спама, как это происходит в случае с такими методами уведомлений как SMS и E-mail.
При разработке устройств с CAN-интерфейсом желательно иметь удобный инструмент для отслеживания сообщений в сети. Для RS232/485 существует множество бюджетных USB адаптеров и куча разнообразного софта, а вот для CAN мне не удалось найти недорогое готовое решение.
В то же самое время на сайтах автолюбителей находились самодельные устройства для подключения к CAN шине автомобиля. Одними из готовых проектов были USB<>CAN Bus Interface (CAN Hacker), реализованный на Atmega+SJA1000 и проект STM32-CAN-Busadapter, реализованный на STM32F105. Работают они с программой CAN Hacker, которая выглядит достаточно удобной для работы. Беглый анализ протокола команд по USB показал, что эти устройства представляются COM портом, и дальнейшее общение происходит в виде передачи команд из ASCII символов.
В закромах была найдена плата STM32VLDiscovery, которая и стала объектом испытаний. На ней мы будем повторять «STM32-CAN-Busadapter».
Для многих создание приложение — это что-то сверх силы. Но это приложение можно написать и за пару минут. Давно уже известно про написание приложений на HTML5. Последний раз, когда делал подобное, производилось множество манипуляций подключения различных библиотек и сборки на Eclipse. Сейчас приложение можно собрать из консоли одной командой cordova build.
Наша задача
За пару минут до прихода любимой сделать ей приятный сюрприз. Хорошо, когда ваши фото лежат с подписями к датам и тегами, описавшими дату. Подбираем нужные фото и начинаем делать приложение… но времени у нас мало и опыта в мобильной разработки нет, поэтому сделаем на html5 и упакуем cordova.
Для удобства у нас есть IDEA, которая нам поможет скомпилировать и сверстать приложение. Именно сверстать, потому что это единственная работа, которую предстоит сделать.
Мы продолжаем наши еженедельные публикации учебных материалов Технопарка. Предыдущие лекции были посвящены web-технологиям в целом, а также алгоритмам и структурам данных. В третьем блоке лекций рассказывается о языках С и С++.
Лекция 1. Язык С. Основы организации и использования оперативной и сверхоперативной памяти
Лекция начинается с введения в язык С: рассказывается об истории его появления, особенностях, преимуществах и недостатках, о сферах применения. Описываются основы препроцессорной обработки, рассматриваются вопросы управления памятью (модели управления памятью, области видимости объектов хранения) и производительность программ на языке С. Обсуждается связывание объектов хранения и их инициализация. Затем рассказывается о классах памяти в языке С. Следующая часть лекции посвящена проблематике указателей, а также работе с одномерными массивами. В заключение рассматривается стандарт POSIX и вопросы переносимости.
POCO — кроссплатформенная open-source библиотека на С++ под Boost Software License: ru.wikipedia.org/wiki/POCO. POCO имеет в своем составе средства для создания веб-сервисов c RESTful API.
В данной статье рассмотрено создание такого сервиса на примере TODO.
D3 — мощная JavaScript библиотека для визуализации данных. На мой взгляд — просто рай для web-разработчика, казалось бы недоступный для Qt-программиста. Но гибкость фреймворка Qt позволяет интегрировать web-frontend в толстый клиент с помощью механизма Qt Web Bridge. Такие приложения получили наименование гибридные (Qt Hybrid Apps).
Для JavaScript-программистов хорошая новость заключается в том, что их решения можно легко интегрировать в Desktop приложения, что потенциально может увеличить целевую аудиторию пользователей разрабатываемых библиотек (во всяком случае это верно для мира Qt приложений).
На скриншоте ниже изображен виджет Dependency Wheel (Круг Зависимостей), отрисовка которого осуществляется с помощью D3.js а управление данными и отображением — с помощью Qt. При нахождении указателя над соответствующей дугой её взаимосвязи «подсвечиваются», а остальные становятся полупрозначными. Данный виджет можно использовать для визуализации различного рода зависимостей (например библиотек).
В отличии от оригинального JS решения диаграмма динамически изменяет размер под размер виджета, а данные устанавливаются на стороне Qt, а не с помощью загрузки JSON-файла.
Статья больше ориентирована на Qt-программистов, но также может быть интересна и JS программистам.
Поскольку я давно собрал для себя ЧПУ станок и давно и регулярно эксплуатирую его для хоббийных целей, то мой опыт, надеюсь, будет полезен, как и исходные коды контроллера.
Постарался написать только те моменты, которые лично мне показались важными.
Ссылка на исходники контроллера и настроенную оболочку Eclipse+gcc и пр. лежат там же, где ролик:
Эксперты отрасли призывают разработчиков встроенных систем (ВР) покинуть зону комфорта и приобретать новые навыки, дабы не потерять актуальность в профессии.
Если мы посмотрим на ситуацию в 1980 году, парень (а в основном контроллерами занимаются все-таки парни), который разрабатывал схему обработки смешанных сигналов, парень, который подключал МК, парень, который писал код на ассемблере и парень, который выносил прототип наружу (наверное, имеется в виду отладка -примечание переводчика), был одним и тем же человеком (я сам из таких, хотя, конечно, это началось в СССР намного позже 1980 года -пп). Все это делал в значительной степени один инженер.
По мере того, как встроенные системы становились больше и сложнее, и миллионы строк кода начали поставляться с устройством (Джек Гансли в своей статье вспоминает время, когда с IBM PC поставлялся полный исходный код BIOS — пп), наступило время деления на разработку железа, разработку прошивки и разработку ПО в рамках одного устройства.
Во многих крупных компаний до сих пор так и остается. Но, похоже, маятник качнулся обратно, так как во все больших компаниях наступает консолидация ролей и снова в моде разработчики, которые в совершенстве владеют как аппаратной частью, так и программным обеспечением, и пытаются сделать большее с меньшими затратами. Соответственно, все больший процентов инженеров говорят, что они работают как на аппаратном, так и на программном уровне, и доля универсалов превосходит долю узких специалистов. (Собственно, универсалы никуда и не пропадали, просто какое то время в индустрии царило мнение, что принцип декомпозиции и специализация является серебряной пулей и позволяет достигнуть хороших результатов командой посредственностей — пп).
Поскольку мы не желаем отстать от прогресса в области ВР, то как определить, какие навыки, которые мы можем приобрести или развить, являются наиболее актуальными сегодня?
Журнал EE Times обратился к 9 профессионалам в ВР (видимо, у них произошел сбой в адресной книге, ничем другим то, что они не обратились ко мне, я объяснить не могу — пп) и рекрутерам и попросил их рассказать, что они думают по поводу наиболее важных вещей, необходимых современному инженеру в области ВР.
Недавно возникла идея заставить плату на базе МК STM32F4 работать по сети. Поскольку на борту отсутствовал Ethernet PHY контроллер, то единственным вариантом было использовать USB FullSpeed интерфейс для эмуляции Ethernet устройства. Распространённый стандарт USB-класса, реализующий данную функцию, называется RNDIS.
К своему огорчению, поиск RNDIS драйвера для STM32 не увенчался успехом. Впрочем, это не удивило, т.к. открытые примеры использования USB порта у STM32 ограничиваются только теми, что предоставил нам производитель.
Захотелось исправить сию несправедливость. А заодно и поиметь нужные исходники, благо в будущем они пригодятся.
Сейчас, когда демонстрационная версия библиотеки готова, выкладываю её в свет на правах MIT-лицензии. Поэтому, все кому библиотека интересна — пользуйтесь «на здоровье». Библиотека имеет название LRNDIS, первая буква которого означает использование сетевого стека для встраиваемых систем «LwIP».
Для демонстрации возможностей библиотеки был создан пример на плате stm32f4discovery. Его работа заключается в поддержке основных сервисов (DHCP и DNS сервера) и передаче usb-хосту запрашиваемых WEB-страниц. Таким образом, наш discovery превратился в почти полноценный WEB-сервер, работающий по порту USB!
Пару слов о том, где это применимо.
В быту RNDIS устройства обычно являются USB-модемами для доступа в Интернет. Возможно, такое применение, действительно, окажется полезным, если разработчик выберет STM32 в роли связующей цепочки между ПК и радиочастотным (или другим) трансивером. Или, может быть, захочет расширить собственную сеть на Ethernet-сегмент?
Другое применение, в котором нахожу основную пользу для себя, — это интерфейс управления сложными устройствами. Типовое решение в этой области — создание терминального ПО. При этом приходится заниматься его поддержкой вместе с поддержкой устройства, что бывает неудобным. Собственно, в отказе от такой схемы в пользу управляющего Web-интерфейса и заключается смысл возможного применения библиотеки. Вспомните Web-интерфейсы настройки роутеров. Удобно. Красиво. Без лишнего ПО.
Главным рабочим инструментом увлечённого своим делом программиста является ноутбук. Ты не привязан к конкретному офисному столу, да и вообще к офису, если на то пошло. Ноутбук для программиста и рабочее место, и центр развлечений, и окно в мир сеть. Но такая свобода имеет один недостаток: ноутбук вещь не маленькая, в карман не положишь. Можно, конечно, носить его в сумке через плечо, но это не слишком удобно: надо придерживать рукой, поддергивать соскальзывающий ремень, да и сама сумка получается широкой и жёсткой. В общем, чемодан без ручки. Совсем другое дело — рюкзак. Руки свободны, нагрузка распределена равномерно и гораздо комфортнее, ничего не болтается сбоку. Да и ноутбук защищён от всяких коллизий не в пример лучше. Неудивительно, что рюкзаки сегодня столь популярны среди всех слоёв населения, не только среди программистов. А уж в дальних поездках и перелётах рюкзаки вообще вне конкуренции. Поэтому стоит уделить особое внимание выбору модели, которая удовлетворяет всем вашим нуждам, эстетическому вкусу и анатомическим особенностям. Так что если вам приходится носить ноутбук, а ваш текущий рюкзак надоел или чем-то не нравится, или вы только подумываете перейти на рюкзак, то рекомендуем посмотреть эту подборку. Возможно, подберёте для себя интересную модель.
Эта статья рассказывает о проблемах, которые поджидают программиста, работающего с часовыми поясами. В теории, вроде, всё хорошо, просто и понятно, но жизнь — штука сложная, и на практике, порой, возникают совершенно неожиданные ситуации.
TL;DR: Работа с таймзонами — это боль и унижение. Никогда не работайте с таймзонами!
Итак, всекругомтвердят вам, что при получении времени от пользователя нужно сразу же переводить его в UTC, работать со временем нужно только в UTC и хранить время тоже нужно строго в UTC. Совет, на первый взгляд, выглядит разумным, и следование ему делает вашу жизнь проще… Если только ваша программа не предполагает сложной работы с датами. Записать в базу данных дату и время регистрации пользователя на сайте? Сохранить время отправки сообщения или дату создания заказа в интернет-магазине? Вывести сообщение в лог с указанием даты-времени? Используйте UTC и всё будет в порядке, можете даже не читать эту статью дальше. Любое текущее время можно совершенно спокойно конвертировать в UTC и забыть о проблемах. Но что, если мы хотим работать с временем в будущем? Или в прошлом? Например, если мы пишем сервис календаря, или сервис для отложенной отправки сообщений?
Периодически практикую разгуливание по магазинам электроники, аудиотехники. Интересно смотреть, до чего дошел прогресс, чего делают нового. Ну, нового делают не особо много. Имею ввиду принципиально нового. Совершенствуется элементная база. Появляются новые фишки в цифровой обработке. Ну а в общем схемотехника так и осталась той же самой схемотехникой. Только вот нашей аудиоаппаратуры совсем не осталось. Япония, США, Корея, Китай, Италия… но не Россия.
Почему?
Занялся мониторингом просторов рунета, чтобы понять, что вообще из аудио мы делаем. Как оказалось, делаем мы немного и в основном дорого. Дорого не в смысле «не стоит своих денег», просто эта техника рассчитана на особых ценителей. Нет качественных АС для обычного рабоче-крестьянского сословья.
Ну и второй момент. За окном век беспроводных технологий. Все, что возможно передать без проводов — передается без проводов. Аудио сигнал (аналоговый) передать без потерь качества мне не представляется как. А код — совсем не проблема. Нужно будет только ЦАПировать код в самой АС.
Недавно возникла данная задача — эмуляция носителя FAT32 на stm32f4.
Её необычность заключается в том, что среди обвязки микроконтроллера вовсе может не быть накопителя.
В моём случае накопитель был, но правила работы с ним не позволяли разместить файловую систему. В ТЗ, тем не менее, присутствовало требование организовать Mass Storage интерфейс для доступа к данным.
Результатом работы явился модуль, который я озаглавил «emfat», состоящий из одноимённого .h и .c файла.
Модуль независим от платформы. В прилагаемом примере он работает на плате stm32f4discovery.
Функция модуля — отдавать куски файловой системы, которые запросит usb-host, подставляя пользовательские данные, если тот пытается считать некоторый файл.
В каждом разрабатываемом устройстве у меня присутствовал отладочный вывод в UART, как в самый распространённый и простой интерфейс.
И каждый раз, рано или поздно, мне хотелось помимо пассивного вывода сделать ввод команд через тот же UART. Обычно это происходило когда мне хотелось для отладки выводить какой-нибудь очень большой объём информации по запросу (например состояние NANDFLASH, при разработке собственной файловой системы). А иногда хотелось программно управлять ножками GPIO, чтобы отрепетировать работу с какой-нибудь переферией на плате.
Так или иначе мне был необходим CLI, который позволяет обрабатывать разные команды. Если кто-то натыкался на уже готовый инструмент для этих целей — буду благодарен за ссылку в комментариях. А пока я написал собствыенный.
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.
1 Один столбец вместо нескольких
Один столбец точнее отражает то, что вы хотите донести. Пользователи проходят сверху вниз по более предсказуемому пути. В дизайне с несколькими колонками есть риск отвлечения пользователя от основной задачи страницы.
Приветствую всех! Долговое время не имел возможности поведать общественности о том, во что же все же превратился мой проект.
Наконец дошли руки для написания еще одной статьи.
В первой моей статье, «Ethernet погодная станция», было поведано о проекте создания домашней метеостанции с определенным заделом на расширение функционала в будущем. На текущий же момент из проекта данное изделие перешло в раздел полноценного устройства. Работающего по принципу 24/7 и добросовестно сообщающего мне и моему семейству о состоянии погоды. Сразу скажу, что многое было изменено.
Изначально была идея использовать домашний сервер, но в дальнейшем, я все же пришел к тому, что будет более функционально и доступно использовать облачные сервисы для отображения и хранения данных. И тут я наткнулся на статью одного из читателей «Хабра» Евгения Богера evgeny_boger«Демонстрация работы Wiren Board Smart Home», где описывалось применение замечательного сервиса Ninja Blocks. На нем я и решил реализовать отображение данных.