Хвастовство и задача на сообразительность
Jun. 2nd, 2010 01:49 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На материнских платах современных компьютеров есть 2 места под видеокарты. Обычная технология позволяет поставить только две одинаковые видеокарты. Наша контора делает чип, который обеспечивает поддержку двух любых видеокарт. Ведущие производители материнских плат готовят к выпуску платы с нашим чипом, а одна такая плата уже вышла в продажу. Сейчас в Тайване проходит международная компьютерная выставка COMPUTEX. На ней материнская плата с нашим чипом получила награду Best Choice. Это самая престижная награда, которую может получить такой продукт. Контора радуется.
Во время работы над таким продуктом приходится решать много разных задач. Одним трюком я горжусь совершенно по-детски. Вот упрощенные вводные данные. На компьютере запущена какая-то ресурсоемкая программа. В режиме реального времени мы узнаем ключевые параметры этой программы. Мы хотим выводить эти параметры на экран. То есть, программа работает, а где-нибудь в уголке экрана мы видим постоянно меняющиеся числа. Единственная функция, которая есть в нашем распоряжении, может нарисовать прямоугольник любого цвета, любого размера в любом месте экрана. При этом цвет, размер и место могут быть произвольными, а вот количество вызовов этой функции надо минимизировать.
Сперва нарисуем черный прямоугольник, у которого ширина раза в полтора меньше высоты. Поверх него нарисуем белый прямоугольник меньшего размера - чтобы были видны края черного прямоугольника. Так мы получим цифру 0. А если мы нарисуем белый прямоугольник поверх черного так, чтобы от черного осталась только вертикальная полоска, то получим цифру 1. Чтобы получить цифры от 2 до 9, надо поверх черного прямоугольника нарисовать два белых прямоугольника в соответствующих местах (и один - для семерки). В среднем 2.7 прямоугольника на цифру, что довольно мало.
Получается угловато, уродливо, но крайне просто и эффективно. За пару дней был написан и отлажен интерфейс для этого метода. В нашей конторе все отделы пользовались этим методом почти год.
Во время работы над таким продуктом приходится решать много разных задач. Одним трюком я горжусь совершенно по-детски. Вот упрощенные вводные данные. На компьютере запущена какая-то ресурсоемкая программа. В режиме реального времени мы узнаем ключевые параметры этой программы. Мы хотим выводить эти параметры на экран. То есть, программа работает, а где-нибудь в уголке экрана мы видим постоянно меняющиеся числа. Единственная функция, которая есть в нашем распоряжении, может нарисовать прямоугольник любого цвета, любого размера в любом месте экрана. При этом цвет, размер и место могут быть произвольными, а вот количество вызовов этой функции надо минимизировать.
Сперва нарисуем черный прямоугольник, у которого ширина раза в полтора меньше высоты. Поверх него нарисуем белый прямоугольник меньшего размера - чтобы были видны края черного прямоугольника. Так мы получим цифру 0. А если мы нарисуем белый прямоугольник поверх черного так, чтобы от черного осталась только вертикальная полоска, то получим цифру 1. Чтобы получить цифры от 2 до 9, надо поверх черного прямоугольника нарисовать два белых прямоугольника в соответствующих местах (и один - для семерки). В среднем 2.7 прямоугольника на цифру, что довольно мало.
Получается угловато, уродливо, но крайне просто и эффективно. За пару дней был написан и отлажен интерфейс для этого метода. В нашей конторе все отделы пользовались этим методом почти год.
no subject
Date: 2010-06-01 10:51 pm (UTC)(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2010-06-01 11:03 pm (UTC)(no subject)
From:no subject
Date: 2010-06-01 11:53 pm (UTC)У других вендоров ваши чипы скоро появятся?
(no subject)
From:no subject
Date: 2010-06-02 12:32 am (UTC)(no subject)
From:no subject
Date: 2010-06-02 01:36 am (UTC)В принципе, для 2, 5 и 9 тоже можно одним обойтись
(no subject)
From:no subject
Date: 2010-06-02 01:45 am (UTC)(no subject)
From:no subject
Date: 2010-06-02 06:19 am (UTC)(no subject)
From:no subject
Date: 2010-06-02 06:40 am (UTC)-- Сперва нарисуем черный прямоугольник, у которого ширина раза в полтора меньше высоты. Поверх него нарисуем белый прямоугольник меньшего размера - чтобы были видны края черного прямоугольника. Так мы получим цифру 0.
А что происходит, если в этот момент фон экрана - или хотя бы того куска, на котором ты рисуешь - черный? Твой внешний прямоугольник просто сольется с фоном.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2010-06-02 08:01 am (UTC)а как называется технология и чип?
(no subject)
From:no subject
Date: 2010-06-02 08:07 am (UTC)(no subject)
From:no subject
Date: 2010-06-02 08:16 am (UTC)Поздравляю!
(no subject)
From:no subject
Date: 2010-06-02 10:31 am (UTC)(no subject)
From:no subject
Date: 2010-06-02 12:58 pm (UTC)Просто вспоминается, скажем, макбук про, где 9400 и 9600 стоят одновременно и можно между ними переключаться.
(no subject)
From:no subject
Date: 2010-06-02 08:35 pm (UTC)(no subject)
From:no subject
Date: 2010-06-04 12:51 am (UTC)Пришлось заняться определением одинаково раскрашенных областей, и посылать по команде на область (там была такая - "закрасить многоугольник, заданный последовательностью вершин"). Ну и упорядочивать, чтобы, если один регион лежит внутри другого, то сначала нарисовать внешний - тогда можно было не заморачиваться со связностью.
Помогло, конечно, то что тот Тектроникс в принципе мог отображать небольшое число цветов - не то 7, не то 15. А иначе бы такой номер не прошел.
(no subject)
From: