| Саша ( @ 2008-12-18 00:08:00 |
| Current mood: |
Из жизни зоопарка
1. Всем программистам было строго настрого "попрошено" - никаких геометрических и географических вычислений. Всё что нужно будет написано одним "выделенным" человеком, который знает что такое синус и Меркатор, и почему в UTM вопрос "где север" имеет нетривиальный ответ. Но нет, нашлись Ломоносовы, блин ... Сами все изобретем и напишем.
Вопрос залу - если находящийся на высоте 10 км самолет будет лететь строго по прямой, на какой высоте он окажется пролетев по этой прямой 200 км ? Подсказка: не на высоте 10 км ...
Вторая подсказка: вообще-то зависит от места и направления куда он летит (если с точностью до метра).
Хорошо что QA это поймало до демонстрации, а не после.
2. Есть симулятор "внешнего мира" для нашего проекта. Программа в него в какой-то момент передает команду "поехали". Иногда - много раз, и разные штуки начинают "ехать". В разное время и в разном направлении. И что-то мы смотрим - симулятор наш барахлит когда слишком много команд таких получает. Ну, оптимизацией мы еще не занимались, математика там сложная, все может быть. Сегодня смотрим - один доморощенный гений, навязанный нам заказчиком, писал как раз модуль получающий команду "поехали". Только вот команда эта приходит с указанием "езжай через Х секунд". Что он делает ? Правильно, Sleep. И тред - тю тю. Как раз на эти Х секунд. 10 команд - 10 тредов уложено спать. А их мало, на всех не напасешься ... Что характерно - мне никогда, ни при каких условиях, в голову бы не пришло делать Sleep в production code. А ему пришло ...
3. Вы latitude с longitude местами менять не пробовали ? Шикарный эффект иногда получается.
Модулю параметры дают: lat, long а он их читает long, lat.
На карте потом такая хренотень, что просто ...
4. Попробуйте в ESRI нарисовать эллипс с осями 100 на 200 метров, если ваш геоматериал в GEO.
Найдете как - скажите. (Наш вопрос их поддержке в Штатах уже с месяц ждет ответа, а местный филиал не понял почему идея задавать оси в градусах нам не подходит)
5. Мальчику дали писать численное интегрирование - пересечение эллипса с полигоном с учетом вероятности (эллипс - это двумерное гауссово распределение). Ну, он поделил на клеточки, все аккуратно посчитал. Размер клеточки взял 10 метров - чтобы поточнее получилось. Что сделал первый юзер (QA) на первом запуске : определил полигон - прямоугольник, размером во все государство Израиль. А для каждой клеточки вычисляется функция вероятности (е в степени и т.д.), а клеточек получилось дофига.
Зато очень точно. Правда система это должна считать сотни раз в секунду, но это пофиг. Главное - точность :)
6. Две программы должны устанавливать свой файл шрифтов. Один и тот же. В итоге если запустить их одновременно, то первая работает, а вторая падает, потому что пытается заменить файл шрифтов занятый первой. Совет назвать файлы по разному был с презрением отвергнут, ищется "правильное" решение. Уже с неделю. Всю эту неделю 20 остальных программистов делают восьмерки в воздухе запуская и выходя из этих программ по очереди.
7. Признак хорошего QA: все программисты запускали сценарий с движением вправо-вниз. QA первым делом проверил движение по осям. Так вот - как и следовало ожидать, наша программа движение с запада на восток (слева на право) не поддерживает. Ибо нефиг. На западе хорошо, нечего оттуда рыпаться, поставили - сиди.
8. Получили в наследство библиотеку посылки, парсинга и т.д. для сообщений. Типа получаешь буфер с сети, пихаешь в нее, она выдает аккуратный .НЕТ объект. ну и наоборот - даешь ей объект, она строит буфер.
Сейчас запустили один сценарий где посылаются десятки сообщений в секунду (при максимуме в тысячи) - посылка каждого сообщения занимает 17 мс. При форматировании каждого бита (не байта, бита) происходят десятки виртуальных вызовов, самая часто используемая функция делает деление одного целого числа на другое.
Через 2 часа чертыханий (не моих), и убирания вопиющих фрагментов время уменьшилось до 1.7 мс.
Цель - считанные микросекунды. Выделен месяц для разбора этих Авгиевых конюшен. Предчувствия нехорошие ...