Motto

В тихом саду здравомыслия
Пусть на вас постоянно падают
кокосовые орехи пробужденности.
Чогьям Трунгпа РИНПОЧЕ


Версия для мобильного


Показаны сообщения с ярлыком инструменты. Показать все сообщения
Показаны сообщения с ярлыком инструменты. Показать все сообщения

среда, 6 апреля 2016 г.

Выложен Lazy Delphi Builder 1.14.14.362 и 364 (альфа)

Выложена версия Lazy Delphi Builder 1.14.14.362.

Исправлен Exception при добавлении пути в Lazy Paths.
В редакторе IDE search paths исправлены ошибки с подсветкой несуществующих папок.
Добавлена новая команда Replace selected with env var (auto) - которая заменяет часть пути на Environment variable (переменные ищутся в Lazy Environment variables и IDE environment variables)

Download here

Lazy Delphi Builder 1.14.14.364 alpha.
обновлён JCL:
* исправлена ошибка с некорректным ключом dcc32 -N"Snamespace"
* улучшена поддержка версий Delphi XE2+
* другие исправления
Эту версию я ещё не тестировал. Если что-то найдёте - дайте знать.


Читать дальше..

воскресенье, 16 марта 2014 г.

Lazy Delphi Builder 1.10.9.269 от 15.03.2014.

Выложил небольшой апдейт. В основном это исправление багов.

15.03.2014. Lazy Delphi Builder 1.10.9.269:
0. Исправлено: угадывание версий Delphi не работало для XE5, XE6
1. Исправлено: некорректно отображалось название для XE6 (спасибо nda за репорт)
2. Изменено: reset build status теперь работает для выделенных нескольких узлов
3. Исправлено: если lazyDbp файл загружался через Recent меню, его название не попадало в диалоги Open/Save
4. Изменено: добавлена пара новых правил для угадайки версии Delphi (не работало для VirtualTreeview)
5. Новое: создание при компиляции файлов для C++ Builder (чекбокс в Build dialog). NB: Если C++ Builder не установлен, то вообще ничего компилироваться не будет! (такова особенность dcc32 + моих рук)

Скачивать на bitbucket.

As seen on torry.net!

 


Читать дальше..

пятница, 7 марта 2014 г.

AppMethod – новая IDE только для Firemonkey от Embarcadero.

И кстати, пользуясь случаем хочу передать привет хочу дать ссылку на Roadmap для Delphi на 2014 год.


Embarcadero готовит что-то новенькое. Причём, у этого чего-то еще будет и бесплатная редакция. Последняя бесплатная IDE, насколько я помню была у Turbo Delphi в далёком 2006, которая вроде даже была довольно популярна несмотря на некоторые ограничения.

Продукт будет называться AppMethod. И будет представлять собой версию RAD Studio только для Firemonkey (без VCL). Для пользователей полной RAD Studio, продукт скорее всего не будет представлять интереса. А вот для новых клиентов заинтересованных в кроссплатформенной разработке, это должно быть интересно.

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

Коммерческие лицензии будут доступны по подписке на год.

 

Имхо

Хотя подписка на год и портит всю малину, но всё-равно браво, маркетологи Embarcadero.

Причины:

  • Во-первых, в IDE будет меньше package-й - и запуск IDE должен стать быстрее.
  • Во-вторых, меньше компонентов в палитре, что упростит повседневную работу (особенно для тех, кто только начинает) как пользователям, так и службе поддержки.
  • В-третьих, бесплатная версия для Android - отличный ход для популяризации Firemonkey. Одна из характерных черт Android платформы там больше любят халяву. Там больше бесплатных приложений. Хотелось бы мечтать, что бесплатная версия всё же позволит публиковаться в Google Play, но что-то подсказывает мне что нет. Что ж. Будем меняться исходниками. Стимулируя Open Source, я надеюсь выиграет всё сообщество Delphi разработчиков.
  • В-четвертых, новый бренд. молодцы, интересный ход. Упоминание Delphi почему-то частенько вызывает ярко-выраженную аллергическую реакцию. Посмотрим как с этим пойдёт.

Ложки дёгтя:

  • AppMethod, не такой выговариваемый, как Делфи. Сравните: делфи, делфай, аппмитод, аппметод.
  • Годовая подписка. А что через год - что ли нельзя больше ничего собрать будет?
  • Годовая подписка за разработчика/за платформу. Хотите 4 платформы - умножайте на 4?

Источники:

p.s. В публичном доступе – с 18 марта (дата найдена в интернетах).


Читать дальше..

пятница, 28 февраля 2014 г.

