13.03.2006

Задумчивое

...с одно из митингов (в смысле, собраний).
- Мобильный телефон на данный момент является прибором, обладающим наибольшей концентрацией хайтека в мире.
А ведь верно. Тем более, если рассматривать смартфоны с камерами-плеерами-радио.

12.03.2006

Оперное

На ЛОРе появилась новость о прохождении девятой Оперой одного из тестов на соответствие броузеров вэб-стандартам. Обсуждение новости (местами просто флейм) уже перевалило за две сотни комментариев, что, в общем, нестранно - стоит кому-либо на ЛОРе похвалить/поругать Оперу/Файерфокс/FreeBSD/Linux/что-нибудь еще, как налетает толпа противников и поклонников и начинают рвать друг другу виртуальные глотки. =)
А я просто попробовал прогнать этот тест на том, что установлено дома. Кстати, особого смысла в полном соответствии вэб-стандартам, равно как и в успешном прохождении данных тестов я не вижу. ИМХО, вэб-стандарты - это как наука, для того, чтобы быть коммерчески успешным, не обязательно полностью им соответствовать.














09.03.2006

Не стреляйте в программиста...

- Как я могу тебя отблагодарить за твои ответы?
- Перестать задавать вопросы.
(с) bash.org.ru

nickname: nickname2 - девелопер, мля
nickname: на форуме ему объясняют как под его драйвером играть %)
(с) bash.org.ru

07.03.2006

Назрел вопрос...

...кто такие , зачем они нужны и почему я регулярно оказываюсь в списке их френдов?

Харе кришна по-фински

Иду с работы. На Александеринкату подходит парень вполне обычного вида, протягивает руку для рукопожатия:
- Терве... (и далее - длинная фраза по-фински)
- Экскьюзми, ай донт спик финниш.
Неохотно стягиваю перчатку и жму руку в ответ... Надо учиться игнорировать нежелательные рукопожатия.
- Оу, энд вот лэнгвич ду ю спик?
Вот! Вот это вопрос, способный застать врасплох. Интересно, это мой английский настолько плох, что даже непонятно, что это английский, или просто кто-то не тормоз?..
- Эмм... Инглиш.
Парень обрадованно достал флаер на финском и всучил мне.
- Зере из ан индиан пати. Ю вэлкам.
- Угу.
- Окей, бай! Ит воз найс ту мит ю.
- Бай.
Флаер рассказывал про какую-то кришнаитскую тусовку. Ну их нафиг. Еще стану таким же.

Квикшот

То, что должно получиться
 
Opera 8.52
 
Internet Explorer 6.0
 
Internet Explorer 7 beta 2 (взято по одной из ссылок из комментариев к новости на ЛОРе)

Задорные финские манекены
Задорные финские манекены

Куусиярви

В выходные ездили на Куусиярви.
Умеют все-таки люди обеспечивать себе отдых. Несколько проложенных лыжных трасс (с подсветкой в ночное время). Маленькая круговая - чуть больше километра вокруг озерца, большая круговая - около десяти километров, несколько ответвлений, если верить карте. После пробежки - сауна. Для желающих - прорубь.
Кстати, про сауну. Вообще-то к финским общественным саунам я до сих пор относился с неуважением. Народ бегает туда-сюда, камни не просыхают, дверь не закрывается, хорошо, если удается согреться.
Но на Куусиярви одно из отделений (помеченное 80-100) поразило. Во-первых, оно было подозрительно маленькое. Во-вторых, там было подозрительно мало народу - всего один финн, цветом напоминавший знамена Красной Армии. Ну, фиг с ним, решили попробовать.
В первые пять секунд я радовался - наконец-то горячая сауна. В следующие пять секунд я стал недоумевающе ощупывать обожженные уши. Еще пяти секунд мне хватило на то, чтобы понять, что в этом отделении я не задержусь. И пять секунд - на выход. =) Так то. =)

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

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

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