?

Log in

ВЕДОМОСТИ

Насколько Вы москвич?

Поздравляем! По всем признакам Вы коренной москвич. Вы знаете и любите свой город, переживаете за уходящую старую Москву с ее непередаваемым колоритом. Вас смущает, когда кто-то демонстративно небрежно отзывается о вашем любимом городе, и за это Вы, возможно, недолюбливаете приезжих.
Пройти тест
Насколько Вы москвич?
  • MobileRSS HD - великолепный клиент для Google Reader
  • Twitter - оригинальный клиент Твиттера прекрасен!
  • MyPad+ - для Facebook лучще ничего е видел
  • 1Password Pro - куда же без него, особенно при нынешней кросплатформенности приложения и DropBox в качестве хранилища
  • Forum Runner - не скажу, что он прекрасен, но при общении на форумах он сильно облегчает жизнь
  • Wikipanion+ - великолепнейший клиент для WiKi, имеющий возможность планировать чтение "на потом" и читать в оффлайне
    FlickrStackr - клиент для фотохостингов
  • eBay for iPad и Amazon WindowShop - с ними вы себя спросите, как же раньше обходились без них :)
  • Evernote - заметки, WebClip-ы... Последнее, на мой взгляд имеет некоторое преимущество по сравнению с InstaPapper и Read It Later Pro, потому что сохраняет в облаке содержимое, а не закладки, что полезно при сохрании страниц из Интранета или с безответственных сайтов :)
В добавок отмечу несколько специфичных для разных предметных областей приложений, которые мне так же очень понравились:
  • MacLoggerDX HD - лучший логгер для любительской радиосвязи с синхронизацией журнала с "большим" MacLoggerDX, а так же возможностью работы с радиостанцией через него же посредством Bonjour
  • OpenAPRS-xL - клиент для доступа к услугам APRS
  • ReBirth for iPad - клон знаменитого Rebirth от Propellerhead Software
  • KORG iElectribe - проммная реализация KORG ELECTRIBE·R
  • FL Studio Mobile HD - версия Fruity Loops для iPad
  • Koder - редактор кода с подсветкой синтаксиса,поддерживающий iDisk, DropBox, FTP
Давича копаясь на тему waypoint-ов по APRS, а соответственно, навигаторов, которые бы могли работать с APRS, наткнулся на используемую в штатах связку Garmin Nuvi 350 + Kenwood TM-D700 через маленькую поделку GTRANS Cable от Argent Data Systems.
Дальнейшие изыскания привели меня к тому, что в своих навигационных продуктах Garmin изготовил Fleet Management Interface, причем активно и в открытую развивает его.
Конечно, цена на кабель, особенно в версиях для новых устройств - кусачая, зато мы имеем несложный протокол поверх RS-232 и открырый SDK.
А самое главное - Garmin пошел на поводу у энтузиастов и начиная с версии протокола 2.50, устройства офицально (в версии 1 это было не официально) поддерживает управление waypoint-ами!
Ну предположим, с другой стороны у нас Kenwood TM-D710, имеющий отдельный интерфейс RS-232, который "кушает" NMEA и "сплевывает" waypoint-ы в собственном формате. А еще у нас есть данные из Интернет по камерам, постам и засадам, которые тоже достаточно часто (ежедневно) актуализируются. И заливать бы это дело удобно бы было со смартфона с помощью Bluetooth. Получается такая нехилая задачка по мультиплексированию и преобразованию данных на трех последовательных портах, хорошая задачка для Arduino на Mega 2560.
Пока писал, подумалось, что заодно можно и позиции друзей сливать из гео-социальных сетей. :)

Tags:

Еще одна не совсем обычная интеграция приборов в шеке: у вас автоматизировано все управление с помошью microHAM Station Master, на столе стоит удобный пульт для него в виде PS/2 NumPad... а необходимо переключить коммутатор антенн на MFJ-993B. Собственно, причины использования коммутатора на MFJ-993B три: для второй антенны настройки в тюнере сохраняются отдельно, экономим на внешнем реле (зачем, если все равно есть встроенное), снижаем издержки качества сигнала - меньше побочной коммутации (разъемы, реле - на всем этом есть потери). Приимуществ, в общем, куча, а вот в концепцию автоматизированного управления и аскетичного рабочего места не укладывается. Что делать?
Нет, снимать штаны и бегать не потребуется. MFJ для нашего с вами удобства сделала проводной пульт дистанционного управления MFJ-993RC для этого тюнера. Сам пульт нам не нужен, но поскольку он прост до безобразия, мы воспользуемся его функцией коммутации антенн. Нога 8 разъема DB9 "Remote Control" у тюнера отвечает за переключение антенн. Замыкать ее следует на корпус разъема. Замкнутое состояние соответствует состоянию ANT1, разомкнутое - ANT2.
Что касается подключения к microHAM Station Master, для этого лучще всего подходят выходы B6 - B10, которые образуют отдельные коммутационные пары.
PS. Для автоматического переключения антенн кнопка ANT на тюнере должна быть нажата.