Lazy Delphi Builder 1.10.8.268 Alpha от 27.02.2014.

Скачивать здесь

Очень много нововведений. Существенно переписано ядро. Экспериментальный устаревший TasksEx отвечавший за работу в фоне, заменен на Awaitable модуль от Романа Янковского.

Если обнаружите ошибку, пожалуйста, сообщите.


История изменений

  1. Новое:
    1. Возможность использовать dccaarm, dcciosarm, dccios32 для сборки
    2. Появилась возможность компилировать только debug или только release - в Build dialog добавлена галочка Build release dcus.
    3. Добавлены preset-ы для scan file masks
    4. Добавлен preset "default" чтобы дать возможность сбросить настройки к значениям по умолчанию. Реализовано для: output directories, file scan masks
    5. В диалоге Build settings теперь показывается страница настроек Search Paths
    6. Выводить Total build time в конце билда
    7. В дереве файлов: Check Wizard (Ctrl+W) - диалог дающий возможность выделить/снять выделение с файлов относящихся к выбранной версии Delphi.
    8. Menu -> File -> добавлен пункт Merge profile, который позволяет обновить текущий профиль данными из другого профиля.
    9. Base out dir теперь сохраняется в LazyDBP файле.
    10. Оптимизирована скорость обработки найденных файлов
    11. В дереве файлов для проектов и пакетов:
      1. Теперь можно увидеть статус сборки (build status) (?? - не собирался, ok - собрался корректно, er - ошибка компиляции)
      2. Фильтр теперь прячет папки в которых нет ни одного видимого файла
      3. В всплывающее меню добавлены команды:
        1. Сброс статус компиляции (может быть полезно, если вы хотите пересобрать этот пакет в режиме Continue Build) - Скопировать в буфер обмена лог инсталляции Найти проблемный пакет в Build Log-е
        2. В Info panel теперь показывается к какой версии Delphi относится данный файл (угадайка).
  2. Исправления:
    1. При загрузке профиля из файла, игнорируется указанная в нём версия Delphi
    2. В диалоге Build settings при запуске в temp/test mode не блокируются пресеты в каталогах - можно загрузить пресет и изменить папку
    3. Игнорировалась значение указанное в Break after N errors (Build settings)
    4. Если в профиле была указана инсталляция: XE 3 Architect. А на машине, где загружаем этот профиль установлена Enterprise - то внешне все будет выглядеть прилично, но при нажатии на Compile появится ошибка Assertion failure (uLazyIdeProxy.pas, line 886) LazyInstaller.CurrentInstallation not assigned.
    5. При очистке профиля не очищается список Environment variables и Lazy Search paths
    6. Для namespaces показывается некорректный список Recent(MRU)
    7. В Build диалоге не отрисовывался фон в визарде
  3. UI:
    1. Installation log переименован в Build log
    2. Блокировать пункт меню Edit -> Find, если текущая закладка не поддерживает поиск
    3. В Save as диалог теперь подставляется имя файла загруженного профиля
    4. Build dialog: добавить возможность указать CustomCompiler (раньше это можно было сделать только напрямую в файле LazyDBP).
    5. В статусной строке теперь показывается количество проектов собранных с ошибкой.
    6. В дереве файлов оптимизирована скорость переключения из режима списка в режим дерева. (теперь быстрее примерно на 46%)

Читать дальше..

воскресенье, 20 октября 2013 г.

Легкий способ проверить Android устройство на совместимость с Delphi XE5.

Как узнать будет ли работать программа сделанная в Delphi XE5 на Android устройстве.

Начну сразу с простейшего способа. Официальная спецификация – ниже.

All-the-Myriad-Androids-Animoca

Неофициальные способы

Легкий способ проверить своё устройство

  1. Надо установить на телефон маленькую программку SysCheck от Christopher Moeller (не требует никаких прав).
  2. Запустить.
  3. И посмотреть на первые 3 строчки отчёта.

Там будет указана версия ARM (нужна v7), версия OS (2.3.3-2.3.7 и 4.0.3-4.3)  и указано поддерживается ли NEON (должно быть yes).

Источник

Список из 118 проверенных устройств

Jim McKeeth опубликовал список из 118 протестированных устройств (зеркало, html версия). Список получен с помощью сервиса Apkudo. Этот сервис позволяет загрузить свой APK, и проверить его работу на большом количестве разных устройств.

Для проверки Jim использовал простейшую программку типа Hello World.

Из 118 устройств APK установился только на 108 (на остальных был либо тайм-аут либо не хватило свободного места). Из 108 устройств, программка не запустилась только на 3.

  • Проверено устройств: 118
  • Не установилось на: 10
  • Зависло (Application not responding) на: 3
  • Успешно запустилось на: 105
  • Процент успеха: 89%

