Страницы

пятница, 31 октября 2008 г.

Мысли навеянные Delphi-кодингом 1

  1. JVCL – зло. Там слишком много компонентов.
  2. Личное открытие: TBookmarks может не работать[1] в IBX-ах и FIB-ах, но работает в BDE.
  3. Давно заметил, что после установки DelphiSpeedUp на Delphi 6 с кучей других экспертов, IDE начинает глючить и периодически вылетать. Терплю. Лучше глюки, чем тормоза.
  4. Эксперты, вообще, штука небезопасная.
  5. Toolbar 2000 - как наркотик. Начав им пользоваться, от него очень сложно отказаться.
  6. IBX в Delphi 2009 страшно глючат при работе с юникодной базой Firebird.
  7. Накодить можно всё что угодно. Вопрос в цене.

четверг, 30 октября 2008 г.

Lazy Delphi Builder. Beta3. RC1.

Я выложил третью бету Lazy Delphi Builder-a. Она стала ещё удобнее в использовании. Все основные навороты, которые я хотел реализовать, я уже реализовал, нереализованными остались только идеи которые возможно сделают работу ещё более удобной.

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

История изменений: Lazy Delphi Builder 0.9.4.97(beta3):
1) На форме About изменён шрифт на Arial
2) Исправлена ошибка с прорисовкой CheckBox-ов в Exclude Masks
3) Дистрибутив LazyDelphiBuilder теперь содержит 2 версии программы:
   LazyDelphiBuilder.exe - версия для консоли, которая умеет запускать сохранённые профили LazyDBP
   LazyDelphiBuilderGUI.exe - версия с GUI, которая всё
4) На главную форму добавлена закладка, позволяющая просмотреть список зарегистрированных в IDE пакетов
5) В дереве найденных файлов добавлена возможность отменять удаление
6) Добавлена возможность добавлять папки для сканирования непосредственно в дерево найденных файлов
7) При компиляции, старые выходные папки не удаляются, а переименовываются в Bin.~, Bpl.~ и т.д. (можно отключить с помощью /BackupOutFolders-). А старые папки Bin.~ теперь удаляются в Корзину(отключаемо с помощью /UseRecycleBin-)
8) Подробная русская справка по адресу: http://www.lazyproject.info/support/docs-ru/
9) +что-то ещё, про что я сейчас не помню.

вторник, 28 октября 2008 г.

Текучка 6. Delphi 2009 + FastMM4.9 + я = странный баг.

Я использую в своих проектах FastMM. При этом я не хочу добавлять путь до FastMM4.pas в Library Path, чтобы не мучиться при отладке. Для этого я создал фиктивный package FastMM.dpk(runonly), который включает в себя тольк Fastmm4.dpk и компилирую FastMM со всеми остальными package-ами. А проекты подключают к себе уже fastmm4.dcu. Но в Delphi 2009 эта схема перестала работать. При включении FastMM4.dcu в проект, Delphi начинает ругаться и обзывать меня обидным заморским прозвищем "[DCC Fatal Error] F2051 Unit FastMM4 was compiled with a different version of System.TObject.InstanceSize". Причём, ругается он только если я собираю проект с Debug Build Configuration. С Release всё собирается нормально. К слову сказать, ошибка “Unit бла-бла was compiled with a different version of бла-бла-бла” – одна из моих самых нелюбимых ошибок.

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

Выяснилось, что проблема возникает, когда проект использует $(BDS)\Lib\Debug\ вместо $(BDS)\Lib\

А LazyDelphiBuilder, с помощью которого я и пересобираю все проекты, самой первой папкой для поиска исходников файлов всегда указывает $(BDS)\Lib\

С другими package-ами эту проблему повторить не получилось.

Получается, что System.TObject.InstanceSize в $(BDS)\Lib\ и $(BDS)\Lib\Debug разные.

Версия Дельфи: CodeGear™ Delphi® 2009  Version 12.0.3170.16989
Версия FastMM: Fast Memory Manager 4.90

Думаю, то ли разработчику FastMM написать, то ли в Quality Central, то ли вообще не заморачиваться и вписать путь до Fastmm4.pas в Library Path. А может не лениться и выяснить, откуда берётся $(BDS)\Lib\ в LazyDelphiBuilder-е?.. ;)

Update: Решил проблему созданием отдельных dcu файлов с отладочной информацией..



  • А вы знаете, сколько стоит отдать на аутсорсинг сопровождение 20 офисных компьютеров, 5 серверов и двух рабочих мест 1C? А я знаю. Тем более что цену ИТ аутсорсинга можно легко рассчитать на калькуляторе цен прямо на сайте аутсорсера.

понедельник, 27 октября 2008 г.

Сон. Embarcadero vs Borland

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

Но самое смешное - это воюющие стороны.

Одна армия воевала за Embarcadero, а вторая за Borland.

воскресенье, 26 октября 2008 г.

