Надо иногда выхватывать из памяти куски жизни, жадно их ощупывать, и опускать на хранение в колодец ЖЖ.
Есть лжеюзеры, у которых очень хорошо это получается. А у меня не получается, потому что мне всегда это кажется очень искусственным занятием. Но иногда бывает наитие, импульс, случайное воспоминание - и тогда можно попробовать этим воспользоваться. Перебить искусственность нарочитой импульсивностью выбора.
Когда-то (в совсем другой жизни) у меня было хобби: я обожал решать сложные графические проблемы в ассемблере под x86.
То было время, когда быструю графику под x86 кроме как в ассемблере и невозможно было делать. Время, если считать по главным ориентирам, между Wolfenstein-ом и первым Doom-ом. Кому-то это описание, наверное, ничего не говорит, а кого-то сразу ориентирует.
На тогда же примерно пришёлся расцвет так называемой demo scene. Одни фанаты месяцами работали над сложнейшими трёхмерными алгоритмами и изумительными эффектами, а другие фанаты сотни раз это прокручивали и тащились. Конечно, как и тогда всем было понятно, основная сложность была всё же не в том, чтобы это сделать, а в том, чтобы это сделать быстро. Так, чтобы побежало на стареньком триста-восемьдесят-шестом, или на новеньком 486DX-2.
Я никогда не работал всерьёз над демами, и не пытался присоединиться ни к какой команде. Это казалось мне непозволительно экстравагантной тратой времени: слишком интенсивно, слишком много. Всё-таки это было всего лишь хобби... не более того.
Наверное, зенитом этого хобби следует считать доведенный мной до вполне рабочего состояния движок, полностью соответствовший Вульфенштейновскому по возможностям и скорости работы. Он действительно бежал быстро на моём 386-м. Я безмерно гордился им. Правда, именно тогда же и появился первый Doom ;) Движок мой так никуда и не попал, да я и не стремился никуда его пристроить. Интересно, сохранился ли где-то этот код? Вот бы его отыскать. Ностальгия!
Сейчас я подумаю и, наверное, даже пойму, к чему я всё это начал вспоминать.
Да. Мне нравилось учавствовать в неформальных соревнованиях, которые были тогда популярны. Например: написать самый быстрый алгоритм, к-й рисует прямую линию из одной заданной точки на экране в другую. Естественно, такой алгоритм лежит в основе практически всей остальной графики, поэтому его скорость критична. Счёт шёл не на секунды и не на миллисекунды, а на процессорные такты, т.е. вот просто люди знали, какие инструкции сколько тактов занимали, и стремились общее количество тактов минимизировать. И я тоже знал, правда всегда нетвёрдо, и часто подглядывал (очень характерная деталь, now that I think about it). Мне сейчас трудно в это поверить.
Конечно, далеко не все ухищрения касались именно утилитарно-процессорных штучек типа того, как сэкономить регистр. Сами алгоритмы тоже обрабатывались и перерабатывались. Например, самый очевидный алгоритм рисования прямой использует плавающую точку - слишком медленно! Базисный алгоритм, использующий fixed-point и целочисленные итерации (смылось у меня из памяти его название) все мучили и улучшали, как могли. И я тоже.
Но однажды мы с приятелем решили устроить соревнование между собой (к которому потом присоединились ещё несколько человек) на самый маленький по размеру, в байтах, алгоритм рисования прямой линии.
Конечно, занятие это совершенно бесполезное. Если уж пишешь на ассемблере, насчёт размера кода можно не беспокоиться. Всё равно будет очень маленьким. Из двух основных ограничений: скорость и память - важно здесь только первое.
Но именно непрактичность, анти-практичность этого задания очень мне импонировала. Я получил от него намного больше радости и удовольствия, чем от всех других. В конце концов я написал самую маленькую функцию и победил всех остальных... вторая по размеру после моей функция была длиннее чуть ли не на пять байтов, если я правильно помню (вряд ли). Моя функция использовала совершенно нестандартный алгоритм, к-й я сам придумал и отладил. Все возможные трюки с использованием редких и непопулярных, но коротких по размеру инструкций были мной отысканы и использованы. Я не дошёл до уровня прыжка в середину многобайтной инструкции только потому, что функция была слишком мала и этот приём не оправдывал себя.
Она рисовала прямую очень медленно по сравнению с другими функциями, зато она была короче всех. Эта совершенная анти-практичность конечной цели грела мне душу. Совершенная, но не абсолютная. Конечная цель осмыслена (функция всё же рисует прямую линию, а не случайные точки). Значит, наверное, не так, а по-другому: анти-практичность не конечной цели, а критерия, по которому её воплощение оценивается.
Теперь я знаю, почему всё это вспомнил: именно эта идея анти-практичности. Откуда она? Что она? Как она?
И не она ли грела душу Харди, когда он заявил, что теория чисел никогда не будет иметь никаких практический применений? Бедняга Харди, наверное, переворачивается в гробу всякий раз, когда кто-то цитирует эту фразу и, хихикая, упоминает современную криптографию.
Всё.
Есть лжеюзеры, у которых очень хорошо это получается. А у меня не получается, потому что мне всегда это кажется очень искусственным занятием. Но иногда бывает наитие, импульс, случайное воспоминание - и тогда можно попробовать этим воспользоваться. Перебить искусственность нарочитой импульсивностью выбора.
Когда-то (в совсем другой жизни) у меня было хобби: я обожал решать сложные графические проблемы в ассемблере под x86.
То было время, когда быструю графику под x86 кроме как в ассемблере и невозможно было делать. Время, если считать по главным ориентирам, между Wolfenstein-ом и первым Doom-ом. Кому-то это описание, наверное, ничего не говорит, а кого-то сразу ориентирует.
На тогда же примерно пришёлся расцвет так называемой demo scene. Одни фанаты месяцами работали над сложнейшими трёхмерными алгоритмами и изумительными эффектами, а другие фанаты сотни раз это прокручивали и тащились. Конечно, как и тогда всем было понятно, основная сложность была всё же не в том, чтобы это сделать, а в том, чтобы это сделать быстро. Так, чтобы побежало на стареньком триста-восемьдесят-шестом, или на новеньком 486DX-2.
Я никогда не работал всерьёз над демами, и не пытался присоединиться ни к какой команде. Это казалось мне непозволительно экстравагантной тратой времени: слишком интенсивно, слишком много. Всё-таки это было всего лишь хобби... не более того.
Наверное, зенитом этого хобби следует считать доведенный мной до вполне рабочего состояния движок, полностью соответствовший Вульфенштейновскому по возможностям и скорости работы. Он действительно бежал быстро на моём 386-м. Я безмерно гордился им. Правда, именно тогда же и появился первый Doom ;) Движок мой так никуда и не попал, да я и не стремился никуда его пристроить. Интересно, сохранился ли где-то этот код? Вот бы его отыскать. Ностальгия!
Сейчас я подумаю и, наверное, даже пойму, к чему я всё это начал вспоминать.
Да. Мне нравилось учавствовать в неформальных соревнованиях, которые были тогда популярны. Например: написать самый быстрый алгоритм, к-й рисует прямую линию из одной заданной точки на экране в другую. Естественно, такой алгоритм лежит в основе практически всей остальной графики, поэтому его скорость критична. Счёт шёл не на секунды и не на миллисекунды, а на процессорные такты, т.е. вот просто люди знали, какие инструкции сколько тактов занимали, и стремились общее количество тактов минимизировать. И я тоже знал, правда всегда нетвёрдо, и часто подглядывал (очень характерная деталь, now that I think about it). Мне сейчас трудно в это поверить.
Конечно, далеко не все ухищрения касались именно утилитарно-процессорных штучек типа того, как сэкономить регистр. Сами алгоритмы тоже обрабатывались и перерабатывались. Например, самый очевидный алгоритм рисования прямой использует плавающую точку - слишком медленно! Базисный алгоритм, использующий fixed-point и целочисленные итерации (смылось у меня из памяти его название) все мучили и улучшали, как могли. И я тоже.
Но однажды мы с приятелем решили устроить соревнование между собой (к которому потом присоединились ещё несколько человек) на самый маленький по размеру, в байтах, алгоритм рисования прямой линии.
Конечно, занятие это совершенно бесполезное. Если уж пишешь на ассемблере, насчёт размера кода можно не беспокоиться. Всё равно будет очень маленьким. Из двух основных ограничений: скорость и память - важно здесь только первое.
Но именно непрактичность, анти-практичность этого задания очень мне импонировала. Я получил от него намного больше радости и удовольствия, чем от всех других. В конце концов я написал самую маленькую функцию и победил всех остальных... вторая по размеру после моей функция была длиннее чуть ли не на пять байтов, если я правильно помню (вряд ли). Моя функция использовала совершенно нестандартный алгоритм, к-й я сам придумал и отладил. Все возможные трюки с использованием редких и непопулярных, но коротких по размеру инструкций были мной отысканы и использованы. Я не дошёл до уровня прыжка в середину многобайтной инструкции только потому, что функция была слишком мала и этот приём не оправдывал себя.
Она рисовала прямую очень медленно по сравнению с другими функциями, зато она была короче всех. Эта совершенная анти-практичность конечной цели грела мне душу. Совершенная, но не абсолютная. Конечная цель осмыслена (функция всё же рисует прямую линию, а не случайные точки). Значит, наверное, не так, а по-другому: анти-практичность не конечной цели, а критерия, по которому её воплощение оценивается.
Теперь я знаю, почему всё это вспомнил: именно эта идея анти-практичности. Откуда она? Что она? Как она?
И не она ли грела душу Харди, когда он заявил, что теория чисел никогда не будет иметь никаких практический применений? Бедняга Харди, наверное, переворачивается в гробу всякий раз, когда кто-то цитирует эту фразу и, хихикая, упоминает современную криптографию.
Всё.
no subject
Date: 2001-12-27 12:03 am (UTC)no subject
Date: 2001-12-27 12:13 am (UTC)no subject
Ãäå-òî â ñåòè åñòü ñáîðêà èç òàêèõ ïðîãðàìì íà ñîòíÿõ ÿçûêîâ.
Re:
Date: 2001-12-27 12:27 am (UTC)À óæå âçðîñëûì ïî ïðèêîëó ñäåëàë ïðîãðàììó ïîèñêà ïîõîæèõ áëîêîâ â áîëüøèõ òåêñòàõ. È êîìó íóæíà âñÿ åå îïòèìèçàöèÿ, åñëè íåò îãðàíè÷åíèÿ íà 640K îïåðàòèâêè... À âåäü óõëîïàë ñ ïåðåðûâàìè ïàðó ëåò...
no subject
Date: 2001-12-27 12:34 am (UTC)no subject
Date: 2001-12-27 11:09 am (UTC)Àëãîðèòì Áðåçåíõåìà ýòî íàçûâàåòñÿ
È ÿ î÷åíü ðàññòðàèâàëñÿ, ÷òî íåëüçÿ íàïðÿìóþ ïîðòèðîâàòü ýòó ðåàëèçàöèþ íà 8086, ïîòîìó ÷òî òà ðåàëèçàöèÿ èñïîëüçîâàëà âñå ðåãèñòðû è îäíó ïåðåìåííóþ â ïàìÿòè, â ñòåêå, àäðåñóÿ åå îòíîñèòåëüíî SP.
Íà 8086 îò SP íå ïîàäðåñóåøüñÿ - åñëè íóæíà ïåðåìåííàÿ â ñòåêå, íàäî çàíèìàòü åùå BP. Ïëþñ ðåãèñòð óõîäèò íà àäðåñ â âèäåîáóôåðå (è ÄÂÊ, è ÖÄÐ èìåëè âìåñòî âèäåîáóôåðà ïî äâà ïîðòà - àäðåñ è áàéò ïî ýòîìó àäðåñó). È ÿ î÷åíü îò ýòîãî ïåðåæèâàë è ìå÷òàë î ìîòîðîëàõ è VAX, ó êîòîðûõ øåñòíàäöàòü ðåãèñòðîâ.
À ïîòîì, òîæå, ïî ìîåìó íà ñïîð, ïèñàëè áûñòðóþ ðèñîâàëêó, è ÿ ïîíÿë, ÷òî åæåëè êàæäàÿ èç ïðîåêöèé ëèíèè ìåíåå 256 ïèêñåëîâ, òî âñå ïåðåìåííûå çàìå÷àòåëüíûì îáðàçîì âëåçàþò â ïîëîâèíêè ðåãèñòðîâ (AH/AL è òàê äàëåå). Ïëþñ ìû ïðèìåðíî â òî æå âðåìÿ (åùå äî Wolfenshtain) îñîçíàëè ïðåèìóùåñòâà îò èñïîëüçîâàíèÿ êàäðîâîãî ãàñÿùåãî èìïóëüñà - êñòàòè, êàê ñ ýòèì ó ñîâðåìåííûõ ãðàôè÷åñêèõ óñêîðèòåëåé?
Re: Àëãîðèòì Áðåçåíõåìà ýòî íàçûâàåòñÿ
Date: 2001-12-27 01:17 am (UTC)Î äà. Î äà ;)
À åù¸ ó ìåíÿ áûëà ñàìî-ìîäèôèöèðóùàÿ èìïëåìåíòàöèÿ Áðåçåíõåìà (ñïàñèáî çà íàçâàíèå). Ïîäðîáíîñòåé íå ïîìíþ íè ôèãà, íî øòóêà òàì áûëà â òîì, ÷òî îíà ñíà÷àëà âû÷èñëÿëà øàãè ïî ãîðèçîíòàëè è âåðòèêàëè, à ïîòîì âñòàâëÿëà èõ ïðÿìî â ñâîé êîä äàëüøå - ýêîíîìÿ îáðàùåíèÿ ê ïàìÿòè âíóòðè öèêëà. Ýòî áûë êîñòÿê, à ïîòîì îí åù¸ âñÿêèìè óõèùðåíèÿìè îáðîñ.
Ïëþñ ìû ïðèìåðíî â òî æå âðåìÿ (åùå äî Wolfenshtain) îñîçíàëè ïðåèìóùåñòâà îò èñïîëüçîâàíèÿ êàäðîâîãî ãàñÿùåãî èìïóëüñà - êñòàòè, êàê ñ ýòèì ó ñîâðåìåííûõ ãðàôè÷åñêèõ óñêîðèòåëåé?
Âîò óæ ÷åãî íå çíàþ, òîãî íå çíàþ. Ê òîìó âðåìåíè, êàê ïîÿâèëèñü óñêîðèòåëè, ÿ äàâíî óæå êî âñåìó ýòîìó îõëàäåë.
AH/AL ãîâîðèòå...
Date: 2001-12-27 01:35 am (UTC)Re: AH/AL ãîâîðèòå...
2Ê íà êîä, 1Ê íà äàííûå (èëè òèïà òîãî, ÿ óæ è íå ïîìíþ). è ÿ ïèñàë ïîä ýòó ðàäîñòü äðàéâåð äëÿ òàáëåòêè (tablet, â ñìûñëå. ï¸ñ çíàåò êàê ýòî ïî ðóññêè).
âåñåëî áûëî, äà.
Re: AH/AL ãîâîðèòå...
Date: 2001-12-27 04:48 pm (UTC)Re: AH/AL ãîâîðèòå...
È íå íóæíî, êàê íà 8086, ñèäåòü è ïðèêèäûâàòü, ÷òî åæåëè ìû ñåé÷àñ çàéìåì ax ïîä âîò ýòî, òî ïîòîì ìû íå ñìîæåì çàíÿòü åãî ïîä âîí òî, à äðóãîé ðåãèñòð äëÿ òîé æå öåëè çàäåéñòâîâàòü âîîáùå íèêàê íå ïîëó÷èòñÿ. (ìíå ýòîò ïðîöåññ âñåãäà íàïîìèíàë àíåêäîò ïðî ìóæèêà, êîòîðûé íà ïàðòñîáðàíèè ñèäåë è äóìàë, êàê æå åæèêè åáóòñÿ).
À íà 8080 è z80 - ìèíîâàëà ìåíÿ ÷àøà ñèÿ.
Re: Àëãîðèòì Áðåçåíõåìà ýòî íàçûâàåòñÿ
Date: 2001-12-27 04:46 pm (UTC)no subject
Date: 2001-12-27 01:22 am (UTC)Àëãîðèòì Áåðçåíõàìà.
À ññûëî÷êó íà ñáîðíèê ïðîãðàìì ïå÷àòàþùèõ ñâîé òåêñò íå ïîìíèòå?
no subject
Date: 2001-12-27 01:33 am (UTC)http://www.nyx.net/~gthompso/quine.htm
no subject
Date: 2001-12-27 02:40 am (UTC)