Система Orphus

2 мая 2013 г.

Эволюция Delphi: современные возможности

Среда Delphi не стоит на месте. Каждый год выходит новая версия Delphi с новыми возможностями. Компании Borland (Inprise) и Embarcadero всегда стремились сохранять в своих продуктах высокий уровень обратной совместимости, поэтому каждая новая версия Delphi способна почти без проблем компилировать старый код. Тем не менее, некоторые существующие возможности могут не существовать в новом мире и окружении или вести себя иначе.

В этой статье я попробую сделать небольшой обзор современных тенденций развития языка Delphi и изменений в нём. В целом, статья будет сконцентрирована на новейших измененияx в архитектуре Delphi, доступные в XE4.

Not Invented Here: Like the deserts miss the rain

Посмотреть текст целиком...

21 апреля 2013 г.

Разработка системы плагинов, часть 9: подводные камни

Предыдущая часть.

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

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

Посмотреть текст целиком...

5 марта 2013 г.

Человек рациональный - это миф

Этот пост - не про Delphi и с Delphi не связан.

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

Посмотреть текст целиком...

6 февраля 2013 г.

"Дружественность" в Delphi

Небольшое введение в то, как обстоят дела с "дружественностью" в Delphi.

Посмотреть текст целиком...

4 января 2013 г.

Основы оптимизации прикладных программ на Delphi

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

Эта статья служит введением в оптимизацию прикладных программ на Delphi.

Посмотреть текст целиком...

1 января 2013 г.

Программирование на WinAPI, часть 1 - где искать информацию

Это первая часть в цикле, посвящённому "программированию на WinAPI" в Delphi.

WinAPI - он же "Windows API", он же "Win32 API", он же "Application Programming Interface", он же "Прикладной интерфейс программирования" - набор системных функций ОС; самый низкий уровень для любой прикладной программы, в том числе - программ Delphi. Именно на системных функциях основываются все другие функции прикладных программ. Программист может вызывать функции WinAPI, чтобы сделать что-то, не предусмотренное набором функций языка и его библиотеки поддержки. Как правило, работа с функциями WinAPI отличается от работы с функциями и классами языка высокого уровня.

Часто можно услышать вопросы, происходящие от отсутствия навыков работы с WinAPI. К примеру, "этот код работал на Windows XP, но не работает в Windows 7. Что делать?" (приведён совершенно ужасный код, полученный народным методом copy&paste с жёстко зашитыми константами и отсутствием даже намёка на обработку ошибок), "вот код, который получает путь к папке Мои документы, а мне надо - к рабочему столу" (человек не знает, где посмотреть описание функции, чтобы поменять "Мои документы" на "Рабочий стол") и даже просто: "подскажите функцию, чтобы сделать XYZ" - и так далее.

Не будьте беспомощными! Вы сами можете найти ответы на эти вопросы. А этот цикл постов поможет вам в этом.

Посмотреть текст целиком...

26 декабря 2012 г.

Запись вебинара, декабрь 2012

Публикую запись вебинара со вторника: Обработка ошибок в Delphi (V2).

Посмотреть текст целиком...

21 декабря 2012 г.

Вебинар: Обработка ошибок в Delphi (V2)

В ближайший вторник я буду проводить вебинар на тему обработки ошибок в программах Delphi.

Посмотреть текст целиком...

9 сентября 2012 г.

Ответ на задачку №16

Ответ на задачку №16.

Посмотреть текст целиком...

Ответ на задачку №15

Ответ на задачку №15.

Посмотреть текст целиком...

14 августа 2012 г.

Задачка №16

Объяснить поведение кода.

Посмотреть текст целиком...

10 августа 2012 г.

Задачка №15

В чём проблема в этом коде?

Посмотреть текст целиком...

28 июля 2012 г.

Разработка системы плагинов, часть 8: расширение системы и обратная совместимость

Предыдущая часть.

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

Эта часть серии статей про плагины посвящена вопросам сопровождения, модификации, расширения и обратной совместимости.

Посмотреть текст целиком...

17 июля 2012 г.

Готов перевод книги по OTL

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

Посмотреть текст целиком...

10 июля 2012 г.

Параллельное программирование с OmniThreadLibrary

Примож Габриельчич (Primož Gabrijelčič) - автор библиотеки высокоуровневого многопоточного программирования OTL (Omni Thread Library) для Delphi, также известный в англоязычном сообществе под ником gabr. Ведёт блог TheDelphiGeek, а также сайт 17slon.com.

OTL - это лучшее решение для многопоточной работы в Delphi на высоком уровне.

Посмотреть текст целиком...

23 июня 2012 г.

Разработка системы плагинов, часть 7: пакеты и оптимизация по размеру

В предыдущей части мы рассмотрели основы реализации UI в системе плагинов. В связи с этим возникает насущный вопрос: UI - это VCL или FMX. Если плагинов много и всем нужен UI - получается, что каждый плагин несёт в себе достаточно много дублирующегося кода. Это не имеет значения, если вы написали один или два плагина. Но что если вы такой плодовитый разработчик, что написали аж две дюжины плагинов? Особенно, если они устанавливаются скопом (в "сборке"). Тогда вы тратите достаточно много места на дублирование кода. Нельзя ли с этим что-нибудь сделать?

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

Посмотреть текст целиком...

4 мая 2012 г.

Разработка системы плагинов, часть 6: UI в плагинах

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

Упреждающее замечание (даже два): во-первых, я не эксперт в GUI, поэтому к моим утверждениям этой части стоит относиться с опаской. Желательно их проверять самостоятельно. Во-вторых, всё обсуждение и все примеры ниже рассчитаны на Delphi 2009+. Это касаемо момента с Application.Handle <> Application.MainFormHandle (MainFormOnTaskbar). У меня нет никакого желания писать весь код в нескольких вариантах. Адаптировать приведённые решения для динозаврических версий Delphi я оставляю вам в качестве домашнего задания.

Посмотреть текст целиком...

3 апреля 2012 г.

Ответ на задачку №14

Ответ на задачку №14.

Посмотреть текст целиком...

1 апреля 2012 г.

Задачка №14

В чём проблема в этом коде?

Посмотреть текст целиком...

Ответ на задачку №13

Ответ на задачку №13.

Посмотреть текст целиком...

9 марта 2012 г.

Задачка №13

В чём проблема в этом коде?

Посмотреть текст целиком...

Ответ на задачку №12

Ответ на задачку №12.

Посмотреть текст целиком...

27 февраля 2012 г.

Разработка системы плагинов, часть 5: отладка и обработка ошибок

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

Посмотреть текст целиком...

30 января 2012 г.

Разработка системы плагинов, часть 4: взаимодействие плагинов

В прошлый раз я говорил про более сложные методы взаимодействия ядра и плагинов: создание активных плагинов. К этой теме я ещё вернусь несколько позже, но сначала я хотел бы поговорить про вопросы взаимодействия плагинов друг с другом. Хотя некоторые из читателей могут подумать, что в их программах им это не нужно (и закрыть эту статью), но, на самом деле, эта тема показывает некоторые техники, которые будут вам полезны, даже если вы не будете реализовывать взаимодействие плагинов между собой.

Посмотреть текст целиком...

11 января 2012 г.

Разработка системы плагинов, часть 3: активные плагины

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

Посмотреть текст целиком...

8 января 2012 г.

Разработка системы плагинов в Delphi, часть 2: разработка API

Первая часть.

В этой части мы рассмотрим реализацию функциональности плагинов.

Для начала я напомню, что в качестве демонстрационного приложения я использовал программу-пример из комплекта демок Delphi - RichEdit Demo. Программа представляет собой простенький текстовый редактор типа WordPad:


Напомню, что в прошлый раз мы создали в этой программе инфраструктуру для плагинов и написали пустой плагин. Теперь настало время для реализации чего-то полезного.

Посмотреть текст целиком...

25 декабря 2011 г.

Разработка системы плагинов в Delphi

Эта статья - продолжение старой серии.

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

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

В общем, все эти факторы в итоге перевесили мою лень и я решил написать нормальную статью про плагины.

Примечание: я был бы очень благодарен, если кто-нибудь со знанием Visual Studio (C++) просмотрел бы раздел 8 (и особенно - касательно генерации заголовочников для Visual Studio C++) на предмет моих ошибок.

Посмотреть текст целиком...

20 декабря 2011 г.

Публичная бета EurekaLog 7

Получи бесплатную лицензию на EurekaLog 7! ;)

Посмотреть текст целиком...

12 ноября 2011 г.

Сериализация - потоки данных

Это второй пост в серии постов про сериализацию. В этой части мы рассмотрим потоки данных.

Посмотреть текст целиком...

8 ноября 2011 г.

Процедуры, классы, компоненты...

Хотя это не очень-то видно из заголовка, но это - дополнение к посту "Чего не хватает в Delphi". Поговорим о модели компонентов в Delphi и её недостатках.

Посмотреть текст целиком...