Текучка 5

  1. Записал видео урок о настройке Lazy Delphi Builder для создания build-a приложения[1]. Видеоурок на английском.
  2. Сделал сайт с описанием и документацией по проекту(на русском и английском): http://sites.google.com/site/lazyproject/. Всё-таки на Google Code писать документацию очень неудобно. Wiki синтаксис накладывает массу ограничений.
  3. Создал форум на UserVoce: http://lazydelphibuilder.uservoice.com/ Теперь, у Вас есть возможность предлагать новые фичи, и голосовать за старые. Также добавил себе в блог widget от UserVoice, где можно посмотреть результаты голосования. Довольно удобный сервис.
  4. Сейчас активно занимаюсь созданием третьей беты:
    1. Вчера сделал возможность отменять удаление файлов в дереве, т.е. Undo.  Помучался изрядно. Респект и уважуха программистам, решившимся реализовать в программе возможность отменять изменения(Undo). Код, который получился мне не очень нравится. Самое лучшее место для реализации Undo как мне кажется при работе с VirtualTreeView – это внутренности VirtualTreeView.
    2. Сейчас активно занимаюсь созданием консольной версии.
    3. Забавно, что никто не сообщил о заморозке проекта в случае возникновения ошибки во время компиляции.

[1] Идея которая стоит за этим уроком: при создании очередного билда, приложение должно быть полностью перекомпилировано вместе со всеми используемыми библиотеками.

вторник, 21 октября 2008 г.

Цель проекта: Lazy Delphi Builder. И небольшой FAQ по теме.

Целью проекта в том, чтобы создать инструмент для:
1) Быстрой перекомпиляции проектов с большим количеством связанных библиотек, без возни с файлами настроек.
2) Для быстрой компиляции чужих проектов и компонент без их установки в IDE. (Например, чтобы быстро собрать демки из исходников)
3) Для быстрой установки в IDE компонент из исходников, без необходимости прописывать кучу путей в Library Path.
4) Для интеграции с другими build-инструментами. (будет версия для работы в командной строке)
5) И главный плюс - это возможность жёстко указать папки для всех типов выходных файлов (exe, bpl, dcp, dcu, res). Чтобы в папках с исходниками не оставалось никакого мусора.

Может ли Lazy Delphi Builder заменить want ?

Да, но только ту часть want-a которая отвечает за компиляцию проектов. Я начл писать Lazy Delphi Builder именно потому что мне не нравится редактировать xml-файлы размером в несколько десятков килобайт. =) Я не планирую реализовывать остальной функционал want-a, такой как: работа с файлами, папками, архивами, ftp, http, e-mail-ами и т.п. Однако, если возникнет идея, которая функционально украсит Lazy Delphi Builder, то с удовольствием её выслушаю. ;-)

Что лучше изучать: ant, want, rake или что-то ещё.

Выбор инструмента во многом зависит от поставленных целей. Не стоит также забывать и про стандартные инструменты, доступные в каждой инсталляции Delphi: msbuild и make ;) Инструментов разных полно, и каждый со своими уникальными особенностями и ограничениями.

Для создания билда из исходников с нуля вполне достаточно Lazy Delphi Builder-a. Я планирую в скором будущем сделать версию для командной строки. Тогда Lazy Delphi Builder можно будет легко вызвать из .bat-файлов, сценариев ant-а, want-а и и.п.

А пока что, мне самому вполне достаточно иметь возможность, не напрягаясь, получить билд из исходников, с нужными мне директивами и включенной оптимизацией. И я для себя не вижу смысла в установке, например, ant-а для выполнения действий, которые легко реализуются с помощью .bat-файлов.

=)

Ещё можно почитать по теме

Появились неофициальные версии Ehlib и RxLib для Delphi 2009

В один день на просторах интернета появились неофициальные версии для Delphi 2009 двух, наверное, самых популярных библиотек^ RxLib и Ehlib.

Версию Ehlib для Delphi 2009 с некоторыми дополнениями выложил на Vingradе пользователь Alex. Скачать обновления для Ehlib 4.1 для D2009. Потому что сам автор Ehlib-a судя по всему забросил проект.

При желании Ehlib для D2009 можно было найти уже месяц назад на том же самом dumpz.ru. Также неофициальную.

А RxLib был выложен на форуме dumpz.ru пользователем psa1974. Скачать RxLib 2.7.7 для Delphi 2009(c rapidshare-ы)

Кстати, я писал когда-то что FIBPlus поддерживает Delphi 2009 начиная с версии 6.9.5. Так вот, я ошибся. Меня ввела в заблуждения строка “Улучшена совместимость с Delphi 2009” в журнале изменений. Совместимость-то там может и улучшена, но только на рудиментарном уровне. Версии FIBPlus для Delphi 2009 пока нет.

Выложил 2-ю бету Lazy Delphi Builder (0.8.3.53)

Страница быстрого установщика компонент - Lazy Delphi Builder.