Tags:

Вкусняшки для JavaScriptCore

В кое-то веки решил поделиться некоторыми вкусняшками. :)
Если кто работал с WebKit или имел необходимость погонять JavaScript в своих приложениях знают, что одним из легко доступных движков является JavaScript Core от Apple, поставляемый в комплекте WebKit под большинством фреймворков.

В работе с движком есть одна особенность - за собой она тащит кусочек runtime-а от CoreFoundation, в частности строковые типы. При разработке кода на C разработчик не имеет вариантов и вынужден кругом использовать функции для работы с такими строками, что существенно перегружает код и снижает его читаемость. Если же мы обратимся к C++, то у нас найдется вполне элегантный вариант в виде класса-контейнера, скрывающего в себе реализацию JSStringRef:

class JSString
{
  public:
    JSString(const char* value);
    JSString(const std::string& value);
    JSString(const JSStringRef& value);
    JSString(const JSContextRef& context, const JSValueRef& value);
    ~JSString();
    operator JSStringRef();
    operator std::string();
    operator Glib::ustring();

  private:
    JSStringRef string;
};

JSString::JSString(const char* value)
{
  string = JSStringCreateWithUTF8CString(value);
}

JSString::JSString(const std::string& value)
{
  string = JSStringCreateWithUTF8CString(value.c_str());
}

JSString::JSString(const JSStringRef& value)
{
  string = value;
  JSStringRetain(string);
}

JSString::JSString(const JSContextRef& context, const JSValueRef& value)
{
  string = JSValueToStringCopy(context, value, NULL);
}

JSString::~JSString()
{
  JSStringRelease(string);
}

JSString::operator JSStringRef()
{
  return string;
}

JSString::operator std::string()
{
  size_t length = JSStringGetMaximumUTF8CStringSize(string);
  gchar buffer[length];
  JSStringGetUTF8CString(string, buffer, length);
  return std::string(buffer);
}

JSString::operator Glib::ustring()
{
  size_t length = JSStringGetMaximumUTF8CStringSize(string);
  char buffer[length];
  JSStringGetUTF8CString(string, buffer, length);
  return Glib::ustring(buffer);
}


Пример использования:

context = JSGlobalContextCreate(NULL);
JSObjectMakeFunctionWithCallback(context, JSString("dnsResolve"), dns_resolve);
JSObjectMakeFunctionWithCallback(context, JSString("myIpAddress"), my_ip);
JSEvaluateScript(context, JSString(proxyConfigureFunctions), NULL, NULL, 1, NULL);
JSEvaluateScript(context, JSString(script), NULL, NULL, 1, NULL);


Как можно заметить из примера, вся реализация управления временем жизни строки делегирована компилятору через создание на стеке анонимного экземпляра нашего класса-контейнера, код элегантен, не допускает утечек и прост для понимания для начинающих разработчиков. Вся сила C++ в элементарных "рюшечках".

Tags:

Облако в массы!

