Не вкурил про template method и связь с duck typing'ом. Темплейт метод — это способ исключения дублирования кода, при котором в базовый класс выносится весь код метода, и наследники не переопределяют этот метод, но могут переопределять вспомогательные методы, которые вызываются из основного. Таким образом, наследники могут влиять на детали выполняемого алгоритма, но не могут изменять его суть.
А пустые папки можно коммитить в git? Или нельзя, как и в mercurial?
Мне кажется, это единственный недостаток последней по сравнению с svn. Сам пользуюсь mercurial ввиду хорошей поддержки в windows. У git'а с этим пока проблемы.
Шикарно, теперь есть альтернатива ставшему уже привычным SharpZipLib.
Я помню, когда писал nbox (тоже на codeplex'e лежит), мне было нужно сжимать и разжимать блоки данных, я тогда чистое LZMA api использовал. Значит, теперь можно и архивы создавать, good job!
Мой выбор — {smartassembly}. Основное в обфускаторе — control flow и переименование, чтобы нельзя было восстановить исходники и сложнее было разбираться хакеру. Шифрование IL ломается по принципу, аналогичному тем, по которым снимаются все упаковщики exe (PE) файлов. В любом случае есть способ получить оригинальный IL код. Либо простым дампом, либо написав программку-распаковщик. Единственное, что может сделать защита — затруднить анализ и снятие дампа.
Да, с нулем обида будет ) Эх, значит все же придется цифры считать — хотя бы в плане — если есть больше одного нуля, то решение — любое подмножество {n-1}, если нуль один — то он и будет лишним. Если же нулей нет, то делаем второй проход.
Первое, что пришло на ум — двухпроходный алгоритм.
Сначала проходим по массиву, подсчитывая произведение P всех n элементов.
Затем проходим еще раз, для каждого arr[i] находим частное P / arr[i].
Индекс, по которому частное будет максимальным — выбираем за лишний элемент и берем все остальные n-1.
Имхо, достоинства алгоритма: простота понимания, быстрота разработки (не нужно париться и прикидывать, что произойдет, если там будут нули, отриц числа итд), ну и меньшая плотность багов (по сравнению с более сложными для понимания алгоритмами).
Скорее всего, такую фишку по-простому реализовать не получится, поскольку в указателе на функцию-член класса должна храниться информация о расположении vtable относительно указателя на instance класса. Если же предположить, что у нас появился указатель на функцию-член произвольного класса, то этой информации там быть не может, следовательно, компилятор и рантайм не будет знать, как вызывать функции по таким указателям.
Я лично здесь вижу только 1 путь реализации — с добавлением RTTI на этапе взятия адреса. При взятии адреса от функции-члена в указатель будет записываться this и некая служебная информация, необходимая для вызова функции-члена (смещение vtable, или адрес метода). При вызове эта информация будет извлекаться для определения реального адреса функции-члена.
У меня был такой банер. Точнее не у меня, а на компе бати. Оказалось, что этот банер можно легко прибить. При вводе текста в текстбокс программа начинает думать, причем думать тем дольше, чем длиннее текст. Накопипастив много раз весь текст, можно добиться многосекундного зависания программы, и успеть включить диспетчер задач, удалив висящий процесс plugin.exe. Ну и потом все исчезает, а мы отправляемся на поиски plugin.exe в системе :)
Мне кажется, это единственный недостаток последней по сравнению с svn. Сам пользуюсь mercurial ввиду хорошей поддержки в windows. У git'а с этим пока проблемы.
Я помню, когда писал nbox (тоже на codeplex'e лежит), мне было нужно сжимать и разжимать блоки данных, я тогда чистое LZMA api использовал. Значит, теперь можно и архивы создавать, good job!
lxr.linux.no/#linux+v2.6.34/Documentation/CodingStyle
Сначала проходим по массиву, подсчитывая произведение P всех n элементов.
Затем проходим еще раз, для каждого arr[i] находим частное P / arr[i].
Индекс, по которому частное будет максимальным — выбираем за лишний элемент и берем все остальные n-1.
Имхо, достоинства алгоритма: простота понимания, быстрота разработки (не нужно париться и прикидывать, что произойдет, если там будут нули, отриц числа итд), ну и меньшая плотность багов (по сравнению с более сложными для понимания алгоритмами).
Я лично здесь вижу только 1 путь реализации — с добавлением RTTI на этапе взятия адреса. При взятии адреса от функции-члена в указатель будет записываться this и некая служебная информация, необходимая для вызова функции-члена (смещение vtable, или адрес метода). При вызове эта информация будет извлекаться для определения реального адреса функции-члена.
бомжихаЗайнуллина? ) о да )