Источник

Официальные способы

Соответствие спецификации

Поддерживаются устройства архитектуры ARMv7 и ОС:

Название ОС Android

Версия ОС Android

API Levels

Jelly Bean

Android 4.1.x, 4.2.x, 4.3.x

API Levels 16, 17, 18

Ice Cream Sandwich

Android 4.0.3 and 4.0.4

API Level 15

Gingerbread

Android 2.3.3 - 2.3.7

API Level 10

Не поддерживается:

  • Honeycomb (Android 3.x)
  • Эмулятор Gingerbread
  • Устройства на процессоре Tegra 2 (поддержка NEON обязательна)

Ссылка на официальную документацию.

Список проверенных устройств от Embarcadero

Список можно найти в официальной документации от Эмбаркадэро.

Сюда копировать не буду. Если интересно – сходите по ссылке.

http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development#Results_of_Our_Android_Device_Testing

p.s. Забавно, но в Google Play уже появились и платные программки для проверки устройств на совместимость с Delphi ХЕ5. Стервятники, такие стервятники.


Читать дальше..

воскресенье, 15 сентября 2013 г.

Lazy Delphi Builder 1.9.7.251. 15-сен-2013 для XE5 и XE6

Для тех, кто не в курсе: Lazy Delphi Builder даёт возможность пересобрать всё что надо используя только .pas файлы. И поддерживать порядок, складывая все dcu-шки в одно определённое место. Лицензия - халява.

Сценарии использования:

  1. Пересобрать все свои компоненты/библиотеки из исходников с нуля (актуально в случае апгрейда, чистки)
  2. Сборка нового релиза (всё собирается с нуля из pas-файлов)
  3. Установка новых больших библиотек чтобы поиграться (или пересборка старых с новыми директивами)

История изменений

  1. Новое: теперь можно выбирать платформу для компиляции. Пока поддерживаются Win32, Win64 и OSX. Это сделано через замену вызова dcc32 на вызов dcc64 или dccOSX. Для использования других платформ, можно указывать нужный dcc вручную (см. пункт 9 в release notes к версии 1.8.6.240)
    Как выбрать компилятор для Win64 и OSX
  2. Новое: теперь можно изменять число ошибок, после которого Lazy Builder останавливает билд (по-умолчанию 2, как и в предыдущих версиях)
    Параметры сборки
  3. Исправлено: Access Violation при нажатии кнопки "Load preset", который возникал при пустом списке (спасибо за отчёты об ошибках)
  4. Исправлено: в выходных папках нельзя было использовать Unicode-ные (не-ansi) символы. Реализовано так: преобразование в OEM теперь выполняется только для Delphi версий младше чем D2009 (я не нашёл точной информации о том, начиная с каких версий Delphi и Windows, корректно поддерживается Юникод в командной строке, если что-то не будет работать - пишите).
  5. Исправлено: Удаление package из IDE не работало для Delphi версий младше чем XE2.
  6. Исправлено: Дерево с файлами: зависание при попытке посмотреть детальную инфу о проблменом (erroneous) пакете или проекте.
  7. Исправлено (надеюсь): иногда невозможно изменить выбранную версию Delphi после компиляции
  8. Minor: исправлены подсказки на закладке "Scan settings"
  9. Minor: во всех текстах dcc32 был переименован в dccXX
  10. Добавлена поддержка Delphi XE6 =)

Скачать можно отсюда.

Ссылки по теме


Читать дальше..

пятница, 29 марта 2013 г.

Головокружительные возможности DI и Delphi Spring. Часть 9. Один интерфейс – несколько реализаций.

Это последний перевод из серии про внедрение зависимостей на примере использования Delphi Spring.
Это перевод публикации Ника Ходжеса от 07 ноября 2011 года: Getting Giddy with Dependency Injection and Delphi Spring #9 – One Interface, Many Implementations. (перевод сделан с разрешения автора).

Все переводы по Spring


Как обычно, Delphi Spring Framework можно скачать с GoogleCode
До сих пор мы регистрировали интерфейсы и их реализации в соотношении один к одному. Для каждого интерфейса регистрировался только один реализующий класс. Но что, если мы хотим реализовать интерфейс разными способами, выбирая реализацию в зависимости от выбора пользователя или других внешних факторов?
К счастью для нас, контейнер Spring предоставляет такую возможность. Система регистрации контейнера в фреймворке Delphi Spring позволяет при каждой регистрации указать имя предоставляемой реализации, давая таким образом возможность отличать одну регистрацию от другой, даже если они регистрируют разные реализации для одного и того же интерфейса.
При регистрации нескольких реализаций одного интерфейса без указания имени «победит последний».

