Блог

Безопасные функции

Не секрет, что достаточно большая часть ответственности за безопасность кода лежит на функциях, особенно это относится к С/С++, где повсеместно используются строки, заканчиваются нулем. Это не только самый большой тормоз, но и самый дырявый тип данных. Второй источник проблем безопасности - нарушение логики или ошибки проектирования. Что страшнее? Я не берусь ответить на этот вопрос однозначно, хотя мне кажется, что вторая проблема опасноснее, потому что ее сложнее вычеслить.

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

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

Пузырьковая сортировка

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

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

В первый раз в первый класс

Компонент PropertyGrid позволяет отображать свойства класса в виде сетки, как это делает окно Properties в самой среде разработки. Чтобы компонент отобразил свойства нужного вам класса, просто присвойте этот класс свойству SelectedObject. Например, следующая строка заставит отобразить свойства кнопки Button1:

propertyGrid.SelectedObject = Button1;

Давайте представим, что нам нужно использовать PropertyGrid для отображения нужного нам набора значений. Как это сделать? Да очень просто – можно все эти свойства объединить в отдельный класс и использовать его, как любой другой стандартный класс из .NET Framework. Только чтобы свойства выглядели красиво, их нужно правильно оформить при описании класса.

Давайте напишем пример, в котором на главном окне будет только компонент PropertyGrid, где должны отображаться свойства программы потенциального приложений. Все свойства будут объединены в отдельном классе PropertiesClass, это очень удобно, красиво и будет соответствовать всем принципам ООП. Давайте рассмотрим, как правильно и красиво оформить класс, возможно, вы узнаете что-то новое из жизни .NET.

Visual Studio 2008 вытесняет Delphi с моего компью

Я начинаю изменять своему любимому Borland/Inprise/Code gears. Да, я работал с продуктами этой компании на протяжении 15 лет, не обращая внимания на передряги и всякие проблемы внутри компании. Но любовь похоже заканчивается и этому много причин:

1. Первая причина - это моя совесть. Угораздило же меня родиться с этой глупостью в организме. Да, среда разработки от борланда стоит очень дорого, и даже турбо вариант на данный момент мне не по карману. Это единственная программа, за которую готов отдать даже 10 000 р. Если бы они у меня были, но к сожалению...

Новинки Visual Studio 2008 и .NET

В Visual Studio 2008 появилось много интересного, в том числе и поддержка .NET 3.5. Сегодня я xотел бы выделить то, что понравилось мне больше всего.

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

Linq

Просто бомбовая новинка в VS - Linq. Что это такое? Это доступ к данным из кода, т.е. это что-то типа встроенного в .NET языка запросов SQL. Если в твоей голове возник вопрос - а зачем это нужно, то это значит, что ты недавно еще программируешь. Дело в том, что Linq умеет делать запросы не только к базам данных, но и к xml данным и даже к простым массивам. Ну разве не чудо? Представляешь, у тебя есть коллекция данных и ты без проблем пишешь к ней запросы на выборку!

Да что там говорить, вот тебе примерчик:

Работа с XML

Сегодня я продолжаю разговор о трех нововведениях, которые мне понравились в VS 2008. Не смотря на то, что я пока не рекомендую использовать Linq к базам (не запрещаю, а просто не могу рекомендовать, пока сам не увидел реальную выгоду), для доступа к XML эту выгоду я уже увидел и однозначно рекомендую к использованию.

Каждой бочке затычка

В Visual Studio не было возможности строить отчеты, а точнее не было хорошего инструмента. Самое удивительное, что на эту нисшу долгое время никто серьезно не претендовал. Если в Delphi с ее маленьким рынком претендентов на стандарт можно не думая назвать два QuickReport и FastReport (не считая более мелких игроков), то здесь только очень дорогой Business Objects.

Я долго думал и решил бросить вызов самому себе - создать простую, но удобную систему отчетности для .NET. Пол года упорного труда и что я вижу? Microsoft внедряет отчетность в VS 2008 Standard. Она была там и раньше, но сторонняя, а тут похоже что своя. А ведь если MS решила создать систему отчетности, стоит ли в это ввязываться скромному программисту Мишке? Глупо и бессмысленно. Не то, что ничего не заработаю, я просто потеряю. Продолжать работать? Зачем, если ее даже смотреть не будут. Что смотреть, если есть готовое. Продвинуть продукт в таких условиях невероятно сложно.

Как получить список файлов/папок?

Этот вопрос прост для программиста Delphi, но не очень простой для программиста .NET, которая по своей сути должна быть независима от платформы и не может привязываться к ОС. Но мы та можем напрямую обратиться к системе и вытащить, интересующую нас информацию? Можем!!! И в новой статье Как получить список файлов/папок? я рассказываю, как это сделать на C#

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

Будущее CodeGear

Только что ко мне обратился реактор кодинга в Хакере с просьбой написать что-нибудь по поводу моей позиции в отношении CodeGear. Мы давно уже знакомы с этим редактором и я всегда готов помочь любимому Хакеру. Прежде чем начать писать, я заглянул на сайт компании. О БОЖЕ!!! Подразделение CodeGear уже два месяца как продано компании Embarcadero Technologies, Inc. Его продали за жалкие 23 миллиона баксов. Аршавин стоит дороже!!!

Что же теперь будет? Вопрос серьезный. Я попробую в ближайшее время повыяснять, что нас ожидает, а результат, будет в журнале Хакер. Номер сообщу позднее.

О блоге

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

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

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

Пишите мне