07.03.2006

День Рождения по-фински

В общую рассылку один из админов кинул приглашение на свой ДР. Упомянул про подарки - ничего, мол, не надо, но если очень хочется, то переведите деньги на счет Красного Креста с указанием моего имени-фамилии.

01.03.2006

Талма

В субботу ездили толпой в Талма. Впервые увидел неогранизованных финских детей и подростков, норовящих пролезть вне очереди. Помимо этой прелести (кстати, похоже характерной именно для этого курорта в выходные), отдельного упоминания заслуживает аттракцион, расчитанный, в основном, на сноубордистов, под названием "оседлай подъемник".

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

Со второго раза я умудрился устоять на доске при начале движения, с третьего поборол рывок в начале подъема. Позже, в момент начала подъема, вцеплялся в палку железной хваткой с выражением дикого ужаса на физиономии. =) И даже не форсил, застегивая ногу на подъеме. Пару раз в начале подъема шток вырывало из-под ног, еле ловил руками.

Мучался не я один. Подъемник работал, "а бабушки все падали и падали..."

А склоны, кстати, неплохие.

Программерский бред

Не помню, с чего, но чего-то задумался о довольно обыденной процедуре swap. На память пришли два метода - естественный (с использованием временной переменной) и навороченный (с использованием xor; подсмотрен мною довольно давно в книжке Бруно Бабэ).
Формально оба метода используют всего три операции. Или не три? Решил проверить - просто подсмотреть, сколько инструкций ассемблера реально использует каждый из методов.
Реализовал оба метода (хотя для трех и одной строчки кода "реализовал" - громкое слово). Пометил обе переменные как volatile для того, чтобы компиляторы не удаляли неиспользуемые переменные. Прогнал через два компилятора (gcc и Microsoft Visual C++ 6.0) c ключами оптимизации по скорости. Результат свел в таблицу.

"swap" technique tests





























  Method 1 Method 2
C source code
void test( )
{
volatile int a;
volatile int b;
int tmp;

tmp = a;
a = b;
b = tmp;
}
void test( )
{
volatile int a;
volatile int b;

a ^= b ^= a ^= b;
}
MsVC 6.0 assembly output

[cl /c /O2 /Fatest.asm test.c]
4 assembler instructions

_test  PROC NEAR  ; COMDAT
; File test.c
; Line 2
push ecx
; Line 7
mov eax, DWORD PTR _a$[esp+4]
; Line 8
mov ecx, DWORD PTR _b$[esp+4]
mov DWORD PTR _a$[esp+4], ecx
; Line 9
mov DWORD PTR _b$[esp+4], eax
; Line 10
pop ecx
ret 0
_test ENDP
12 assembler instructions

_test   PROC NEAR  ; COMDAT
; Line 2
sub esp, 8
; Line 6
mov eax, DWORD PTR _b$[esp+8]
mov ecx, DWORD PTR _a$[esp+8]
xor eax, ecx
mov DWORD PTR _a$[esp+8], eax
mov edx, DWORD PTR _b$[esp+8]
mov eax, DWORD PTR _a$[esp+8]
xor edx, eax
mov DWORD PTR _b$[esp+8], edx
mov ecx, DWORD PTR _b$[esp+8]
mov edx, DWORD PTR _a$[esp+8]
xor ecx, edx
mov DWORD PTR _a$[esp+8], ecx

; Line 7
add esp, 8
ret 0
_test1 ENDP
GCC 3.4.4 assebly output

[gcc.exe -S -O3 test.c]
4 assembler instructions

_test:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl -4(%ebp), %edx
movl -8(%ebp), %eax
movl %eax, -4(%ebp)
movl %edx, -8(%ebp)

leave
ret
12 assembler instructions

_test:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl -4(%ebp), %ecx
movl -8(%ebp), %edx
xorl %edx, %ecx
movl %ecx, -4(%ebp)
movl -4(%ebp), %ecx
movl -8(%ebp), %eax
xorl %eax, %ecx
movl %ecx, -8(%ebp)
movl -8(%ebp), %eax
movl -4(%ebp), %edx
xorl %edx, %eax
movl %eax, -4(%ebp)

leave
ret


Число инструкций для первого метода - 4 для обоих компиляторов. Для второго - 12, то есть в три (!!!) раза больше. Правда, из этих двенадцати три инструкции оперируют только регистрами, но, в общем, это не спасает.
Конечно, тесты довольно искусственные, но, в общем, похоже, что использование блока кода
int a, b;
...
{
int tmp;
tmp = a;
a = b;
b = tmp;
}
...

