Блог

Исходники графической программы на C#

Постоянные посетители уже должны знать, что мне абсолютно паралельны все слова об OpenSource и о какой-то там мнимой и выдуманной свободе. Я открываю исходники не ради этого бреда. А я снова выкладываю исходник, на этот раз это достаточно большой исходник, это целый графической программы на C# и WPF. Для этого я даже создал русскоязычную версию сайта.

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

Исходники свободны и распросраняются под лицензией BSD со всеми вытекающими последствиями. Если и говорить о свободе, то BSD реально свободна, а GNU - это свобода только на словах. Исходники программы написаны на Visual Studio 2010, потому что он лучше себя ведет с Ribbon. Кто-то может попытаться использовать Visual Studio 2008, но не факт, что он убдет стабилен с WPF.

Межплатформенные приложения на .NET

У .NET много преимуществ, и одно из этих преимуществ – компиляция кода налету под ту платформу, на которой выполняется программа. Один раз компилируем код, и если запускаете его на 32-х битной машине, то платформа компилирует IL код в 32-х битный. Если же запустить программу на 64-х битной машине, то IL будет скомпилирован в 64-х битном виде. Никаких дополнительных телодвижений для .NET кода не нужен.

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

Нативный код я еще использую, но стараюсь делать это по минимуму. Главная причина, по которой мне пришлось создать два разных дистрибутива для обеих платформ – это база данных. Я использую SQL Server Compact Edition, а библиотеки доступа к данным написаны на нативном коде. Именно из-за них пришлось выпендриваться и поддерживать два файла установки.

Бесплатные компоненты

Пользователи твитера или просто те, кто следит за мной на твитере уже знают о том, что я сделал Heapar Essential Library .NET абсолютно бесплатной и абсолютно с открытым исходным кодом. Я планировал развивать библиотеку в что-то большое, но в ней получаются только простые компоненты и трудно прикидываться идиотом и пытаться продать то, что входит сейчас в нее. Они просто не стоят этих денег. Эту библиотеку никто не купил, в то время как другие продукты покупаются. Чтобы не повторятся, просто прочитай заметку Бесплатные .NET компоненты на блоге Heapar.

P.S. Канадская блондинка начала все больше писать и благодаря новому Photoshop подготовила и залила кучу фоток на свой блог, в том числе и в старые заметки. Из архива утро на рождество

Командная разработка кода

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

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

Но я категорически против того, чтобы код смотрел только один программер, который старший по званию. Это очень серьезное заблуждение, которое делает код хуже, а командную разработку более конфликтной. Код должна рассматривать команда из 3-4 человек. Чаще всего программеры работают небольшими командами, и они должны обсуждать код, который будет написан до того, как кто-то приступает к кодированию. Они должны обсуждать архитектуру и решение до кодирования.

Какой язык программирования выбрать?

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

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

Я рекомендую изучать сразу пару языков. Когда я начинал изучать программирование, то выбрал С++ и Delphi. Я их изучал одновременно и писал программы на обоих языках сразу, просто разные программы. Благо на работе моему начальству было пофиг, на каком языке я пишу программы, им нужно было, чтобы они работали. Я использовал поочередно оба языка и постепенно потребность в Delphi выросла и С++ сам собой отпал. Его я стал использовать очень редко и в основном для себя. Я и сейчас его использую редко и в основном для написания небольших DLL, функции которых потом вызываю из C#.

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

Обновление на Heapar Software

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

Вообще компонент Small Report Renderer вызвал неплохой интерес и только ради него один пользователь хочет купить его и ожидал функцию выделения. Его заинтересовали возможности компонента и он готов был заплатить 1000р (именно столько стоит Heapar Essential Library .NET) и он хочет посмотреть, как он реализован. Я так понял, что он хочет написать что-то собтственное в виде движка отчетности как у Fast Report. Правда Fast Report очень хороший двиг и с ним тягаться будет тяжеловато.

Помимо этого исправлено несколько недочетов и пару ошибок, оптимизирована работа графики в трех компонентах и улучшин внешний вид компонента TabManager.

Проблема PHP – обращение к системе

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

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

В случае с .NET и Windows вообще, то тут подход немного другой. Тут предпочитают строить все целыми платформами и переходы меж уровнями и доверительными зонами сводится к минимуму. Например, сама платформа .NET на столько мощная, что необходимость в обращении к системе минимальна. Если в PHP для выполнения операции ping нужно вызвать system, то в .NET можно использовать классы.

Как стать программистом

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

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

Timeout соединения у MySQL

Я постоянно выключаю компьютер и у никогда не обращал внимание на то, что у MySQL есть таймаут соедидинения. Вчера пришел на работу, открыл крыжку MacBook Pro, а в консоли осталась запущенной клиентская mysql. Мне как раз нужно было добавить в одну из таблиц строку, я вбил INSERT запрос и вижу:

No connection. Trying to reconnect...
Connection id:    3777
Current database: *** NONE ***

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Visual Studio 2010 не запускается на Windows 7

После установки Windows 7 у меня до сих пор не работает Visual Studio 2010, поэтому разработка D Photo Workshop замерзла и окочанела в зародыше. Все попытки запустить или переустановить Visual Studio 2010 закончились неудачно, потому что программа категорически не видит .NET финальной версии и упорно ищет бету. Судя по отзывам в интернете, чтобы запустить среду разработки, мне нужно удалить .NET 4.0 и впаять вместо него бета версию. Мне этого делать не хочется, поэтому чижу, жужжу и жду когда же выйдет финальная версия Visual Studio 2010. Так как до нужного 10-го года осталось совсем чуть-чуть, а программы Microsoft в основном выходят до указанного в маркировке года, то надеюсь, что ждать придется не долго.

Вообще-то странно, что возникла такая проблема загрузки среды разработки на полноценном .NET. Единственное объяснение, которое я могу дать - разработчики таким образом пытаются защитить программу от нелегального использования с полноценным .NET. Если я прав, то ход вполне оправданный, ведь Visual Studio 2010 тоже бетта и не финальная версия.

О блоге

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

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

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

Пишите мне