Lazy Delphi Builder 0.8.3.53(beta):
1) Добавлена возможность компилировать проекты
2) Исправлено: в диалоге Build Settings для Binary Output path по умолчанию указывалась текущая папка Delphi\Bin
3) Исправлено: обработка пустых строк('') в диалоге Build Settings
4) Добавлен параметр командной строки /noAutoSave отключающий автосохранение настроек при выходе
5) Добавлена закладка для просмотра отладочной информации(Отфильтровнные по ExcludeMasks файлы; списки Package-й, проектов, include-файлов, папок с ресрусами)
6) Добавлено сохранение истории для OutFolders
7) Исправлена ошибка с прорисовкой CheckBox-ов в Exclude Masks
8) Добавлена проверка для выходных папок. Теперь не получится запустить компиляцию с пустыми выходными папками.
9) Изменилось расширение у сохранённого профиля. Теперь это: .LazyDBP
10) Изменён алгоритм очистки выходных папок. Старые папки сейчас переименовываются в ИмяПапки.bak. А предыдущие версии ИмяПапки.bak удаляются в корзину.
11) + много косметических изменений

понедельник, 20 октября 2008 г.

Текучка 4

Сначала о первой бете Lazy Delphi Builder. Там есть несколько недоработок и багов.

  1. Неверно определяется папка по умолчанию для Binary Output Folder. В качестве папки по умолчанию берётся папка Bin текущей инсталляции Delphi. Это в корне неверное значение, и эту папку надо обязательно изменить на какую-нибудь другую.
  2. Для того чтобы всё работало, необходимо указать выходные папки для всех типов файлов.

Появилась надобность разобраться с технологиями доступа к Oracle-у из Delphi. Вот бы почитать какие-нибудь сравнения-тесты.

Предыдущую проблему с автоматизацией выявления пишущих select-ов в программе решил примерно так:

  1. Извлёк из базы скрипт создания всех хранимых процедур.
  2. Добавил в начало каждой процедуры вызов insert в тестовую таблицу(поиск по регулярным выражениям рулит:] ).
  3. Пересоздал эти процедуры в базе(команда Create or Alter рулит:]). И получил в результате базу в которой все процедуры стали пишущими.
  4. Потом пришлось помучится пару часиков, чтобы приложение вообще начало запускаться. Зато потом, легко выявил все места, где Select из процедур происходит в read-only транзакции.

пятница, 17 октября 2008 г.

Доступна для тестирования первая бета Lazy Delphi Builder

Та-дам! Lazy Delphi Builder.

Пока что единственное что умеет программа – это компиляция пакетов(dpk) и их регистрация в IDE, а также очистка и создание структуры выходных папок. Поддержка dpr будет доступна в следующей версии. Небольшое описание на русском языке лежит в архиве.

Если что-то непонятно, спрашивайте здесь. Если возникнут какие-то ошибки, то пожалуйста сообщите здесь, указав: версию Windows, установленные версии Delphi/CBuilder.

Совет: при экспериментах, лучше включать галочку Do not register packages in IDE.

Внимание:

Сделайте резервные копии исходников. Если у вас включена галочка Clean output folders before compile, то папки указанные как выходные будут удалены со всем содержимым. Используйте эту опцию осторожно.

понедельник, 13 октября 2008 г.

Текучка 3. Псевдо стресс тест для установщика пройден.

Установка 212 package-й в Delphi7 заняла меньше часа. Из него минут 55 ушло на настройку и вычистку несовместимых package-й, и 5 минут на непосредственно компиляцию и регистрацию в IDE.

Во время теста были установлены JCL, JVCL, Ehlib, DeveloperExpress, FIBPlus, FastReport и кое-что ещё. Самым неприятным было вычищать package-и других версий Дельфи. Попробовал открыть и скомпилировать в IDE демки – всё пучком. =)

Осталось причесать интерфейс, протестировать на рабочих компьютерах, и можно будет выкладывать. ;)

среда, 8 октября 2008 г.

текучка 2. Бывают Select-ы, которые нужно выполнять в рамках пишущей транзакции.

Обнаружилась проблема в “успешно переведённым” с BDE на FIBPlus проекте. Переводил я тогда так:

  1. На главном Datamodule я создал 2 транзакции, trMainRead(read-only) и trMainWrite(read/write).
  2. У всех FIBDataset-ов выставил читающей транзакцией trMainRead, а пишущей trMainWrite, а также свойства AutoStartTransaction и AutoCommit.

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

500 хранимых процедур, 71 форма, 37 тыщ строк кода. Проект старый и чужой и большая часть кода мне незнакома.

Вот бы как-нибудь, этот процесс автоматизировать.

p.s. Решение проблемы с Select-ами.

пятница, 3 октября 2008 г.

Как улучшить help в Delphi. Пошаговая инструкция по внедрению DRKB в систему помощи Delphi.

 Drkb и Jedi Help в MsHelp 2.0

После двух вечеров, возни с Ms-help 2.0, у меня, наконец, получилось интегрировать Delphi Russian Knowledge Base в систему помощи Дельфей.

Инструкция прилагается…