Я как-то смотрю на то что происходит вокруг и веселюсь. Лет 6-7 назад начал лабать толстых клиентов под сервисы для Symbian и всем пытался доказать, что на мобильных устройствах следует делать толстые приложения, соответствующие User Expirience-у платформы и компенсирующие низкую скорость и латентность передачи данных в радиосетях. Джобс вконце концов продавил это в мозги масс и теперь обходится без толстого мобильного клиента считается в среде интернет-сервисов неприличным.
Для прочих приложений издревле изготовленных под PC и даже под мобильные устройства ранее никто не задумывался о application continuity. То есть приложения мы имеем и там и там, а о том, чтобы как-то состояние синхронизировать между ними - не задумаывались. И вот свершилось Облако (в контексте application continuity)! Дошло. Apple обещает бесплатно, PlayStation Network в рамках подписки PSN+, да и самое интересное все равно ждать - приложения пока еще не готовы. Хотя прикольно, что хоть до кого-то дошло, что возможен такой вариант использования, если гамер режится в игру на PS3 и ему приспичило в сортир, можно перенесли плей на PS Vita и продолжить игру в туалете. Ну или в вагоне метро. И за это можно даже брать деньги. Посмотрите на IT 10-летней давности - этого ничего не было.
Кстати, большие дядьки в наших компаниях-операторах ходят и маяться: чуют, что "облако" в каком-то из проявлений нужно продавать, а в каком (помимо Office 365) - не поймут. Да и вооще, что есть "облако" им не понятно. И действительно?! :)
Соедующвя тенденция - очередное поколение развития социальных сетей. Слава богу, MySpace умирает - крайне кривой интерфейс и нечеткая концепция. А вот Цукерберг с Facebook продолжает удачно развиваться. И, как мне кажется, за счет интеграции с чужими сервисами, взращиванию приложений третьих сторон.
Пройдем мимо "Фермы". Какое-то время назад, когда Activision выпустил Guitar Hero 3, они реализовали некий простенький XML-интерфейс для получения информации по статусам игроков, не придавая этому большое значение. Народ активно его заиспользовал на всяких окогогеймерских форумах и сайтах. В то же время я разработал и опубликовал маленькое приложение на FB, которое отслеживает прохождения игроков за сутки и публикует это на стене FB. Через какое-то время интерфейс закрылся, но аналогичная потребность возникла в головах издателей и вот Rock Band и PlayStation Network засыпают мою стену достижениями в прохождении игр. И самое что интересное, функция ассоциации аккаунтов с FB появилась прямо из PS3.
Социализация вообще трансформируется как-то необъяснимо в последнее время. Sony пытается, похоже, изменить место PSN в процессе игры и максимально обозначить коммуникации между игроками за пределами домашней игровой консоли. В частности, релиз PS Vita обещает не только уже имеющийся в PS3 чат и инфо о статусе игры, но и некие нотификации вроде iOS-ных Push. Что это конкретно - пока не понятно. PS Vita - мобильное устройство с 3G.
Кстати, все последние гаджеты стимулируют спрос на услуги беспроводных операторов. Несколько лет назад человек с двумя SIM-картами смотрелся как полный гик, ныне чуть ли ни у каждого по отдельной карте еще в ноутбуке, iPad-е, скоро и в PS Vita. Назначенная пару лет назад стагнация продаж контрактов никак не прийдет - количество абонентов мобильных сетей уже превысило население страны, хотя, в какой-то мере, продажи спали. Интересно, когда же наконец доходы от передачи данных в мобильных сетях превзойдут доходы от трафика?
Социализация, облачные приложения, application continuity - все это многократно увеличивает потребление трафика. Очередная маленькая революция в ценах должна произойти, уже есть безлимитные пакеты мобильного трафика, наметились первые звоночки в ценах на роуминг при передачи данных. И вроде как все готово к очередной технологической революции, но как обстоят дела с юридическими аспектами? Конец анонимности, частной жизни и прочему?... Оставлю пока эту тему открытой...
Всем приношу извинения, что пост не содержит четкой структуры и выраженной мысли. Поток сознания, имевший целью обозначить существующие тенденции и дать вам задуматься о происходящем.
Идея реализации "туалетного контроллера" возникла у меня несколько лет назад, но только сейчас я созрел к реализации этого проекта.
"Туалетный контроллер" - что это такое?
Идея весьма проста. Это контроллер, который собирает околоводопроводную телеметрию, преобразует интерфейсы и выполняет некоторые привентивные действия, случись что. "Околоводопроводная" телеметрия - это показания счетчиков расхода воды, датчики утечки, температуры трубы горячей воды. Электронный монометр не помешал бы, но ценник кусается. Управляемыми устройствами должны стать нормально-закрытые электрические крапаны, перекрывающие поток воды, а при отключении горячей - маршрутизирущие поток в проточный нагреватель. Заодно все хотелось бы обернуть в RS-485 для того, чтобы синтегрироваться с контроллером домашней автоматизации ADI Leopard II, а так же компьютером для мониторинга, управления и снятия показаний - прежде всего расхода воды, его отправку на сайт ЕРЦ достаточно легко автоматизировать.
Наиболее продуманный сейчас момент - это замер расхода воды. Механические счетчики имеют герконовый импульсный датчик, дающий сигнал на каждые 10 литров. Так как снимать показания с механического счетчика нельзя, считать импульсы нужно непрерывно без прерывания. То есть считать на каком-либо контроллере не получится. У Maxim (Dallas Semiconductor) было замечательное решение на интерфейсе 1Wire - DS2423 - 2-хканальный счетчик с RAM. Уже пару лет как этот чип снят с производства. Похоже, что сменивниеся продакт-менеджеры в Maxim не просекли всей сути назначения этого чипа, сняв его с производства они предлагают на замену обычные 1Wire RAM. А ведь RAM в этом чипе вторичен, по-хорошему он нужен для того, чтобы сохранять состояние счетчика в момент последнего прочтения, что позволяет точно "снимать" телеметрию с каждого конктретного датчика вне зависимости от состояния контроллера, с помощью которого снимаются показания. Чип DS2423 можно найти на китайских складах по цене от $8 до $12, а Hobby Boards продает даже готовые решения на печатной плате с обвязкой и батареей питания за $28. Я выбрал последнее решение.
Пока-что снимать показания я собираюсь самодельным контроллером на базе Arduino Uno (AVR Mega168). Есть и промышленные решения, например контроллеры Poseidon, но цена вопроса, непонятки с счетчиками и отсутствие RS-485 в slave mode явно не в пользу этого выбора.
Рассматриваем вариант Arduino Uno. За коммуникации с 1Wire будет отвечать мост DS2482-100. Я вкурсе о программной реализации 1Wire в том числе и для Arduino, но помехоустойчивость такой непосредственной реализации сильно страдает. SOIC8, конечно, тяжело паять, но тут никуда не денешся. Единственный COM-порт Arduino Uno будет занят интерфейсом с компьютером, коммуникации RS-485 я планирую выносить на связку SC16IS750 + MAX482. SC16IS750 аппаратно реализует переключение направления передачи half-duplex для MAX482, аппаратно реализует адресные фильтры RS-485. Проблема SMD монтажа решается вот такой вот платкой от Sparkfun-а. Остается только на монтажной плате поставить разъемы да MAX482, благо есть в DIP-корпусе. RTC-часы на DS1307 доступны в виде готового конструктива.
Что касается исполнительных устройств, то тут пока определенности нет. Доступны разные варианты интерфейсов.
Продолжение следует...

