Search
Write a publication
Pull to refresh
0
Константин @igrafkotread⁠-⁠only

User

Send message

Умный дом — дешево и сердито, часть 2

Reading time2 min
Views171K
В жизни каждого умного дома возникает закономерный вопрос – как маленький нежный микроконтроллер своими пятью вольтами сможет коммутировать 220 вольт переменного тока?

Самый простой вариант – реле. Тут вам и гальваническая развязка, и замыкаешь что хочешь, хоть постоянный, хоть переменный, мало, много. Но и минусы у реле очень неприятные.

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

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

Поэтому хочу поделиться с вами лучшим, на мой взгляд, способом коммутировать 220 вольт переменного тока – полупроводниковый ключ переменного тока.
Читать дальше →

«Программирование мышкой» для микроконтроллеров

Reading time5 min
Views39K
Многие микроконтроллерные платформы поддерживают инструменты для создания начальной конфиграции периферийных устройств и портов ввода/вывода. Обычно это графическая среда, в которой задаются параметры работы кристалла и может быть сгенерирован исходный код — заготовка будущего проекта.

При использовании такого конфигуратора вы существенно упрощаете начальный этап программирования, но делаете это не в ущерб пониманию процессов, происходящих на кристалле.
Ниже приведен пример использования конфигуратора для микроконтроллера C8051F930 от Silicon Labs. Будем управлять яркостью светодиода с потенциомера, написав руками всего две строчки кода. Just for fun, конечно.

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

Дайджест новостей из мира разработки на Unity

Reading time2 min
Views22K
Лето – пора больших свершений. Потратьте время отпусков с пользой: читайте наш новый дайджест и создавайте потрясающие игры на Unity.


Читать все

STB — погружение

Reading time11 min
Views38K
Всем доброго времени суток.

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

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

image

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

Хвостовая рекурсия в C++ с использованием 64-битных переменных — Часть 1

Reading time3 min
Views19K
В этот раз я хочу поделиться с вами одной проблемой, с которой столкнулся, когда решил сравнить итерационные и рекурсивные функции в C++. Между рекурсией и итерацией есть несколько отличий: о них подробно рассказано в этой стать. В языках общего назначения вроде Java, C или Python рекурсия довольно затратна по сравнению с итерацией из-за необходимости каждый раз выделять новый стековый фрэйм. В C/C++ эти затраты можно легко устранить, указав оптимизирующему компилятору использовать хвостовую рекурсию, при которой определенные типы рекурсии (а точнее, определенные виды хвостовых вызовов) преобразуются в команды безусловного перехода. Для осуществления такого преобразования необходимо, чтобы самым последним действием функции перед возвратом значения был вызов еще одной функции (в данном случае себя самой). При таком сценарии безусловный переход к началу второй подпрограммы безопасен. Главный недостаток рекурсивных алгоритмов в императивных языках заключается в том, что в них не всегда возможно иметь хвостовые вызовы, т.е. выделение места для адреса функции (и связанных с ней переменных, например, структур) на стеке при каждом вызове. При слишком большой глубине рекурсии это может привести к переполнению стека из-за ограничения на его максимальный размер, который обычно на порядки меньше объема оперативной памяти.
Читать дальше →

IoT за копейки, или Что может DeviceHive

Reading time4 min
Views45K
В современном мире «интернет вещей» (IoT) стремительно набирает популярность. Он в будущем поможет человечеству автоматизировать многие аспекты жизни, упростить рутинные операции, да и просто сделать жизнь комфортнее и приятнее. Современная элементная база только способствует этому. Еще несколько лет назад задача управления устройством из сети порождала необходимость использовать высокопроизводительные процессоры, что увеличивало стоимость конечного исполнительного устройства в разы. Сейчас же есть возможность построить простые и эффективные IoT-решения за копейки.

Сделать свой дом поистине «умным» можно и без использования модных Raspberry Pi или Arduino. Большинство IoT-задач сводится к подключению типовых датчиков и исполнительных механизмов со стандартными интерфейсами: I2C, SPI, UART. А иногда даже с элементарным аналоговым выводом, с которого нужно считать наличие напряжения или подать его, или просто замкнуть.


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

