Сильно похоже, что вы ломаете свою систему сами, от того и столько требований.
— Часть требований основана на вашем субъективном восприятии. Нужны вам маркеры времени? Да не вопрос, делаем у демона функцию print_log($str), которая в начало этой $str добавит date("[d-m-y H:i:s] "), в конец добъет "\n" и выплюнет в файл с блокировкой оного flock() на время записи.
— Утечки памяти? Подвисоны итераций? У меня TCP-сервера на нескольких портах, написанные на PHP, обслуживающие клиентов и при этом еще и общающиеся между собой(перекидывают «неродные» запросы на того, кто его умеет обработать), работают по нескольку месяцев, перезапускаясь только при обновлениях исходников. При этом работают в асинхроне и в одном потоке(thread) одновременно.
Кстати будет время, вывалю статью и этот класс обработки множества соединений.
Никаких кронов, ватчдогов и прочего. Никаких утечек, никаких подвисонов. Это все зависит исключительно от программиста. И функционал серверов — не баклуши бить, изредка пописывая что-то в файлик. Конечно и не высоконагруженный проект, но до пары сотен запросов разных в минуту приходит. Помножьте на несколько месяцев. Мемори-лики завалили бы скрипт наверное за пару дней максимум, если бы они были. То есть проблема утечек не в самом PHP явно.
— Запуск не в режиме демона: Трудно строчку демонизации закомментировать? Или сделать выбор нужного режима параметром коммандной строки?
Все зависит от задач и от прямоты рук. Иногда лучше кроном регулярно подергивать(особенно простенькие скрипты, которые и отлаживать-то лень), а иногда нужен реальный демон. При этом геморроиться с Сями не всегда охота. Гибкий скриптовый язык удобнее.
Кстати у меня вопрос: вы проверяли работу переназначения STDOUT и STDERR?
У меня почему-то оно странно работает.
printf() попадает в stdout лог файл, как положено.
fprintf(STDERR, ...) валит notice в тот же stdout лог файл, что мол дескриптор 3 недоступен.
Такое ощущение, что STDERR не хочет так переназначаться или захватывает не тот дескриптор и двигло валит ошибку в stdout из-за недоступности STDERR.
У меня используется такой же класс для демонизации. Ну понятно, что отличия есть, но реализовано все то же самое.
Вот статус проверять по-моему лучше, не только смотря файл с пидом, но и «пингуя» сам процесс:
У меня это сделано так:
function check() {
$pid = $this->read_pid();
if ($pid>0 && posix_kill($pid, 0)) return true;
return false;
}
И еще КМК лучше реализовать реакцию на сигналы, приблизительно так:
function sig_handler($signo) {
$func=$this->term_func;
switch ($signo) {
case SIGTERM:
// handle shutdown tasks
$this->daemon_del_pid();
exit;
break;
case SIGHUP:
// handle restart tasks
break;
default:
// handle all other signals
}
if ($func) $func($signo);
}
И в методе demonize() уже где-то после второго posix_setsid() привязать сигналы приблизительно таким образом:
for ($i=1;$i<=SIGTERM;$i++) @pcntl_signal($i, SIG_IGN);
Здесь $this->term_func это поинтер на внешний обработчик сигналов. Т.к. у вас внешняя main() реализована переопределением метода run(), то вы так же можете и этот обработчик сигналов реализовать по-своему.
Интересно, когда появится первый пост, целиком состоящий из спойлеров?
Представьте, заходите в пост, и видите… надпись «Содержание», а под нею много спойлеров, типа:
-> Введение
-> Основная тема
-> Кусок кода блок такой-то с комментариями
-> Кусок кода блок такой-то с комментариями
-> Кусок кода блок такой-то с комментариями
-> Скриншоты
-> Скачать
И прям будет ощущение, что читаешь привычную документацию в PDF — сразу можно в нужные разделы прыгнуть.
Каково, а?
Интересно так же, что будет первым: со статей Хабра начнут формировать даташиты, или даташиты в статьи Хабра конвертить?
Скоро Хабр превратится в аналог iBooksAuthor! )))
Полезно. В такую штучку можно будет например крупные куски кода или описания алгоритмов заворачивать.
А то думаешь: «Вставлю кучу кода с комментариями — статья будет длинная портянка, а выложу ссылкой на zip — тяжело будет комментировать и объяснять принцип работы чего-то там непонятно где в какой-то там зипе.»
Теперь будет удобнее. Читатели пробегут пост глазами, по заголовкам сами пооткрывают себе только те части, которые заинтересовали.
Кстати, смотрю, при создании поста это работает. В ответах на Q&A работает. А в коментах не будет?
Ну тогда уж приведу и поправленный первый вариант:
int i, temp;
while ((--n)>0) {
i=n;
while ((i--)>0) if (ar[n] < ar[i]) {
temp = ar[n];
ar[n] = ar[i];
ar[i] = temp;
}
}
Исправлен тот же косяк с лишней итерацией.
Утром спешил на работу, писал впопыхах перед отъездом, поэтому за первичные косяки простите, был напуган (с) )))
Тьфу ежкин кот. Сам себя запутал ))
Одно поменял, второе забыл.
Последняя итерация же нафиг не нужна, равно как и что-либо делать при n=1.
Вот теперь правильно, никаких лишних действий, последняя и единственная для данного n итерация произойдет при n=1, но строго только если изначально было n>1:
int i=0;
int temp;
while (n>1) {
if ((--i)<0) i=(--n)-1; // контроль двойного цикла
if (ar[n] < ar[i]) {
temp = ar[n];
ar[n] = ar[i];
ar[i] = temp;
}
}
Прошу прощения, во втором варианте явный косяк, нулевой элемент не обрабатывался, т.к. i не достигнет нуля.
Вот поправленное:
int i=0;
int temp;
while (n>-1) {
if ((--i)<0) i=(--n)-1; // контроль двойного цикла
if (ar[n] < ar[i]) {
temp = ar[n];
ar[n] = ar[i];
ar[i] = temp;
}
}
Чтобы запутать любого читающего в последствии? Тогда Ок.
Для оптимизации? Достаточно вынести объявление «int temp» наверх за пределы циклов, плюс «n-1» заранее вычислить, жестко предопределив поведение оптимизатора, дабы избежать возможной реаллокации.
Больше там вроде делать нечего, не меняя стандартный «пузырек».
Можно еще вот так извратиться, развернув алгоритм реверсивно(не «пузырек всплывает», а «камень тонет») и избавившись от переменной J, не теряя особо в читабельности:
int i, temp;
while ((n--)>0) {
i=n-1;
while ((i--)>0) if (ar[n] < ar[i]) {
temp = ar[n];
ar[n] = ar[i];
ar[i] = temp;
}
}
Тут я не отлаживал, писал с ходу, поэтому мог накосячить в реализации. Но не в самой идее.
Суть — нижнюю границу массива мы знаем и так — это ноль, поэтому при «камень тонет» ее достижение проще контролировать, не создавая лишнюю переменную.
Подразумевается, судя по исходному коду в посте, что n — количество элементов массива, а не индекс последнего, поэтому я избавился так же от начального холостого декремента этой переменной.
Можно еще таким вот образом избавиться от второго while:
int i=0;
int temp;
while (n>-1) {
if (i==0) i=(--n)-1;
if (ar[n] < ar[i]) {
temp = ar[n];
ar[n] = ar[i];
ar[i] = temp;
}
i--;
}
(тоже не отлаживал, за возможные косяки в условиях не пинать)
С точки зрения оптимизации разницы в принципе особой нет. Ну разве что оптимизатор оверхед на циклы генерирует какой-то. То есть оптимизация если и есть, то весьма условная.
Да там и целиком-то по деньгам прошла бы без пошлины.
У вас 7.20 Евро пошлины всего набежало бы, если бы цена самого товара была $1288 (1024EUR), тогда да — 30% от превышения, то есть 30% от 24 Евро.
А т.к. вы пишете, что $1288 это включая доставку, не думаю, что у вас сама стоимость доставки EMS такого веса была 24 Евро или ниже, а следовательно, таможенная стоимость товара(при пересылке почтовыми службами, а у нас это Почта России и EMS, стоимость доставки в таможенную стоимость товара не включается) не превышает беспошлинную норму 1000Евро.
Правда при пересылке большими частями могли еще за превышение нормы веса взять: 4 Евро за кило начиная с 32-го килограмма.
Другой вопрос, что при любом повышенном внимании геморроя и беготни с бумажками таможня при желании может доставить, особенно если какие-то запчасти попадают в списки ограниченнык к ввозу товаров. Конечно в зависимости от того, что там в декларации указано.
А так сама пошлина при данном уровне цен — фигня.
Конечное количество перезаписей меня как-то не очень волнует. Intel SSD плюс TimeMachine бекапы не дадут потерять данные даже в случае маловероятного выхода SSD из строя. А комфорт и надежность сохранения работы важнее.
Но для ноута и hibernatemode 0(обычный «спящий режим» без гибернации) в большинстве случаев подойдет, тут вы правы. Тем более для макбука, в котором батарея внутренняя и случайно выщелкнуться и выпасть из своей ниши не может. У меня в стареньком Toshiba Portege M400, например, защелка батареи была ненадежной — там лучше гибернация.
Однако хорошо бы, если бы был вариант, как у Intel® Rapid Start Technology™ в новых ультрабуках — чтобы ноут сам мог при долгом нахождении в спячке по таймауту перейти в гибернацию на SSD. В таком случае при недолгих спящих режимах, типа поездок с ноутом на работу и обратно, гибернации и лишних перезаписей на SSD не будет, а при долгих спячках будет экономиться батарея за счет полного отключения компа в режиме гибернации.
Вышепредложенная SmartSleep этого не умеет, что в общем-то логично: она устанавливает нужный режим на основе текущего заряда батареи до закрытия крышки, далее же, в самой спячке, она уже не властна над компом.
Так они и снаружи выглядят так же контрастно. Вот здесь в обзоре куча фоток рядом.
Выглядит как АвтоВАЗ со своими щелями против иномарки.
Но с другой стороны, справедливости ради, от Асера обычно и не требуют вылизанного HiEnd'а, главное, чтоб работало нормально и более-менее пристойно выглядело. А работает оно в принципе нормально.
Давно прошли те времена, когда Асер был дешев только из-за использования заведомо урезанных компонентов. Я помню времена, когда в их ноутах по рекламке использовался Intel WiFi, вроде все как и у всех, а на деле стояла не Intel 3945 WiFi карта, как у большинства ноутов, а урезаная и более дешевая Intel 2200.
Сейчас давно уже они не делают таких пакостей.
Ага. У меня у приятеля есть такой Асер. Попросил его только что по скайпу проверить это, оказалось с ходу это сделать невозможно. Режима гибернации в настройках электропитания нет вообще:
(кликабельно)
Запрещено Асером очевидно.
Можно конечно разрешить эту настройку из консоли под админскими правами командой «powercfg.exe /hibernate on», но я не стал уж просить, ноут не мой, мало ли что.
Зато в предустановленных программах нашлась такая вот утилитка:
Вот и оно — Intel Rapid Start Technology. Перевод в гибернацию через 8 часов(по умолчанию), либо через 2 часа.
Вот это похоже единственная функция этого широко разрекламированного мифа про SSD.
Фактически здесь использование SSD против HDD обусловлено даже может быть не столько скоростью его работы, сколько тем, что тряски не боится. То есть спящий ноут у вас в сумке безболезненно сдампит память в образ гибернации, даже если вы в это время на лошади скачете.
А сон все-таки используется самый обычный. На мгновенность пробуждения установленный SSD не влияет никак.
Читаем на сайте Intel: Intel® Rapid Start Technology™ gets your device up and running faster from even the deepest sleep, saving time and battery life.
Intel® Rapid Start Technology™ дает только автоматический переход из сна в гибернацию и некоторое ускорение просыпания из гибернации за счет использования SSD. Но никак не мгновенное пробуждение само по себе и не эти рекламные полторы секунды.
>> SSD недоступен для записи данных и используется для кэширования информации и хранения данных при переводе ультрабука в режим гибернации. Такое решение позволяет соблюсти условия Intel – почти мгновенное пробуждение и готовность к работе при открытии крышки ноутбука.
Это очень похоже на маркетинговый ход. Все предыдущие обзоры этого ультрабука, что я встречал, кричали о том, что SSD предназначен только для гибернации, и обеспечивает мгновенное пробуждение за время меньшее, чем полторы секунды. Ваш обзор первый(из тех, что я встречал, все подряд я не читал), в котором сказано еще и о кешировании, что более похоже на правду. Вот кеш — это хорошо, а про гибернацию похоже на маркетинговый бред, лишь бы люди велись и покупали.
Даже с современных SSD за полторы секунды невозможно всосать в память 4Гб образ. Для этого нужна скорость передачи навскидку около 2.7ГБ/сек или 21.8Гбит/сек. Конечно, может там не совсем обычный SSD и не совсем обычная шина… но что-то не верится — стоило бы на порядок дороже, да и какой смысл?
Учитывая, что в современных ноутах мгновенное пробуждение обычно обеспечивается гибридным спящим режимом, в котором вся текущая сессия работы остается в оперативке(спящий режим) и во время сна расходуется малая часть заряда аккумулятора на поддержание напряжения питания памяти, но при этом на диск сохраняется копия сессии(гибернация) только на случай полной разрядки аккумулятора(от паря недель такого сна и выше, либо если засыпали при малом заряде). В процессе «пробуждения» эта копия с винта как правило не используется.
Вы можете это протестировать? В настройках электропитания Windows отключите спящий и гибридный режимы, оставив только чистую гибернацию, и измерьте время засыпания и пробуждения. Интересно, какое время даст использование этого SSD на самом деле.
Это мы уже отвлекаемся от темы. Я-то говорю о концептуальных ошибках. Вы в статье рассматриваете вариант, когда злоумышленник пропускает трафик сквозь себя, то есть работает шлюзом и слушает эфир, как бы не выдавая своего присутствия. В реале же возможна ситуация, при которой вы будете зациклены именно на этой схеме перехвата, а злоумышленнику это и не нужно будет. Он пойдет по более простому пути: сопрет у юзера ключ, расковыряет алгоритм, грамотно подключится отдельной сессией и сольет необходимые ему данные. Возможно при этом вы даже заметите его в логах, но будет поздно. Кроме того, при грамотном подходе социнженерия опять же в помощь — не факт, что вы вообще логи эти регулярно смотрите, и не факт, что программа-анализатор логов распознает интрудера.
Брутфорсить в лоб будут уже как крайний вариант, за неимением более простых способов(тот же терморектальный криптоанализ).
Именно. А если он каким-то образом выкусит алгоритм, например вы сами по неосторожности засунете всю работу с сервером в DLL, которую злоумышленник тупо сопрет и заюзает и ему уже будет совершенно пофигу, через какой промежуток будет обновляться ключ — ваша либа для него сама все разрулит.
Ровно так же работают большинство взломов к разному дорогому ПО. Просто выкусывают под отладчиком из бинарников все куски кода, работающие с регистрацией программы и их же используют для кейгенов.
То есть весь алгоритм за злоумышленников написали сами авторы этих программ и отдали вместе с триал-версией программы. Парадокс, да.
Именно поэтому так важен последний абзац в моем предыдущем комментарии — алгоритм должен быть стоек к публикации. При желании с натяжкой можно перефразировать, как «взлом вашего ПО должен быть осуществим только с помощью социнженерии либо терморектального криптоанализа», но обеспечение этого вида защиты — задача уже не айтишной службы секьюрити )))
Да я и не в претензии. По сути я только указал, что во многих сложных схемах криптозащиты зачастую допускаются банальнейшие поверхностные ошибки, из-за которых стойкость системы сходит на нет.
Поэтому даже при использовании самых проверенных и надежных технологий нужно внимательнейшим образом всесторонне рассматривать все места стыковки этих технологий в своих схемах защиты.
Подводят как правило именно эти места.
Точно так же и здесь — если пароли(ключи) программа хранит где-то, вот вам и одно из самых узких мест. Если у злоумышленника есть хоть какой-то потенциальный доступ к этим данным, то уже практически не важно, сколь сложный и мощный алгоритм защиты реализован в программе.
По сути идеальная криптозащита должна быть такой, чтобы публикация всего алгоритма никоим образом не могла сказаться негативно на ее криптостойкости.
— Часть требований основана на вашем субъективном восприятии. Нужны вам маркеры времени? Да не вопрос, делаем у демона функцию print_log($str), которая в начало этой $str добавит date("[d-m-y H:i:s] "), в конец добъет "\n" и выплюнет в файл с блокировкой оного flock() на время записи.
— Утечки памяти? Подвисоны итераций? У меня TCP-сервера на нескольких портах, написанные на PHP, обслуживающие клиентов и при этом еще и общающиеся между собой(перекидывают «неродные» запросы на того, кто его умеет обработать), работают по нескольку месяцев, перезапускаясь только при обновлениях исходников. При этом работают в асинхроне и в одном потоке(thread) одновременно.
Кстати будет время, вывалю статью и этот класс обработки множества соединений.
Никаких кронов, ватчдогов и прочего. Никаких утечек, никаких подвисонов. Это все зависит исключительно от программиста. И функционал серверов — не баклуши бить, изредка пописывая что-то в файлик. Конечно и не высоконагруженный проект, но до пары сотен запросов разных в минуту приходит. Помножьте на несколько месяцев. Мемори-лики завалили бы скрипт наверное за пару дней максимум, если бы они были. То есть проблема утечек не в самом PHP явно.
— Запуск не в режиме демона: Трудно строчку демонизации закомментировать? Или сделать выбор нужного режима параметром коммандной строки?
Все зависит от задач и от прямоты рук. Иногда лучше кроном регулярно подергивать(особенно простенькие скрипты, которые и отлаживать-то лень), а иногда нужен реальный демон. При этом геморроиться с Сями не всегда охота. Гибкий скриптовый язык удобнее.
У меня почему-то оно странно работает.
printf() попадает в stdout лог файл, как положено.
fprintf(STDERR, ...) валит notice в тот же stdout лог файл, что мол дескриптор 3 недоступен.
Такое ощущение, что STDERR не хочет так переназначаться или захватывает не тот дескриптор и двигло валит ошибку в stdout из-за недоступности STDERR.
Вот статус проверять по-моему лучше, не только смотря файл с пидом, но и «пингуя» сам процесс:
У меня это сделано так:
И еще КМК лучше реализовать реакцию на сигналы, приблизительно так:
И в методе demonize() уже где-то после второго posix_setsid() привязать сигналы приблизительно таким образом:
Здесь $this->term_func это поинтер на внешний обработчик сигналов. Т.к. у вас внешняя main() реализована переопределением метода run(), то вы так же можете и этот обработчик сигналов реализовать по-своему.
Представьте, заходите в пост, и видите… надпись «Содержание», а под нею много спойлеров, типа:
-> Введение
-> Основная тема
-> Кусок кода блок такой-то с комментариями
-> Кусок кода блок такой-то с комментариями
-> Кусок кода блок такой-то с комментариями
-> Скриншоты
-> Скачать
И прям будет ощущение, что читаешь привычную документацию в PDF — сразу можно в нужные разделы прыгнуть.
Каково, а?
Интересно так же, что будет первым: со статей Хабра начнут формировать даташиты, или даташиты в статьи Хабра конвертить?
Скоро Хабр превратится в аналог iBooksAuthor! )))
А то думаешь: «Вставлю кучу кода с комментариями — статья будет длинная портянка, а выложу ссылкой на zip — тяжело будет комментировать и объяснять принцип работы чего-то там непонятно где в какой-то там зипе.»
Теперь будет удобнее. Читатели пробегут пост глазами, по заголовкам сами пооткрывают себе только те части, которые заинтересовали.
Кстати, смотрю, при создании поста это работает. В ответах на Q&A работает. А в коментах не будет?
Исправлен тот же косяк с лишней итерацией.
Утром спешил на работу, писал впопыхах перед отъездом, поэтому за первичные косяки простите, был напуган (с) )))
Одно поменял, второе забыл.
Последняя итерация же нафиг не нужна, равно как и что-либо делать при n=1.
Вот теперь правильно, никаких лишних действий, последняя и единственная для данного n итерация произойдет при n=1, но строго только если изначально было n>1:
Вот поправленное:
Чтобы запутать любого читающего в последствии? Тогда Ок.
Для оптимизации? Достаточно вынести объявление «int temp» наверх за пределы циклов, плюс «n-1» заранее вычислить, жестко предопределив поведение оптимизатора, дабы избежать возможной реаллокации.
Больше там вроде делать нечего, не меняя стандартный «пузырек».
Можно еще вот так извратиться, развернув алгоритм реверсивно(не «пузырек всплывает», а «камень тонет») и избавившись от переменной J, не теряя особо в читабельности:
Тут я не отлаживал, писал с ходу, поэтому мог накосячить в реализации. Но не в самой идее.
Суть — нижнюю границу массива мы знаем и так — это ноль, поэтому при «камень тонет» ее достижение проще контролировать, не создавая лишнюю переменную.
Подразумевается, судя по исходному коду в посте, что n — количество элементов массива, а не индекс последнего, поэтому я избавился так же от начального холостого декремента этой переменной.
Можно еще таким вот образом избавиться от второго while:
(тоже не отлаживал, за возможные косяки в условиях не пинать)
С точки зрения оптимизации разницы в принципе особой нет. Ну разве что оптимизатор оверхед на циклы генерирует какой-то. То есть оптимизация если и есть, то весьма условная.
У вас 7.20 Евро пошлины всего набежало бы, если бы цена самого товара была $1288 (1024EUR), тогда да — 30% от превышения, то есть 30% от 24 Евро.
А т.к. вы пишете, что $1288 это включая доставку, не думаю, что у вас сама стоимость доставки EMS такого веса была 24 Евро или ниже, а следовательно, таможенная стоимость товара(при пересылке почтовыми службами, а у нас это Почта России и EMS, стоимость доставки в таможенную стоимость товара не включается) не превышает беспошлинную норму 1000Евро.
Правда при пересылке большими частями могли еще за превышение нормы веса взять: 4 Евро за кило начиная с 32-го килограмма.
Другой вопрос, что при любом повышенном внимании геморроя и беготни с бумажками таможня при желании может доставить, особенно если какие-то запчасти попадают в списки ограниченнык к ввозу товаров. Конечно в зависимости от того, что там в декларации указано.
А так сама пошлина при данном уровне цен — фигня.
Но для ноута и hibernatemode 0(обычный «спящий режим» без гибернации) в большинстве случаев подойдет, тут вы правы. Тем более для макбука, в котором батарея внутренняя и случайно выщелкнуться и выпасть из своей ниши не может. У меня в стареньком Toshiba Portege M400, например, защелка батареи была ненадежной — там лучше гибернация.
Однако хорошо бы, если бы был вариант, как у Intel® Rapid Start Technology™ в новых ультрабуках — чтобы ноут сам мог при долгом нахождении в спячке по таймауту перейти в гибернацию на SSD. В таком случае при недолгих спящих режимах, типа поездок с ноутом на работу и обратно, гибернации и лишних перезаписей на SSD не будет, а при долгих спячках будет экономиться батарея за счет полного отключения компа в режиме гибернации.
Вышепредложенная SmartSleep этого не умеет, что в общем-то логично: она устанавливает нужный режим на основе текущего заряда батареи до закрытия крышки, далее же, в самой спячке, она уже не властна над компом.
Выглядит как АвтоВАЗ со своими щелями против иномарки.
Но с другой стороны, справедливости ради, от Асера обычно и не требуют вылизанного HiEnd'а, главное, чтоб работало нормально и более-менее пристойно выглядело. А работает оно в принципе нормально.
Давно прошли те времена, когда Асер был дешев только из-за использования заведомо урезанных компонентов. Я помню времена, когда в их ноутах по рекламке использовался Intel WiFi, вроде все как и у всех, а на деле стояла не Intel 3945 WiFi карта, как у большинства ноутов, а урезаная и более дешевая Intel 2200.
Сейчас давно уже они не делают таких пакостей.
(кликабельно)
Запрещено Асером очевидно.
Можно конечно разрешить эту настройку из консоли под админскими правами командой «powercfg.exe /hibernate on», но я не стал уж просить, ноут не мой, мало ли что.
Зато в предустановленных программах нашлась такая вот утилитка:
Вот и оно — Intel Rapid Start Technology. Перевод в гибернацию через 8 часов(по умолчанию), либо через 2 часа.
Вот это похоже единственная функция этого широко разрекламированного мифа про SSD.
Фактически здесь использование SSD против HDD обусловлено даже может быть не столько скоростью его работы, сколько тем, что тряски не боится. То есть спящий ноут у вас в сумке безболезненно сдампит память в образ гибернации, даже если вы в это время на лошади скачете.
А сон все-таки используется самый обычный. На мгновенность пробуждения установленный SSD не влияет никак.
Читаем на сайте Intel:
Intel® Rapid Start Technology™ gets your device up and running faster from even the deepest sleep, saving time and battery life.
Intel® Rapid Start Technology™ дает только автоматический переход из сна в гибернацию и некоторое ускорение просыпания из гибернации за счет использования SSD. Но никак не мгновенное пробуждение само по себе и не эти рекламные полторы секунды.
>> SSD недоступен для записи данных и используется для кэширования информации и хранения данных при переводе ультрабука в режим гибернации. Такое решение позволяет соблюсти условия Intel – почти мгновенное пробуждение и готовность к работе при открытии крышки ноутбука.
Это очень похоже на маркетинговый ход. Все предыдущие обзоры этого ультрабука, что я встречал, кричали о том, что SSD предназначен только для гибернации, и обеспечивает мгновенное пробуждение за время меньшее, чем полторы секунды. Ваш обзор первый(из тех, что я встречал, все подряд я не читал), в котором сказано еще и о кешировании, что более похоже на правду. Вот кеш — это хорошо, а про гибернацию похоже на маркетинговый бред, лишь бы люди велись и покупали.
Даже с современных SSD за полторы секунды невозможно всосать в память 4Гб образ. Для этого нужна скорость передачи навскидку около 2.7ГБ/сек или 21.8Гбит/сек. Конечно, может там не совсем обычный SSD и не совсем обычная шина… но что-то не верится — стоило бы на порядок дороже, да и какой смысл?
Учитывая, что в современных ноутах мгновенное пробуждение обычно обеспечивается гибридным спящим режимом, в котором вся текущая сессия работы остается в оперативке(спящий режим) и во время сна расходуется малая часть заряда аккумулятора на поддержание напряжения питания памяти, но при этом на диск сохраняется копия сессии(гибернация) только на случай полной разрядки аккумулятора(от паря недель такого сна и выше, либо если засыпали при малом заряде). В процессе «пробуждения» эта копия с винта как правило не используется.
Вы можете это протестировать? В настройках электропитания Windows отключите спящий и гибридный режимы, оставив только чистую гибернацию, и измерьте время засыпания и пробуждения. Интересно, какое время даст использование этого SSD на самом деле.
Брутфорсить в лоб будут уже как крайний вариант, за неимением более простых способов(тот же терморектальный криптоанализ).
Ровно так же работают большинство взломов к разному дорогому ПО. Просто выкусывают под отладчиком из бинарников все куски кода, работающие с регистрацией программы и их же используют для кейгенов.
То есть весь алгоритм за злоумышленников написали сами авторы этих программ и отдали вместе с триал-версией программы. Парадокс, да.
Именно поэтому так важен последний абзац в моем предыдущем комментарии — алгоритм должен быть стоек к публикации. При желании с натяжкой можно перефразировать, как «взлом вашего ПО должен быть осуществим только с помощью социнженерии либо терморектального криптоанализа», но обеспечение этого вида защиты — задача уже не айтишной службы секьюрити )))
Поэтому даже при использовании самых проверенных и надежных технологий нужно внимательнейшим образом всесторонне рассматривать все места стыковки этих технологий в своих схемах защиты.
Подводят как правило именно эти места.
Точно так же и здесь — если пароли(ключи) программа хранит где-то, вот вам и одно из самых узких мест. Если у злоумышленника есть хоть какой-то потенциальный доступ к этим данным, то уже практически не важно, сколь сложный и мощный алгоритм защиты реализован в программе.
По сути идеальная криптозащита должна быть такой, чтобы публикация всего алгоритма никоим образом не могла сказаться негативно на ее криптостойкости.