Саша ([info]dumalkin) wrote,
@ 2008-12-18 00:08:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Current mood: frustrated
Entry tags:work

Из жизни зоопарка
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 мс.
Цель - считанные микросекунды. Выделен месяц для разбора этих Авгиевых конюшен. Предчувствия нехорошие ...




(5 comments) - (Post a new comment)


[info]dimrub
2008-12-17 10:47 pm UTC (link)
Весело :)

(Reply to this)


[info]henic
2008-12-21 03:53 pm UTC (link)
Зато не скучно. :)

(Reply to this)

Все уже украдено до нас
[info]beobahter
2009-01-27 09:03 pm UTC (link)
Я конечно понимаю, что писать функции для трансформации координат и численного интегрирования интересно, но зачем? Ведь есть полно платных и бесплатных библиотек, которые это делают лучше и быстрее.

(Reply to this) (Thread)

Re: Все уже украдено до нас
[info]dumalkin
2009-01-27 09:23 pm UTC (link)
Мы не пишем "функции для трансформации координат", а их используем.
Просто часто людей не понимающих что такое георасчеты так и подмывает сделать все самим - и тогда как раз и получается пример с самолетом.
Кроме того, есть масса приложений где идея использовать для расчетов нечто скачанное с сети вызывет нездоровое хихиканье.

Как вы будете доказывать что расчеты корректные ? И главное - кто возьмет на себя ответственность утвердить ваши доказательства :) ?

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

(Reply to this) (Parent)


[info]arkadydubovsky
2009-03-17 09:16 am UTC (link)
Великолепно! А вы еще спрашиваете, чего это стартап драйверщиков в ЖЖ ищет? У меня тут программер реализовывал сложный алгоритм, существенной частью которого были сортировки больших массивов. Так он в качестве контейнеров выбрал связный список (ну нравился он ему) А когда не хватило метода обращения по индексу (для сортировки) он просто добавил этот метод, отсчитывая элементы от начала списка. А мы потом удивлялись, такой хороший алгоритм, и как медленно работает на больших массивах :(

(Reply to this)


(5 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…