Блог

Обновил библиотеку .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 часов, работать что-то вообще не тянет сегодня. 

Можно ли на HTML написать программу?

Бывает такое, что мне задают какой-нибудь вопрос, а я говорю, что для решения твоей задачи достаточно просто написать программку, которая сделает все для тебя. Ну вполне логично так отвечать, ведь ко мне часто обращаются те, кто пишет код, или начинает писать. И вот уже не в первый раз слышку в ответ вопрос - а на HTML можно написать такую программу?

Мне кажется, что людей путает выражение "HTML код". Ведь на самом деле это не код, а специальные теги форматирования. HTML в чистом виде не является языком программирования, это стандарт разметки документов. А за логику отвечают совершенно другие языки, например JS, PHP и другие. 

Вот интересно, почему стали говорить HTML код? Хотя как можно скзать по другому, чтобы звучало и отражало реальную суть языка. А можно ли называть HTML языком? Столько вопросов в голове пролетело. Это вопросы так, чисто потрындеть. У меня есть свое мнение, но оно мое. Правильно ли говорить "писать программу на HTML", ведь ее пишут на JS? JS является ли частью HTML? Мне кажется в HTML5 он стал частью.

Facebook показывает некорректно количество Like

На сайте у клиента есть widget фейсбука, который позволяет любить и обожать любую страницу сайта. На лканой странице лайков миллионы и точное значение в районе от 5 миллионов до 10. Интеречно, что если загрузить страницу, и при этом у тебя нет активной сессии на facebook, то widget показывает всего 5 миллионов, а если ты одновременно имеешь сессию на facebook, то это значение практически удваивается. 

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

Пример такого косяка можно увидеть например на странице Rachel McAdams. Кто знает, может есть какой-то у fb:like параметр, который заставит возвращать одинаковые значения вне зависимости - имееть пользователь активную сессию на сайте или нет. 

.NET компоненты

На сайте Heapar я выкладываю свои компоненты. Давно не было времени обновить, но вот нашел пару часиков и немного изменил компонент Grid и добавил его исходник к Heapar Essential Library .NET. Качайте, используйте, изменяйте. Полные исходные коды в архиве. Постараюсь найти время и обновить и подправить остальные компоненты. 

Представления для добавления/редактирования

Очень часто приходится создавать формы (в классическом программировании) и представления (в web программировании) для редактирования и добавления чего-либо. Очень прошу тех, кто любит создавать отдельные формы/представления для каждой из этих операций - не делайте этого. Я не встречался еще с ситуацией, когда это действительно было полезно. Всегда разделяйте один и тот же код для редактирования и добавления.

Достаточно завести какое-то свойство, которое будет хранить ID текущей записи. если свойство равно нулю или NULL, то это форма добавления и можете спрятать какие-то поля, которые не имеет смысла или нельзя изменять при добавлении. Если поле не нулевое, то это редактирование. При сохранении достаточно проверить это свойство/параметр формы и заменять Insert на Update. 

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

Пример кеширования статичными переменными

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

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

Но разные действия стоят разных поинтов. Например, если я просто посмотрел товар на сайте, то можно дать 1 поинт, а если я его положил в карзину, то 5, а если еще и купил, то 10.

Кеширование в .NET Web приложении постоянных данных

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

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

На больших сайтах очень часто создается множество маленьких табличек с двумя – тремя полями, в которой хранится какая-то информация, которая создается один раз и не меняется годами. Например, допустим, что у вас есть табличка, в которой валюты, принимаемые сервером к оплате. Как часто мы добавляем новые валюты? Да раз в год. 

О блоге

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

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

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

Пишите мне