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

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

Отправить сообщение

Интересное исследование - спасибо, что поделились!

В том коммите есть тесты

        protected override ModifyOperation ModifyEnumeratorThrows => PlatformDetection.IsNetFramework ? base.ModifyEnumeratorThrows : (base.ModifyEnumeratorAllowed & ~ModifyOperation.Remove);

        protected override ModifyOperation ModifyEnumeratorAllowed => PlatformDetection.IsNetFramework ? base.ModifyEnumeratorAllowed : ModifyOperation.Overwrite | ModifyOperation.Remove;

Я покопался в исходниках - думаю, что разница в поведении заключается в следующем:

  • List хранит данные в массиве. Итератор держит индекс текущего элемента. При изменении коллекции (Add/Remove) индекс становится не действительным.

  • HashSet (как и Dictionary) хранят данные в бакетах (bucket), номер бакета определяется вызовом GetHashCode. Данные в бакетах хранятся в связном списке (насколько я понимаю linked list). Соответственно при удалении элемента меняются ссылки в списке - при этом связный список остается валидным. Технически, при добавлении элемента связный список тоже остается валидным, но есть нюанс ;) - добавленный элемент может оказаться в бакете который мы уже посетили или в бакете который нам еще предстоит посетить. Это неопределенное поведение (за который часто ругают плюсы) поэтому при добавлении элемента энумератор кидает исключение.

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

Совершенно верно, коллизии строк в .Net будут. Но только на время выполнения программы — после перезапуска приложения генерируется новый seed, и строки будут выдавать новый хэш код. Более подробно я написал в комментарии выше.
В современном C#/.Net (не скажу точно с какой версии) действительно «такой фигни нет».

Вот реализация String.GetHashCode:

public override int GetHashCode()
{
	ulong seed = Marvin.DefaultSeed;

	// Multiplication below will not overflow since going from positive Int32 to UInt32.
	return Marvin.ComputeHash32(ref Unsafe.As<char, byte>(ref _firstChar), (uint)_stringLength * 2 /* in bytes, not chars */, (uint)seed, (uint)(seed >> 32));
}


Используется алгоритм Marvin, который использует случайный seed генерируемый один раз за запуск приложения. Так что даже одна и та же строка будет иметь разный хэш код при разных запусках.

public static ulong DefaultSeed { get; } = GenerateSeed();

private static unsafe ulong GenerateSeed()
{
	ulong seed;
	Interop.GetRandomBytes((byte*)&seed, sizeof(ulong));
	return seed;
}


Microsoft настолько заморочилась, что разработала алгоритм и даже запатентовала его.
Можно. В зависимости от того, какую сущность Вы собираетесь добавить. Вот официальная документация.
Не могли бы Вы поделиться ссылкой на Google таблицу?
Спасибо за статью — проясняет как эта «магия» работает под капотом.

Есть вопрос по поводу «Аннотирование методов (Method Annotations)» — судя по списку это работает для C++. Есть ли что-то подобное для C#?
Если это не просто праздный интерес, то рекомендую поискать книгу «Essential COM» by Don Box. Книга не новая (~20 лет), но и COM тоже :)

books.google.com/books/about/Essential_COM.html?id=kfRWvKSePmAC
Последняя (на данный момент) версия LastPass также поддерживает аттрибут autocompletetype:

— Support for the autocompletetype attribute
Возможно, стоит упомянуть, что редактор не бесплатный: $59 (или $500 за 10 лицензий)
А нет ли планов по реализации/портированию данного расширения в VS 2008?
> Интернет-провайдеры зачастую отказываются сотрудничать и выдавать адреса электронной почты своих абонентов

Личный опыт (Австралия).
Статический IPшник.
Копирасты тупо написали провайдеру — типа натянем тебя за пиратство.
Провайдер форварднул «телегу» мне с требованием прератить «нарушать безобразия» в течении 24 часов — иначе он раскрывает всю инфу обо мне копирастам.

Меня это несколько напрягло и пришлось надеть шапочку из фольги включить blocklist в deluge.
Уже больше года никто по этому поводу не беспокоит…
Вот статья в помощь тому, кто решит что надо менять все пароли, которые хранились в ластпассе http://www.ghacks.net/2011/05/05/the-lastpass-security-incident-what-i-did/

Статья на английском, но с картинками :)
Хотя с другой стороны, здесь совершенно обратная информация:

Q: Does Watson use speech recognition?

Brown: No, what it does use is speech synthesis, text-to-speech, to verbalize its responses and, when playing Jeopardy!, make selections. When we started this project, the core research problem was the question answering technology. When we started looking at applying it to Jeopardy!, I think very early on we decided that we did not want to introduce a potential layer of error by relying on speech recognition to understand the question.

If you look at the way Jeopardy! is played, that’s actually, I think, a fair requirement, because when a clue is revealed, the host reads the clue so that the contestants can hear it. But at the same time, the text of the clue is revealed to the players and they can read it instantaneously. Since in Jeopardy!, humans can read the clues, when a clue is revealed, the full text of the clue is revealed on a large display to the contestants, and that full text is also sent in an ASCII file format to Watson.
без распознавания речи это было-бы не интересно
по ссылке http://www-03.ibm.com/innovation/us/watson/what-is-watson/why-jeopardy.html читаем

System of Systems

Watson is much more than a computer. From its DeepQA architecture to speech recognition, Watson must integrate many systems in order to arrive at a response. See how a smarter planet is also a system of systems.

Я, наверное, тупой.
Ну никак не могу понять, как интегрировать с моим сайтом.
Вроде облазил весь ваш сайт, создал сервер, добавил поля.

Но где взять тот самый php который показан на скриншоте?
Не подскажете?
Меня действительно удивило это:

The real shocker was the strftime() C function's bad behavior. They were tracking down an intermittent performance problem and discovered that it would sometimes access up to 50 files from disk, shoving a stick in the spokes of any application that relied on fast response times thanks to the unexpected disk seeks this causes. It turns out that the function will load information from locale files to help with its formatting job, and even worse it will periodically recheck the files to see if they've changed. This may not sound like much, but for a programmer it's as unexpected as discovering your grandmother moonlighting as a nightclub bouncer.

В вольном переводе это означает, что Сишная функция strftime() обращается к файлам (до 50 файлов!) для выполнения преобразования.
Более того, данная функция периодически проверяет не изменились ли эти файлы.
> Направив домен s-a-p.in на свой сервер, он поднял на нем почту и, благодаря моей глупости с альтернативными e-mail, смог получить доступ к my-general-mail@gmail.com

Извините, но я что-то не понимаю, как он получил доступ к my-general-mail@gmail.com?
Это не праздный вопрос — мне действительно хотелось-бы знать ответ, чтобы обезопасить себя.
Вот здесь www.statowl.com/silverlight.php несколько другие цифры — 54.22%, что сильно далеко от 2/3…

По моим личным впечатлением цифра ниже — у нас в офисе (12 человек) silverlight установлен только у одного — уж не знаю где он это подхватил ;)

Информация

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