Насчет воды, правильно ли я понял, что эффект первого ролика возможен только в темноте, когда от воды отражается только «часто мигающий» свет, и никакого другого, а второй — только при записи на видео?
Хотя я и не изучал вопрос досконально, но как может уехать край вообще? Единственное возможное различие, насколько я понимаю — как будет сглажено изображение. Если я не прав — поправьте.
> шрифты на разных системах и отображение на одной системе в разных браузерах, две большие разницы.
У меня Safari на Win отрисовывает шрифты по фирменному алгоритму Apple, Firefox версий 4 — ~8 использовал аппаратное ускорения, в результате шрифты были замыленными, и смотрелись отлично от их-же аналогов на той-же системе, IE8 тоже использовал отличные от системных настройки сглаживания. А Chrome и Opera в таком не замечены.
И это все не мешает мне читать текст, написанный этими шрифтами. Как и возможные различия на разных системах/интернет-обозревателях в отрисовке SVG графики не будут мешать ее восприятию пользователем.
> даже программы векторные один и тот же svg могут открыть по разному
Я скажу по секрету, что даже шрифты на разных системах рисуются различно. Их что, что-бы удовлетворить желание дизайнера, который хочет точного соответствия пиксела к пикселу, тоже делать растровыми (сохранять в png и вставлять картинкой)?
На самом деле я думаю, пока не стоит сильно рыпаться совершать много резких телодвижений. На данный момент дисплеев с двойной плотностью еще немного, Win8 насколько я помню в настольном режиме масштабирует все далеко не идеально (следовательно, под системы с Win пока наплыва таких дисплеев не ожидается), на iГаджетах дисплей не большой, да и многую графику, типа элементов интерфейса или иконок можно безболезненно делать в svg, оставляя только фотографии «неретинальными».
Основная-же причина в том, что стандарты для таких дисплеев только разрабатываются. Есть (-webkit-)image-set, есть @media с min-device-pixel-ratio, тут тоже описано много разных колдунств типа image-rendering (как масштабировать изображение при его несоответствии реальному размеру, если я правильно понял). Одним словом, пусть доделают нормально технологии, а потом мы их будем использовать.
> Эта функция впервые появилась во 2-м пакете обновлений для Windows XP
Так пишет Википедия о DEP. Следовательно нас должен спасти virtual protect.
> и если заниматься, то нужно писать сразу более или менее универсальный патчер для любых систем.
Я не разбираюсь в серверных системах и технологиях вообще, но может лучше ничего не писать, а использовать просто другую программу для мониторинга или что то такое?
added:
Нашел на wasm.ru упоминание о том, что Руссинович писал в своем блоге, что по крайней мере в Vista SP3 аддресса процедур из ядра системы одинаковы для всех процессов в рамках одной сессии (technet, сам топик не читал, поверил на слово). Следовательно, можно из секции импорта загрузчика импортировать любые аддресса процедур в целевой процесс, и с их помощью, действуя уже от имени целевого процесса искать базовый отступ.
Интересно! Я, сказать по правде делал это все для XP, хотя в Vista и 7 у других пользователей это работало прекрасно. Суть фишки, насколько я понял в том, что Image Base случаен (в таком случае компилятор также должен создавать код без абсолютных аддрессов, только с относительными?).
Первое, что приходит на ум — после того, как был создан процесс мы делаем VirtualAllocEx, пишем туда наш код, который с помощью GetModuleHandle узнает базовое смещение и от него будет плясать. Не осложнит ситуацию и то, что память, в которой происходит необходимая проверка может находиться в dll или памяти, выделенной динамически, но тогда необходимо будет колдовать со сплайсингом. С другой стороны я не знаю, одинаковы-ли аддресса внешних win32api (наверное уже 64) процедур для разных процессов. В XP я просто читал нужные мне аддресса из секции импорта своего процесса и напрямую писал их в выделенную через VirtualAllocEx память целевого процесса. Ах да, после WriteProcessMemory нашего кода по аддрессу, полученному от VirtualAllocEx мы делаем туда CreateRemoteThread и ждем WaitForSingleObject (что ждем не помню, точнее ясно, что завершении веточки, но какой там флаг — не помню) и только после этого пускаем процесс.
Мне некогда приходилось писать т. н. launcher, т. е. программу, которая модифицировала другую программу и передавала управление ей.
Подробности
Собственно, у нас есть малюсенькая программа, которая запускает процесс, пишет ему в память, и тихонечко уходит со сцены.
// Все писалось под x32 систему, совершенно не в курсе, есть-ли проблемы при использовании 64.
— Зовем CreateProcessW и в аргументе dwCreationFlags передаем CREATE_SUSPENDED, это создаст приостановленный процесс
— GetFileVersionInfoSizeW — я использовал для того, чтобы быть уверенным, что я работаю с нужным мне кодом, а не с чем попало. Можно для душевного спокойствия проверить и hash исполняемого файла целевой программы, и проверить, какие инструкции находятся по address, по которому планируется писать
— WriteProcessMemory, переписываем в целевом то, что Вы делали в hex редакторе. Я вот не помню, нужен ли VirtualProtect предварительный на данную память с фагом «ПишуЧитаюИсполняю»?
— Пускаем процесс (он же у нас замороженный)
Все это ассемблируется, и запускается наша программа, которая создает процесс уже целевой и запускает ея.
Я просто не знаю, а студенты пишут грубо говоря в конспекте одно и тоже, или что то свое? Просто, опять-же, лектор может подготовить конспект заранее, а потом на лекции пояснять его, приводить примеры, отвечать на вопросы, пояснять «очевидные» места.
Я благо не имею высшего образования, но в вечерней школе, когда все писали конспекты (в том числе и потому, что вечерникам не выдавали учебники) я говорил, что писать не буду, а буду слушать и осмысливать. За что меня все уважали. А в обычной школе я до этого за отказ писать получал двойки, а на вопрос, в чем-же дело, мне заученно отвечали «при письме материал лучше запоминается».
Благодарю, написано интересно. Я сам столкнулся в своей отрасли, что на определенном этапе нужно начинать выделяться, быть узнаваемым, иначе перспективы роста заметно теряются.
> На самом деле, клиентов уводят, как раз потому что последние видят разницу ;)
Клиенты видят разницу в конкретном продукте артели_00, артели_01 и артели_02. Если бренд зарекомендовал себя как «качественный» и «подходящим для них» (читайте подходит для ЦА) они эту разницу не будут искать, в большинстве отдавая предпочтению именно известной продукции.
Говоря точнее, при покупке товара от бренда, клиент выбирает не только исходя из характеристик товара, но и исходя из характеристик бренда. Весь товар бренда наследует характеристики бренда.
Написал на багтрекер Хрома.
У меня Safari на Win отрисовывает шрифты по фирменному алгоритму Apple, Firefox версий 4 — ~8 использовал аппаратное ускорения, в результате шрифты были замыленными, и смотрелись отлично от их-же аналогов на той-же системе, IE8 тоже использовал отличные от системных настройки сглаживания. А Chrome и Opera в таком не замечены.
И это все не мешает мне читать текст, написанный этими шрифтами. Как и возможные различия на разных системах/интернет-обозревателях в отрисовке SVG графики не будут мешать ее восприятию пользователем.
Я скажу по секрету, что даже шрифты на разных системах рисуются различно. Их что, что-бы удовлетворить желание дизайнера, который хочет точного соответствия пиксела к пикселу, тоже делать растровыми (сохранять в png и вставлять картинкой)?
рыпатьсясовершать много резких телодвижений. На данный момент дисплеев с двойной плотностью еще немного, Win8 насколько я помню в настольном режиме масштабирует все далеко не идеально (следовательно, под системы с Win пока наплыва таких дисплеев не ожидается), на iГаджетах дисплей не большой, да и многую графику, типа элементов интерфейса или иконок можно безболезненно делать в svg, оставляя только фотографии «неретинальными».Основная-же причина в том, что стандарты для таких дисплеев только разрабатываются. Есть (-webkit-)image-set, есть @media с min-device-pixel-ratio, тут тоже описано много разных колдунств типа image-rendering (как масштабировать изображение при его несоответствии реальному размеру, если я правильно понял). Одним словом, пусть доделают нормально технологии, а потом мы их будем использовать.
added:
// Меня опередили ;(
Так пишет Википедия о DEP. Следовательно нас должен спасти virtual protect.
> и если заниматься, то нужно писать сразу более или менее универсальный патчер для любых систем.
Я не разбираюсь в серверных системах и технологиях вообще, но может лучше ничего не писать, а использовать просто другую программу для мониторинга или что то такое?
Нашел на wasm.ru упоминание о том, что Руссинович писал в своем блоге, что по крайней мере в Vista SP3 аддресса процедур из ядра системы одинаковы для всех процессов в рамках одной сессии (technet, сам топик не читал, поверил на слово). Следовательно, можно из секции импорта загрузчика импортировать любые аддресса процедур в целевой процесс, и с их помощью, действуя уже от имени целевого процесса искать базовый отступ.
Первое, что приходит на ум — после того, как был создан процесс мы делаем VirtualAllocEx, пишем туда наш код, который с помощью GetModuleHandle узнает базовое смещение и от него будет плясать. Не осложнит ситуацию и то, что память, в которой происходит необходимая проверка может находиться в dll или памяти, выделенной динамически, но тогда необходимо будет колдовать со сплайсингом. С другой стороны я не знаю, одинаковы-ли аддресса внешних win32api (наверное уже 64) процедур для разных процессов. В XP я просто читал нужные мне аддресса из секции импорта своего процесса и напрямую писал их в выделенную через VirtualAllocEx память целевого процесса. Ах да, после WriteProcessMemory нашего кода по аддрессу, полученному от VirtualAllocEx мы делаем туда CreateRemoteThread и ждем WaitForSingleObject (что ждем не помню, точнее ясно, что завершении веточки, но какой там флаг — не помню) и только после этого пускаем процесс.
// Все писалось под x32 систему, совершенно не в курсе, есть-ли проблемы при использовании 64.
— Зовем CreateProcessW и в аргументе dwCreationFlags передаем CREATE_SUSPENDED, это создаст приостановленный процесс
— GetFileVersionInfoSizeW — я использовал для того, чтобы быть уверенным, что я работаю с нужным мне кодом, а не с чем попало. Можно для душевного спокойствия проверить и hash исполняемого файла целевой программы, и проверить, какие инструкции находятся по address, по которому планируется писать
— WriteProcessMemory, переписываем в целевом то, что Вы делали в hex редакторе. Я вот не помню, нужен ли VirtualProtect предварительный на данную память с фагом «ПишуЧитаюИсполняю»?
— Пускаем процесс (он же у нас замороженный)
Все это ассемблируется, и запускается наша программа, которая создает процесс уже целевой и запускает ея.
Кэп
Черт, я почему-то подумал о отступах в CSS разметке. Очевидно же, что речь идет именно о самом изображении, поэтому и уточнил.
Клиенты видят разницу в конкретном продукте артели_00, артели_01 и артели_02. Если бренд зарекомендовал себя как «качественный» и «подходящим для них» (читайте подходит для ЦА) они эту разницу не будут искать, в большинстве отдавая предпочтению именно известной продукции.
Говоря точнее, при покупке товара от бренда, клиент выбирает не только исходя из характеристик товара, но и исходя из характеристик бренда. Весь товар бренда наследует характеристики бренда.