DUP2 Создание патчей и лоадеров. Как сделать патчи под глаза в домашних условиях Создать патч для программы

После написания первой игры перед нами встала задача, о которой мы даже не задумывались ранее. Это разработка патчера к игре. Для нашего патчера мы определили следующие требования:

  • Поддержка юнити игр
  • Дружелюбность к пользователю
  • Отображение игровых новостей
  • Универсальность для всех игр разработанных нашей студией
  • Гибкость настройки
  • И самое важное: умение делать небольшие патчи для больших файлов
Ссылка на исходники патчера в конце статьи.

Как обычно перед тем как изобретать велосипед, я ищу готовые решения проблемы. Но либо я плохо гуглил, либо единственное что удовлетворяло требованием это M2H Patcher с Unity Asset Store.
На внедрение мы потратили несколько дней, и пропользовались им около месяца (до первой и одновременно последней поломки). В один прекрасный день патчер отказался делать патч. Потратив несколько часов на разбирательство я выяснил причину.
Дело в том что этот патчер использовал для работы утилиты bsdiff & bspatch . Для работы утилиты bsdiff нужно max(17*n,9*n+m)+O(1) памяти. Так уж получилось что на самой лучшей машине в офисе было всего 4 Гб оперативки, а файл с ресурсами был уже более 600 Мб. Вообщем bsdiff отказывался с ним работать (до этого время создания патча составляло непотребные 30+ минут).

Тогда то я решил все-таки собрать велосипед.

Алгоритм

Теперь предстояло нагуглить алгоритм сравнения больших бинарных файлов. Достойных кандидатов оказалось два. Это Rsync и алгоритм сортировки суффиксов из bsdiff.
Так как со вторым уже были проблемы, то я остановился на первом.
Его суть заключается в следующем. Разбиваем исходный файл на куски равного размера (далее чанки от англ. chunk).
Для каждого чанка считаем два хэша: сильный и слабый. Сильный хэш - это обычный MD5. Слабый хэш - это кольцевой хэш . Его особенность в том, что если хэш от n до n+S-1 равняется R, то последовательность байт от n+1 до n+S может быть посчитана исходя из R, байта n и байта n+S без необходимости учитывать байты, лежащие внутри этого интервала.
Точно так же нужно посчитать результирующий файл. На выходе у нас должно получится две последовательности хешированных чанков.
Далее мы начинаем сравнивать слабые хэши в файлах в поисках одинаковых чанков. Если хэши совпали, то сравниваем сильные хэши. Ключом алгоритма является создание двух сигнатур - быстрой и стойкой. Быстрая используется как фильтр. Стойкая используется для более точной проверки.
На выходе мы имеем список отличающихся чанков, которые и записываем в патч.

Создание патча

Для наших игр хорошо подходит система, где номер версии обозначается целым числом. Таким образом обычно мы имеем кучу папок с разными версиями текущего проекта: 1, 2, 3, и т.д.

Первое что надо будет сделать после нажатия кнопки - это определить какие файлы изменились, удалились, добавились. Для этого сравниваем папки через

String files1 = Directory.GetFiles(folder1, "*.*", SearchOption.AllDirectories); string files2 = Directory.GetFiles(folder2, "*.*", SearchOption.AllDirectories);
и ведем список изменений. Если файл добавился, то считаем md5. Если изменился, то считаем новый и старый md5. Эти хэши нужны будут для того, чтобы определить можно ли применить патч и корректно ли он установился.
Эти данные собираются в архив с максимальным сжатием через SharpZipLib . В конце мы дописываем туда файлик patch_info.txt в котором хранятся данные о размере чанка, список файлов с их хэшами и действиями.
Пример:
1024 R star-draft_Data\level1 M settings.xml A star-draft_Data\level0 M star-draft_Data\resources.assets M patcher\version.txt
* R - removed, A - added, M - modified
В зависимости от действия там лежит либо сам файл, либо патч к старой версии.
Теперь этот патч можно выложить на любой веб хостинг. Я тестил на дропбоксе.