Релиз OpenCV 3.0 с поддержкой Python 3

Reading time1 min
Views38K
Вышла третья версия OpenCV (Open Computer Vision Library) — популярной библиотеки алгоритмов компьютерного зрения, обработки изображений и численных алгоритмов общего назначения с открытым исходным кодом.

Релиз включает примерно 1500 патчей, отправленных через github. Упомянуто, что в OpenCV использовано большое количество интеллектуальной собственности Intel (IPPCV), которую компания передала пользователям библиотеки бесплатно, без лицензионных выплат, для коммерческого и некоммерческого использования. Аппаратное ускорение с использованием OpenCL теперь доступно разработчикам через T-API (transparent API). Помимо этого, в третью версию OpenCV добавлено огромное количество новых возможностей, улучшений производительности и стабильности, подробнее обо всём можно почитать по ссылке.

Это первая стабильная версия библиотеки, которая полностью поддерживает Python 3. Для Windows и Python 3.4 бинарники уже можно скачать на сайте lfd.uci.edu. Модуль всё ещё имеет название cv2.
Читать дальше →

Как собрать умный дом

Reading time5 min
Views55K


Всем привет, с вами команда Wiren Board!

Нас часто спрашивают: «Что можно подключать к вашему контроллеру? Как на нём собрать “умный дом”?»
Чтобы немного прояснить этот вопрос, мы покажем стенд, где к Wiren Board 4 подключены периферийные устройства. На его примере расскажем про типовые варианты подключения устройств и датчиков.

На стенд можно посмотреть на него через онлайн-трансляцию и зайти в демонстрационный веб-интерфейс.
Читать дальше →

Анализ связей в проекте своими руками

Reading time4 min
Views8.1K
Для того, чтобы начать разбираться в большом проекте, нужно понять, какие в проекте есть логические модули и как они связаны. В случае использования Visual Studio в дорогих редакциях продукта доступны функции построения различных графов зависимостей. К сожалению, во-первых, студии с меню «Architecture» реально дорого стоят. Во-вторых, в старых проектах, которые до сих пор собираются и имеют проектные файлы только для Visual Studio 2008, сама студия особенно ничего не предлагает.

Конечно, стоит отметить, что для такой цели существуют дорогие инструменты (например, Understand). Но для начала мне хватило того, что я набросал небольшой скрипт на PowerShell. Скрипт этот генерирует dot-файл для GraphViz на основе sln файла. В результате получается схема как на рисунке ниже, с которой уже можно начинать разбираться в проекте.



Далее расскажу, как работает этот скрипт.
Читать дальше →

Циклические контейнеры в Objective-C

Reading time2 min
Views7.8K
Некоторое время назад я написал этот код:

NSMutableArray *environments = [NSMutableArray new];
for (NSString *key in [dictionary allKeys]) {
    XCCEnvironment *environment = [[XCCEnvironment alloc] initWithName:key
                                                            parameters:dictionary[key]];
    [environments addObject:environments];
}
return environments;

Заметили проблему? Я — нет.
Читать дальше →

Пишем свой Spliterator

Reading time11 min
Views54K
Многие из вас уже попробовали на вкус Stream API — потоки Java 8. Наверняка у некоторых возникло желание не только пользоваться готовыми потоками от коллекций, массивов, случайных чисел, но и создать какой-то принципиально новый поток. Для этого вам потребуется написать свой сплитератор. Spliterator — это начинка потока, публичная часть его внутренней логики. В этой статье я расскажу, как и зачем я писал сплитератор.
Читать дальше →

LeakCanary — помощник в поиске утечек памяти

Reading time3 min
Views33K

Никому не нравятся креши с OutOfMemoryError


Работая над Square Register, мы рисуем подпись клиента используя битмап-кеш. Поскольку этот битмап размером с экран устройства, у нас было очень много OutOfMemory крешей во время создания его.

image