Читать дальше..

пятница, 21 сентября 2012 г.

Revised Object Inspector для Delphi 2010-XE3 от Uwe Schuster. Обзор.

Этот пост является укороченным переводом описания первой версии Продвинутого Инспектора Объектов из блога Uwe.


Не так давно, коллега рассказал про расширение для Delphi замещающий стандартный инспектор объектов альтернативным, с поддержкой фильтра и функции любимых свойств. Пользуюсь этим расширением уже месяц в Delphi XE. Работает стабильно.

На данный момент Revised Object Inspector поддерживает Delphi 2010, Delphi XE, XE2 и XE3. На 21 сентября 2012 года последней версией является Beta 6.

Автор эксперта: Uwe Schuster. Uwe также является активным разработчиком Version Insight Plus, Modal Search Dialog expert, Platforms Expert, IDE Compiler Utils, а также Jedi Version Control System.

См. также:

Вот так выглядит Revised Object Inspector. Отличия в закладке Favorites и строке фильтрации.

 Продвинутый Object Inspector


Читать дальше..

воскресенье, 16 сентября 2012 г.

Головокружительные возможности Dependency Injection и Delphi Spring. Часть 8. Разное.

Это перевод публикации Ника Ходжеса от 5 ноября 2011 года: Getting Giddy with Dependency Injection and Delphi Spring #8 – Miscellanea. (перевод сделан с разрешения автора).


Все переводы по Spring


Как обычно, Delphi Spring Framework можно скачать с GoogleCode.

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

  • Как вы наверно заметили, я призываю вас использовать интерфейсы при кодировании и регистрировать классы, реализующие эти интерфейсы в фреймворке. О чём я забыл упомянуть явно, это о том, что все интерфейсы, зарегистрированные в фреймворке Spring должны иметь GUID. GUID легко добавить, нажав CTRL+SHIFT+G в редакторе кода Delphi. А если же вы попробуете использовать интерфейс, у которого нет GUID-а, то получите ошибку: “Project <НазваниеПроекта>.exe raised exception class ERegistrationException with message 'Non-Guid Interface Services are not supported.” («Интерфейсы без Guid не поддерживаются»).
     
  • Если внимательно посмотреть на код в демонстрационных проектах, то можно заметить, что прежде чем что-либо делать с контейнером Spring, необходимо вызвать GlobalContainer.Build. Этот метод должен быть вызван до того, как что-либо может быть получено из ServiceLocator. Метод Build это код, который собирает воедино все зарегистрированные классы, создаёт экземпляры классов или подготавливает их к созданию по запросу, с учётом указанного времени жизни. Если при запуске приложения вы получаете ошибку 'LifetimeTypeManager was expected.', то это с большой вероятностью означает, что вам необходимо вызвать Build для вашего контейнера. И в самом деле, метод Build является основой вашего контейнера Внедрения Зависимостей. Вы должны один раз вызвать метод Build в корне вашего приложения. Для Delphi разработчиков это означает, что он должен быть вызван одной из первых строчек в вашем DPR-файле. Это также означает, что классы лучше регистрировать как можно раньше.
     
  • Вы не обязаны использовать Global Container и Service Locator предоставляемые вам фреймворком. Создание своих собственных вариантов более чем приветствуется. У нас в Gateway Ticketing мы сделали следующее: мы объявили интерфейс, являющийся полной абстракцией понятия Контейнер DI (DI Container = Контейнер Обращения Зависимостей), а затем реализовали этот интерфейс самостоятельно, используя наследника от Tcontainer из фреймворка Delphi Spring. Таким образом, если в фреймворке что-то изменяется (а он действительно меняется с тех самых пор, как мы начали его использовать) или, если мы решим использовать другой контейнер, наш код полностью отделён от какой-либо конкретной реализации. Ещё один хороший пример следования правилу «Пиши код для абстракций, а не реализации». :)
     
  • Я вынужден отметить, что некоторые считают концепцию Service Locator анти-паттерном . Сам я пока что ещё не пришёл к твёрдому заключению по этому вопросу. Да, Service Locator почти всегда является Одиночкой, но я лично и не рассматриваю одиночек только для чтения как что-то плохое, в отличие от некоторых. (Одиночка для чтения и для записи, по сути, является глобальной переменной, и я думаю, что все согласятся с тем, что глобальные переменные являются Порождением Сатаны.) Однако существуют некоторые разногласия в том, является ли использование контейнера реализацией Service Locator. Кроме того, если все зависимости определены до того, как результат выполнения станет доступным пользователю, то можно ли вообще считать контейнер переменной? Это остается предметом дискуссий. В конечном счете, для меня ценность и польза от Service Locator с лихвой перевешивает все возможные недостатки.
     
  • Существует один недостаток, возвращающий нас к предыдущему пункту, который заключается в том, что когда вещи настолько отделены друг от друга и позднее связывание настолько ярко выражено, то становится возможным успешно собрать программу и до самого её запуска так и не узнать о том, что мы забыли зарегистрировать необходимый реализующий класс. В сложной системе, может пройти немало времени, прежде чем кто-либо заметит, что отсутствует реализующий класс для какого-нибудь редко используемого интерфейса. Если вы следуете предложенному мной образцу регистрации реализации в initialization секции модуля, то вы обязаны использовать этот модуль где-нибудь в программе (примечание переводчика: включить в uses), чтобы регистрация сработала. Как уже говорилось, если вы забыли его добавить, и не включили этот модуль в свою программу, то компилятор вам ничего не скажет, и узнаете вы об этом только во время работы программы. Это слабое место, и вам следует быть очень внимательным, чтобы не попасться в эту ловушку. В качестве стратегии можно рассматривать выделение всех регистраций в единый модуль, или использовать что-то типа статического анализа кода, который проверит, что для каждого вызова GetService есть соответствующий вызов RegisterService (или как там эти методы у вас называются). Просто, чтобы вы были в курсе.

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