Важно заметить что для нормальной работоспособности системы в папке с игрой должен лежать файл .\patcher\version.txt . В нем хранится информация о текущей версии игры. Ее считывает патчер и сам же меняет в результате процесса применения патча. Патч билдер старается следить чтобы вы не ошиблись, и версия в файле совпадала с версией указанной в имени папки.

Патчер

Скриншот


Слева должны быть логотипы игры и издателя, а справа новости


При старте патчер считывает файл настроек по пути ./patcher/configuration.xml и проверяет на валидность.
Пример файла с комментариями:
TestGame Test.exe http://coolgame.com http://coolgame.com/version.txt http://coolgame.com/patches/ http://coolgame.com/news_for_patcher.html http://coolpublisher.com

Первым делом патчер проверит свою версию из файла ./patcher/version.txt . Потом он проверит последнюю версию игры по ссылке из настроек. Если последняя версия больше то запускается процесс обновления по схеме:

For (int i = current_version; i < last_version; i++) { DownloadPatch(URL + string.Format("{0}_{1}", i, i+1)); ApplyDownloadedPatch(); }

Чтобы применить патч, сначала нужно получить список измененных файлов. Поэтому первым делом достаем из скачанного архива patch_info.txt , парсим его и пробегаем циклом по файлам.
Если файл подлежит удалению, то удаляем. Если добавлен, то распаковываем из архива. Если изменен то применяем патч если хэши совпадают (чтобы не испортить его).
В конце не забываем проверить новый md5 хэш.

Я старался сделать так, чтобы любое исключение в патчере имело текстовое описание и варианты решения.
Так же патчер уже локализован на русский и английский языки средствами.NET

Статистика

Для проверки я сразу же засунул в него клиент нашей игры на Unity3D, с которым отказался работать bsdiff.
Клиент версия 1 - 1669 Mb
Клиент версия 2 - 1692 Mb (мы добавили модельку с пачкой текстур)
Размер патча при размере чанка 1 Кб и максимальном сжатии архива - 11.8 Mb , что очень похоже на результаты работы патчера с bsdiff"ом
Время создания патча на моей машине меньше минуты, а применения около 10 секунд.

Полукруглые, похожие на пластырь, маски-патчи очень удобны – приклеила под глаза и ходишь, довольная, в ожидании, когда морщины разгладятся, мешки исчезнут, а синяки рассосутся. И такое даже случается, хотя далеко не всегда. Домашняя промышленность от всемирно известного бренда «Я на выдумки хитра» уже давно взяла этот способ на вооружение и запустила собственную линейку подобных средств, которые производятся из, как хочется надеяться, максимально натуральных ватных косметических дисков и всего, что под руку подвернется.

Если вас интересуют домашние патчи для долгого хранения и больше похожие на промышленные, то взгляните на эти наши рецепты .

Йогурт с сахаром

  • 2 столовые ложки натурального белого йогурта,
  • 2 чайные ложки коричневого сахара,
  • 1 чайная ложка миндального масла.

Взбейте все в миксере или в кофемолке. Если маска получилась густовата, разбавьте ее холодным молоком.

Щедро смочите в маске разрезанные пополам ватные диски и положите их под глаза на 10-15 минут. Если диски начнут высыхать, замените их новыми.

Травы с чаем от отеков, раздражения и кругов

  • 1 пакетик зеленого чая без добавок,
  • 1 ст. ложка сушеной петрушки,
  • 1 пакетик мятного чая,
  • 1 пакетик ромашкового чая.

Залейте все горячей водой, дайте остыть, выньте пакетики, процедите и поставьте в холодильник. Утром смочите в настое половинки ватных дисков и используйте, как описано выше. Если кожа вокруг глаз сухая или морщинистая, заранее нанесите легкий крем или гель для век.

Кофе со сливками для бодрого взгляда

  • 2 столовые ложки свежезаваренного кофе,
  • 2 столовые ложки жирных сливок.

Смешайте и используйте так же, как описано выше. Кофе не должен быть горячим.

Ледяное молоко от отеков и кругов

Добавьте в чашку с жирным молоком (можно использовать сливки) лед и дождитесь, пока молоко охладиться. Нанесите на кожу вокруг глаз гель с петрушкой или любой другой легкий крем или гель, затем смочите половинки ватных дисков в холодном молоке и положите их под глаза.