Мы пробовали несколько подходов ни один из которых не решил проблему:
  • Использовали Bitmap.Config.ALPHA_8
  • Ловили OutOfMemoryError, вызывали сборку мусора и пробовали снова (подглядели в GCUtils),
  • Мы не рассматривали вариант с размещением битмапов вне кучи Java. К счастью Fresco еще не существовало,


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

Китайская комната по-русски: «думать» по шаблону

Reading time3 min
Views9.5K
В 1980-х годах американский философ Джон Серль решил опровергнуть предположение о том, что компьютеры или другие виды искусственного интеллекта могут думать и понимать, и предложил для этого мысленный эксперимент, ставший известным под названием “Китайская комната”.

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

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

Кто мы, что мы, для чего мы или о Проекте iLe!Go

Reading time3 min
Views2.9K

Привет всем


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

Кто мы (Часть корабля – часть команды)


Мы – это команда Проекта iLe!Go. Организм у нас молодой и склонен к росту, развитию и трансформациям, поэтому пока точно можно обозначить статус только мой (главный идеолог и пока единственный спонсор) и моего главного помощника. Сейчас у нас еще есть инженер, который разрабатывает печатную плату для основного устройства (к моему сожалению, мне так и не удалось постичь азы Altium Designer), есть дизайнер, разработчик приложений для мобильных устройств. Пока состав такой, но мы охотно принимаем новых членов команды, которые хотят участвовать в развитии проекта.
Читать дальше →

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

Reading time4 min
Views32K
Сервис облачного видеонаблюдения, к примеру, iVideon и Московского правительства, стали и по-настоящему удобными для потребителя. С учетом невысокой абонентской платы сервис должен был давно стать массовым и обрести пользователей в каждом подъезде и загородным доме. Что сдерживает его развитие?

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

Примечание: статья снабжена ссылками на соответствующие страницы нашего сайта для тех, кто любит подробности.
Читать дальше →

Делаем приложение push'истым

Reading time6 min
Views19K

Хочу поделиться своим user developer experience от внедрения WNS push notifications в приложение Windows Store. Приглашаю всех прочитать мои непутевые заметки о том, как я делал свое приложение белым и push'истым.
Принять приглашение

Простое управление arduino через интернет

Reading time5 min
Views208K


Всем добрый день.

Около года назад я написал небольшую обзорную статью для управления Arduino через интернет, с помощью сервера NinjaBlocks. Это было довольно хорошее и удобное решение и оно отлично работало, пока в один прекрасный момент не начались проблемы с соединением. Попытки уговорить разработчиков через форум решить проблемы были напрасны — они просто игнорировали мои просьбы и не удосужились даже ответить, что было очень печально.

С того момента был просканирован весь интернет в поисках замены — и было найдено много очень интересных проектов, но они либо были слишком сложными в реализации и требовали значительных знаний в области программирования, либо были попросту неудобны. И вот тут и пришла мысль почему бы не сделать все самому.
Читать дальше →

Objective-C Runtime для Си-шников. Часть 1

Reading time6 min
Views31K


При первом знакомстве с Objective C он произвёл на меня впечатление уродливого и нелогичного языка. На тот момент я уже имел достаточно сильную базу в C/C++ и ассемблере x86, а так же был знаком с другими высокоуровневыми языками. В документации писалось, что Objective C это расширение языка C. Но, как бы я ни старался, мне всё же не удавалось применить свой опыт в разработке приложений для iOS.

Сегодня он всё так же кажется мне уродливым. Но однажды окунувшись в глубины Objective-C Runtime я влюбился в него. Изучение Objective-C Runtime позволило мне найти те тонкие ниточки, которые связывают Objective C с его «отцом» — великолепным и непревзойдённым языком C. Это тот самый случай, когда любовь превращает недостатки в достоинства.

Если вам интересно взглянуть на Objective C не просто как на набор операторов и базовых фреймворков, а понять его низкоуровневое устройство, прошу под кат.
Читать дальше →

Unity3d: эксперименты с Social Interface

Reading time10 min
Views24K
Современную мобильную игру трудно представить без социальной интеграции, общих таблиц рекордов (leaderboards) и достижений (achievements). Дабы не отставать от тенденций, решил интегрировать Game Center и Play Services для iOS и Android версий моей игры.

