что такое crt в играх
Почему 20-летний CRT-монитор лучше современного 4K LCD-дисплея?
Есть и ещё один вариант. Можно рискнуть, отправиться на eBay и потратить похожую сумму на CRT-монитор, выпущенный два десятка лет назад.
Последний вариант, на первый взгляд, может показаться противоречащим здравому смыслу. Но, на самом деле, не всё так просто. В кругах любителей компьютерных игр есть люди, которые уверены в том, что мониторы с электронно-лучевой трубкой отлично подходят для игр. Такие мониторы, по мнению этих людей, быстрее реагируют на действия игрока, а изображение на них смазывается меньше, чем на LCD-дисплеях. Этих людей совершенно не пугает то, что старые мониторы, в сравнении с новыми, имеют более низкое разрешение, меньшие размеры экранов, то, что они занимают очень много места на рабочем столе. Спор приверженцев CRT и LCD идёт уже много лет. Но недавно к этой теме было привлечено внимание проекта Digital Foundry, выпустившего видео о сильных сторонах CRT-мониторов.
Создатели современных дорогих игровых LCD-мониторов очень стараются вновь достичь того, что уже достигнуто CRT-мониторами. Это — низкая задержка вывода, высокие частоты обновления экрана, мгновенная реакция на действия пользователя. Но, как бы хороши ни были многие из этих новых дисплеев, ни один из них, даже самый лучший, не способен, в сфере компьютерных игр, обойти хороший старомодный CRT-монитор.
Взамен тот, кто купил ЭЛТ-монитор, получит практически незаметную задержку вывода, отсутствие размытия движущихся объектов и, возможно, приятное чувство того, что спас престарелый монитор от кладбища электронных отходов. Пожалуй, PC-геймеры уже бывали в ситуациях, когда получали за свои деньги меньше, чем всё то, что способен дать хороший CRT-монитор.
Сильные стороны CRT-гейминга
Экран CRT-монитора покрыт миллионами люминофорных точек. Каждый пиксель, формируемый монитором, состоит из трёх цветных точек — красной, зелёной и синей. Для того чтобы точки, из которых состоят пиксели, испускали свет, то есть — фотоны, по ним проходятся потоком электронов, выходящим из электронной пушки. Чем интенсивнее поток электронов — тем ярче изображение.
На самом деле, если серьёзно разбираться с технологией формирования изображений на CRT-мониторах, то тут много о чём можно поразмыслить, но если выделить из всего этого то, что интересует нас больше всего, то окажется, что люминофор мгновенно испускает фотоны под воздействием электронов. В CRT-мониторах, конечно, происходят процессы, способные вызывать задержки вывода изображения. Например, определённое время нужно на буферизацию кадра, и на то, чтобы электронный луч прошёлся бы по внутренней поверхности экрана сверху донизу. Но эти задержки измеряются милисекундами. Поэтому, когда игрок нажимает на клавишу мыши или клавиатуры, результат его действий мгновенно виден на экране.
Бэрри Янг, который уже давно занимается изучением CRT-дисплеев и является CEO в OLED Association, называет это «таинством люминофора». «Люминофор, когда на него попадает электрон, мгновенно испускает фотон», — говорит Бэрри Янг.
А вот LCD-дисплеи, если сравнить принципы их работы с превращением электронов в фотоны, вынуждены физически перемещать жидкие кристаллы, что требует гораздо большего времени и приводит к задержке вывода. Кроме того, из-за этого движущиеся объекты выглядят смазанными.
Реймонд Сонейра, президент компании DisplayMate, занимающейся исследованием дисплеев, обнаружил, что подобный недостаток характерен даже для мониторов, частота обновления экранов которых выше, чем обычные 60 Гц. Это может объяснить слова Джона Линнемана из Digital Foundry, говорящего о том, что работать с CRT-монитором гораздо приятнее, чем даже с лучшими представителями LCD-мониторов.
«Проблема тут в том, что мы сравниваем процесс превращения электрона в фотон и физические изменения в жидких кристаллах», — говорит Бэрри Янг. «Чем быстрее изображение движется по экрану — тем тяжелее LCD-дисплею успевать за этим движением», — продолжает он.
Справедливости ради стоит отметить, что производители LCD-дисплеев сделали очень многое для того чтобы закрыть разрыв между LCD- и CRT-мониторами. Бэрри Янг указывает на то, что жидкие кристаллы, используемые в современных мониторах, движутся быстрее, чем раньше, и на то, что задержки и размытие изображений можно уменьшить путём буферизации дополнительных кадров, или путём вставки в видеопоток особых, специально сгенерированных кадров.
Он, как CEO OLED Association, также утверждает, что OLED-дисплеи дают такое же время отклика, что и CRT-мониторы, так как в них тоже используется эффект превращения электронов в фотоны, но эффект этот достигается благодаря воздействию электрического тока на органические соединения. Собственно, поэтому аббревиатура OLED и расшифровывается как Organic Light Emitting Diode (органический светодиод).
Бэрри Янг говорит, что между OLED-дисплеями и CRT-мониторами нет никакой разницы.
Поиск святого Грааля CRT-мониторов
Если вы уверились в том, что CRT-монитор — это именно то, что нужно для компьютерных игр, вам ещё надо будет немало постараться для того чтобы найти хороший монитор.
Главное достоинство GDM-FW900, по словам Тейлора, заключается в том, что этот монитор имеет соотношение сторон экрана 16:10. То есть — его экран гораздо шире, чем у большинства CRT-мониторов, у которых соотношение сторон экрана обычно составляет 4:3. Хотя в современных LCD-мониторах чаще встречается соотношение сторон экрана 16:9, большинство игр поддерживают соотношение 16:10, а значит — способны заполнить весь экран FW900. Максимальное разрешение, поддерживаемое этим монитором, составляет 2304×1440 при частоте обновления экрана в 80 Гц. Это очень хорошо даже по современным стандартам. А если снизить разрешение в два раза, то монитор способен выдавать частоту обновления экрана в 160 Гц, что очень хорошо влияет на плавность отображения движущихся объектов.
Тейлор говорит, что этот монитор способен творить удивительные вещи и при этом подходит для работы с современными приложениями, так как имеет соотношение сторон экрана 16:10.
По словам Тейлора, мониторы, идентичные FW900, производились другими компаниями и имели другие названия. Среди них — HP A7217A, SGI GDM-FW9011 и Sun GDM-FW9010. Но найти их так же сложно, как и FW900. Существует и несколько мониторов с соотношением сторон экрана 16:9. Это, например, InterView 28HD96 (знаменитый тем, что Джон Кармак работал за ним во время создания Quake) и 24HD96, но встречаются они ещё реже.
Если вам всё же удастся найти такой монитор, то вам понадобится ещё и видеокарта, поддерживающая аналоговый выход. Например — Nvidia 900 серии или AMD 300 серии. В качестве альтернативного решения может выступить цифро-аналоговый конвертер видеосигнала. Покупая старый монитор нужно быть готовым к тому, что долго он не прослужит. По мере того, как люминофор в электронно-лучевой трубке стареет, он теряет свои свойства. И это — далеко не единственная неприятность, которая может случиться с CRT-монитором. Ремонт такого монитора может оказаться сложным и опасным делом, говорит Тейлор, а мастерские по ремонту таких устройств практически полностью исчезли.
По словам Тейлора, CRT-монитор — это такой прибор, которым нельзя пользоваться вечно. Это понимают те, кто ищет такие мониторы, так как это — очень старые устройства, сильно подверженные разного рода проблемам и нуждающиеся в обслуживании.
Но лучше, чтобы эти CRT-мониторы попали бы к людям, которые хотят на них играть, а не лежали бы кучами на специальных складах, ожидая переработки, которая никогда не начнётся.
«Не существует механизмов, по меньшей мере, в США, направленных на переработку подобной техники. Поэтому я очень рад тому, что люди пользуются CRT-мониторами, экспериментируют с ними. Это — куда лучше, чем если бы такие мониторы превратились бы в куски стекла и металла, разбросанные по улицам», — говорит Тейлор. По его словам, в использовании таких мониторов есть некий налёт элитарности, стремления к чему-то «самому лучшему». Но он считает, что по-настоящему важно то, что люди пользуются такими мониторами, и то, что людям это нравится.
Боремся с утечками памяти (C++ CRT)
Утечка памяти — довольно серьезная и опасная проблема. Быть может, пользователь и не заметит однократной утечки каких-нибудь 32Кб памяти (а ведь это целые 5% от 640Кб, которых «хватит всем»), но постоянно теряя сложные иерархические структуры или массивы размером больше INT_MAX (которые мы так любим создавать на 64-битной архитектуре) мы обречем его на страдания, а наш продукт на провал.
Не допускать ситуации вроде бы и не трудно — воспользуемся правилом «класть на место всё что взяли», но на практике это сильно осложняется человеческим фактором (банальная невнимательность), хитростью архитектуры и нелинейным порядком выполнения операторов, например, из-за применения исключений.
А можно было бы просто «отдаться» автоматическому сборщику мусора, ценой потери производительности (и это не обязательно Managed C++, для Native C++ / C есть библиотеки сборки мусора, вот, например).
Шаг 1. Включение учета утечек
#ifdef _DEBUG
#include
#define _CRTDBG_MAP_ALLOC
#endif
Теперь при выделении памяти через new или malloc() данные оборачиваются в следующую структуру (но на самом деле я чуть-чуть лукавлю, поле отвечающее за data не соответствует синтаксису struct и сама «структура» определена где-то внутри CRT и её описание программисту не доступно):
typedef struct _CrtMemBlockHeader
<
struct _CrtMemBlockHeader * pBlockHeaderNext;
struct _CrtMemBlockHeader * pBlockHeaderPrev;
char * szFileName;
int nLine;
size_t nDataSize;
int nBlackUse;
long lRequest;
unsigned char gap[nNoMansLandSize];
unsigned char data[nDataSize];
unsigned char anotherGap[nNoMansLandSize];
> _CrtMemBlockHeader;
Шаг 2. Перечисление утечек
Нужна функция, которая пробежится по списку CrtMemBlockHeader ‘ов и выдаст нам информацию о проблемных местах:
Тогда в окне Debug Output мы увидим следующую информацию:
int _tmain( int argc, _TCHAR* argv[])
<
_CrtMemState _ms;
_CrtMemCheckpoint(&_ms);
// some logic goes here.
Мы записываем в специальную структуру начальное (текущее на момент входа в main) состояние памяти ( _CrtMemCheckpoint ), а перед завершением работы приложения выводим все оставшиеся объекты в памяти ( _CrtMemDumpAllObjectsSince ), созданные после момента _ms — они-то и есть «утечки». Теперь информация корректна, позаботимся об её удобстве.
Шаг 3. Представление результатов
_CrtSetReportMode( _CRT_WARN, _CRTDBG_MODE_FILE );
_CrtSetReportFile( _CRT_WARN, _CRTDBG_FILE_STDOUT );
Теперь вывод всех предупреждений (а таковым является любой вывод _CrtMemDumpAllObjectsSince ) отправится прямиком на stdout. Вторым параметром функции _CrtSetReportFile можно поставить и реальный хендл файла.
Почему не выводятся имена файлов и строки, где произошло выделение памяти? Так сложилось, что по версию Microsoft Visual C++ 6.0 за эту информацию отвечала следующее переопределение функции new в хедере crtdbg.h :
#define new new ( _NORMAL_BLOCK, __FILE__, __LINE__)
Котрое весьма желательно вынести в какой-нибудь общий заголовочный файл (подключаемый обязательно после crtdbg.h ). Проблемы возникнут, если new уже был переопределен. Хотя, как видится мне, какое-либо разумное переопределение new не будет использовать CRT (иначе можно было бы использовать технику hook), и схема, в этом случае, вообще будет не применима, ну и ладно.
В общем и целом теперь получили что хотели: вот пример вывода, но, думаю, и так очевидно, что там должно быть.
Час расплаты
Конечно, на организацию и поддержку CRT Internals структур требуется время и дополнительная память. Насколько же много?
UPD: Все что ниже — справедливо только для Win32 (тестировалось на Vista SP1).
Создаем 10 миллионов int с помощью new (40Mb памяти теоретически):
Debug CRT | 3 секуды |
Release | 1 секунда |
Цифра в
Ну а теперь 128 тысяч int[256] через new int[256] (128Mb памяти теоретически):
Debug CRT | 172 мс |
Release | 60 мс |
Результаты предсказуемые и вполне удовлетворительные. Отношение скорости 1:3 подтвердилось и на данных другого размера, в том числе при смешивании различных данных и частичном освобождении памяти. Но и без операций с динамической памятью Debug код работает в несколько раз медленнее Release!
Вывод
Ну вот, пожалуй и всё. Разве что исходничек для воссоздания целостной картины.
UPD: Метод не собирается конкурировать с внешними анализаторами, т.к. цели несколько разные, но упоминания о стоящих тулсах очень приветствуются (только, пожалуйста, без повторов).
Что такое Си Runtime Library?
Ну в гугле в википедии что ли забанили? CRT/RTL.
Свою CRT написать можно, но это требуется довольно редко и для весьма конкретных и специфических случаев.
Если интересно посмотреть на конкретную реализацию CRT что стоит в студии, то она поставляется вместе со студией в виде исходных текстов, хоть обсмотрись.
Нет, не забанили. Я там почти ничего не понял, слишком мало информации, слишком непонятно. Так же как и на других ресурсах англо и русскоязычных.
Си это не язык Java, Java файл заработает и на винде и на линуске потому что для каждой Ос будет своя JVM, в которой запускается программа.
RoflanDaniil, компилятор не знает и не должен знать, что делает функция, даже если она из системной библиотеки, он должен знать только о том, как её вызывать (какого типа аргументы, в каком порядке передавать…).
Для винды malloc и fopen всегда одинаковы, это одни и те же системные вызовы.
RoflanDaniil, malloc и fopen и есть функции из стандартной библиотеки, которые внутри себя дёргают системные вызовы. Но внешне и malloc, и fopen одинаковы в какой бы OS не компилировался исходный текст программы. Поэтому
одинаково хорошо скомпилируется и в Linux, и в Windows, и в QNX, и ещё чёрт знает где, а (упрощённо):
будет компилироваться только в Windows.
И всю библиотеку с собой никто не таскает, таскают только те функции, которые используются в программе. Например если в программе используется только malloc, то код scanf в программу не попадёт.
А CRT помимо того что содержит в себе все функции стандартной библиотеки так же выполняет начальную настройку для дальнейшей благополучной работы этих функций из стандартной библиотеки: устанавливает stack, устанавливает heap, обнуляет статические переменные, регистрирует необходимые обработчики исключений и т.д.
Как уже правильно советовал Illia Nezhyhai про glibc надо почитать. Ну или изучить исходники от Visual Studio как я уже говорил. Потому что рассказывать об этом долго и нудно, лучше уж будет самому один раз увидеть что это такое.
Вы можете не использовать стандартную библиотеку в принципе (отключив ее опциями компилятора) и работать на прямую с ОС, но это накладывает много ограничений и вы фактически остаетесь с кастрированным вариантом ЯП, т.к. например в С++ даже стандартный new/delete, на сколько я знаю, реализованы в стандартной библиотеке и прямого аналога в ОС нет. Обычно этим никто не заморачивается из-за возникающих проблем, решение которых заметно увеличит время реализации проекта, разве что вам необходимо сделать исполняемый файл минимального размера, максимально быстро стартующий и без зависимостей.
Дефибрилляторы CRT ( CRT-D ) также включают в себя дополнительную функцию имплантируемого кардиовертера-дефибриллятора (ICD) для быстрого прекращения аномально быстрого, опасного для жизни сердечного ритма. CRT и CRT-D становятся все более важными терапевтическими вариантами для пациентов с умеренной и тяжелой сердечной недостаточностью. ЭЛТ только с кардиостимулятором часто называют «ЭЛТ-П», чтобы отличить его от ЭЛТ с дефибриллятором (ЭЛТ-D).
СОДЕРЖАНИЕ
Показания
CRT требует размещения электрического устройства для бивентрикулярной стимуляции наряду с размещением (по крайней мере) двух электродов для стимуляции, чтобы обеспечить стабильную стимуляцию левого и правого желудочков. Для всех элементов первой стадией процесса является местная анестезия, за которой следует разрез, чтобы обеспечить доступ из соответствующей вены. Отсюда можно вставить провода и устройство.
Размещение отведения правого желудочка
Размещение электрода левого желудочка
После получения флебограммы катетер с множественной доставкой используется для направления отведения из выбранной входной вены в правое предсердие, через коронарный синус и в соответствующую сердечную вену.
Размещение электрода в левом желудочке является наиболее сложным и потенциально опасным элементом операции из-за значительной вариабельности структуры коронарных вен. Изменения в структуре сердца, жировые отложения, клапаны и естественные изменения вызывают дополнительные осложнения в процессе катетеризации.
Размещение устройства
Осложнения
Основные осложнения включают:
Технология
В нескольких исследовательских работах были предложены программные платформы для планирования и управления имплантацией устройств с ЭЛТ. Это исследование предлагает использовать предоперационные изображения для характеристики активации ткани и левого желудочка, чтобы определить потенциальные целевые области для развертывания отведений CRT.
Про PKI «на пальцах» за 10 минут
Предложил коллегам провести внутреннюю мини-лекцию по сабжу — идея зашла. Сел писать план лекции и… чот психанул — в итоге очнулся, дописывая небольшой гайд. Подумал, что будет полезно добавить сюда что-то для быстрого понимания, что такое PKI, зачем она нужна и как работает, так как пока готовился, чтобы освежить память, искал информацию в том числе на полюбившемся «Хабрахабре», но статей в таком формате не нашел.
Пишу на примере наших повседневных задач, которые знакомы многим: беспарольный доступ к серверам OpenVPN и защита доступа к ресурсам с помощью HTTPS.
Без теории не обойтись
PKI (Public Key Infrastructure, инфраструктура открытых ключей) — это про безопасность. Подразумевается, что у каждой сущности в инфраструктуре есть свой ключ, которым она однозначно идентифицируется. То есть, если ключ украден, пострадавшей сущностью может представиться укравший. PKI нужна для того, чтобы оперативно минимизировать последствия такой кражи. Ключ представлен двумя частями: публичной и приватной.
Аналог — это RSA ключи для SSH, но инфраструктурой их назвать сложно, так как отсутствует централизованный механизм управления ими. Также разница в том, что публичная часть ключа в паре ключей для SSH неизменна, а сертификат (публичную часть ключа участника PKI) можно перевыпустить в любой момент.
В PKI существует один (на самом деле, должно быть минимум два) или несколько Certification Authority — центров сертификации (удостоверяющих центров), отдающих публичные части своих ключей клиентам, которым выдают подписанные ими сертификаты. Таким образом, участники инфраструктуры «понимают», кто ими управляет, и действителен ли сертификат, выданный им или их «товарищам», в настоящий момент времени (одним из важнейших атрибутов сертификатов является срок их действия). Либо же сервер, у которого есть публичная часть ключа CA инфраструктуры, в которой он и его клиенты работают, понимает, что к нему пришел клиент с действительным сертификатом, и разрешает ему что-то, или запрещает в противном случае.
OpenVPN: как это бывает
На самом деле во многих компаниях на этот случай уже есть «PKI» и у него есть имя, потому что это кто-то из сотрудников. Назовем такого человека, к примеру, Полуэкт (с) и расскажем, как обычно это работает, а потом я расскажу, как это должно быть в идеале.
При появлении в компании нового сотрудника Полуэкт создает и присылает ему архив, в котором, помимо конфигурации собственно OpenVPN клиента, находятся файлы (на примере сотрудника Иванова А.А.):
В компании Acme все эти файлы генерирует Полуэкт…
А теперь как должно быть
На моем примере, упрощенно:
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
(пароль в конце лучше не указывать, а то придется его вводить каждый раз при подключении, а VPN у нас по сертификатам как раз, чтобы этого не было; тем более у нас в Pixonic есть OTP от Google);
Нужна ли вам эта фишка — вопрос для обсуждения. Соответственно, то, как ее внедрить, пока что выходит за рамки этой статьи.
И про срок действия клиентского сертификата: если предположить, что я устроился в Pixonic по временному контракту на 3 месяца, и мы его не продлили, то в описанной ситуации мой доступ к VPN автоматически отключится через 90 дней с момента выпуска сертификата. Чего не случится с SSH-доступом, если коллеги забудут отключить аккаунт во FreeIPA или удалить строчку из authorized_keys руками. C — сесуриту.
Теперь по Борщеву HTTPS
Предположим, вы хотите «включить SSL» для вашего сайта, чтобы у посетителей появился красивый замочек в браузере. Тут, собственно, все то же самое, но с некоторыми нюансами: