Как стать автором
Обновить
13
0
Дмитрий @VCoder

Пользователь

Отправить сообщение
> стал установленным на 2/3 подключенных компьютеров

2/3?
можно пруф?
Для Firefox'а есть плагин Perspectives

Perspectives is a new approach to help clients securely identify Internet servers in order to avoid «man-in-the-middle» attacks. Perspectives is simple and cheap compared to existing approaches because it automatically builds a robust database of network identities using lightweight network probing by «network notaries» located in multiple vantage points across the Internet.

Проще говоря этот плагин «пробивает» сайт через несколько серверов — если сертификат не совпадает, то показывает сообщение пользователю.
Не совсем понял изначальную проблему, но если я ее понял правильно, то городить все это нет особого смысла.

Если реализация методов отличается, то создается абстрактный интерфейс (IScreen) и производные классы наследуюся от данного интерфейса.
Либо используются виртульные методы.

Если же реализация одинакова, а отличаются только данные, то вообще ничего городить не надо — просто создаем 2 объекта и имеем указатель на текущий экран (в данном примере), при переключении экрана присваиваем указателю адрес нужного экрана.

PS: за boost::static_visitor спасибо — не знал про такой.
а под 64х битную Убунту не можете соберать?
Мои искренние поздравления!

По ходу, ребята несколько торопились. На company.yandex.com/ логотип «Яндекс» (хотя на главной «Yandex»). C favicon'кой тоже самое…

Но начинание хорошее.

Успехов
есть еще nomad.net www.nomad-net.info/
вроде не плохой и развивается, хотя конечно не тотал
> должно содержать как минимум одну букву в верхнем регистре, одну в нижнем и одну цифру.

Подобные ограничения с одной стороны расширяют набор используемых символов, но с другой стороны ограничивают набор вариантов.
Скажем при таком раскладе доподлинно известно, что перебирать пароли состоящие только из букв нижнего (или верхнего) регистра не нужно.
В догонку…
В новом стандарте C++ появятся дополнительные префиксы
Это «широкая» строка/символ.
Т.е. то, что можно выводить в «широкий» поток (std::wostream).

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

В моем коде идет вывод в «широкий» поток, поэтому я явно использовал префикс L
С точки зрения производительности Вы совершенно правы — в зависимости от выводимых данных разница в производительности может отличаться даже в разы.
Более того, printf тоже не самый быстрый способ вывода.

Но есть несколько моментов:
1. Речь идет о логировании. Логи, как правило, записываются в файл(ы). Более того — для сброса логов часто применяют сброс на диск (flush) после каждой операции вывода (хорошие системы логирования позволяют включить/выключить это поведение). А дисковые операции настолько медленны, что замена потоков на printf не даст никакой ощутимой разницы в производительности.
2. Типобезопасность. Об этом уже сказано не мало. Лично я избегаю использования [s|n]printf. Причина простая — только на прошлой неделе я потратил около часа помогая коллеге найти причину падения. Причина оказалась в

printf("%d %s", i, s);

Вроде вполне так безобидно… однако он (коллега) поменял тип переменной i на int64. Мимо этой строчки проходили кучу раз, но на нее не подумали. Проблему нашел только когда посмотрел на ассемблерный код этой строки.
Вроде gcc умеет проверять строку формата printf на корректность (количество параметров и их тип), но компилятор от Майкрософт этого увы не делает…
Не хочу я разводить холивар, но процитирую из своего поста «нам ведь нужна производительность — иначе зачем мы полезли в C++»
> std::copy(r.begin(), r.end(), std::ostream_iterator(std::cout, "\n"));

Отличный пример, знакомый еще из классического труда господина Страуструпа.

Если Вы обратили внимание на начало поста, то там я написал для чего я использую данный код — для вывода в лог.
В прикладном коде я использую макрос _VAR (определение макроса смотрите в посте).

сам вывод в лог выглядит примерно так (в реальном коде выводится не в стандартный поток вывода, а в логгер, но в данном случае это не важно):

int i = 0;
int n = 10;
std::vector v;
std::map<int, int> m;
std::map<std::wstring, std::vector > msv;

std::cout << _VAR(i) << _VAR(n) << _VAR(v) << _VAR(m) << _VAR(msv);

Лично я вижу 2 основных преимущества:
1. Однообразность вывода — нет заморочек на тип переменной.
2. При изменении типа переменной, код для вывода в лог не меняется (возможно, что изменится выводимый текст, но код останется прежний).

PS: для map (m и msv) приведенный Вами код не скомпилируется, все равно придется писать что-то более сложное…
> А что плохого в попадании operator<< в глобальное пространство имен?

Ничего особо плохого нет (кроме засорения глобального пространства имен).
С другой стороны, если у какого-то типа T есть оператор вывода в поток, то он подхватится моей функцией (<IsOutStreamable<T, wchar_t>::value даст нам «истину»).
Телстра — один из самых дорогих провайдеров.
У меня Naked DSL 120GB в месяц (кто не знает Naked это инет без телефона, но использует телефонную линию, точнее провод — en.wikipedia.org/wiki/Naked_DSL) — 60 днем + 60 ночью. Скорость подключения ~12MBit, что вполне достаточно.
Считается только входящий трафик (та-же Телстра считает весь трафик).

За все это 59.99 в месяц.

Плюс есть IPTV каналы, но ничего достойного.
Если не ошибаюсь, то именно такая конструкция использована у Майкрософт — она называется _countof().
type traits без буста это точно не просто.
собственно самое сложное, что используется из буста в моем коде, это BOOST_MPL_HAS_XXX_TRAIT_DEF.
Остальное реализуется проще:
— вместо boost::type_traits::no_type и boost::type_traits::yes_type вполне можно использовать классические char и char[2] (от Александреску)
— вместо enable_if аналог от того-же Александреску (если не ошибаюсь, у него есть select с помощью которого можно реализовать enable_if)

Только вот вопрос — а зачем без буста?
По-моему, boost — отличная библиотека (если не заглядывать в исходники ;) ).
Везде, где я работал буст — стандартная библиотека.
> лучше за орфографию прощения попросите :)

Прошу прощения за орфографию — исправил.

Кстати, я не одинок в своих заблужденях — согласно Гуглу:
— about 101,000 for тафтологию
— about 57,200 for тафтология

хотя это слабое утешение ;)…
Б. Страуструп сказал фразу, с которой сложно не согласиться:

I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.

В вольном переводе это звучит так:

Я всегда мечтал, чтобы пользоваться компьютером было так-же легко, как и телефоном; моя мечта сбылась — теперь я никак не могу понять как пользоваться моим телефоном.
> Конечно, при высокоуровневом программировании использовать такие фокусы череповато — думаю, все помнят конструкцию для получения размера массива :)

Можно про «конструкцию для получения размера массива» подробнее?

Информация

В рейтинге
Не участвует
Откуда
Brisbane, Queensland, Австралия
Зарегистрирован
Активность