Так как я разрабатываю игру в свободное время в качестве хобби, то мысли о покупке плагинов, например, prime31, были отброшены сразу. Выбор пал на интерфейс Social, который входит в состав Unity. Вокруг этого пакета чувствуется интрига: практическое отсутствие справочной информации наталкивает на две мысли: либо интерфейс очень прост, либо не пригоден к использованию. Итак, пришло время в этом разобраться.
Читать дальше →

Обзор процесса разработки программного обеспечения

Reading time13 min
Views194K

Введение


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

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

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

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

В отличие от заказного ПО, работа над инвестиционным программным обеспечением ведётся самим исполнителем на деньги внутреннего или внешнего инвестора. Как правило, права на код системы остаётся у исполнителя, что стимулирует непрерывную работу по улучшению своего продукта и последовательный выпуск версий с более развитой функциональностью.

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

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

Нашими заказчиками являются органы власти, крупные государственные и коммерческие организации и, конечно, мы сами. Поэтому в смысле заказного ПО в нашем процессе часто присутствует некоторая разница между процессами разработки продуктов для внутреннего и для внешнего заказчиков. Некоторые нюансы я укажу в этой статье. Уровень формализации отношений с заказчиком у нас варьируется от проекта к проекту очень широко. В целом, чем больше бюджет проекта, тем выше формальность. Государственный заказчик или крупные коммерческие предприятия (особенно с государственным участием) обычно имеют законодательные ограничения на формирование, размещение заказа и приёмку результатов работ. Ещё одним ограничением крупных организаций является тот факт, что их персонал, являющийся источником требований и основным пользователем наших систем, имеет очень ограниченную доступность для исполнителей, хотя бы вследствие своей занятости. Однако для небольших организаций уровень формализации падает и иногда уходит в противоположную крайность, где возникает недостаточный уровень ответственности заказчика в рамках проекта.

Другая сторона наших заказных проектов – высокие требования к функциональности. Это и высокая нагрузка на все системы, и большая географическая распределённость, и высокие требования к точности вычислений при очень ограниченных временных рамках. Часто в наших проектах появляются элементы исследовательской работы и творческого поиска, направленного на решение нетривиальных проектных задач. Иногда нам приходится комбинировать в рамках одного процесса разработки разные методологии, например, вставляя в общий процесс, близкий к RUP, один или несколько этапов почти чистого scrum, порождая что-то вроде проекта в проекте. Это позволяет нам сохранять невысокий уровень вовлеченности пользователей, связанный с природой проекта, с гибкостью разработки в условиях высокой неопределённости требований. В этом плане для меня важен именно подготовительный этап, во время которого можно выбрать необходимую методологию и выстроить оптимальный процесс разработки. Один из примеров применения гибкой методологии я описал в статье «Применение agile при разработке проекта для государственного заказчика».

В качестве примера работы над инвестиционным проектом я могу привести разработку комплексной системы безопасности, которую мы создавали как «коробочный» продукт. Под моим руководством было выпущено последовательно четыре версии этой системы, пользователями которой стали самые разные коммерческие и государственные организации, включая мэрию Москвы, АФК «Система», банки, бизнес-центры и, конечно, наш собственный офис. Первая версия была не очень успешной, но у нас была стратегия развития, которая позволила нам успешно захватить рынок и пережить сложные времена кризиса. Опыт работы над этим и ещё несколькими инвестиционными проектами тоже был учтён при формировании используемого мной процесса разработки.

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

Важно понимать, что переход процесса от одного этапа к другому не имеет чёткой границы. Как правило, работы следующего этапа начинаются по мере выполнения 80-90% работ по предыдущему этапу. Особенно это касается разработки требований, когда в ряде случаев снятие неопределённости происходит лишь к концу проекта. Безусловно, наличие такой неопределённости в проекте является существенным риском и должно находиться под постоянным контролем.
Читать дальше →

Information

Rating
Does not participate
Location
Ростов-на-Дону, Ростовская обл., Россия
Date of birth
Registered
Activity