дает значительный выигрыш по сравнению с использованием строчки
a ^= b ^= a ^= b;

И при этом памяти используется ничуть не больше.
То есть, данная строчка является не более чем программерскими понтами. =)
Кстати, реализация swap вручную дала бы выигрыш всего в одну инструкцию:
    mov eax,  DWORD PTR _a$[esp+4]
xchg eax, DWORD PTR _b$[esp+4]
mov DWORD PTR _a$[esp+4], eax

27.02.2006

Интернет-телевидение <i>или</i> Как я был хакером

Пятничный хоккейный полуфинал мы собрались смотреть толпою на конспиративной квартире. Вообще-то толпа состояла из трех желающих-болеющих, остальные были просто сочувствующие.
Приключения начались заранее. На упомянутой конспиративной квартире телевидения не было. Был телевезионный проектор, подключенный к dvd-проигрывателю, ноутбук, компьютер, а телевидения не было. Смотреть полуфинал мы планировали, подключив ноутбук к проектору, а интернет - к ноутбуку. Или наоборот - ноутбук к интернету, а проектор - к ноутбуку.
Как и следовало ожидать, ноутбук по вай-фай сразу коннектиться к интернету не захотел. Стали в шесть рук настраивать просмотр интернет-трансляции на десктопе (чтобы проверить соединение и посмотреть игру, пока настраивается все остальное), интернет на ноутбуке (чтобы перетащить трансляцию на проектор) и вай-фай-рутер-модем с моего рабочего ноутбука (на всякий случай, чтобы занять меня =)). Рутер-модем настраивал я.
Поиск беспроводной сети выдал список из трех сетей. Поскольку рутер был только что перезагружен, я выбрал ту, что называлась "default" и, подключившись, полез через web-интерфейс по настройкам рутера. Стандартные D-Link'овские пользователь admin и пустой пароль, статистика, DHCP-сервер, настройки вай-фай соединения... Стоп-стоп-стоп! Где настройка ADSL? Упс... И что за модель рутера я настраиваю? Под столом вроде другая стоит.
Дальнейшие эксперименты показали, что при сбросе рутер хозяина квартиры в качестве имени сети выбирал название своей модели, а вовсе не "default". И админил я сетку каких-то близких соседей. И паролем защищена она не была. Потрясающая наивность.
Главная опасность заключается не в том, что я, подключившись, начинал тырить интернет-трафик... А в том, что я оказывался внутри локальной сети и знал ip-адреса и имена машин, подключенных к рутеру по wifi и по ethernet-интерфейсу (эти данные видны на странице статистики рутера). Соответсвенно, доступ к хостам внутренней сети был если не полный, то довольно свободный.
Пара камней в огород D-Link'а. Как я не искал в настройках уже своего рутера, ни фильтрации MAC-адресов для wifi-соединений, ни отключения wifi в принципе я не нашел. Хотя последнее вроде как должно быть. А жаль - довольно полезные, на мой взгляд, функции.

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

26.02.2006

Пельмени: дегустация

Приезжали "Уральские Пельмени" с сольной программой.
На самом деле, пельменей приехало только четверо: Дмитрий Брекоткин, Андрей Рожков, Сергей Нетиевский и Вячеслав Мясников (сорри, насчет последних двоих не уверен, но вроде идентифицировал правильно).
Показали множество сценок, некоторые из которых были уже знакомы по просмотренным КВНам, что, впрочем, впечатления не испортило. Часть шуток локализовали под Финляндию, часть - под Олимпиаду в Турине.
Общее впечатление - ребята выступили просто здорово. Сильно взаимодействие с залом. Молодцы.

Про "челночные" автобусы

Обратил внимание на "челночные" автобусы Питер-Хельсинки. Скорее всего, куплены списанные в турфирмах Германии. Новые хозяева даже не потрудились перекрасить - на автобусе красуется название и координаты немецкой фирмы (что-то там райзен). Единственное, нарисовали сзади российский номер.

Опа...

А на площади возле метро Камппи валяется огороженный лентой старый сломанный рояль, прошитый диким количеством пуль. Современное искусство или?..

24.02.2006

Очередной отжиг админа

Презентация департамента айти. Тема - "Идеальный мир с точки зрения департамента айти". Вступление. Докладчик:
- К счастью, вы не увидите мира, идеального с точки зрения айтишников.
Админ с места:
- Более того, в мире, идеальном с точки зрения айтишника, вас вообще бы не было.