Увлажняющая маска от морщин вокруг глаз

  • 1-2 средних огурца,
  • 1 чайная ложка витамина Е,
  • ½ чайной ложки коричневого сахара.

Огурцы натрите на мелкой терке и отожмите сок, добавьте сахар и витамин Е и взбейте все в блендере или миксере. В итоге должна получиться густовато-маслянистая водичка. Используйте так же, как и предыдущие маски.

Если смеси получилось слишком много, храните ее 3-5 дней в холодильнике в чистой емкости под крышкой.

( 2007-02-05 )

Комманды diff и patch представляют собой мощную комбинацию. Они часто используются для получения разницы между оригинальными файлами и обновленными, что бы другие люди, у которых есть только только оригинальные файлы могли обновить их используя файлы, которые содержат только разницу. В этой статье показаны базовые принципы использования этих команд.

В этой статье используются без объяснения некоторые базовые команды Linux, такие как смена смена директории, копирование файлов и редактирование текстовых файлов.

Использование diff для создания простого патча

Наиболее простой пример использования команды diff - получение различий между двумя файлами, оригинальным и обновленным. Можете, например, написать насколько слов обычного текста, сделать какие-нибудь изменения, и сохранить измененния во второй файл. Теперь вы можете сравнить эти эти два файла, используя команду diff:

$ diff originalfile updatedfile

Конечно, надо заменить originalfile и updatedfile соответствующими именами файлов. В результате должно получиться что-то вроде этого:

1c1 < These are a few words. \ No newline at end of file --- > These still are just a few words. \ No newline at end of file

Обратите внимание: Что бы продемонстрировать создание простого патча, я использовал оригинальный файл, содержащий строку "These are a few words.", и измененный файл, содержащий строку "These still are just a few words." Вы можете создать эти файлы сами, если хотите запустить команду из статьи и получить тот же результат.

1c1 показывает номер строки и то, что с ней надо сделать. Обратите внимание, что может быть сразу несколько строк(например, 12,15, что означает со строки 12 до строки 15). Символ "c" означает, что патч заменит эту строку. Есть еще два других символа: "a" и "d". Они означают "добавить"(add) и "удалить"(delete) соответственно. Таким образом, синтаксис следующий: (номер строки или диапазон строк)(c,a или d)(номер строки или диапазон строк), хотя когда используются "a" или "d", одна из частей (номер строки или диапазон строк) может содержать только номер одной строки.

    Когда используется "c", номера строк слева - это строки в оригинальном файле, которые надо заменить строками, находящимися в патче, а номера строк справа - это строки, которые должны быть в пропатченном файле.

    Когда используется "a", номер слева может быть только номером одной строки, который показывает, где надо добавить строку в пропатченном файле, а номера строк справа - это строки, которые должны быть в пропатченном файле.

    Когда используется "d", номера строк слева - это строки, которые надо удалить, чтобы получить пропатченную версию файла, а номер строки справа может быть только номером одной строки, который показывает где будут строки в пропатченном файле, если они не будут удалены. Вы можете подумать, что последний номер не нужен, но не забывайте, что патч можно применить для восстаноления исходного файла. Это будет объяснено позже.

Знак "<" означает, что патч должен удалить символы после этого знака, а знак ">" означает, что символы после этого знака надо добавить. Когда надо заменить строки ("c" между номерами строк), вы увидите оба знака: и "<", и ">". Когда надо добавить строку ("a" между номерами строк), вы увидите только знак ">", а когда надо удалить строку ("d" между номерами строк), вы увидите только знак "<".

Строка "\ No newline at end of file" появилась из-за того, что я не не нажал enter после того как набрал слова. Считается хорошим тоном заканчивать текстовый файл пустой строкой. Некоторым программам она необходима для работы. Поэтому эта строка появилась после работы команды diff. Добавим пустые строки в конец файлов, и получим более короткий вывод команды diff:

1c1 < These are a few words. --- > These still are just a few words.