Ссылки по теме


Читать дальше..

четверг, 26 июля 2012 г.

Головокружительные возможности Dependency Injection и Delphi Spring. Часть 7. Контроль над созданием.

Это перевод публикации Ника Ходжеса от 08 октября 2011 года: Getting Giddy with Dependency Injection and Delphi Spring #7 – Controlling Construction.


Все переводы по Spring


Как обычно, Delphi Spring Framework можно скачать с GoogleCode.

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

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

Вы правы на этот счёт – там действительно много всего происходит. Delphi Spring Framework делает за вас кучу работы – в основном за счёт создания экземпляров классов используя RTTI (информацию о типах времени выполнения).­ Spring контролирует создание, но при этом, оставляет программисту возможность управлять жизненным циклом объектов.

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

Хорошая новость здесь в том, что вам и не придётся. Фреймворк, при желании, позволяет управлять созданием объектов. В большинстве случаев если классы хорошо спроектированы, то их конструкторы просты, и в них не происходит ничего, кроме присвоения значений. Но иногда возникает нужда сделать при создании объекта что-то особенное. Иногда, классу требуется динамический параметр – объект, чьё состояние будет известно только при выполнении. (Примечание переводчика: мне очень не нравится слово динамический в этом контексте и примеры Ника, но я не придумал лучшего объяснения. Есть идеи, читатель? Пиши в комментарии!) Например, у нас может быть класс Клиент, и у этого Клиента могут быть Счета. И у нас есть класс, который мы хотим передать этому клиенту, но при этом мы не хотим связывать эти классы. Наш Клиент динамический – мы можем запускать запрос и выполнять эту операцию на каждом клиенте в нашей базе данных. Или Клиент может что-то делать на нашем сайте, и таким образом наш объект Клиента будет относиться именно к этому конкретному клиенту. В любом случае, данные нашего Клиента динамичны во время выполнения, и поэтому мы не можем загнать создание объекта в жёсткие рамки. Он должен быть уникальным, каждый раз, когда нам нужен экземпляр объекта, который выполняет действие над данным клиентом.


Читать дальше..

понедельник, 25 июня 2012 г.

Головокружительные возможности Dependency Injection и Delphi Spring. Часть 6. Обойдёмся без конструктора.

Это перевод публикации Ника Ходжеса от 24-09-2011: Getting Giddy with Dependency Injection and Delphi Spring #6 – Don’t even have a constructor.


Все переводы по Spring


Вступление

В четвёртой статье этой серии я озвучил пару правил, одним из которых было “Делайте Конструкторы Простыми”.(примечание переводчика: я не переводил части 1-4.) В последней статье мы узнали, как использовать контейнер Spring для хранения интерфейсов и реализаций и как запросить у контейнера Spring готовую реализацию интерфейса, вместо создания объекта вручную с помощью конструктора.

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


Читать дальше..

среда, 17 августа 2011 г.

Обзор CnWizards. Часть 21: Шпаргалка по горячим клавишам

