You are viewing [info]cyanide_burnout's journal

GCC vs LLVM-GCC

Cyanide
Уже давно и неоднократно писалось, что LLVM-GCC проигрывает в производительности скомпилированного кода. Везде, как правило, указывалось на незначительные провалы в производительности и лишь в некоторых сложных тестах - до 50%.
Но, блин, я не думал, что 50% провал будет на таких простых задачках, как тут. 50% слив. А это означает, что LLVM-GCC не умеет даже при вклченой оптимизации нормально раскладывать все по регистрам и нормально лепить "короткие" переходы.

DS203

Cyanide
Сегодня наконец пришла посылка с осцилографом DS203, он же DSO Quad. Про качество ничего пока сказать не могу, но конечно, подкупила цена, да еще с учетом того, что мне DealExtreme был должен денег. :)
Конечно. на DX комплектация победнее, чем у SeeedStudio (см. обзор от МК90), поставка OEM, но имеющиеся щупы однозначно лучше.
Прибор совсем лилипусичный! Я сначала даже сел на измену, когда распаковывал - думал, упаковка с аккумулятором, а прибор сперли. Боюсь представить, какого размера DSO Nano v2.
Я, правда, заранее подготовился и купил в SeeedStudio несколько переходников на BNC.
немного фоток )
Cyanide

Обзавелся я тут, значит, очередным трансивером в июле. Нужно зарегистрировать в Роскомнадзоре.
Раньше я пользовался услугой одного дядички - отдавал ему документы и его девочки-мальчики сами ездили оформлять разрешение на станцию с этой муторной процедурой. С нынешним разбродом (например, позывные до сих пор не дают и я не могу повысить категорию из-за этого), дядечка пока такой курьерской услугой не занимается. Так что теперь все самому.
Выяснил, что на rsoc.ru есть форма для подачи заявления в электронном виде - чтоб лишний раз туда не мотаться, я ее заполнил и стал ждать неизвестно чего.
Прошел практически месяц, никто не пишет и не звонит. Проверяю статус заявки на сайте: "заявка передана в электронную систему Роскомнадзора". Ну пипец какой-то, сайт уже не электронная система. Там же дан телефон справочной.
Звоню. Объясняю девушке в справочной, что частоты выделять мне не нужно, всего лишь зарегистрировать РЭС. в итоге договорились до того, что мне нужно позвонить в "отдел".
Еще неделя уходит на то, чтобы в этом "отделе" сняли трубку. В общем, меня отредиректили в справочную московского отделения Роскомнадзора. Звоню туда. Опять описываю девушке (теперь из московского филиала) ситуацию. Дает номер тетеньки, занимающейся электронными заявлениями. Звоню ей. Та раздроженным голосом завляет, что я уже второй за день умник, который звонит по этому поводу и к ней (не смотря на поданное в электронном виде заявление) это никакого отношения не имеет. Правда, дала телефон в "отдел", теперь уже региональный. Фиерия продолжается.
Звоню в "отдел": "А вы нам бумажные копии заявлений привозили? Откуда мы знаем о том, что вы завели электронные? Вот привезете - узнаем". Занавес.
Надо сказать, что все девушки, кроме той, что на электрических заявках, весьма вежливы. Хоть какой-то прогресс в госучереждении.

Posted via LiveJournal app for iPad.

Tags:

Aug. 1st, 2011

Cyanide
ВЕДОМОСТИ

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

Поздравляем! По всем признакам Вы коренной москвич. Вы знаете и любите свой город, переживаете за уходящую старую Москву с ее непередаваемым колоритом. Вас смущает, когда кто-то демонстративно небрежно отзывается о вашем любимом городе, и за это Вы, возможно, недолюбливаете приезжих.
Пройти тест
Насколько Вы москвич?
Cyanide
  • 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
Cyanide
Давича копаясь на тему 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:

  • Leave a comment
  • Add to Memories
Cyanide
Еще одна не совсем обычная интеграция приборов в шеке: у вас автоматизировано все управление с помошью 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:

  • Leave a comment
  • Add to Memories

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

Cyanide
В кое-то веки решил поделиться некоторыми вкусняшками. :)
Если кто работал с 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:

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

Cyanide
Я как-то смотрю на то что происходит вокруг и веселюсь. Лет 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 - все это многократно увеличивает потребление трафика. Очередная маленькая революция в ценах должна произойти, уже есть безлимитные пакеты мобильного трафика, наметились первые звоночки в ценах на роуминг при передачи данных. И вроде как все готово к очередной технологической революции, но как обстоят дела с юридическими аспектами? Конец анонимности, частной жизни и прочему?... Оставлю пока эту тему открытой...
Всем приношу извинения, что пост не содержит четкой структуры и выраженной мысли. Поток сознания, имевший целью обозначить существующие тенденции и дать вам задуматься о происходящем.
Cyanide
Идея реализации "туалетного контроллера" возникла у меня несколько лет назад, но только сейчас я созрел к реализации этого проекта.
"Туалетный контроллер" - что это такое?
Идея весьма проста. Это контроллер, который собирает околоводопроводную телеметрию, преобразует интерфейсы и выполняет некоторые привентивные действия, случись что. "Околоводопроводная" телеметрия - это показания счетчиков расхода воды, датчики утечки, температуры трубы горячей воды. Электронный монометр не помешал бы, но ценник кусается. Управляемыми устройствами должны стать нормально-закрытые электрические крапаны, перекрывающие поток воды, а при отключении горячей - маршрутизирущие поток в проточный нагреватель. Заодно все хотелось бы обернуть в 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:

  • Leave a comment
  • Add to Memories