Как вы возможно заметили, я не объяснил что означают 3 знака "-". Они означают конец строк, которые надо заменить и начало строк на которые надо заменить. Разделение старых и новых строк. Вы увидите это знак только при замене ("c" между номерами строк).

Если мы хотим создать патч, мы должны поместить вывод команды diff в файл. Конечно это можно сделать, скопировав его из консоли и вставив в вашем любимом текстовом редакторе, а затем сохранив этот файл, но есть способ проще. Мы можем с помощью bash направить вывод команды diff в текстовый файл:

$ diff originalfile updatedfile > patchfile.patch

Опять же не забудьте заменить originalfile и updatedfile на соответствующие имена файлов. Вы наверное знаете, что опция bash ">" работает со всеми командами. Это очень полезное свойство.

Применение простого патча, который мы создали

Мы можем использовать патч, который только что создали, чтобы получить из оригинального файла обновленный. Для этого надо скопировать оригинальный файл и патч в одно и тоже место. И затем применить патч:

$ patch originalfile -i patchfile.patch -o updatedfile

Естественно, и здесь надо изменить имена файлов на необходимые. Если все прошло хорошо, должен получиться файл, идентичный обновленному. Вы можете убедиться в этом, используя команду diff с опцией "-s":

$ diff -s updatedfile /updatefile

Замените текст между [ и ] на путь к оригинальному файлу. Например, если обновленный файл, который вы использовали при создании патча находится в родительской директории вышай текущей, то "" надо заменить на ".." (bash понимает это как родительскую директорию от текущей). И конечно надо изменить имена файлов на верные.

Поздравляю! Если diff сообщила, что файлы идентичные, вы только что успешно создали и применили патч! Однако формат патча, который мы только что использовали не единственный. В следующей главе мы рассмотрим другой формат патча.

Контекстный патч

В первой главе мы создали патч, используя нормальный формат команды diff. Однако этот формат не обеспечивает контекстной зависимости, а использует строки целиком. Создадим патч для того же файла, но используя контектсный формат:

$ diff -c originalfile updatedfile

Результат получится следующий:

*** originalfile 2007-02-03 22:15:48.000000000 0100 --- updatedfile 2007-02-03 22:15:56.000000000 0100 *************** *** 1 **** ! These are a few words. --- 1 ---- ! These still are just a few words.

Как вы видите, здесь включено имя файла. Это значит, что нам не придется набирать его во время применения патча. Далее идет дата и время последнего изменения файла. строка с 15 "*" показывает начало изменений. Они показывают, что надо сделать со следующим блоком текста. Два номера 1 - это номера строк (здесь тоже может быть сразу несколько строк), а "!" означает, что строки надо заменить. Строка с "!" перед тремя "-" должна быть заменена второй строкой с "!", которая идет после трех "-"(конечно сам! не будет включен; это синтаксис контекстного формата). Как вы можете видеть, здесь нет знаков "c", "a" и "d".Действие, которое нужно сделать, определяется символом в начале строки. "!" означает замену. Другие символы - "+", "-" и " " (пробел). "+" означает добавление, "-" означает удаление, а " " означает ничего не делать: патч использует его чтобы убедиться, что он изменяет правильную часть файла.

Применять этот патч легче: при тех же условиях, что и для предыдущего патча (записываем вывод команды diff в файл, затем копируем патч и оригинал в одно и то же место), надо выполнить следующую команду:

$ patch -i patchfile.patch -o updatedfile

Вы возможно сейчас думаете: зачем нам надо указывать имя нового файла? Это надо сделать из-за того, что патч старается изменить существующий файл, а не создает новый. Это удобно при создании патча для нескольких файлов сразу. Это приводит нас к следующей цели: создание патча для дерева файлов. Рассмотрим это в следующей главе.

Получение различий между несколькими файлами

Наиболее простой способ получить различия между несколькими файлами - это положить их в одну директорию и выполнить команду diff для этой директории целиком. Вы можете просто передать команде diff в качестве параметров имена директорий вместо имен файлов:

$ diff originaldirectory/ updateddirectory/

Обратите внимание: Если в директория есть поддиректории, то надо использовать опцию "-r".

