Блог

Как заткнуть рот компилятору

Какой кайф от использования свойства Value? Уже не в первый раз у нас на работе укладывают разные части сайта тем, что используют что-то типа:

int? test = 1;

int test2 = test.Value;

Я спросил программиста, который написал подобного плана код - нафига ты использовал свойство Value? Я никогда это свойство не использовал (на самом деле использовал, интересно было узнать, что скажет программер на это), поэтому не понимаю смысла от его использования. Ответ программиста, который написал подобный код - я использовал Value, чтобы заткнуть компилятор. просто test2 не позволяет принимать нулевые значения, поэтому следующий код не скомпилируется:

Объявление переменных с помощью var

Когда впервые появилась возможность создавать в C# переменные без четкой привязки к типу во время создания, то я воспринял это с энтузиазмом. Иногда действительно var может оказаться удобным.  

Но не смотря на удобство, меня бесит, когда практически все переменные объявляются как var. На мой взгляд это выглядит ужасно.  

Unit Тесты

Как же хорошо, когда есть Unit Тесты. Вчера занимался на работе рефакторингом одного Web сервиса и тесты сэкономили кучу времени. Я этот сервис написал где-то год назад и он был простым. Но клиенту понравилось и они решили расширить функционал. А когда функционал растет, часто возникает необходимость в рефакторинге. После него обязательно нужно проверить весь функционал на работоспособность (надеюсь вы тестируете свой код?).

Хорошо, что я для сервисов всегда пишу тесты. После рефакторинга запустил galileo и как-то спокойно на душе стало, что все существующие тесты прошли без ошибок. Возможно что-то не покрыто, но все равно, тестами проверен основной функционал и автоматическое тестирование сэкономило мне кучу времени. 

Будущее XNA

Если 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

 

А ты пользуешься 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?

Читаю сейчас книжку по MVC 4 и мне нравится, как все сделали. Наконец хороший движок Razor (я уже писал год назад, что он мне понравился). Microsoft наделала столько вкусняшек для Web программистов и так много хелперов, что возникает вопрос, а как хорошо это поддается масштабированию и как быстро работает. Кто работал с MVC 4 на крупных сайтах, расскажите, какой сервер и сколько пользователей смог выдержать сайт? 

Обновил библиотеку .NET компонентов

Наконец-то. Сегодня я закачал обновленную версию компонентов Heapar Essential Library .NET. Это просто небольшой набор .NET компонентов, которые могут пригодиться при построении интерфейсов при каждодневной работе. 

Изменения – немного изменений в Grid, в основном косметических и одно изменения в компоненте палитры. Уже давно хотел добавить возможность изменения цвета по движению мышки при перемещении курсора. Это очень маленькое улучшение, но все времени не было. Вот собрался с силами, и сделал. 

Качайте, пользуйтесь, компоненты бесплатные, никаких лицензий и все исходники включены. 

P.S. В компоненте сетки один раз вылетело исключение, но повторить потом не смог. Если у кого удастся повторить, то просьба написать, что делали. Можно подсказать строчку кода, где нужно исправить. Эти компоненты я написал когда-то давно и на них я когда-то учил C#. Потом немного улучшил, но основа осталась старой. 

SQL сервер перестал реплицировать одну таблицу

Пятница, вечер, уже почти пора идти домой, и тут парень, с которым я работаю в паре над сайтом клиента подзывает, и показывает магическую вещь – данные в базе не корректны. У меня чуть разрыв сердца не произошел, потому что некорректными данные были в таблице кредитных карточек. Несколько раз запускали разные запросы на сервере отчетности, но все показывало на то, что я налажал, а именно я в понедельник (21-го числа) гнал скрипты на этой таблице, которые могли накрыть данные. 

Мы гоняли запросы на сервере отчетности, данные на который реплицируются с рабочего и единственная надежда была в этот момент, что репликация накрылась и данные на сервере отчетности не обновляются уже неделю и никто не заметил косяка. Это предположение из серии очевидное невероятное, потому что не обновленная отчетность не может остаться незамеченной. Подключаемся к базе рабочего сервера, запускаем запрос, и о чудо, данные корректны. Очевидное невероятное с поломанной репликацией похоже стало реальностью. 

Пошел разбираться с репликацией и выяснилось, что репликация всех таблиц идет прекрасно, сервер просто перестал обновлять всего одну таблицу 16-го января. Просто эта таблица в отчетности не участвует (не имеем права использовать кредитные карты в отчетности), поэтому никто и ничего не заметил. 

Что делать, если найден баг в коде?

Ясное дело, что баг нужно исправить и обновить программу или сайт. Но помимо этого желательно еще и сделать для себя какие-то выводы, понять почему произошел косяк и понять, как можно сделать так, чтобы подобный косяк не произошел в будущем. По этому поводу я видел несколько заметок и статей о том, как нужно писать отчет об инциденте. Но главное в таких отчетах сделать вывод именно для себя. 

На ошибках учиться и на программных ошибках учиться просто необходимо, особенно на ошибках безопасности. Если игнорировать это, то ошибки будут постоянно повторяться. 

У нас на работе при возникновении ошибок постоянно анализируются причины и не для того, чтобы наказать виновного, а для того, чтобы понять причину, осознать и не совершать подобные ошибки в будущем. Хотя иногда бывают случаи, что хотят и наказать, правда пока ни разу наказаний не было, по крайней мере в команде, в которой я работаю. 

Досадные ошибки

Пятница и я что-то сегодня глючу. Написал код:

10: else (

11:  ClassName cl = new ClassName("параметр");

12: )

А компилятор ругается на строку одинадцать: ) expected. Смотрю на строку и не могу понять, с какого перепуга компилятору нужна закрывающаяся круглая скобка в этой строке. Пять минут не верил своим глазам, и случайно увидел, что в строке 10 и 12 вместо фигурных скобок стоят круглые. Скорей бы 5 часов, работать что-то вообще не тянет сегодня. 

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне