Новая русская MMO. Очень понравилось как запрограмлено и нарисовано. Даже плохого сказать нечего. Хотя нет, скажу — управление неудобное и слушаться престает если язык русский поставить )8 А так супер. Надо быдут поиграть дальше посмотреть.
Monthly Archive for April, 2009
Сегодня с утреца открыл почтовый клиент, нажал “получить очередной утренний спам” и офигел. Пришла огромная толпа писем… нет, не спама, а уведомления о to-do с basecamp по известному проекту от неизвестного народа. !%$#^ #^^$#@* $^$^**)#@, – сказал я и громко выругался.
- wtf is this todos spam from people I don’t know?
- lol, chinese beta testers
- can I ignore that?
- mmm… yes… for now
Оказывается, чуваки наняли команду китайских тестеров, которые сразу нашли миллиард багов (каждый по одному, не иначе) и стали их слать кому попало…
Я уверовал в Юнит Тесты, господа! Аминь.
Сколько раз тесты писались как оправдание ( ну вот, тест, он как всегда зелененький ). Даже сложные асинхронные взаимодействия каким-то магическим образом сходились в тестах с первого (исключая тупые ошибки) раза. Тут, я делаю простой хелпер, который возвращает название месяца по номеру номер месяца по названию. Вроде бы что может быть проще — пара строк кода. Ради прикола был сделан тест, который на все 12 месяцев проверял работоспособность двух строк…
И ОН ПРОВАЛИЛСЯ, Jesus!
Оказывается, я пропустил июнь. Вот так бы в злосчастном июне наступил конец света из-за двух строк.
UPDATE: Добавил пример с Dictionary, который оказался хоть и не на много, но быстрее.
Вроде бы тривиальная задача — есть трехбуквенное имя месяца ( Jan, Feb, Mar… ) и из него нужно получить номер месяца. Небольшой поиск готовых велосипедов под рукой ни к чему не привел, так что придется написать небольшой хелпер для дальнейшего использования. Самый простой вариант — Array.indexOf из массива названий в порядке следования месяцов. А можно еще искать вручную или индекс подстроки в строке. Так все же, как делать?
Пришлось составить небольшой бенчмарк.
var arr: Array = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
var str: String = "JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC";
var dic: Dictionary = new Dictionary();
dic["JAN"] = 0;
dic["FEB"] = 1;
dic["MAR"] = 2;
dic["APR"] = 3;
dic["MAY"] = 4;
dic["JUN"] = 5;
dic["JUL"] = 6;
dic["AUG"] = 7;
dic["SEP"] = 8;
dic["OCT"] = 9;
dic["NOV"] = 10;
dic["DEC"] = 11;
function testArr( s: String ): int
{
return arr.indexOf( s.toUpperCase() );
}
function testArr2( s: String ): int
{
var i: int = 0;
s = s.toUpperCase();
for ( i = 0; i < 12; i++ )
if ( arr[i] == s ) return i;
return -1;
}
function testStr( s: String ): int
{
var i: int = str.indexOf( s.toUpperCase() );
if ( i == -1 )
return -1;
return i >> 2;
}
function testDic( s: String ): int
{
return dic[s.toUpperCase()];
}
Каждая функция вызывалась 10 раз по 100 000 раз для каждого месяца и полученное значение в ms усреднялось. В итоге получился следующий график.

Меньше — лучше. X — номер месяца. Y — время выполнения.
СИНИЙ — Array.indexOf
КРАСНЫЙ — Ручной поиск по массиву
ЗЕЛЕНЫЙ — Поиск в строке
ФИОЛЕТОВЫЙ — Dictionary
Из полученных результатов видно, что для поставленной задачи больше подходят примеры со строкой и словарем. Ручной поиск приближается по времени, а Array.indexOf, похоже, занимается каким-то избыточным сравнением (=== ?) и в данном случае работает слишком медленно.
Т.к. в руфлэшнете последние дни происходит какой-то бум дискуссий по поводу Apache Ant, я решил разобраться все же как его применять в повседневной рутине. Сразу скажу, что как-то давно пытался прикрутить себе Ant, но чрезж#пная система компиляции с jsfl из Flash CS3 IDE никак работать не хотела и я забил.
Пока что странно, что никто не написал про существования Flex Ant Task, который я успешно вчера ночьюсегодня утром прикрутил к компиляции тестов своего фреймворка.
Теперь надо бы узнать как комитить в SVN не через одно место.
С виду неплохой Alchemy туториал. Я сам не проверял, но в закладки оставил на будущее. Тем более, что на алхимию у меня еще есть планы.