В результате должно получится что-то вроде этого:

Diff originaldirectory/file1 updateddirectory/file1
1c1 < This is the first original file. --- > This is the first updated file. diff originaldirectory/file2 updateddirectory/file2 1c1 < This is the second original file. --- > This is the second updated file. 14d13 < We"re going to add something in this file and to delete this line. 26a26 > This is line has been added to this updated file.

Обратите внимание: Я создал несколько несколько файлов для примера. Вы можете скачать архив, содержащий эти файлы: .

Как вы видите, нормальный формат содержит только имена файлов и изменяемые строки.

Теперь используем контекстный формат:

Diff -c originaldirectory/file1 updateddirectory/file1 *** originaldirectory/file1 2007-02-04 16:17:57.000000000 +0100 --- updateddirectory/file1 2007-02-04 16:18:33.000000000 +0100 *************** *** 1 **** ! This is the first original file. --- 1 ---- ! This is the first updated file. diff -c originaldirectory/file2 updateddirectory/file2 *** originaldirectory/file2 2007-02-04 16:19:37.000000000 +0100 --- updateddirectory/file2 2007-02-04 16:20:08.000000000 +0100 *************** *** 1,4 **** ! This is the second original file. S O --- 1,4 ---- ! This is the second updated file. S O *************** *** 11,17 **** C E - We"re going to add something in this file and to delete this line. S O --- 11,16 ---- *************** *** 24,28 **** --- 23,28 ---- C E + This is line has been added to this updated file. Something will be added above this line.

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

Другой способ получить разницу между между несколькими файлами - это написать скрипт, который выполняет команду diff несколько раз и добавляет результат выполнения в один файл. Мы не будем рассматривать этот способ, так как положить все файлы в одну директорию горазда проще.

Создать патч было легко, но использование директорий ставит следующую проблему: бедут ли патч изменять только соответствующие файлы в текущей директории, или будет использовать соответствующий путь, указанный в файле? Чтобы узнать это, смотрите следующую главу!

Применение патча к нескольким файлам

В предыдущей главе мы создали патч для нескольких файлов, воспользовавшись следующей командой:

$ diff -c originaldirectory/ updateddirectory/ > patchfile.patch

Обратите внимание: мы используем контекстный формат патча, так как это является хорошим тоном.

Теперь надо использовать полученный патч. Скопируйте оригинальную директорию и патч куда-нибудь и примените следующую команду:

$ patch -i patchfile.patch

Однако возникает ошибка, что невозможно найти файлы для патча. Команда пытается найти файл file1 в текущей директории (по умолчанию патч убирает все пути перед именем файла). И конено файла нет, так как мы пытаемся обновить файлы в директории originaldirectory. Поэтому мы должны заставить патч использовать полный путь. Это делается следующим образом:

$ patch -p0 -i patchfile.patch

Обратите внимание: Вы может подумать, что можно просто переместиться в originaldirectory и запустить патч. Но это не так! Так делать не стоит: если в в патче содержатся поддиректории, то он будет искать их в рабочей директории, и не найдет, или найдет не те. Используйте опцию "-p", чтобы заставить патч искать файлы в поддиректориях.

Опция "-p" говорит патчу сколько слэшей (включая то, что перед ними, обычно директории) нужно вырезать перед именем файла (обратите внимание, что при использовании опции "-p0", патч будет будет искать файлы и в originaldirectory и в updateddirectory).Когда мы устанавливаем 0, это означает что не надо удалять пути, но можно поставить 1, чтобы удалить первый слэш, или 2, чтобы удалить два слэша, и т.д. Это может быть полезно, если если в патче используется структура каталогов, отличная от вашей. Например, если в патче используется следующая структура каталогов:

(...) *** /home/username/sources/program/originaldirectory/file1 2007-02-04 16:17:57.000000000 +0100 --- /home/username/sources/program/updateddirectory/file1 2007-02-04 16:18:33.000000000 +0100 (...)

