суббота, 12 марта 2011 г.

[prog.idiotic] Как не нужно логировать двоичные данные

Сегодняшний выходной был убит необходимостью разбирательства с жалобами важного клиента. Суть в том, что время от времени они вычитывают из TCP/IP сокета блок данных, который не могут разобрать. Соответственно к нам претензии – почему мусор в канал записываем. И в доказательство приводится фрагмент лога, якобы содержащий этот проблемный блок.

Все бы ничего, если бы не следующие особенности:

  • чтобы сформировать строку для лога используется MFC-шный аналог sprintf, что-то вроде: logLine.format(“size: %d, buf=[%s]”, len, buf). Где buf – это обычный C-шный массив с терминирующим 0-символом. Но, поскольку данные бинарные и могут иметь внутри 0-символы, то перед обращением к format содержимое buf модифицируется – все встретившиеся нули (кроме терминатора) заменяются пробелами;
  • блок бинарных данных помещается в лог-файл как есть, без каких-либо преобразований (например, хотя бы escape-нга непечатаемых символов);
  • лог-файл открывается как обычный текстовый файл, а поскольку работа идет под Windows, то символы \n (0x0a) при записи в него автоматически заменяются на \r\n (0x0d 0x0a). И, опять же, поскольку данные бинарные и не escape-тся, то находящиеся в них байты 0x0a превращаются в 0x0d 0x0a.

В результате с чем приходится разбираться – вместо нулей в блоке находятся пробелы, вместо 0x0a – 0x0d 0x0a. Повезло еще, что характер передаваемых данных таков, что пробелы в них редкость, поэтому можно было почти безопасно делать обратные преобразования.

В общем, не нужно так делать. Есть несколько намного более удобных для последующего разбирательства способов – сохранение проблемных фрагментов в отдельных бинарных файлах, сохранение в лог-файлах с применением escape-нга спецсимволов или же преобразованных к шестнадцатиричному представлению. Все лучше, чем гадать, стоит ли воспринимать 0x20 как 0x00 или как 0x20 :/

PS. Кстати, если у вас есть бинарный файл, который вы хотите пребразовать в текст с шестнадцатиричным представлением каждого байта исходного файла и не хочется ничего программировать, то можно воспользоваться Unix-овой утилитой od:

od –An –t x1 binary.dat > binary.txt

Под Windows ее можно найти в составе cygwin или в UnxUtils.

пятница, 11 марта 2011 г.

[life.sport.darts] Пара интересных вещей после очередных матчей Premier League Darts

Вчера прошла очередная серия матчей в розыгрыше Premier League Darts. И хоть на слух английский я воспринимаю очень плохо, но с большим удивлением узнал, что выдающиеся игроки Терри Дженкинс и Раймонд ван Барнивэлд – оба левши. Но бросают дротики правой рукой! И ведь как бросают! ;) Барнивэлд ведь пятикратный Чемпион Мира, а это не хухры-мухры :)

Очередной сюрприз преподнес Фил Тейлор. Мало того, что он смог в очередной раз обыграть Гари Андерсона, так он вернулся к своим предыдущим дротикам – которые Phase 5. Т.е. поэкспериментировал пару месяцев с какой-то новой моделью

(которую в форумах уже окрестили Sigma Hero и в шутку предположили, что она создана совместно со специалистами из NASA и с использованием обедненного урана), а затем вернулся к старым дротикам. Правда в интервью после матча он что-то на эту тему сказал, но я, к сожалению, не понял. Так что, возможно, эксперименты Тейлора продолжатся.

Кстати говоря, на a180 уже начали распродавать некоторые модели Phase 5 со скидкой. Так что, если кто-то хочет почувствовать себя хоть чуть-чуть Филом Тейлором, то теперь это сделать дешевле ;) Хотя я бы лично лучше бы приобрел очень похожие, но намного более дешевые McCoy Marksman.

[life.wow] Летающий дом из мультика Up воплотили в реальности

В рамках программы “How hard can it be?” на телеканале National Geographic:

Специально построенная модель домика с двумя пилотами поднялась на высоту 10000 футов (~3000 метров) и пробыла в воздухе около часа.

четверг, 10 марта 2011 г.

[life.politic] Забабахивают заочные восхищения жизнью и властью в Беларуси

Не очень люблю писать на тему политики, но иногда накрывает. За последние пару дней сразу на нескольких читаемых мной ресурсах наблюдается восхищенное обсуждение недавнего интервью А.Г.Лукашенко журналистке “Вашингтон Пост”. Причем, предполагаю, изрядную долю восторгов высказывают не жители Беларуси. И это забабабахивает – слышать от россиян, например, как здорово нам здесь живется.

В связи с этим хочется сказать: если у нас все так классно, то переезжайте к нам на ПМЖ и живете у нас! У нас же так все замечательно! Переезжайте и наслаждайтесь!

Что касается власти, то мое мнение такое – любая власть нацелена на сохранение самой себя. Благо граждан страны в этой глобальной задаче всего лишь один из факторов. Кто-то иногда с этим считается, кто-то нет. При этом на данном этапе для Беларуси, как одного из осколков все еще разваливающегося на мелкие части СССР, Лукашенко, наверное, хороший вариант правителя. Не сомневаюсь, что при Кебиче или Шушкевиче было бы хуже.

Однако, вот что напрягает в существующей организации власти в Беларуси: single point of failure, если говорить техническим языком. Все у нас завязано на одну личность. Со всеми потенциально вытекающими отсюда последствиями. Поэтому я, как в какой-то степени инженер, предпочел бы видеть более надежную и сбалансированную систему. И плохо не то, что у власти Лукашенко, а то, что кроме Лукашенко никаких других потенциальных лидеров у нас нет. Даже приемников. (Флейм на тему что явилось причиной такой ситуации прошу не разводить)

А тем, кто впервые столкнулся с речами нашего Президента и кому показалось, что там были сказаны толковые вещи, я бы посоветовал вспомнить пословицу – talks do not cook rice.

Так что переезжайте! Поработайте на наш внутренний рынок. Или в бюджетной организации. Думаю, открытий вас ждет немало.

среда, 9 марта 2011 г.

[prog.humour] Порвало

За что люблю LOR, так это за возможность прочитать там такое:

.NET написана менеджером из Borland Delphi

Количество маразма в коротенькой фразе из 6 слов просто зашкаливает.

понедельник, 7 марта 2011 г.

[life.sport.darts] Дротики Target T0.1 80% 23g

Дротики Сеймона Витлока, которые мне не подошли, я поменял на 23-граммовую модель Target T0.1 с 80% содержанием вольфрама. Если кому-то интересно, то милости прошу под кат.