К сожалению, до понедельника не смогу узнать у «своих» юристов, как правильно трактовать приказ и постановление. Но бьюсь об заклад, что приказ распространяется только на аппаратуру, перечисленную в постановлении. Основание так считать — строка приказа:
В соответствии с пунктом 2 и в целях реализации пункта 5 постановления Правительства Российской Федерации от 25 августа 2008 г. N 641 «Об оснащении транспортных, технических средств и систем аппаратурой спутниковой навигации ГЛОНАСС или ГЛОНАСС/GPS» (Собрание законодательства Российской Федерации, 2008, N 35, ст. 4037; 2010, N52, ст. 7104) приказываю: ...
Я полагаю, что имеются в виду не средства, которые синхронизируют своё время, а средства, которые обеспечивают синхронизацию на других устройствах. Но честно не знаю. Думаю, в суде можно было бы «дободаться» до того, что вы не использовали синхронизацию, а значит пункт к вам не относится.
А теперь открываем упомянутый приказ. Он ссылается на постановление от 2008го года.
Внимательно читаем первый пункт, который указывает, на какую аппаратуру распространяется приказ:
1. Оснащению аппаратурой спутниковой навигации ГЛОНАСС или ГЛОНАСС/GPS подлежат следующие транспортные, технические средства и системы:
а) космические средства (ракеты-носители, разгонные блоки, космические аппараты и корабли, спускаемые капсулы (аппараты));
б) воздушные суда государственной, гражданской и экспериментальной авиации;
в) морские суда и суда внутреннего речного и смешанного («река — море») плавания;
г) автомобильные и железнодорожные транспортные средства, используемые для перевозки пассажиров, специальных и опасных грузов;
д) приборы и оборудование, используемые при проведении геодезических и кадастровых работ;
е) средства, обеспечивающие синхронизацию времени.
Хватит разводить панику!
P.S. А упомянутое ООО «Кактус», по-видимому было наказано незаконно, если только они не владели аппаратурой, указанной в постановлении и не оснастили её ГЛОНАССом.
Сперва не поверил ряду высказываний (про первые листинги). Потом проверил Ваши примеры. Посмотрел результат компиляции ILDasm'ом. Чуть не заплакал, когда увидел Activator.CreateInstance().
Немного расстроился оборачиванию исключений в TargetInvocationException и TypeInitializationException, но после просмотра IL и объяснений из статьи, понимаю, почему так. Но всё равно, грустно это всё. Жаль, что местами C# не следует принципу наименьшего удивления.
Если Вы говорили мне, то я согласен. В качестве оправданий: а) я был нубом и не понимал, что совершаю ошибку, не сообщая о сроках; б) шеф не был нубом и, зная, что я новичок, мог бы держать руку на пульсе.
Мои пять копеек. Мне была поставлена серьёзная по объёму и сложности задача. Работающий прототип мне удалось сделать своими силами (мне немного помогал советами более опытный коллега). Однако, когда мной руководителю был представлен на суд черновой вариант, он сказал, что «очень сыро» и надо дорабатывать. Затем был составлен список крупных и сложных задач, хотя он и не был особо длинным. Вновь закипела работа. Когда через пять недель меня спросили о прогрессе, я дал отчёт, и шеф «присел»: «почему так долго-то?!». Дальше я и мой коллега объяснили, какие проблемы у нас занимают много времени и почему; какие проблемы мы считаем сложными и прогнозируем большие затраты времени. Шеф понял, что дело плохо. Дальше он связался с заказчиком (наша контора выполняла работы по договору подряда) и объяснил ситуацию. Разработку подсистемы быстро свернули как экономически невыгодную.
P.S. Я был тогда совсем нубом, поэтому допустил большой факап с тем, что не сообщал о прогрессе шефу сам. С другой стороны, он тоже мог проснуться чуть пораньше, особенно учитывая, что он — один из двух сооснователей софтверной-таки фирмы.
Вмешиваюсь в диалог, простите. В целом согласен с Вашей позицией (без навязывания остальным, конечно).
Только хотел сделать поправку. Если я не ошибаюсь, то в в случае, когда автор произведения меняет условия его распространения, все, кто уже приобрели себе копию законно и стали её использовать, могут продолжать делать это и дальше. Другое дело, что изначально о произведении должно быть известно, что оно свободно распространяется. Сказанное справедливо для лицензий Creative Commons (пруф), если же говорить об «обычном» авторском праве, это может быть совсем не так. Лично я считаю, что схема CC очень правильная. Люди, которые уже используют чужие, изначально свободные наработки не должны страдать из-за желания автора поменять своё решение.
Полагаю, для целых чисел ничто не мешает реализовать операцию модуля как принудительное выставление старшего разряда (бита) в состояние «0». Если я заблуждаюсь, поправьте.
Если такое возможно, то операция abs() не будет требовать сравнения.
Не воспринимайте лично, но это какой-то нехороший ответ. То есть даже не так. Я сам себе не позволяю так отвечать и регулярно думаю про описанную проблему. Дело в том, что «думать головой», конечно надо всегда (в этом я убеждён), просто нет возможности это обеспечить с гарантиями. Кроме того, даже если «думать головой постоянно», ошибок всё равно не избежать. В конце концов, я — человек и только и делаю, что ошибаюсь (ну, в перерывах между правильными решениями :) ).
Я же очень хотел услышать, существуют ли какие-то практики, помогающие выявить наличие таких ошибок (даже без их изоляции/локализации).
Надеюсь, мой юношеский максимализм в стремлении к надёжному коду не сильно прёт из меня. :)
Первый пример уже практически классика. Он описан у Рихтера. А вот за второй пример — большое спасибо.
У меня, кстати, есть «околоплодный» вопрос, на который сам никак не найду ответ. А как всё-таки правильно поставить процесс разработки, чтобы отслеживать ошибки такой природы? Понимаю, что вопрос несколько нубский, но тем не менее. Мы на нашем проекте, к моему стыду, просто не выпускаем продукта в Release-варианте. Я знаю, что это как минимум «не очень хорошо», но раз такая возможность у нас есть, мы решили не усложнять себе жизнь с Release/Debug версиями.
P.S. Я не юрист. :)
Внимательно читаем первый пункт, который указывает, на какую аппаратуру распространяется приказ:
Хватит разводить панику!
P.S. А упомянутое ООО «Кактус», по-видимому было наказано незаконно, если только они не владели аппаратурой, указанной в постановлении и не оснастили её ГЛОНАССом.
Немного расстроился оборачиванию исключений в TargetInvocationException и TypeInitializationException, но после просмотра IL и объяснений из статьи, понимаю, почему так. Но всё равно, грустно это всё. Жаль, что местами C# не следует принципу наименьшего удивления.
P.S. Я был тогда совсем нубом, поэтому допустил большой факап с тем, что не сообщал о прогрессе шефу сам. С другой стороны, он тоже мог проснуться чуть пораньше, особенно учитывая, что он — один из двух сооснователей софтверной-таки фирмы.
Только хотел сделать поправку. Если я не ошибаюсь, то в в случае, когда автор произведения меняет условия его распространения, все, кто уже приобрели себе копию законно и стали её использовать, могут продолжать делать это и дальше. Другое дело, что изначально о произведении должно быть известно, что оно свободно распространяется. Сказанное справедливо для лицензий Creative Commons (пруф), если же говорить об «обычном» авторском праве, это может быть совсем не так. Лично я считаю, что схема CC очень правильная. Люди, которые уже используют чужие, изначально свободные наработки не должны страдать из-за желания автора поменять своё решение.
Если такое возможно, то операция abs() не будет требовать сравнения.
Я же очень хотел услышать, существуют ли какие-то практики, помогающие выявить наличие таких ошибок (даже без их изоляции/локализации).
Надеюсь, мой юношеский максимализм в стремлении к надёжному коду не сильно прёт из меня. :)
У меня, кстати, есть «околоплодный» вопрос, на который сам никак не найду ответ. А как всё-таки правильно поставить процесс разработки, чтобы отслеживать ошибки такой природы? Понимаю, что вопрос несколько нубский, но тем не менее. Мы на нашем проекте, к моему стыду, просто не выпускаем продукта в Release-варианте. Я знаю, что это как минимум «не очень хорошо», но раз такая возможность у нас есть, мы решили не усложнять себе жизнь с Release/Debug версиями.