Вам надо просто посчитать количество слэшей (/ (1) home/ (2) username/ (3) sources/ (4) program/ (5)) и передать это число в опцие "-p". Если вы используете "-p5", то патч будет искать и в originaldirectory/file1 и в updateddirectory/file1. Не забудьте, что патч рассматривает два слэша друг за другом (как в /home/username//sources) как один. Это вызвано тем, что иногда патч скрипты добавляют дополнительный слэш между директориями.

Восстановление оригинального файла из пропатченного

Иногда возникает необходимость восстановить оригинальный файл из пропатченного. Например, если в нем содержится ошибка. Для этого надо использовать опцию "-R":

$ patch -p0 -R -i patchfile.patch

Обычно эта операция проходит без ошибок, и вы получаете исходный файл. Однако лучше на всякий случай сделать резервную копию перед восстанолением файлов.

Унифицированный формат

Есть еще один формат вывода различий командой diff: унифицированный формат. Он более компактен, так как содержит уменьшенные контекстные строки. Однако он поддерживается только GNU diff и patch. Если вы его используете, вы должны быть уверены, что у пользователей, для которых патч предназначен, GNU patch. Linux допускает использование этого формата.

Унифицированный формат похож на контекстный, но это не одно и тоже. Патч в унифицированном формате можно создать так:

$ diff -u originaldirectory/ updateddirectory/

Результат будет седующий:

Diff -u originaldirectory/file1 updateddirectory/file1 --- originaldirectory/file1 2007-02-04 16:17:57.000000000 +0100 +++ updateddirectory/file1 2007-02-04 16:18:33.000000000 +0100 @@ -1 +1 @@ -This is the first original file. +This is the first updated file. diff -u originaldirectory/file2 updateddirectory/file2 --- originaldirectory/file2 2007-02-04 16:19:37.000000000 +0100 +++ updateddirectory/file2 2007-02-04 16:20:08.000000000 +0100 @@ -1,4 +1,4 @@ -This is the second original file. +This is the second updated file. S O @@ -11,7 +11,6 @@
C E -We"re going to add something in this file and to delete this line. S O @@ -24,5 +23,6 @@ C E +This is line has been added to this updated file. Something will be added above this line.

Как вы видите, номера строк заключены между "@". Кроме того, есть дополнительный пробел после "+" или "-". Это экономит несколько байт. Другое различие: в унифицированном формате нет специального знака для замены. Он просто удаляет старые строки ("-") и добавляет новые ("+"). Разница между этими действиями заключается в том, что при замене используется один и тот же номер строки, а при удалении и добавлении разные.

Сравнение форматов

Читая про три разных формата, вы вероятно задумались: а какой же выбрать? Вот небольшое сравнение:

    Нормальный формат наиболее совместимый. Любые команды похожие на diff/patch должны понять его. Его недостаток - это отсутствие контекста.

    Контекстный формат широко распространен, но не все команды его понимают. Его преимущество в наличии контекста.

    Унифицированный формат тоже включает контекст, и при этом более компактем. Но его поддерживает только GNU diff and patch.

Если вы уверены, что патч буду использовать только пользователи с GNU diff/patch, то лучше всего выбрать унифицированный формат, так как он более компактный. В большинстве других случаев лучший выбор - это контекстный формат. Нормальный формат следует использовать если вы уверены, что пользователь будет применять патч командами, не поддерживающими контекстный формат.

Изменение количества контекстных строк

Можно заставить команду diff включать в патч сеньшее количество строк контекста, чем должно быть. В больших патчах это может сильон уменьшить его размер. Однако если уменьшить количество контекстных строк, это может привести в неработоспособности патча. Цитати из справки GNU diff: "Для большинства операций в патче должно быть хотя бы две строки контекста."

Указать количество контестных строк можно несколькими способами:

    Если вы хотит использовать контекстный формат, вы можете вы можете совместить эти указания, добавив в опцию "-C". Пример:

    $ diff -C 2 originaldirectory/ updateddirectory/

    Предыдущая команда будет использовать контекстный формат с двумя контекстными строками.

    Если вы хотит использовать контекстный формат, вы можете вы можете совместить эти указания, добавив в опцию "-U". Пример:

    $ diff -U 2 originaldirectory/ updateddirectory/

    Предыдущая команда будет использовать унифицированный формат с двумя контекстными строками.

    Если не указывать какой формат вы хотите использовать, то команда будет выглядеть примерно так:

    $ diff -2 originaldirectory/ updateddirectory/

    Однако это будет работать только если вы определите формат. Вам необходимо использовать эту опцию или с "-c" или с "u".

Заключительные слова

Несмотря на то, что эта статья описывает множество особенностей работы команд diff и patch, она не может описать все их возможности. Если вы хотите узнать больше об этих командах, вы можете прочитать страницу помощи по этим командам и

Кожа под глазами – очень хрупкая, это один из самых хрупких участков на всем теле. В этой области практически отсутствуют сальные железы, поэтому кожа вокруг глаз очень быстро обезвоживается и признаки старения проявляются первыми именно здесь.

Помимо этого зона вокруг глаз часто страдает от нарушения лимфотока и кровообращения, что выливается в круги и припухлости под глазами, две самые распространенные проблемы. Стоит чуть дольше обычного поработать за компьютером или выпить на ночь лишней жидкости, и наутро круги и мешки будут тут как тут.

МАСКИ-ПАТЧИ ДЛЯ КОЖИ ВОКРУГ ГЛАЗ

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

Я часто использую такие маски-патчи утром, когда мне нужно хорошо выглядеть, а отражение в зеркале совсем не радует, 10 минут хватает на то, чтобы привести себя в порядок.

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

МАСКИ-ПАТЧИ С ОГУРЦОМ И РОЗОЙ ОТ ПРИПУХЛОСТЕЙ И ТЕМНЫХ КРУГОВ

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

  • половина среднего огурца (кусок в 3-4 см)
  • 1 ч ложка геля алое-вера
  • 1 ст ложка натуральной розовой воды
  • 2 капли эфирного масла розы

Огурец очистить от кожи и нарезать кубиками, в блендере растереть с остальными компонентами до однородного желе. Ватные диски нарезать в форме полумесяца. Каждый диск тщательно пропитать составом маски, выложить мокрые диски на лист бумаги для запекания и заморозить. Перед использованием дать диску полежать 2-3 минуты при комнатной температуре, после чего приложить на зону под глазами на 10 минут.

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

С эфирным маслом розы надо быть очень внимательным: это одно из самых дорогих масел, поэтому продается множество подделок и некачественных вариантов. Это масло очень хорошо подходит для anti-age ухода, так что если вы решитесь инвестировать в его покупку, то будьте готовы отдать примерно 15-20 евро за 1 мл масла – это цена качественного продукта, все что дешевле вызывает серьезные сомнения (в аптеках иногда продаются синтетические недорогие масла, которые нельзя использовать в косметических целях).

МАСКИ-ПАТЧИ С БЕЛКОМ ОТ «ГУСИНЫХ ЛАПОК»

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

Дело в том, что при застывании взбитый белок сжимается, и так как он имеет свойство «схватываться» с кожей, то при сжатии он механически выравнивает ее поверхность. Для быстрого избавления от мелких морщинок (например, противной сеточки вокруг глаз) белковые маски подходят идеально.

Эту маску вы можете наносить и с помощью патча, и кистью (если у вас получится взбить крепкую пену, то кистью наносить удобнее):

  • 1 белок
  • 2 капсулы витамина Е

Белок вылить в глубокую миску, миксером взбить до крутых пиков. Проткнуть капсулы витамина Е, добавить содержимое к белку и аккуратно все размешать. Нанести на кожу вокруг глаз на 10 минут, сосредоточившись на внешних уголках глаз, там, где обычно проявляется сеточка мимических морщин.

Я живу во Франции, и тут в аптеках витамин Е продается в капсулах, но в странах СНГ в аптеках можно найти 10% масляный раствор витамина Е – старое, еще советское лекарство, которое продолжает выпускаться.

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

МОЙ КАНАЛ НА YOUTUBE

Вам понравился этот пост и вам интересна тема домашней натуральной косметики и безопасного ухода за домом?

Подписывайтесь на мой канал на youtube и получайте новые видео прямо в свою ленту!