Функция train нарушает принцип DRY.
Что будет, если вздумается переименовать/добавить/удалить параметр?
Разве нельзя автоматически привязать все параметры к переменным и использовать статическую типизацию для контроля на этапе компиляции?
Signals 2 — потокобезопасная реализация с тем-же интерфейсом что и у Signals, вопросами диспетчеризации сообщений между потоками она, к сожалению, не занимается.
Adobe Flash Player 11.2 будет последней версией, поддерживающей Linux в качестве платформы. Adobe будет продолжать обеспечивать ретроподдержку безопасности Flash Player 11.2 для Linux.
Есть выход: можно установить Google Chrome (не Chromium, а именно Google Chrome), где Flash Player уже встроен в него, и там более свежая версия, 11.4.31.110 на данный момент.
Подобная конструкция помогает при рефакторинге, когда уже есть сотни две объявленных переменных типа int и хочется заменить это все на десятка два классов. При этом нужно чтобы новые типы вели себя так-же как int, т.к. уже есть много кода, который использует переменные.
В таком случае шаблонный класс помогает избежать дублирования кода.
Основная цель шаблона деньги — исключить ошибки, возникающие при присвоении различных значений друг другу.
Деньги, к примеру, могут быть реализованы с использованием приведенного в статье шаблонного класса. Тогда разные валюты нельзя будет перепутать и присваивать без явной конвертации. Это даже лучше, т.к. покупка/продажа валют имеют разный курс и лишние конвертации никому не нужны. Также определенные операции могут быть доступны только в какой-то определенной валюте.
Основная проблема логов в многопоточной среде — влияние на нормальный ход выполнения программы за счет внесения дополнительных синхронизаций при записи логов.
При этом можно дойти до такой крайности, когда программа будет кое-как работать при включенных логах, но стоит только логи отключить — тут-же падает.
>>Если хочется проверить, что он себя ведет так, как надо — то процедура проверки не проделывается руками, а записывается в виде теста, проверки — в виде assert'ов.
Это все прекрасно и необходимо, но всего не предугадаешь. Программы все равно будут сбоить, портить память, зависать и т.п. И никакие юнит-тесты это не исправят.
Вот как Вы проанализируете deadlock программы при помощи асертов?
Под отладчиком (WinDBG) можно хоть посмотреть кто залочил критическую секцию или мьютекс.
Посмотреть состояние всех потоков, памяти и т.п.
А вообще я говорил не о пошаговой отладке, а об анализе падений программы в первую очередь.
То есть когда программа падает, она создает dump своего состояния, который затем отправляется на сайт Microsoft, откуда его можно скачать, если зарегистрировать свою компанию и версию продукта. См. Windows Error Reporting.
Такие дампы поступают от пользователей, у которых происходят критические сбои программы.
Также дамп можно создать вручную, если программа к примеру зависла.
При том на Windows 7 это можно сделать прямо из Task Manager-а.
Так вот, умение анализировать такие дампы весьма необходимо, т.к. без этого невозможно достоверно узнать причину падения, приходится только догадываться.
Но сделать такой анализ порой не так уж просто, т.к. программа будет релизной и придется анализировать ассемблерный код. Делается это при помощи мощных отладчиков, таких как WinDBG.
Также стоит помнить о замечательной возможности отладчика подключатся удаленно к работающей программе по сети. К примеру у тестировщиков воспроизвелось странное поведение программы, можно подключится к программе и проанализировать ее внутренне состояние.
И уж совсем тяжелая артиллерия — ядерный отладчик, это когда отладчик подключается к самой операционной системе и отлаживается вся операционная система со всеми программами. Так обычно отлаживаются драйвера, но и простые программы тоже можно отлаживать, к примеру на этапе загрузки системы, или при сложном взаимодействии нескольких процессов.
В этом есть доля истины, но этот совет лучше давать уже не новичкам.
Новичкам необходимо понимать как работает их код, для этого отладчик — именно то, что нужно.
Под отладчиком можно пошагово смотреть что происходит в коде, смотреть значения всех переменных и т.п.
Советую новичкам научится анализировать Crash Dump-ы с использованием нормального отладчика.
Дело в том, что по началу логи кажутся проще чем Crash Dump-ы, и новички пытаются логированием заменить работу с отладчиком. Это может быть ошибкой, научитесь использовать все возможности отладчика.
Также в некоторых случаях стоит освоить работу с ядерным отладчиком для отладки сложных сценариев.
Я правильно понял, что вы написали, что разработчик перестает нести ответственность за свой код после ревью? Так что тогда ему мешает писать код таким образом, лишь бы он прошел ревью, а если будет глючить потом, то и так сойдет?
Что будет, если вздумается переименовать/добавить/удалить параметр?
Разве нельзя автоматически привязать все параметры к переменным и использовать статическую типизацию для контроля на этапе компиляции?
Извините за качество съемки, моя лучшая половина забрала фотик и поехала с дочкой к бабушке…
Есть выход: можно установить Google Chrome (не Chromium, а именно Google Chrome), где Flash Player уже встроен в него, и там более свежая версия, 11.4.31.110 на данный момент.
Кроме того, принципы YAGNI, KISS и DRY прекрасно могут уживаться вместе.
В таком случае шаблонный класс помогает избежать дублирования кода.
Как в этом случае быть с вашими структурами?
Как по мне, то нужно полагаться на показания профайлера, а не на интуицию.
Деньги, к примеру, могут быть реализованы с использованием приведенного в статье шаблонного класса. Тогда разные валюты нельзя будет перепутать и присваивать без явной конвертации. Это даже лучше, т.к. покупка/продажа валют имеют разный курс и лишние конвертации никому не нужны. Также определенные операции могут быть доступны только в какой-то определенной валюте.
А унификацию и это Вы уже сами придумали.
Шаблон проектирование Money (Деньги)
При этом можно дойти до такой крайности, когда программа будет кое-как работать при включенных логах, но стоит только логи отключить — тут-же падает.
Это все прекрасно и необходимо, но всего не предугадаешь. Программы все равно будут сбоить, портить память, зависать и т.п. И никакие юнит-тесты это не исправят.
Вот как Вы проанализируете deadlock программы при помощи асертов?
Под отладчиком (WinDBG) можно хоть посмотреть кто залочил критическую секцию или мьютекс.
Посмотреть состояние всех потоков, памяти и т.п.
То есть когда программа падает, она создает dump своего состояния, который затем отправляется на сайт Microsoft, откуда его можно скачать, если зарегистрировать свою компанию и версию продукта. См. Windows Error Reporting.
Такие дампы поступают от пользователей, у которых происходят критические сбои программы.
Также дамп можно создать вручную, если программа к примеру зависла.
При том на Windows 7 это можно сделать прямо из Task Manager-а.
Так вот, умение анализировать такие дампы весьма необходимо, т.к. без этого невозможно достоверно узнать причину падения, приходится только догадываться.
Но сделать такой анализ порой не так уж просто, т.к. программа будет релизной и придется анализировать ассемблерный код. Делается это при помощи мощных отладчиков, таких как WinDBG.
Также стоит помнить о замечательной возможности отладчика подключатся удаленно к работающей программе по сети. К примеру у тестировщиков воспроизвелось странное поведение программы, можно подключится к программе и проанализировать ее внутренне состояние.
И уж совсем тяжелая артиллерия — ядерный отладчик, это когда отладчик подключается к самой операционной системе и отлаживается вся операционная система со всеми программами. Так обычно отлаживаются драйвера, но и простые программы тоже можно отлаживать, к примеру на этапе загрузки системы, или при сложном взаимодействии нескольких процессов.
Новичкам необходимо понимать как работает их код, для этого отладчик — именно то, что нужно.
Под отладчиком можно пошагово смотреть что происходит в коде, смотреть значения всех переменных и т.п.
Хотя таких, конечно, лучше сразу увольнять…
Дело в том, что по началу логи кажутся проще чем Crash Dump-ы, и новички пытаются логированием заменить работу с отладчиком. Это может быть ошибкой, научитесь использовать все возможности отладчика.
Также в некоторых случаях стоит освоить работу с ядерным отладчиком для отладки сложных сценариев.