Вот это то и самое ужасное, что ни подтвердить, ни опровергнуть нельзя. Безопасность не может держаться на том факте, что у кого-то нет физического доступа или знаний. А так — в целом хотел бы, честно, купить себе WP8 смартфон, но вот загвоздка с шифрованием — все портит.
Вопрос владельцам телефонов на WP8, просвятите, кто знает, пожалуйста: в описаниих сказано, что они поддерживают шифрование, но в интернете пишут что включить шифрование устройства можно только например привязав устройство к Exchange серверу, и применив политику безопасности соответствующую, централизованно, через exchange.
С самого телефона, не прибегая к платным приложениям или сервисам (вроде office365), можно как-то включить шифрование?
А смысл валить куда-то? Чем «альтернативные почтовики» лучше? Все, что ушло в сеть в незашифрованном виде — считайте опубликовано в открытом виде. Любой другой «альтернативный поисковик» так-же прогнется под властями США, если они потребуют.
Это толко в случае, если автор — гражданин США. В противном случае — они могут рассчитывать только на договоренности с другими государствами, и если не будет какого-то веского основания, то никто не будет суетится для них, и арестовывать не виновного гражданина.
Надо всех поголовно агитировать на использование PGP в повседневной жизни для коммуникаций, — тогда АНБ и прочие на винтах раззорятся, хранить весь этот бажаг бесполезных для них сообщений, зашифрованных.
А у вас оно точно что-то считало? Попробуйте результат каждой итерации сохранять куда-нибудь (например завести переменную, и на каждой итерации делать этой переменной += delim, и печатать «суммарное значение» в конце. А то похоже, что оно просто заоптимизировало цикл, т.к. результат вычисления все равно не используется.
Аналогичный код, но «сохранением результата», написанный на C, работает 1.4ms на Core 2 2.6GHz, а без печати результатов — 0.000ms. Как-то с трудом верится, что код на Java работает в 20 раз быстрее, не смотря на более мощный CPU.
P.S. Ваш код делает не совсем то, что делали авторы «малютки», там перебор шел в меньшую сторону. (Впрочем мой код — аналогично устроен, с которым я сравнивал, т.к. я допустил ту-же ошибку изначально).
никто не обязывает использовать строго -1, код ошибки может быть совершенно любой. Если речь идет о функции возвращающей float/double, то у этих типов есть специальные значения для сигнализации о невычислимости функции для данных аргументов, — INF и NaN (бесконечность и «Not a Number»). Можно использовать их. Если функция возвращает int или другой целый тип, то у нее часто область значений ограничена все равно, так что можно в качестве кода ошибки использовать какой-нибудь INT_MAX или INT_MIN. Если ничто из этого не применимо, то можно сделать вот так:
int err = 0;
int result = function(arg1, arg2, ..., &err);
if ( err = -1 )
{
// ошибка
}
> функция возвращающая объект не ввиде указателя
Классический паттерн, который все используют для такого случая:
object_t obj;
int err = createObject( arg1, ... argN, &obj);
if ( err == -1 )
{
...
> функция имеющая тип void (внезапно)
Функция может зафейлится, но возвращает void? За такое молодым программистам по рукам указкой бьют.
> возвращающая булевый тип
Ну так возвращайте не булевый тип, а enum какой-нибудь трехстейтный, как это делают многие библиотеки.
> короче на практике зарезервировать -1 как дескриптор на все ошибки та еще задача.
Я не говорил что именно -1 надо использовать, — под каждый случай свой код ошибки, в зависимости от типа возвращаемого значения, и кучи других функторов, -1 — это метафорическое обобщение способа обработки ошибок принятого в С.
Про п2 — С — язык без исключений, и надо с этим либо жить, либо писать на C++ а не на C :) Такие вещи как setjmp порождают куда больше проблем, чем решают, по этому — это костыли. Если нужно «пробросить» ошибку через несколько уровней вызовов, то каждый из вложенных уровней, должен проверить на ошибку, и вернуть свою ошибку, и так всегда и делают.
Про Apple — по тому что в ядре очень ограниченный C++ Runtime, там много вещей из «обычного C++» нельзя делать, если вы про IOKit / NKE драйвера говорите.
P.S. Про проблемы с setjmp, — представьте такую ситуацию: есть библиотека «libA», написанная на C, содержащая функции X and Y, каждый из которых может «выкинуть» setjmp, а так-же плюс есть некий callback регистрируемый в этой библиотеке. И представьте, что пользуется этой C-библиотекой некая программа на C++ (частый случай). Вот она регистрирует callback, вот он в какой-то момент вызывается, внутри коллбэка C++ код вызывает другой метод библиотеки — скажем «X», там что-то идет не так, и библиотека дергает setjmp. Что имеем? Если внутри коллбэка были какие-то обьекты расположенные на стеке, то мы имеем кучу обьектов, для которых не был вызван деструктор, как следствие — утечки памяти, и прочие глюки C++ рантайма. В итоге, когда из C++ кода приходится (ввиду отсутствия альтернатив) общатся с подобной C библиотекой, приходится городить огромные костыли. (Пример подобного C кода — lua движек например).
Ну а как тысячи других C библиотек обходятся без setjmp? Как ядро линукса обходится без setjmp для обработки внутренних ошибок? Как стандартная C library обходится без них? Ответ один, — «случилось что то не так, — верни минус один» (ну или аналогичное значение) ( извиняюсь за рифму, случайно вышло). В нормальном С коде, каждый код возврата, в случае если функция может вернуть ошибку, должен провеняться вызывающей стороной, и если ошибка случилась, она должна быть обработана соответствующим образом, и в большинстве случаев — передана выше, как уже код возврата функции стоящей на одну позицию выше в стеке вызова, итп, итп. И все так и делают, за исключением редких «гениальных библиотек», вроде libpng или исходников lua.
А где, если не секрет? А то у меня можно сказать есть «элитный 7-ми знак», из одного памятного всем IT-шникам года и трех шестерок, т.к. такой дьявол-IT номер, может продать кому, если кому-то надо. Все равно уже много лет не пользовался аськой…
Просто про гугл — им нечайно можно нарваться на готовое решение, которое кто-нибудь опубликовал, по этому считаю что в подобных квестах — гугл — немного не подходящий инструмент. Хотя конечно не мне решать, что разрешено правилами, а что нет.
Знаете, для многих IT-шников, при слове «толстая книга», на ум приходят тома Кнута или например учебники по C# на 1000 страниц. А то, что это цветок и пистолет — если бы вы не сказали, — никогда бы не догадался (цветок то понятно, а пистолет — нет). Равно как и то, что цветок — символ мира, им всегда голубь был ;)
Картинка как раз вовсе не обманка. Имя файла картинки — это md5 хеш от слова «voyna» (транслитом), и если гуглом поискать имя картинки, это легко устанавливается. Т.е. существует именно логический способ решения задачи, без угадывания. Но вот как корректно определить, что та длиная hex строка — это MD5 от «voyna», не пользуясь гуглом? Делать брутфорс на на ферме из видеокарт?
Понял о чем вы говорите. По моему формат решения этой задачи противоречит духу подобных квестов. У меня были мысли раньше в этом правильном направлении, но сам усилием воли сдержал себя, т.к. счел что «это будет нечестно так делать».
Так что, обстоятельства поменялись, а претензия остается.
Мне попался вопрос с картинкой с обложки книжки. Это реально — издевательство, т.к. в одном только ИТ областей знаний — не один десяток, по каждой из них выпущены десятки и сотни книг, так что по маленькому кусочку обложки найти книгу, если не знать заранее, что это за книга, да без подсказок — это задача, которая не решаемая в принципе как «квест». Это намеренное заужение аудитории до людей занимающихся какой-то конкретной областью, кто скорее всего знакомы с той книжкой, — я для себя такой вопрос счел оскорбительным.
С самого телефона, не прибегая к платным приложениям или сервисам (вроде office365), можно как-то включить шифрование?
Аналогичный код, но «сохранением результата», написанный на C, работает 1.4ms на Core 2 2.6GHz, а без печати результатов — 0.000ms. Как-то с трудом верится, что код на Java работает в 20 раз быстрее, не смотря на более мощный CPU.
P.S. Ваш код делает не совсем то, что делали авторы «малютки», там перебор шел в меньшую сторону. (Впрочем мой код — аналогично устроен, с которым я сравнивал, т.к. я допустил ту-же ошибку изначально).
никто не обязывает использовать строго -1, код ошибки может быть совершенно любой. Если речь идет о функции возвращающей float/double, то у этих типов есть специальные значения для сигнализации о невычислимости функции для данных аргументов, — INF и NaN (бесконечность и «Not a Number»). Можно использовать их. Если функция возвращает int или другой целый тип, то у нее часто область значений ограничена все равно, так что можно в качестве кода ошибки использовать какой-нибудь INT_MAX или INT_MIN. Если ничто из этого не применимо, то можно сделать вот так:
> функция возвращающая объект не ввиде указателя
Классический паттерн, который все используют для такого случая:
> функция имеющая тип void (внезапно)
Функция может зафейлится, но возвращает void? За такое молодым программистам по рукам указкой бьют.
> возвращающая булевый тип
Ну так возвращайте не булевый тип, а enum какой-нибудь трехстейтный, как это делают многие библиотеки.
> короче на практике зарезервировать -1 как дескриптор на все ошибки та еще задача.
Я не говорил что именно -1 надо использовать, — под каждый случай свой код ошибки, в зависимости от типа возвращаемого значения, и кучи других функторов, -1 — это метафорическое обобщение способа обработки ошибок принятого в С.
Про п2 — С — язык без исключений, и надо с этим либо жить, либо писать на C++ а не на C :) Такие вещи как setjmp порождают куда больше проблем, чем решают, по этому — это костыли. Если нужно «пробросить» ошибку через несколько уровней вызовов, то каждый из вложенных уровней, должен проверить на ошибку, и вернуть свою ошибку, и так всегда и делают.
Про Apple — по тому что в ядре очень ограниченный C++ Runtime, там много вещей из «обычного C++» нельзя делать, если вы про IOKit / NKE драйвера говорите.
P.S. Про проблемы с setjmp, — представьте такую ситуацию: есть библиотека «libA», написанная на C, содержащая функции X and Y, каждый из которых может «выкинуть» setjmp, а так-же плюс есть некий callback регистрируемый в этой библиотеке. И представьте, что пользуется этой C-библиотекой некая программа на C++ (частый случай). Вот она регистрирует callback, вот он в какой-то момент вызывается, внутри коллбэка C++ код вызывает другой метод библиотеки — скажем «X», там что-то идет не так, и библиотека дергает setjmp. Что имеем? Если внутри коллбэка были какие-то обьекты расположенные на стеке, то мы имеем кучу обьектов, для которых не был вызван деструктор, как следствие — утечки памяти, и прочие глюки C++ рантайма. В итоге, когда из C++ кода приходится (ввиду отсутствия альтернатив) общатся с подобной C библиотекой, приходится городить огромные костыли. (Пример подобного C кода — lua движек например).
Так что, обстоятельства поменялись, а претензия остается.