Регулярные публикации приводят посетителей также надёжно, как приносят проценты вклады в банках Москвы. Даже эффективнее. Идеи для новых публикаций есть, а времени на написание нет. Поэтому, пока опубликую пост из черновика. Сводная таблица горячих клавиш CnWizards. В таблице приведены комбинации клавиш по умолчанию. Оптимизированную для печати на листе А4 шпаргалку можно скачать здесь в виде PDF-файла. В блоге приведён более развёрнутый вариант.

Следует помнить, что если у вас установлено несколько наборов экспертов для Delphi, то некоторые горячие клавиши могут не работать. Например, ModelMaker Code Explorer по умолчанию резервирует для себя комбинацию Ctrl+Alt+U. И в MMX и в CnWizards все горячие клавиши можно изменить или отключить.

Все горячие клавиши поделены на 4 блока:

  1. Глобальные – работают везде в IDE.
  2. Дизайнер формы – горячие клавиши, работающие только в дизайнере формы.
  3. Редактор кода – горячие клавиши для редактора кода.
  4. Операции с выделенным текстом – работают в редакторе кода при наличии выделенного текста.

Читать дальше..

среда, 27 июля 2011 г.

Головокружительные возможности Dependency Injection и Delphi Spring. Часть 5. Основы Delphi Spring.

Это перевод публикации Ника Ходжеса: Getting Giddy with Dependency Injection and Delphi Spring #5 – Delphi Spring Basics.


Все переводы по Spring


Вступительное слово

Я много слышал о фреймворке Spring для Java. И даже знал, что аналогичный фреймворк был создан и для Delphi. Но у меня не хватало терпения сесть и разобраться. Также, как и с терминами “Внедрение зависимости” (Dependency Injection) и “Обращение управления” (Inversion of Control). Я часто встречал упоминания о них в разных статьях, но так и не смог уложить в своей голове, как применить эти знания к Delphi. И вот, наконец, я наткнулся на публикацию Ника. То, что я прочитал в этой публикации, запросто расставило всё по своим местам. Это было настолько потрясающе, что я решил обязательно перевести этот материал и опубликовать перевод у себя в блоге. Ник дал добро, и процесс пошёл.

Переводить было легко и просто. Всё-таки чувствуется разница между переводом материала, написанного носителем языка, и материала, написанного человеком для которого английский - не родной. Помню, как я мучился с переводом материалов по дженерикам в Delphi, пытаясь уловить, что же хотел сказать автор. Периодически даже пытался уловить смысл, заглядывать в оригинал материала на французском языке. Представляю, каково приходится переводчикам, чья основная специальность - локализация компьютерных игр, и кому приходится переводить не только текст, но и загадки и стихи. Бррр!

На самом деле, это уже 5я часть в серии публикаций, посвящённых Dependency Injection в блоге Ника (полный список ищите по ссылке). Но первые четыре публикации просто подводят читателя к необходимости писать код, используя как можно меньше зависимостей между классами. Я не стал их переводить. На мой взгляд, там не так много много полезной и уникальной информации, чтобы тратить время на перевод. Пятая часть представляет собой совершенно уникальный материал, рассказывающий об основах использования Delphi Spring Framework.


Читать дальше..

четверг, 14 июля 2011 г.

Перевод Live templates Revisited

Это перевод поста Кэри Дженсена “Live templates Revisited”. Кэри также является автором новой книги Delphi in Depth: ClientDataSet. По адресу http://www.jensendatasystems.com/cdsbook/ вы можете найти дополнительную информацию об этой книге и заказать её.

This post contains translation of Cary Jensen’s article “Live Templates Revisited”. Cary is also the author of the new book Delphi in Depth: ClientDataSet. For more information about this book and links to order, please visit http://www.jensendatasystems.com/cdsbook/.

Ещё раз о живых шаблонах

Хотя шаблоны кода были в Delphi со времён 4й версии Delphi, они были очень простыми по сравнению с новой функцией живых шаблонов, впервые появившейся в Delphi 2006. Живые шаблоны предоставляют возможность делать вставку кода ещё более интеллектуальной, а также позволяют осуществлять интерактивную навигацию по изменяемым частям шаблона. Если вы ещё не используете их, то сейчас самое время рассмотреть их повнимательнее.

Рассмотрим вставленный шаблон показанный на следующем рисунке. Этот шаблон был создан путем выполнения шаблона forb, который вставляет цикл с блоками begin .. end.

Живой шаблон forb

Обратите внимание, что переменная итерации I подсвечена. Это позволит вам при желании быстро изменить имя переменной. Например, многие разработчики Delphi используют строчную переменную i в качестве переменной цикла (хотя Delphi сам по себе не чувствителен к регистру).