Tags:

Совсем кратенький пост - полезняшка.

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

И того, имеем антенну ФАП, которая "кушает" 16 линий и кабель МКЭШ 14х0.35. Его сечени (0.35) полне достаточно для питания анода и накала. Остается решить вопрос, как же подсоединить 14 линий без потери функциональности.

Детальное изучение схемы показало, что есть три вещи, которыми можно пренеборечь:
  • Наименьшая емкось в набивке. Етой линией вполне возможно пренибречь, если точность настройки в резонанс не стоит во главе угла. Дискретность этой настроки составляет где-то в районе 5 КГц, то есть несколько шире полосы SSB. Мне не очень хочется потерять такую точность.

  • Генератор шума. Наверное, это первое, о чем я подумал для исключения. Но если детально рассудить, получается, при выносе антенны за стены дома генератор шума является единственным способом ее диагностики. При его запуске помимо шума на резонансной частоте пульт управления показвает ток анода. В общем, не вариант.

  • Если детально изучить схему, две линии передают землю. Сделано это для удобства комутации "ручник/автомат". Вернее, для исключения единовременной работы двух схем управления - ручной и автоматической. Но так ли это критично?

Если хорошенько подумать, то все-таки объеденить раздельные цепи земли можно. Если это сделать, важно соблюдать только одно правило - на линиях автоматического управления не должно ничего передаваться при ручном управлении.
И того, теперь требуется 15 линий для управления антенной. 15 линию находим в виде добротной оплетки, которая имеется у кабелей МКЭШ.

Tags:

RA6LBS K-98

Попереписывался тут с Андреем RA6LBS по поводу его K-98.
Способ управления K-98 при помощи Station MasterCollapse )

Tags:

RA6LBS

Сегодня почитал про антенны нижних диаппазонов от RA6LBS, посмотрел схемки.
Знаете что? В принципе, три его RB2 с коммутатором K4/8 отлично вешаются на microHAM Station Master с настроенной виртуальной повороткой, так что для софта (логгеры с управлением повороткой) получается вообще все в шоколаде!
Но меня больше заинтересовал вариант с К-98. Я написал RA6LBS пиьмо по поводу "офицальной" возможности такого подключения. Ждем ответа.

Tags: