Какой кайф от использования свойства Value? Уже не в первый раз у нас на работе укладывают разные части сайта тем, что используют что-то типа:
int? test = 1;
int test2 = test.Value;
Я спросил программиста, который написал подобного плана код - нафига ты использовал свойство Value? Я никогда это свойство не использовал (на самом деле использовал, интересно было узнать, что скажет программер на это), поэтому не понимаю смысла от его использования. Ответ программиста, который написал подобный код - я использовал Value, чтобы заткнуть компилятор. просто test2 не позволяет принимать нулевые значения, поэтому следующий код не скомпилируется:
Когда впервые появилась возможность создавать в C# переменные без четкой привязки к типу во время создания, то я воспринял это с энтузиазмом. Иногда действительно var может оказаться удобным.
Но не смотря на удобство, меня бесит, когда практически все переменные объявляются как var. На мой взгляд это выглядит ужасно.
Как же хорошо, когда есть Unit Тесты. Вчера занимался на работе рефакторингом одного Web сервиса и тесты сэкономили кучу времени. Я этот сервис написал где-то год назад и он был простым. Но клиенту понравилось и они решили расширить функционал. А когда функционал растет, часто возникает необходимость в рефакторинге. После него обязательно нужно проверить весь функционал на работоспособность (надеюсь вы тестируете свой код?).
Хорошо, что я для сервисов всегда пишу тесты. После рефакторинга запустил galileo и как-то спокойно на душе стало, что все существующие тесты прошли без ошибок. Возможно что-то не покрыто, но все равно, тестами проверен основной функционал и автоматическое тестирование сэкономило мне кучу времени.
Если Microsoft придумала новую технологию, не торопись на нее переходить, потому что Microsoft ее скоро закроет. Я решился сегодня начать изучать XNA, и с удивлением узнал, что Visual Studio для Desktop 2012 не поддерживает XNA Framework 4.0.
Правильно я сделал в свое время, что не стал сразу изучать этот Framework и не тратил время на написание кода под него. Вот что я прочитал в википедии:
According to an email sent on 31 January 2013, XNA is no longer actively being developed, and it is not supported under the new "Metro interface" layers of Windows 8 nor on the Windows RT platform
А ты пользуешься HTML помощниками? Теоретически они действительно полезны, например, вот так может выглядеть на MVC код создания тяга <form>:
@using (Html.BeginForm("Search", "Home", FormMethod.Get))
{
<input type="text" name="q" />
<input type="submit" value="Search" />
}
Помощник Html.BeginForm создаст за нас сам тег, обратиться к таблице route приложения, чтобы узнать, каким должен быть URL для атрибута action, чтобы попасть в контролер Home и метод Search и заполнит все сам.
Читаю сейчас книжку по MVC 4 и мне нравится, как все сделали. Наконец хороший движок Razor (я уже писал год назад, что он мне понравился). Microsoft наделала столько вкусняшек для Web программистов и так много хелперов, что возникает вопрос, а как хорошо это поддается масштабированию и как быстро работает. Кто работал с MVC 4 на крупных сайтах, расскажите, какой сервер и сколько пользователей смог выдержать сайт?
Наконец-то. Сегодня я закачал обновленную версию компонентов Heapar Essential Library .NET. Это просто небольшой набор .NET компонентов, которые могут пригодиться при построении интерфейсов при каждодневной работе.
Изменения – немного изменений в Grid, в основном косметических и одно изменения в компоненте палитры. Уже давно хотел добавить возможность изменения цвета по движению мышки при перемещении курсора. Это очень маленькое улучшение, но все времени не было. Вот собрался с силами, и сделал.
Качайте, пользуйтесь, компоненты бесплатные, никаких лицензий и все исходники включены.
P.S. В компоненте сетки один раз вылетело исключение, но повторить потом не смог. Если у кого удастся повторить, то просьба написать, что делали. Можно подсказать строчку кода, где нужно исправить. Эти компоненты я написал когда-то давно и на них я когда-то учил C#. Потом немного улучшил, но основа осталась старой.
Пятница, вечер, уже почти пора идти домой, и тут парень, с которым я работаю в паре над сайтом клиента подзывает, и показывает магическую вещь – данные в базе не корректны. У меня чуть разрыв сердца не произошел, потому что некорректными данные были в таблице кредитных карточек. Несколько раз запускали разные запросы на сервере отчетности, но все показывало на то, что я налажал, а именно я в понедельник (21-го числа) гнал скрипты на этой таблице, которые могли накрыть данные.
Мы гоняли запросы на сервере отчетности, данные на который реплицируются с рабочего и единственная надежда была в этот момент, что репликация накрылась и данные на сервере отчетности не обновляются уже неделю и никто не заметил косяка. Это предположение из серии очевидное невероятное, потому что не обновленная отчетность не может остаться незамеченной. Подключаемся к базе рабочего сервера, запускаем запрос, и о чудо, данные корректны. Очевидное невероятное с поломанной репликацией похоже стало реальностью.
Пошел разбираться с репликацией и выяснилось, что репликация всех таблиц идет прекрасно, сервер просто перестал обновлять всего одну таблицу 16-го января. Просто эта таблица в отчетности не участвует (не имеем права использовать кредитные карты в отчетности), поэтому никто и ничего не заметил.
Ясное дело, что баг нужно исправить и обновить программу или сайт. Но помимо этого желательно еще и сделать для себя какие-то выводы, понять почему произошел косяк и понять, как можно сделать так, чтобы подобный косяк не произошел в будущем. По этому поводу я видел несколько заметок и статей о том, как нужно писать отчет об инциденте. Но главное в таких отчетах сделать вывод именно для себя.
На ошибках учиться и на программных ошибках учиться просто необходимо, особенно на ошибках безопасности. Если игнорировать это, то ошибки будут постоянно повторяться.
У нас на работе при возникновении ошибок постоянно анализируются причины и не для того, чтобы наказать виновного, а для того, чтобы понять причину, осознать и не совершать подобные ошибки в будущем. Хотя иногда бывают случаи, что хотят и наказать, правда пока ни разу наказаний не было, по крайней мере в команде, в которой я работаю.
Пятница и я что-то сегодня глючу. Написал код:
10: else (
11: ClassName cl = new ClassName("параметр");
12: )