Вы также можете заметить, что I, а также 0 и List.Count окружены рамочкой. Эти области текста (в рамочке) являют собой точки синхронизации живого шаблона. После изменения I на i, нажмите Tab или Shift-Tab для перемещения между точками синхронизации шаблона. Во время перемещений, вы можете заметить, что подсказки (hints) изменяются, чтобы отобразить описание выбранной точки.


Читать дальше..

понедельник, 27 июня 2011 г.

Описание ModelMaker Code eXplorer

Обещанный обзор ModelMaker Code eXplorer.

Сегодня я расскажу об одном эксперте для Delphi, способным фантастически упростить рефакторинг. Разработан этот эксперт компанией ModelMakerTools.  У ModelMakerTools есть 2 продукта, которые часто путают:

  1. ModelMaker - инструмент для работы с UML в Delphi.
  2. ModelMaker Code eXplorer (MMX) - набор инструментов для рефакторинга. Существуют версии для Delphi и для Visual Studio. В этом посте я расскажу о версии для Delphi.

MMX интегрируется в Delphi 5 - 7, Delphi 2005 - 2010 и Delphi XE. Т.е. вы получаете удобный инструмент для рефакторинга практически в любых версиях Delphi. И этот инструмент удобнее стандартных мастеров для рефакторинга, встроенных в Delphi.

Почти все функции которые я здесь описываю, доступны в MMX начиная с версии 5.1. Текущая версия – 9.0. Для снимков экрана я использовал версию 8.

Скажу сразу, ModelMaker Code eXplorer – платный продукт. Новая лицензия стоит 99 евро. И купить его можно только через ShareIt.

Но на сайте доступна trial версия, которая работает в течение 30 дней без каких-либо ограничений. Более того каждое обновление продлевает срок trial-а. (раньше было так, как сейчас не знаю).

Ложка дёгтя: после окончания 30-дней триала, MMX может вызывать Access Violation-ы при работе с IDE. Например при нажатии Ctrl+Shift+вверх или вниз. Или в других случаях. В общем, если ваша IDE внезапно начала сыпать ошибками, проверьте, не закончился ли испытательный период у MMX. Чтобы убедится, Для этого достаточно открыть окно Code Explorer. Если trial окончен, там будет показано соответствующее сообщение. Такие AV в IDE, это побочный эффект от защиты от взломов trial-а и способный серьёзно потрепать нервы. Поэтому предупреждаю о нём сразу. В остальном, это прекрасный и удобный инструмент для Delphi программиста.

Скриншоты MMX на официальном сайте. История изменений. На сайте продукта доступны видеоролики, демонстрирующих функционал MMX. Это что касается официальной документации. А тех, кому интересны личные впечатления, прошу пожаловать под кат.

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

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


Читать дальше..

пятница, 10 июня 2011 г.

Описание CnPack IDE Wizards часть 20: Формы настройки мастеров. Скриншоты.

Немного отвлекусь от темы перехода с Delphi 7 на юникод, для продолжения описания CnWizards.

Это двадцатая запись в серии "Эксперты для Delphi: описание CnPack Wizards”. В прошлый раз я начал описание настроек CnPack Wizards, точнее просто опубликовал скриншоты основных форм настройки с кратким описанием. Этот пост будет сделан в таком же духе. Я не буду вдаваться в детали и просто покажу как выглядят все формы настройки. Здесь будут скриншоты и ничего более. Правда в отличие от предыдущего поста, здесь будет не три картинки, а штук тридцать.

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

(осторожно, траффик! под катом много картинок.)


Читать дальше..

четверг, 26 мая 2011 г.

Описание CnPack IDE Wizards часть 19: настройки CnWizards

Это девятнадцатая запись в серии "Эксперты для Delphi: описание CnWizards”. В прошлый раз я описывал класс для отправки отладочных сообщений TCnDebugger. В этот раз я расскажу о настройках CnPack Wizards. Сейчас, я не буду вдаваться в детали и просто покажу как выглядят все формы настройки. Эта публикация посвящается тем, кто, ещё не установил CnWizards, из-за того “там слишком много ненужных мне функций”. Надеюсь что этот пост послужит лучшим доказательством того, насколько легко можно отключить все “ненужные функции” и как легко можно настроить “нужные” функции на свой вкус.

CnPack Wizards – комплексный эксперт состоящий из модулей (мастеров). Любой из модулей можно настроить под себя или просто отключить. Очень удобно. Я снимаю шапку перед разработчиками CnWizards. Архитектура этого эксперта достойна всяческого восхищения.

А пока вы читаете этот пост, я почитаю SEO статьи по теме "раскрутка интернет магазина", особенно по части раскрутки по long-tail (супернизкочастотных) запросов.

