Решил я съехать с блогспота и попробовать вести standalone блог. Надеюсь это будет мне дополнительным стимулом писать больше чаще и качественнее. В общем теперь я на этом сайте.
понедельник, 13 января 2014 г.
понедельник, 2 декабря 2013 г.
Плагин к браузеру Chrome показывающий котировки криптовалют
Захотелось мне знать актуальные цифры не заходя на сайт биржи и запилил я расширение, ибо не нашел в Web Store ничего подобно.
Расширение проще некуда, по клику выдает курс в долларах США трех криптовалют. Может кому пригодится, будут предложения пишите.
Ссылочка для скачивания: https://dl.dropboxusercontent.com/u/28759831/btc-e_rates.crx
Расширение проще некуда, по клику выдает курс в долларах США трех криптовалют. Может кому пригодится, будут предложения пишите.
Ссылочка для скачивания: https://dl.dropboxusercontent.com/u/28759831/btc-e_rates.crx
суббота, 30 ноября 2013 г.
Криптовалюта
Последний месяц весь мир лихорадит от криптовалют. Количество новостей на крупных ИТ-ресурсах про этот новый вид электронной валюты растет, новостями о биткоинах, лайткоинах завалены Хабр, Y Combinator. О биткоинах я впервые узнал в 2010 году, еще будучи студентом, я был впечатлен, завел кошелек, майнил немного, в целом поигрался немного и забыл (эх если бы я только знал...). Потом я о них слышал еще несколько раз и обращал на них внимание, но всегда считал это слишком рискованным(не зря) и не вкладывался.
И вот в начале ноября я вспомнил о них снова (или услышал), как раз думал открыть вклад и начать копить деньги. Решился купить, стоили они тогда по 190$ за штуку, для пробы обменника на 1200 руб. (0.181 биткоина). Все прошло удачно, ну и начал я ждать зарплаты что бы отложить деньги и перевести их в биткоины... и именно в том момент пока я ждал они взлетели до 500$ за день, а ночью до 700$. В этот момент меня и затянуло. В целом я считаю хорошей идей немного денег отложить в такой валюте, если у вас есть такая возможность. Лично я купил немного биткоинов, лайткоинов и неймкоинов, на будущее. Мне кажется что мы становимся наблюдателями, а может даже и участниками чего-то совершенно нового и мне это нравится.
P.S. Нравится мне статья на лурке про биткоины.
пятница, 22 ноября 2013 г.
Сегодня исполнилось 50 лет сериалу Доктор Кто!
Джеронимо! Сегодня юбилей сериала Доктор Кто, а это значит что завтра выйдет спецвыпуск сериала, в котором откроют "страшную тайну" Доктора, а так же произойдет встреча 10 и 11 Докторов, а так же смена Доктора! Я ждал полгода этой серии. Серию будут транслировать в 75 странах в одно и тоже время, а так же в кинотеатрах в формате 3D, в том числе и в России.
Транслировать будут по каналам НСТ и Карусель в русском озвучке, а в кинотеатрах на английском с русскими субтитрами.
четверг, 21 ноября 2013 г.
Bitcoin - электронная криптовалюта.
Давненько я не писал, а сегодня прямо пробило. Решил еще написать про биткоины.
Впервые я о них услышал еще в 2010 году, идея мне понравилась и я даже был готов их купить, тем более что стоили они копейки, но сложность покупки меня остановила. Потом я о них услышал в апреле этого года, когда был резкий рост, но я не рискнул. И вот в очередной раз я обратил на них внимание в начале ноября и все же решил прикупить себе немного и считаю что не прогадал. =) Для покупки решил воспользоваться украинским сервисом metabank. Покупал через liqpay, конечно комиссия большая, зато надежно. Все получилось отлично. Биткоины пришли, теперь пылятся на моем кошельке.
Ради эксперимента попробовал поторговать на бирже btc-e, но торговец из меня плохой, да и суммы там нужны приличные, иначе комисия... =(
Что ж буду теперь следить за эти монетками более пристально!
Впервые я о них услышал еще в 2010 году, идея мне понравилась и я даже был готов их купить, тем более что стоили они копейки, но сложность покупки меня остановила. Потом я о них услышал в апреле этого года, когда был резкий рост, но я не рискнул. И вот в очередной раз я обратил на них внимание в начале ноября и все же решил прикупить себе немного и считаю что не прогадал. =) Для покупки решил воспользоваться украинским сервисом metabank. Покупал через liqpay, конечно комиссия большая, зато надежно. Все получилось отлично. Биткоины пришли, теперь пылятся на моем кошельке.
Ради эксперимента попробовал поторговать на бирже btc-e, но торговец из меня плохой, да и суммы там нужны приличные, иначе комисия... =(
Что ж буду теперь следить за эти монетками более пристально!
Черная пятница в магазине TI EStore, Ez430 Chronos Watch за 29$
Магазин TI EStore устраивает распродажу первых часов, являющихся еще и набором разработчика Ez430 Chronos Watch, за 29$ плюс стоимость доставки. Хорошие предложение, по сути это были первые умные часы. Ссылочка.
среда, 24 апреля 2013 г.
Самый маленький фреймворк для Unit тестирования проектов на Си
Существует такой фреймворк для unit-тестирования MinUnit который очень удобно встраивать в ПО микроконтроллеров, по причине его экстремально малого размера и отсутствия операций выделения памяти.
Вот он:
Небольшой пример с странице фреймворка:
Страница MinUnit.
Вот он:
#define mu_assert(message, test) do { if (!(test)) return message; } while (0)
#define mu_run_test(test) do { char *message = test(); tests_run++; if (message) return message; } while (0)
extern int tests_run;
Небольшой пример с странице фреймворка:
#include <stdio.h> #include "minunit.h" int tests_run = 0; int foo = 7; int bar = 4; static char * test_foo() { mu_assert("error, foo != 7", foo == 7); return 0; } static char * test_bar() { mu_assert("error, bar != 5", bar == 5); return 0; } static char * all_tests() { mu_run_test(test_foo); mu_run_test(test_bar); return 0; } int main(int argc, char **argv) { char *result = all_tests(); if (result != 0) { printf("%sn", result); } else { printf("ALL TESTS PASSEDn"); } printf("Tests run: %dn", tests_run); return result != 0; }
Страница MinUnit.
пятница, 5 апреля 2013 г.
Игра "Тук-тук-тук" от Ice-Pick Lodge
Первое что всплывает в голове при упоминании студии Ice-Pick Lodge - это игра "Мор.Утопия". В свое время эта игра произвела на меня неизгладимое впечатление. Она была настолько необычна и настолько увлекательна. Так же эта студия выпустила еще несколько необычных проектов, но сейчас не о них.
Сейчас я бы хотел упомянуть о новом проекте Ice-Pick Lodge игре "Тук-тук", сбор средств на создание которой проходил на Kickstarter'e, где я собственно и узнал о ней. Сейчас не будем о том, что я слоупок и пропустил сбор средств и т.п. Сведем разговор к тому что разработчики обещают выпустить игру этим летом. Игра будет точно доступна на Windows и Mac OS, скорей всего на IOS и Android, а так же на Linux, при условии что Unity 3D обеспечит заявленную поддержку. Подробней можно почитать в интервью.
Вот видяшкa:
Еще немного ссылочек:
- проект на кикстартере,
- сайт игры,
- сайт Ice-Pick Lodge;
Сейчас я бы хотел упомянуть о новом проекте Ice-Pick Lodge игре "Тук-тук", сбор средств на создание которой проходил на Kickstarter'e, где я собственно и узнал о ней. Сейчас не будем о том, что я слоупок и пропустил сбор средств и т.п. Сведем разговор к тому что разработчики обещают выпустить игру этим летом. Игра будет точно доступна на Windows и Mac OS, скорей всего на IOS и Android, а так же на Linux, при условии что Unity 3D обеспечит заявленную поддержку. Подробней можно почитать в интервью.
Вот видяшкa:
Еще немного ссылочек:
- проект на кикстартере,
- сайт игры,
- сайт Ice-Pick Lodge;
среда, 3 апреля 2013 г.
Криптография часть 1 на сайте Coursera
Описание курса(вольный перевод информации с сайта Coursera):
Криптография является незаменимым инструментом для защиты информации в компьютерных системах. Студенты узнают, как рассуждать о безопасности криптографических конструкций и, как применить эти знания для реальных приложений. Курс начинается с подробного обсуждения того, как две стороны, имеющие общий секретный ключ могут безопасно общаться в то время как мощный противник будет их подслушивать и манипулировать с данными. Мы рассмотрим много работающих протоколов и проведем анализ ошибок в существующих системах. Вторая часть курса посвящена техникам использования открытого ключа которые позволяют двум и более сторонам создать общий секретный ключ. Мы рассмотрим соответствующие теории чисел и обсудим шифрование с открытым ключом, а так же основы обмена ключами. На протяжении всего курса студенты будут решать множество интересных открытых проблем этой области.
Курс включает в себя письменные домашние задания и лабораторные по программированию. Курс является самодостаточным, однако слушателю будет полезно иметь общее представление о теории вероятностей.
Курс только начался(прошла только 1 неделя) и вы еще в состоянии догнать остальных. Так же обещают скоро запустить Криптография часть 2.
P.S. Еще немного про этот курс есть здесь.
пятница, 29 марта 2013 г.
Послать самому себе пакет данных через сеть
В одном из проектов у меня стояла необычная задача, на компьютере с 2-мя сетевыми интерфейса требовалось передавать UDP пакеты с одного сетевого интерфейса на другой через сеть.
Предположил что у нас есть 2 сетевых карты, а следовательно и два сетевых интерфейса:
- eth0 ip 192.168.10.1
- eth1 ip 192.168.10.2
Для начала, я попробовал решить эту задачу самым простым(и первым) способом пришедшим мне в голову. Создать сокет и привязать его к сетевому интерфейсу eth0(192.168.10.1) и посылать пакеты на 192.168.10.2. Но как оказалось так просто ядро Linux не провести, показания ifconfig говорили что пакету идут через сетевую петлю lo.
После продолжительного поиска я наткнулся на патч для ядра от Julian Anastasov(не стал пытаться переводить на русский, вдруг ошибусь) Send-To-Self interface flag. Который позволял отправлять самому себе пакеты через внешнюю сеть. Автор постоянно обновляет этот патч. Основными преимуществами заявленными автором являются:
- данная фича может быть использована любыми приложениями без изменения кода
- фича не ограничивается 2 интерфейсами
- фичу можно использовать с несколькими IP адресами
- фича не зависит от состояний rp_filter'a и arp_filter'a
- подробней и остальное тут
Что удобно в пропатченном ядре функция такой маршрутизации включается и отключается на лету из userspace'a. Вот так:
Предположил что у нас есть 2 сетевых карты, а следовательно и два сетевых интерфейса:
- eth0 ip 192.168.10.1
- eth1 ip 192.168.10.2
Для начала, я попробовал решить эту задачу самым простым(и первым) способом пришедшим мне в голову. Создать сокет и привязать его к сетевому интерфейсу eth0(192.168.10.1) и посылать пакеты на 192.168.10.2. Но как оказалось так просто ядро Linux не провести, показания ifconfig говорили что пакету идут через сетевую петлю lo.
После продолжительного поиска я наткнулся на патч для ядра от Julian Anastasov(не стал пытаться переводить на русский, вдруг ошибусь) Send-To-Self interface flag. Который позволял отправлять самому себе пакеты через внешнюю сеть. Автор постоянно обновляет этот патч. Основными преимуществами заявленными автором являются:
- данная фича может быть использована любыми приложениями без изменения кода
- фича не ограничивается 2 интерфейсами
- фичу можно использовать с несколькими IP адресами
- фича не зависит от состояний rp_filter'a и arp_filter'a
- подробней и остальное тут
Что удобно в пропатченном ядре функция такой маршрутизации включается и отключается на лету из userspace'a. Вот так:
# Включаем echo 1 > /proc/sys/net/ipv4/conf/eth0/loop # Выключаем echo 0 > /proc/sys/net/ipv4/conf/eth0/loop
понедельник, 18 марта 2013 г.
Закрытие сервиса Google Reader с 1 июля 2013
Недавно корпорация добра объявила о закрытии Google Reader 1 июля 2013 года. Всем пользователям предлагается забрать свои данные из Google Takeout в виде архива с файлом: "subscriptions.xml". Закрытие сервиса Reader это, неприятно, но так как есть экспорт, то должен быть и импорт на аналогичных сервисах. Итак мы имеем следующие бесплатные альтернативы Google Reader:
Netvibes: богатые настройки, можно импортировать\экспортировать RSS-фиды, есть возможность организации фидов в категории, существует мобильная версия веб-сайта.
Feedly: есть приложение для iOS и Android и расширение для Firefox. Пытается делать их наших RSS-фидов журнал, что в принципе удается в браузере, но выглядит странно на умнофонах .
Flipboard: аналогично Feedly делает журнал, есть приложения для iOS и Android.
Pulse: веб-сервис, который пытается организовать наши RSS-фиды в виде плиток. Приложения для iOS и Android прилагаются.
NewsBlur: сервис, позволяет следить за обновлением RSS-фидов в реальном времени, приложения для iOS и Android прилагаются. Бесплатная версия имеет урезанный функционал.
воскресенье, 17 февраля 2013 г.
Калибровка хронографа часов Romanson
Оставлю эту заметку для себя... На мои часах Romanson время от времени сбивается стрелка хронографа и сегодня мне пришлось потратить некоторое время на поиски решения этой проблемы в инете т.к. я потерял справочник который шел к часам.
Так вот нужно выдвинуть заводной механизм до конца, зажать обе клавиши на пару секунд, а дальше верхней клавишей выставить правильное положение.
Так вот нужно выдвинуть заводной механизм до конца, зажать обе клавиши на пару секунд, а дальше верхней клавишей выставить правильное положение.
суббота, 26 января 2013 г.
Слабое связывание или weak linkage
Часто(почти всегда), при разработке ПО для микроконтроллеров, приходится иметь дело с прерываниями. И если вы в работе вы используете SDK от производителя, то скорей всего замечали что callback функции для прерываний уже реализованны, но это абсолютно не мешает вам их переназначить на нужные вам.
foo.c
int foo(void) { // ... return 1; }
main.c
int foo(void); int main(void) { foo(); while(1); }
При линковки вы скорей всего увидите что-то похожее на это:
Error: Symbol foo multiply defined (by main.o and foo.o). Target not created
Но почему же таких ошибок нет при компиляции проектов с этими SDK?
Потому что для реализации callback функций прерываний используется слабое связывание (weak linkage).
- пример с weak функцией
weak_foo.c
_weak int foo(void) { // ... return 1; }
main.c
int foo(void); int main(void) { foo(); while(1); }
теперь линковщик это спокойно проглотит и у нас будет реализация callback функции "по умолчанию" и в случае если мы захотим заменить эту реализацию на свою, то нам надобудет всего лишь реализовать эту функцию по своему
main.c
int foo(void) { return 3; } int main(void) { foo(); while(1); }
понедельник, 19 ноября 2012 г.
qBittorrent замена uTorrent
Не для кого не секрет что uTorrent с каждой новой версией превращается в УГ. В поисках замены наткнулся на эту замечательную программу.
Основное преимущество (для меня)qBittorrent перед другими клиентами, это сходство интерфейса с uTorrent, кросс - платформенность т.к. я являюсь обладателем небольшого зоопарка ОС и открытость исходных кодов. Немного информации с сайта:
Основное преимущество (для меня)qBittorrent перед другими клиентами, это сходство интерфейса с uTorrent, кросс - платформенность т.к. я являюсь обладателем небольшого зоопарка ОС и открытость исходных кодов. Немного информации с сайта:
- Интерфейс схожий с uTorrent
- Хорошо интегрированные и гибкие плагины поиска
- Поиск по самым популярным BitTorrent базам(поисковикам)
- Доступны все расширения протока Bittorrent
- DHT, Peer Exchange, Full encryption, Magnet/BitComet URIs, ...
- Удаленное управление по средствам веб-интерфейса
- Расширенный контроль над трекерами, пирами и торрентами
- UPnP / NAT-PMP поддержка перенаправления портов
- Доступен на ~25 языках (поддержка Unicode)
- Наличия инструмента для создания торрентов
- Продвинутая поддержка RSS с фильтрами (включая regex)
- Планировщик ширины канала
- IP фильтр (совместимый с eMule и PeerGuardian)
- IPv6 совместимый
- Последовательная загрузка (aka "Загрузка по порядку")
- Работает на следующих платформах: Linux, Mac OS X, Windows, OS/2, FreeBSD
В целом программа отличная, а ее открытость позволяет добавлять нехватающие фичи, чем в принципе я время от времени и занимаюсь! Кстати написанна он на Qt.
Так же стоит отметить наличие web-интерфейса и возможность программы работать на ОС(Linux), без оконного менеджера. Так что при помощи этой программы можно построить домашнюю торрента-качалку на отдельном сервере и управлять ей удаленно через веб-интерфейс.
qBittorrent имеет встроенный торрент-трекер, что позволит раздавать торренты людям непосредственно с своего компа, без выкладывания торрента на интернет трекеры.
Так же стоит отметить наличие web-интерфейса и возможность программы работать на ОС(Linux), без оконного менеджера. Так что при помощи этой программы можно построить домашнюю торрента-качалку на отдельном сервере и управлять ей удаленно через веб-интерфейс.
qBittorrent имеет встроенный торрент-трекер, что позволит раздавать торренты людям непосредственно с своего компа, без выкладывания торрента на интернет трекеры.
пятница, 5 октября 2012 г.
Использование User Leds на BeagleBone
Вообще заметил странную вещь, пользовательские светодиоды расположенные на плате не работали в дистрибутиве от arago, хотя он позиционируется TI как самый стабильный.
И поэтому в процессе правки исходников ядра, я так же починил и светодиоды.
Ну теперь грех ими не воспользоватся, два у нас уже заняты под heartbeat и mmc0,
остальные же свободны.
Зажигаем светодиод:
Тушим его:
И поэтому в процессе правки исходников ядра, я так же починил и светодиоды.
Ну теперь грех ими не воспользоватся, два у нас уже заняты под heartbeat и mmc0,
остальные же свободны.
Зажигаем светодиод:
echo 255 > /sys/class/leds/am335x:EVM_SK:usr0/brightness
Тушим его:
echo 0 > /sys/class/leds/am335x:EVM_SK:usr0/brightness
среда, 3 октября 2012 г.
NAND FLASH, UBIFS и с чем это едят
UBIFS это новая файловая система для NAND и NOR носителей.
Подробней она описана здесь.
Что бы протестировать возможности сей прекрасной ФС нужно:
Что бы протестировать возможности сей прекрасной ФС нужно:
- включить поддержку оной в ядре (Device Drivers ->
Memory Technology Device (MTD) Supportas -> Enable UBI - Unsorted block images )
( File Systems -> Miscellaneous filesystemsas -> UBIFS file system support)
- скачать снимок mtd-utils с git (здесь) и собрать из исходников
Для компиляции mtd-utils потребуются пакеты: libacl-devel и zlib-devel,
а так же библиотеки zlib, lzo и uuid.
Для Ubuntu: sudo apt-get install libacl1-dev zlib1g-dev liblzo2-dev uuid-dev
Для Ubuntu: sudo apt-get install libacl1-dev zlib1g-dev liblzo2-dev uuid-dev
Но прежде чем мы сможем воспользоватся всеми преимуществами данной файловой
системы, нужно внести некоторые изменения в исходники ядра. На плате которую я использую для экспериментов (BeagleBone Rev.A3) нет распаяной NAND flash, потому мы ее подключим. Рассказ о подключение не столь интересен, но нам нужно поправить загрузочную конфигурацию ядра, вся нужна информация расположенна в файле
/linux-3.2.0-patched/arch/arm/mach-omap2/board-am335xevm.c:
/* Make some additions to configs */ /* Beaglebone Rev A3 and after */ static struct evm_dev_cfg beaglebone_dev_cfg[] = { {tps65217_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mii1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {usb0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {usb1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {mmc0_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {i2c2_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {ehrpwm_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {uart1_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {gpio_led_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {evm_nand_init, DEV_ON_BASEBOARD, PROFILE_NONE}, {NULL, 0, 0}, };
как видно тут в список инициализации добавлена nand(а так же UART1, ehrpwm), причем сменился ее тип.
Кстати nand flash в отличии от блочных устройств имеет софтварное разбиение на разделы и эти разделы захардкорженны в этом же файле:
/* NAND partition information */ static struct mtd_partition am335x_nand_partitions[] = { /* All the partition sizes are listed in terms of NAND block size */ { .name = "SPL", .offset = 0, /* Offset = 0x0 */ .size = SZ_128K, }, { .name = "SPL.backup1", .offset = MTDPART_OFS_APPEND, /* Offset = 0x20000 */ .size = SZ_128K, }, { .name = "SPL.backup2", .offset = MTDPART_OFS_APPEND, /* Offset = 0x40000 */ .size = SZ_128K, }, { .name = "SPL.backup3", .offset = MTDPART_OFS_APPEND, /* Offset = 0x60000 */ .size = SZ_128K, }, { .name = "U-Boot", .offset = MTDPART_OFS_APPEND, /* Offset = 0x80000 */ .size = 15 * SZ_128K, }, { .name = "U-Boot Env", .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ .size = 1 * SZ_128K, }, { .name = "Kernel", .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ .size = 40 * SZ_128K, }, { .name = "File System", .offset = MTDPART_OFS_APPEND, /* Offset = 0x780000 */ .size = MTDPART_SIZ_FULL, }, };
Ну и на закуску, два различных способа "залить" информацию во флеш описанны здесь.
вторник, 2 октября 2012 г.
Загрузка BeagleBone по UART
Boot Over UART
NOTE
*The release package does not contain the binary for UART boot. Please follow the steps mentioned here for compiling u-boot and use the spl/u-boot-spl.bin file that is produced.
*The release package does not contain the binary for UART boot. Please follow the steps mentioned here for compiling u-boot and use the spl/u-boot-spl.bin file that is produced.
- Switch ON EVM with switch settings for UART boot. When “CCCC” characters appear on TeraTerm window, from the File Menu select Transfer --> XMODEM --> Send (1K mode)
- Select “u-boot-spl.bin” for the transfer
- After image is successfully downloaded, the ROM code will boot it.
- When “CCCC” characters appear on TeraTerm window, from the File Menu select Transfer --> YMODEM --> Send (1K mode)
- Select “u-boot.img” for the transfer
- After image is successfully downloaded, U-Boot will boot it.
- Hit enter and get to u-boot prompt “U-Boot# ”
Flashing images to NAND in UART boot mode
Boot using UART boot mode as here
After the U-Boot prompt U-Boot# comes up, the images for the 1st stage and 2nd stage can be flashed to NAND for persistent storage.
Flashing SPL to NAND in UART boot mode
Flash SPL (MLO) to NAND by executing the following commands:
U-Boot# loadb 0x82000000
- From TeraTerm Menu click “File -> Transfer -> Kermit -> Send”.
- Select the 1st stage u-boot image “MLO” and click “OPEN” button
- Wait for download to complete and then run following commands in u-boot prompt
U-Boot# nand erase 0x0 0x20000 U-Boot# nandecc hw 2 U-Boot# nand write.i 0x82000000 0x0 0x20000
If no error messages are displayed the SPL of NAND boot has been successfully transferred to NAND.
Flashing U-Boot to NAND in UART boot mode
Flash the 2nd stage U-Boot (u-boot.img) to NAND by executing the following commands:
U-Boot# loadb 0x82000000
- From TeraTerm Menu click “File -> Transfer -> Kermit -> Send”.
- Select the 2nd stage u-boot image “u-boot.img” and click “OPEN” button
- Wait for download to complete and then run following commands in U-Boot prompt
U-Boot# nand erase 0x80000 0x40000 U-Boot# nandecc hw 2 U-Boot# nand write.i 0x82000000 0x80000 0x40000
If no error messages are displayed the U-boot of NAND boot has been successfully transferred to NAND.
Сначала загружаем по X-modem (Cntr-A S) u-boot-spl.bin, далее по Y-modem u-boot.img,
потом setenv ipaddr <>, далее устанавливаем ip адресс сервера setenv serverip <>
после чего оттуда загружается файл uImage.
Все достаточно хорошо описано в файле AM335x U-boot User guide там же описан способ первоначальной прошивки
Сначала загружаем по X-modem (Cntr-A S) u-boot-spl.bin, далее по Y-modem u-boot.img,
потом setenv ipaddr <>, далее устанавливаем ip адресс сервера setenv serverip <>
после чего оттуда загружается файл uImage.
Все достаточно хорошо описано в файле AM335x U-boot User guide там же описан способ первоначальной прошивки
понедельник, 20 августа 2012 г.
Работа с git через прокси
На работе стоит прокси требующий аутефикации, в этих ваших интернетах есть полно информации как настроить работу консольных программ через прокси, они все сводятся к записи переменной окружения:
export http_proxy=http://username:password@host:port/
Но этот способ так и не заработал для меня, зато сработала команда для конфигурации git:
git config --global http.proxy http://login:'pa$$word'@proxyhttp:8080
одинарные кавычки обязательны. Теперь хоть git работает!
пятница, 20 июля 2012 г.
Таймеры высокого разрешения Linux C/C++
В операционной системе Linux помимо обычных задержек(sleep) и таймеров, реализованы таймеры высокого разрешения. Таймер и задержки высокого разрешения позволяет измерять временные промежутки с точностью до наносекунд, а так же позволяют приложения "засыпать" на непродолжительное время(в зависимости от конфигурации системы) соизмеримое с несколькими микросекундами.
//===============================================================
// Name : HiTimer.c
// Author : D.Falko
// Version : 1.0
// Description : High Resolution timer test
//===============================================================
#include <stdio.h>
#include <time.h>
#include <sched.h>
#include <string.h>
#include <sys/mman.h>
#include <limits.h>
int main(int argc, char *argv[])
{
if(0 == geteuid()) // приложение должно быть запущенно с правами суперпользователя
{
struct sched_param sp;
memset(&sp, 0, sizeof(sp));
sp.__sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(0, SCHED_FIFO, &sp);
mlockall(MCL_CURRENT | MCL_FUTURE);
}
else
{
printf("Not running with superuser rigthsn");
exit(1);
}
if(argc < 3)
{
printf("Using: HiTimer iterations delayn");
exit(1);
}
int iter = atoi(argv[1]);
int delay = atoi(argv[2]);
int i=0;
struct timespec tS, startT, stopT;
clock_getres(CLOCK_MONOTONIC, &tS); // узнаем разрешение таймера
printf("Timer res: %ld sec, %ld nsecn", tS.tv_sec, tS.tv_nsec);
struct timespec time;
clock_gettime(CLOCK_MONOTONIC, &startT); // засекаем время начала теста
while(i<iter)
{ // повторяем iter раз задержку delay
i++;
clock_gettime(CLOCK_MONOTONIC, &time); получаем актуальное время
time.tv_nsec+=delay; // добавляем требуемую задержку
clock_nanosleep(CLOCK_MONOTONIC, TIMER_ABSTIME,
&time, NULL); // засыпаем
}
clock_gettime(CLOCK_MONOTONIC, &stopT);
long int nsec=stopT.tv_sec*1000000000 + stopT.tv_nsec
-startT.tv_sec*1000000000 + startT.tv_nsec;
// iter*delay должно примерно равняться nsec, узнаем погрешность задержек
printf("Number of iterations: %d timer value: %d nsecn",
iter, delay);
printf("Time elapsed: %ld nsecn", nsec);
return 0;
}
А теперь подробней о использованных компонентах.
Используемая структура времени определена в <sys/time.h> и выглядят следующим образом:
struct timespec { long tv_sec; /* секунды */ long tv_nsec; /* наносекунды */ };
Далее мы узнаем и выводим на экран точность(разрешение) системных часов, при помощи функции:
int clock_getres(clockid_t clk_id, struct timespec *res);
в структуру struct timespec *res записывается разрешения, указанных в clockid_t clk_id часов.
clockid_t clk_id может быть:
▪ CLOCK_REALTIME: часы реального времени, доступные всем процессам в системе. Часы измеряются в секундах и наносекундах с начала эпохи (то есть 00:00:00 1 января 1970 по Гринвичу). Точность 1/HZ секунд.
▪ CLOCK_MONOTONIC: время непрерывной работы ОС, доступное всем процессам. В Линукс оно измеряются в секундах и наносекундах после загрузки ОС. Точность 1/HZ с. Время в этих часах не может быть изменено каким-либо процессом, по этому рекомендуется использовать его.
▪ CLOCK_PROCESS_CPUTIME_ID: часы, замеряющие время работы процесса. Время данного процесса, потраченное на выполнение в системе, измеряется в секундах и наносекундах. Точность 1/HZ. Значение часов может быть изменено.
▪ CLOCK_THREAD_CPUTIME_ID: Как CLOCK_PROCESS_CPUTIME_ID, но для потока.
Функция:
int clock_gettime(clockid_t clk_id, struct timespec *tp);
записывает в tp время.
Ну и последняя используемая функция:
int clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *request, //задержка struct timespec *remain);
const struct timespec *request - время задержки, если функция вернет (по какой-либо причине) управление раньше установленного времени, то в переменной struct timespec *remain будет записано оставшиеся время.
Так же отдельной статьи достойны строки этой программы позволяющей ей получить приоритет реального времени, и система планировщиков Linux в целом.
понедельник, 19 марта 2012 г.
Сервис онлайн тестирования Quizful
Недавно в блоге Алена С++ прочитал пост о бесплатном прохождении тестов на сайте Brainbench. Халява была ограниченна по времени, так что я задался вопросом найти бесплатный аналог и на русском. Больше всего мне понравился сайт онлайн тестов Quizful.
- тесты по администрированию (Unix, Linux, Windows, MacOS)
- тесты по программированию (C++, Java, C#, 1C, PHP, Python, Ruby, Delphi)
- тесты по базам данных (SQL, Oracle, MS SQL, MySql)
- тесты по веб-технологиям (HTML, CSS, JavaScript, HTTP)
- тесты по управлению проектами (экстремальное программирование, Scrum)
Прохождение тестов для меня это возможность узнать свои слабые места и подтянуть знания.
Преимущества сервиса Quizful
- Это некоммерческий сервис направленный на помощь IT сообществу
- После прохождения тестов можно просмотреть правильные ответы с объяснениями
- Сайт поддерживается сообществом и пройдя пару тройку тестов, можно добавить свои вопросы или задачи.
Подписаться на:
Сообщения (Atom)