Настройка CnWizards

Диалог настроек CnWizards открывается через Главное меню->CnPack->Options.


Читать дальше..

четверг, 19 мая 2011 г.

Описание CnPack Wizards часть 18: cnDebug.pas

Продолжаю обзор CnWizards – бесплатного эксперта для Delphi с открытым исходным кодом от китайских программистов. В прошлый раз я рассказывал о CnDebugViewer-е – просмотрщике отладочных сообщений. Сегодня я расскажу как эти сообщения отправлять.

C помощью CnDebug из программы можно отправлять строковую информацию, integer, float, color и RTTI-информацию об объектах и компонентах. CnDebug также умеет записывать в журнал информацию о возникающих в программе исключениях, вместе с содержимым стека вызовов.

Файлы и директивы компилятора

Для работы CnDebug нам понадобятся файлы, расположенные в папке C:\Program Files\CnPack\CnWizards\Source\

  • cnDebug.pas – обязательно. Здесь объявлен основной класс отладчика: TCnDebugger.
  • CnPack.inc – обязательно. Здесь определяются директивы компилятора.
  • CnPropSheetFrm.pas и CnPropSheetFrm.dfm – опционально. Только если объявлена директива компилятора SUPPORT_EVALUATE (по умолчанию объявлена). В этом модуле описана форма инспектора CnDebug, предназначенной для изучения RTTI информации об объектах.

Директивы компилятора, влияющие на работу CnDebug:


Читать дальше..

понедельник, 16 мая 2011 г.

Описание CnPack Wizards часть 17: cnDebugViewer

Это семнадцатая публикация в серии: Эксперты для Delphi: Описание CnWizards. В прошлый раз я писал о Тестере зависимостей CnWizards (Relation Analyzer) – утилите для анализа зависимостей между скомпилированными и исходными файлами. Сегодня я расскажу о CnDebugViewer.exe - просмотрщике отладочной информации отправленной из модуля CnDebug.pas.

CnDebugViewer – программа для отображения отладочной информации посланной программой с помощью модуля CnDebug.pas а также с помощью стандартной API функции OutputDebugString. Полученная информация отображается в виде дерева. Её можно фильтровать, сохранять и загружать для дальнейшего изучения. Только распечатывать не умеет. Здесь, конечно не нужна широкоформатная интерьерная печать, но возможность вывести на печать хотя бы в каком-то виде была бы полезной.

Для отправки сообщений с отладочной информацией в CnWizards входит модуль CnDebug.pas содержащий определение класса TcnDebugViewer умеющего отправлять разнообразную информацию просмотрщику. Для получения информации из TcnDebugger-а используется отображаемый в память файл (Memory mapped file).


Читать дальше..

четверг, 12 мая 2011 г.

Описание CnPack Wizards часть 16: Описание Relation Analyzer.

Это шестнадцатая запись в серии: Delphi эксперты: CnWizards. В прошлый раз я завершил краткий обзор утилит из CnWizards. В этот раз я подробно опишу Relation Analyzer (Тестер зависимостей).

Relation Analyzer может помочь лучше разобраться в зависимостях большого числа bpl-ок, а также изучить собранные в Delphi программы – посмотреть список использованных юнитов, например.

В этой программе есть два режима анализа:

  1. Анализ исполняемых файлов. Даёт возможность:
    • Посмотреть список необходимых для работы пакетов. Для bpl-ок это то что обычно пишется в секции requires .dpk файла. Для exe-шек – это список необходимых пакетов времени исполнения (Runtime Packages).
    • Посмотреть список необходимых для работы пакетов и библиотек (bpl и dll).
    • Посмотреть список модулей (unit) использованных при компиляции.
    • Посмотреть, в каких исполняемых файлах использовуется определённый модуль (unit).
    • Посмотреть список общих использованных модулей, для нескольких исполняемых файлов.
  2. Анализ зависимостей между бинарными файлов и исходными файлов. Даёт возможность:
    • узнать, какие модули придётся перекомпилировать после изменения interface и implemenatation частей определённого модуля. Эта опция позволяет заранее узнать, где может появится ошибка компиляции: This unit was compiled with different version of ‘xxx’.

Язык не повернётся назвать GUI этой программы простым. Поэтому, я начну описание именно с интерфейса. Хотя GUI и не такой сложный, как может быть у crm системы, предназначенной для учёта данных по огромному числу клиентов . Но всё же, разбираться с ним дольше, чем, найти земельный участок в Рязани.

Итак. При запуске программы видны 5 закладок. Назначение каждой:


Читать дальше..

Постоянные читатели