Motto

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


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


четверг, 31 декабря 2009 г.

Большое подведение итогов по 2009 году и небольшой подарок в конце

Мир Delphi

Borland Inprise Borland Codegear Embarcadero в этом году анонсировали свои планы по развитию Delphi. В числе планов была упомянута взбудоражившая блогосферу кроссплатформенность.

В этом году вышла первая версия Delphi разработанная в Embarcadero – Delphi 2010. Эта версия Delphi характеризовалась большим количеством исправлений ошибок, некоторые из которых тянулись ещё со времён Delphi 7. Но стабильность – не единственный плюс этой версии, посмотрите также и на внушительный список нововведений в Delphi 2010.

В этом году Embarcadero продемонстрировали, что в отличие от Borland-a, они готовы к диалогу с Delphi-сообществом. В этом году Embarcadero провело несколько опросов дающих пользователям возможность оценить нововведения в последних версиях IDE, ожидаемые новинки, так и поддержку, и схемы лицензирования.


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

среда, 23 декабря 2009 г.

Сравнивая дженерики в C#, C++ и Delphi(Win32) (перевод)

Перевод статьи: Comparing C#, C++, and Delphi (Win32) Generics. Автор: Craig Stuntz



В языках C #, C++ и Delphi есть возможность использовать обобщённые типы и функции. Хотя все три языка используют статическую типизацию, дженерики в них реализованы очень разными способами. Я собираюсь дать краткий обзор различий, как в плане возможностей языка, так и в плане особенностей реализации. Я предполагаю, что в Delphi Prism дженерики работают точно так же, как и в C#, которые, как вы увидите, отличаются от дженериков в Delphi/Win32.

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

Прежде чем я начну, я хотел бы поблагодарить Барри Келли за его полезные замечания по первому черновому варианту этой статьи.

Компилируя инстанцирования

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


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

среда, 28 октября 2009 г.

Лучшие статьи TDelphi-блога

 

Здесь собраны ссылки на самые интересные публикации этого блога.

 

Почитать

 

Обзоры

 


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

вторник, 27 октября 2009 г.

Умирает ли Delphi? :D

gunsmoker прислал:

Для тех, кого волнуют ответы на вопросы: "Умирает ли Delphi?" и "Мертв ли Delphi?" открылось целых 2 сайта:

  1. http://www.isdelphidying.com/
  2. http://www.isdelphidead.com/
  • Купить Delphi 2010
  • Купить RAD Studio 2010
  • Купить Embarcadero All-Access

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

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

    Урра!

    По ссылке с хабра пришло много людей и собралась некоторая статистика.
    Из ~1000 человек посетивших блог за последние 2 дня:
    • Оценили посты (интересно/неинтересно): ~2 человека
    • Сказали спасибо: ~2 человека
    • Указали на опечатки: ~1 человек
    Спасибо вам, активные читатели.
    p.s. Я же буду и впредь смиренно тратить своё время на переводы. Ведь, как оказалось - люди, в сущности, очень милые жывотные :P

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

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

    Обобщённое программирование(generics) в Delphi 2009 для Win32. Оглавление.


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

    Дженерики в Delphi 2009 для Win32. Часть 7. RTTI и генерики.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.



    Словарь терминов
    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения;
    • actual types – фактические типы
    • generic class – обобщённый класс;
    • generic parameter – обобщённый параметр;
    • anonymous routines - анонимные методы;
    • routine references - процедурные ссылки;

    IX. RTTI и генерики

    В этой последней главе, я собираюсь рассказать о том, что генерики изменили в RTTI. Если Вы никогда не игрались с RTTI, Вы можете пропустить эту главу. Она не была задумана как введение в RTTI.


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

    суббота, 26 сентября 2009 г.

    Дженерики в Delphi 2009 для Win32. Часть 6. Обобщённые методы.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.



    Словарь терминов
    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения;
    • Типы данных: string – строка, record – запись;
    • implicit conversion - неявное приведение (типа);
    • constraint – ограничение;
    • actual types – фактические типы
    • generic class – обобщённый класс;
    • generic parameter – обобщённый параметр;
    • сast – приведение типа;
    • anonymous routines - анонимные методы;
    • routine references - процедурные ссылки;
    • ordinal type – порядковый тип (данных);
    • interface type – интерфейсный тип (данных);
    • class type – классовый тип, иногда просто класс (так как класс сам по себе является типом);
    • class method – классовый метод; метод класса; class procedure;
    • comparer – компаратор;
    • unit – модуль, юнит;
    • instanciate – создание экземпляра объекта;
    • ordinal type – порядковый тип (данных)

    VIII. Обобщённые методы

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

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


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

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

    Хочу жить и работать в Штуттгарте :)

    Съездил в отпуск в Stuttgart. Чудесный город (пруфилинк на панорамную фотографию)! Хочу там жить и работать.

    Есть вакансия для Delphi-разработчика в Штутгарте? Переехать готов где-то после Нового Года. ;)


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

    среда, 2 сентября 2009 г.

    Lazy Delphi Builder 1.2.8.140

    Что нового

    1. Изменён способ загрузки исходников с относительными путями. Старый способ был слишком запутанным. Теперь для реализации относительных путей можно использовать переменные (аналог environment variables).
    2. Добавлена поддержка переменных (environment variables). Есть возможность переопределять переменные определённые в Delphi.
    3. Добавлена возможность настраивать папки Library Search Paths.
    4. Исправлены известные ошибки.
    5. Огромное количество исправлений и улучшений.

    Что не доделано:

    1. Библиотеки, поставляющиеся без исходников (dcu вместо .pas) требуют ручной настройки (хотелось бы, чтобы Lazy Delphi Builder копировал нужные dcu-файлы):
      1. либо вручную скопировать необходимые dcu файлы в папку для dcu файлов
      2. либо добавить путь до этих dcu файлов в Library Path

     Скачивать Lazy Delphi Builder здесь.

    Инструкция по использованию:

    http://www.lazyproject.info/support/docs-ru/


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

    вторник, 25 августа 2009 г.

    Вышла RAD Studio 2010

    Сегодня у RAD Studio 2010 появилась информационная страничка: http://www.embarcadero.com/products/rad-studio 

    А также стала доступна для скачивания 30-дневная trial-��ая версия.

    Фанфары.

    О нововведениях в Delphi 2010 можно почитать здесь:

    /2009/08/delphi-2010.html

    p.s. после того как с сайта embarcadero пропал счётчик, отсчитывавший время до выхода, я, грешным делом, подумал, что релиз перенесут. Ан нет, выпустили вовремя. :)

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


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

    понедельник, 24 августа 2009 г.

    Подборка ссылок по Wix

    Обещанная подборка ссылок по использованию Wix-а для создания инсталляций на базе Windows Installer (msi). В подборку влючены ссылки на русскоязычные и англоязычные вики, блоги, статьи и форумы посвящённые Wix-у. А также ссылки на некоторые вспомогательные иснтрументы.

    На русском языке информации о Wix-е и Windows Installer-e катастрофически мало. Пара статей и несколько блогов – вот всё, что мне удалось найти. Вся основная информация об использовании Wix-a, включая туториалы, – на английском языке.

    На русском языке

    Туториалы

    1. Создание инсталлятора с помощью WiX. Часть 1. Создание простого инсталлятора.
    2. Создание инсталлятора с помощью WiX. Часть 2. Организация проекта.
    3. Создание инсталлятора с помощью WiX. Часть 3. Пользовательские окна.
    4. Создание инсталлятора с помощью WiX. Часть 4. Custom Actions в WiX.

    Все записи с тэгом Wix на Хабрахабре.

    Блоги


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

    воскресенье, 23 августа 2009 г.

    Объявлен срок выхода Delphi 2010. Обзор нововведений.

    25 августа 2009 года.

    Пост обновлен: 2009/08/27

    Кто читает Delphi Feeds те, вероятно уже в курсе новостей. Для остальных (такие есть?:) ) вкратце опишу здесь.

    У Delphi 2010 появилась своя страничка на сайте Embarcadero: http://www.embarcadero.com/rad-studio-2010/

    Там будут появляться небольшие видео, демонстрирующие новые возможности IDE. Первое доступно уже сейчас.

    Там же висит таймер который отсчитывает время оставшееся до выхода студии. 19 августа таймер с сайта пропал.

    После анонса даты выхода, блоггеры разразились обзорами новых возможностей IDE. Вот основные (известные на данный момент по первому видео и публикациям в Delphi Feeds)

    1. Самое важное – исправлено огромное количество багов (даже те, которые не были зарегистрированы в Quality Central). Т.е. эта версия IDE обещает быть самой стабильной (поживём - увидим).
    2. Изменились иконки.
      Иконки Rad Studio 2010
    3. Компиляция в фоне. Т.е. можно запустить компиляцию в отдельном потоке, и продолжать работать в IDE. Например, расставлять точки остановки (breakpoints)
    4. Улучшена работа с потоками:
      • Появилась возможность давать потокам имена.
      • Улучшена отладка потоков. При установке брейкпойнта (это как-то ближе чем точка остановки(: ), в отладчике можно видеть, какой из потоков сейчас активен. Также можно выборочно замораживать потоки, и устанавливать активный.
      • thread-specific breakpoints.
    5. Подсветка поиска и Search bar. Наконец-то найденный текст будет подсвечиваться в редакторе.
    6. Появилась возможность переключать палитру компонентов в старый привычный режим, в виде полоски с табами. Возможность фильтрации сохранена. Кстати, код для этой штуки был написан Andreas-ом Hausladen-ом.
    7. IDE Insight. Потрясающая штука, позволяющая найти и выполнить любую команду IDE просто начав набирать её по буквам. Работает как для команд, так и для компонентов, а также для темплейтов кода. Кстати, её можно использовать для поиска компонентов на форме. По действию похожа на SearchBar в Vista Start Menu.
    8. Code Formatter. Настраиваемый форматировщик кода.
    9. Визуализаторы отладочной информации – одно из расширений ToolsApi, позволяющее отображать данные во время отладки в более удобном виде (например, можно просматривать содержимое TStrings в виде текста).
    10. Меню Reopen сделано настраиваемым.
    11. Добавлена возможность создавать Actions в Object Inspector.
    12. Мелочи вроде возможности сорти��овать файлы в Project manager-е, возможности перетаскивать точки остановки мышкой.
    13. Улучшения в ToolsApi (кстати там есть функции для интеграции с VCS).
    14. Наконец обновили окно Use Units. Теперь там есть фильтрация и возможность указать куда добавлять unit (в interface или implementation).
    15. Рефакторинг и Code Insight теперь работают с генериками.
    16. Поддержка mouse gestures и (multi-)touch интерфейсов. Доступен компонент – экранная клавиатура. Ещё. Ещё. Ещё, на русском.
    17. Возможность помечать внешние функции (из DLL-ок) как delayed, благодаря чему они будут загружаться только в момент вызова.
    18. Поддержка WIC (Windows Image Component), что позволит использовать в Delphi массу форматов изображений, в том числе и .raw. Некоторые даже готовы назвать это историческим событием.
    19. Классы для работы с файлами и директориями.
    20. Delphi 2010 будет иметь сертификат по совместимости с Windows 7.
    21. Новые юниты:
      1. Wincodec.pas содержит TWICImage. Поддержка Tiff, CR2 и NEF.
      2. Cor.pas – поддержка .NET Assemblies из нативного кода.
      3. Direct3D.pas, D3DX9.pas, D2D1.pas – заголовочные файлы для DirectX.
      4. Direct2D.pas содержит TDirect2DCanvas. Работа с Direct2D канвой знакомыми методами TCanvas.
      5. Manipulations.pas – инерционные манипуляции. Для реализации вращения и бросания вещей на экране. (звучит как физический движок)
      6. Gestures.pas, GestureMgr.pas, GestureCtrls.pas
        Поддержка жестов.
      7. Keyboard.pas, KeyboardTypes.pas содержит класс TTouchKeyboard.
        IOUtils.pas – серьёзное пополнение RTL в виде классов TDirectory, TPath, и TFile.
    22. Новый набор иконок, поставляющийся вместе с IDE.
    23. Расширенное RTTI: атрибуты. Пример использования атрибутов для реализации объектно-реляционной проекции.
    24. Обработка интерактивных жестов.
    25. Dbx драйвер для Firebird с поддержкой юникода. Поддержка Firebird в Data Explorer. Доступны исходники всех Dbx-драйверов. Доступен исходник midas.dll (на C). Источники: Большой обзор. Видео демонстрирующее работу с Firebird Dbx драйвером, и новые фичи Datasnap 2010.
    26. Ещё новшества касающиеся DataSnap.
    27. “Import WSDL” Wizard с поддержкой SOAP 1.2 и кучей дополнительных опций.
    28. Существенно улучшена справка. (оставьте надежду, MsHelp2 никуда не делся). Улучшения коснулись полноты материала. Будет больше code samples (например, будет 533, хотя неизвестно сколько их было раньше). Справка дополнена советами по переводу ANSI кода на Unicode.
    29. Появилась возможность приводить интерфейсы к классовому типу с помощью as.
    30. Ещё немного о SOAP 1.2.
    31. Поддержка HTTP в Datasnap 2010 с помощью ISAPI.dll. (большой пост с иллюстрациями)
    32. Обратные вызовы (callback) в Datasnap 2010.
    33. JSON тип�� в Datasnap 2010
    34. Ещё об атрибутах в Delphi 2010. Пример использования атрибутов для валидации данных.

    По ссылкам можно посмотреть скриншоты и почитать подробное описание на английском.

    Из того, что обещалось на Delphi Live пока слышно, что будет dbExpress драйвер для Firebird, будет поддержка touchscreen-ов и mouse gestures в VCL, но ничего не слышно про интеграцию с SVN (а было бы чертвоски здорово иметь что-то подобное тому, как это сделано в NetBeans).

  • Купить Delphi 2010


  • Купить RAD Studio 2010


  • Купить Embarcadero All-Access

    Nick Hodges сообщил, что поддержка SVN не будет являться частью Delphi 2010, но будет реализована в виде субпроекта после выхода Delphi 2010.

    Видео, демонстрирующее работу IDE Insight, Code Formatter, панели компонентов, фоновой компиляции и кое-чего ещё.

    Смотрите также

    Посты по теме


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

    четверг, 13 августа 2009 г.

    Вирус отакуе Delphi программистов!

     

    virus

    Вирус, photo by twenty_questions

    Gunsmoker сегодня сообщил о вирусе, заражающем установленную Delphi и распространяющим себя через скомпилированные программы. Известно, что в интернете гуляли заражённые версия Qip и Aimp.

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

    Подробное описание этого вируса, алгоритма его действия и способа лечения можно найти в блоге GunSmoker-a.

    Сама по себе эта разновидность вируса не опасна. Его легко найти и исправить. Однако этот вирус демонстрирует жизнеспособность такого способа заражения, и уязвимость установленной Delphi.

    Мне “повезло” обнаружить этот “вирус” в своей инсталляции Delphi 6 и Delphi 7. Причём дата модификации у одного из sysconst.dcu.bak был январь 2008 года.

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


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

    TortoiseSVN работает на порядок медленнее чем консольный клиент

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

    Надо сказать, в качестве клиента svn я использую TortoiseSVN (версию 1.6.2).

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

    Иконок не то, чтобы мало – 30 тысяч файлов. И коммитил я их, частями. Но, так или иначе, выглядела эта идея удручающе. И решил я попробовать сделать тоже самое через консольный клиент (svn.exe). Я скачал и установил сборку SlikSVN,  и запустил коммит. К несказанному удивлению, консольная версия сделала всю работу минут за 10.

    Вывод: иногда гуёвые программы и работают соответствующе.

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


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

    вторник, 4 августа 2009 г.

    Генерики в Delphi 2009 для Win32. Часть 5. Ограничения обобщенных типов.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.



    Словарь терминов
    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения;
    • Типы данных: string – строка, record – запись;
    • implicit conversion - неявное приведение (типа);
    • constraint – ограничение;
    • actual types – фактические типы
    • generic class – обобщённый класс;
    • generic parameter – обобщённый параметр;
    • сast – приведение типа;
    • anonymous routines - анонимные методы;
    • routine references - процедурные ссылки;
    • ordinal type – порядковый тип (данных);
    • interface type – интерфейсный тип (данных);
    • class type – классовый тип, иногда просто класс (так как класс сам по себе является типом);
    • comparer – компаратор;
    • unit – модуль, юнит;
    • instanciate – создание экземпляра объекта;
    • ordinal type – порядковый тип (данных)

    V. Ограничения обобщенных типов

    Хорошо, теперь вы знаете основы. Настало время перейти к серьезным вещам, а именно ограничениям.


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

    воскресенье, 2 августа 2009 г.

    Итоги недели: первый шаг к созданию команды

    команда =)Вопрос о том, работают ли Delphi программисты в команде волнует меня давно. И если работают то как? Причина в том, что во всех местах где мне доводилось работать, Delphi программисты работали поодиночке. Каждый над своим проектом. Максимум – один из программистов заведовал общей библиотекой компонентов.

    На текущей моей работе точно такая же ситуация. Все программисты находятся в одной комнате, но каждый работает над своим проектом и даже не в курсе того, какие проблемы решает его сосед. Более того, все проекты когда-то были основаны на одном и том же базовом коде, но этот код просто копировался между проектами. В результате сейчас мы пришли к тому, что в каждом проекте этот код немного (иногда даже сильно) отличается. Типичная ситуация в духе worse than failure.


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

    суббота, 1 августа 2009 г.

    Валидаторы в JVCL. Jv Validators.

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

    JVCL валидаторы в действии

    image_thumb

    Валидаторы из JVCL позволяют проверять введённые данные по следующим критериям:

    1. Обязательное для заполнения поле.
    2. Попадание введённого значения в интервал.
    3. Соответствие введённого текста регулярному выражению.
    4. Сравнивать введённое значение с произвольным значением либо со значением, введённым в другой контрол.
    5. Произвольная проверка.
    Работа с валидаторами в Delphi

    image4_thumb

    Подробное описание компонентов для валидации данных из библиотеки JVCL, читайте в блоге Вячеслава Комкова:

    Валидаторы в JVCL. Часть 1
    Валидаторы в JVCL. Часть 2

     

    Описание других возможностей JVCL:


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

    пятница, 24 июля 2009 г.

    Обобщенное программирование(generics) в Delphi 2009 для Win32. Часть 4. Создание обобщенной записи.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.



    Словарь терминов
    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения;
    • Типы данных: string – строка, record – запись;
    • implicit conversion - неявное приведение (типа);

    IV. Создание обобщённой записи

    Давайте изучим кое-что ещё и попробуем разработать простенькую, но полезную запись TNullable<T>. Идея состоит в том, чтобы создать запись, которая сможет иметь значения типа T, либо nil. Вы наверное уже задумывались о необходимости такого типа, например для представления значений Null из баз данных.


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

    среда, 22 июля 2009 г.

    Часть 3. Generics в Delphi 2009 для Win32. Создание обобщённого класса.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.


    Словарь терминов
    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения;
    • generic class – обобщённый класс;
    • generic parameter – обобщённый параметр;
    • сast – приведение типа;
    • anonymous routines - анонимные методы;
    • routine references - процедурные ссылки;
    • ordinal type – порядковый тип (данных);
    • interface type – интерфейсный тип (данных);
    • class type – классовый тип;
    • comparer – компаратор;
    • unit – модуль, юнит;
    • Типы данных: string – строка, record – запись;
    • Callback – обратный вызов, но я оставил его непереведённым;
    • pre-order walk – префиксный обход (дерева);
    • instanciate – создание экземпляра объекта;

    III. Создание обобщённого класса

    Теперь, когда мы знаем, как использовать обобщённые классы, пришло время рассмотреть их внутреннее устройство.
    Мы разработаем класс TTreeNode<T>, который станет обобщённой реализацией дерева. На этот раз, это будет не просто обучение. Мы создадим реальный класс, который Вы сможете использовать в своих реальных проектах.

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

    четверг, 16 июля 2009 г.

    Итоги за последние месяцы работы

    Небольшое перечисление заслуг подведение итогов за последние месяцы работы.

    Всякое
    • Перевёл второй большой проект с BDE на FibPlus(подробнее - ниже).
    • Программировал в XML. Собрал Windows Installer инсталляции для 6 основных наших продуктов.
    • Уговорил нашего админа поставить сервер для виртуализации Citrix XenServer. Повезло, что у нас в то время чистый серверок завалялся. Очень удобно оказалось при тестировании инсталляций под ограниченным в правах пользователем. Наделал чистых машин и отправил тестировщикам. Намного удобнее чем на своей машине запускать виртуалку.
    • Начал изучать изучать сервера непрерывной инеграции: TeamCity и немного Hudson. Очень хочется настроить отдельную машину для автоматической сборки билдов с последующей созданием инсталлятора. Ещё бы юнит-тесты начать писать.
    • Обживал Redmine (подробнее - ниже).
    Перевод программ с Bde на FibPlus

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

    вторник, 14 июля 2009 г.

    2. Обобщённое программирование(generics) в Delphi 2009 для Win32. Часть 2. Использование.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.



    Словарь терминов

    • generics - дженерики, генерики, параметризованные классы, шаблоны, обобщения. Мне кажется, что наиболее подходящим для перевода словом будет “обобщения”, но в народе их чаще называют: дженерики;
    • generic class – обобщённый класс;
    • сast – приведение типа;
    • anonymous routines - анонимные методы;
    • routine references - процедурные ссылки;
    • ordinal type – порядковый тип (данных);
    • interface type – интерфейсный тип (данных);
    • comparer – компаратор

    II. Повседневное использование на примере TList<T>

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


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

    воскресенье, 12 июля 2009 г.

    Давайте знакомиться? :) Несколько вопросов читателям.

    2007-05-08 Just ask

    Image by Squonk11 via Flickr

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

    1. Как давно Вы занимаетесь программированием вообще?
    2. Как давно Вы занимаетесь программированием на Delphi?
    3. Приносит ли программирование вам какой-нибудь доход?
    4. Доводилось ли Вам участвовать в командной разработке на Delphi?
    5. Если не секрет, то сколько человек было в команде?
    6. Если не секрет, каким образом разделялись обязанности?
    7. Занимаетесь ли вы проектированием?
    8. Сколько примерно времени в процентах вы тратите на проектирование? (например, 100% – время выполнения проекта (или задания), из них 10% на проектирование, 90% написание кода.)
    9. Оцениваете ли Вы время выполнения задания перед началом работы?
    10. Как часто Вы укладываетесь в установленный срок?
    11. Отслеживаете ли Вы время работы над заданием?

    p.s. мои ответы в комментариях.


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

    суббота, 11 июля 2009 г.

    Обобщённое программирование(generics) в Delphi 2009 для Win32. Часть 1. Введение.

    В пособии также рассматриваются анонимные методы и процедурные ссылки.


    Примечания к “переводу”
    Словарь терминов
    I. Введение
    I-A. Предпосылки
    I-B. Что такое дженерики?


    Примечания к “переводу”

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

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

    Другая часть работы вызвавшая у меня трудности – это адекватный перевод терминов. Буду признателен за замечания и уточнения.

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


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

    среда, 8 июля 2009 г.

    -

    Погиб Виталий Невзоров(Vit).
    Создатель самой большой подборки статей по Delphi - Drkb.
    Вечная память.
    =(

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

    суббота, 4 июля 2009 г.

    (TDelphi.blogspot.com).Resume =)

    Итак, закончился университетный сезон. Май и июнь были очень напряжёнными месяцами. Отдохнуть и отоспаться удалось только в в последнюю неделю июня. Сессия закончилась, все экзамены сданы. Урра! =) Осталось только защитить бакалаврскую зимой.

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

    Теперь у меня появилось время довести до ума и выложить обновление для Lazy Delphi Builder.

    Планы на ближайшее будущее
    • Отчётный пост о том, чему научился за этот семестр в университете,
    • Заметки о том, что сделал на работе за этот период.
    • Заметку о тайм-менеджменте.
    • Подборку ссылок на ресурсы по Wix-у.
    • Обещанный перевод статьи по дженерикам в Delphi.
    Идеи для чуть более отдалённого будущего
    • Перевести свою баку(тема: поддержка типов данных Oracle в Delphi различными компонентами) на русский язык.
    • Написать подборку советов по переходу с BDE на FibPlus
    • Перевести хорошие материалы по Wix-у на русский язык

    Расскажите, что Вам кажется более интересным из предложенного? И предложите своё. =)


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

    среда, 3 июня 2009 г.

    О переходе крупного проекта на Delphi 2009(перевод)

    Перевод статьи: “Upgrading a major project to Delphi 2009”,  Lars B. Dybdahl.

    Вот и закончен перевод на Delphi 2009 крупного проекта, который в течении нескольких лет разрабатывался довольно большой командой программистов. Теперь я готов поделиться опытом.

    Если Вы хотите оценить объём работ, которые потребуется для конвертации проекта, примите во внимание, что объём строк в проекте не является таким уж и значимым показателем. Более важно, какой код у Вас есть, насколько он сегментирован, и насколько согласованно написаны сегменты. Вещи относящиеся к пользовательскому инте��фейсу, бизнес логике и т.п. очень легко конвертировать. Я бы даже сказал, что достаточно просто перекомпилировать и запустить. А вот с другими частями, всё будет не так просто.

    Наш код был четко сегментирован. Так что любой модуль можно было отнести к одной из групп:


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

    понедельник, 1 июня 2009 г.

    четверг, 28 мая 2009 г.

    Вышли Update 3 и Update 4 для RAD Studio 2009.

    Полный список исправлений в Update 3
    Полный список исправлений в Update 4(Database Pack)
    p.s. Исправлена ошибка в dbExpress, когда вместо полей типа string создавались Widestring (QC#67121)
    Читать дальше..

    суббота, 16 мая 2009 г.

    Слухи о будущем Delphi(с конференции Delphi Live)

    Слухами Земля полнится

    Доподлинно неизвестно, но кое-кто говорит, что CodeGear в данный момент параллельно ведёт 4 ветки Delphi:

    1. Delphi Weaver – основной целью которого является улучшение юзабилити IDE, поддержка командной разработки(интеграция с SVN), DataSnap с поддержкой http, поддержка touchscreen-ов, поддержка Firebird-a в DbExpress, Soap 1.2, поддержка Windows 7 и кое-что ещё.
    2. Delphi “X” – кроссплатформенность(Linux + MacOs)
    3. Project Chromium – Pascal Code Formatter, документация по OpenToolsApi, новая модель привязки к данным(не через датасеты), более тесная интеграция с БД-тулзами от Embarcadero.
    4. Project Commodore – долгожданные 64-бита, поддержка многопоточности в RTL.

    И никакой информации о датах выхода.

    К кроссплатформенности я отношусь довольно скептически. Имхо, это потребует огромного вложения времени, а на деле может оказаться таким же “юзабельным” как и Delphi.Prism. Лучше бы RTL и VCL обновили, и IDE улучшили и выбросили на помойку Help2.

    Источники слухов:

    Покупка Borland

    Только ленивый не написал о том, что Micro Focus купила Borland за 75 миллионов долларов. Причём периодически встречаю на форумах записи в духе: “Borland давно шёл к этому продав свою дойную корову Codegear”. Вот только я не понимаю, что же это за дойная корова такая, от которой хотели избавиться, и избавились всего за 30 миллионов долларов.


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

    понедельник, 4 мая 2009 г.

    Итоги недели: NetBeans, диаграммы, относительные пути в LazyDBP

    Wix

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

    BDE to FibPlus

    Всю неделю я занимался приведением в порядок проекта, перед переводом с BDE на FibPlus. Поиск дублирующегося кода, замена TQuery на TDataset, где только можно и рефакторинг, рефакторинг, рефакторинг.[1]

    [1] О том, что такое рефакторинг и когда он нужен, можно прочитать в классической книге Мартина Фаулера - Рефакторинг. Улучшение существующего кода. У меня есть зачитанные до дыр распечатки некоторых глав, и это одна из немногих книг, которые я хочу заиметь в бумажном варианте.

    NetBeans + RoR

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

    вторник, 28 апреля 2009 г.

    Чем же так хорош MSI?

    Раз грозился вчера написать, в чём MSI лучше чем Nsis и Inno Setup, то надо выполнять угрозу. =) Скажу сразу, последний раз я смотрел Nsis и Inno Setup года два тому назад, но на первый взгляд, ничего глобально в них не изменилось. Эта тема отлично подходит для холиваров, особенно если опустить конкретные требования к инсталлятору. Посему хочу напомнить: для разных задач - разные инструменты.

    Плюсы Windows Installer

    1. Во-первых, Windows Installer - единственный из известных мне установщиков, который сам проверяет, не используются ли сейчас какие-нибудь из инсталлируемых файлов, и выводит список программ, которые необходимо закрыть для продолжения инсталляции. Насколько я помню, в InnoSetup и Nsis в этом случае предлагают создавать в приложении какой-нибудь глобальный объект(например, мьютекс) и проверять его из инсталляции(уж не помню какие для этого привилегии нужны, но какие-то точно нужны).
    2. MSI-инсталляция может существенно упростить жизнь системного администратора. Особенно в крупной организации. Особенно если системный администратор не понаслышке знает что такое Group Policy[1]. Многие заказчики, требуют поставки инсталляций именно в MSI. К слову, через Group Policy можно распространять не только MSI, но удобств будет меньше.[2]
    3. MSI для винды - это стандарт де-факто.
    4. Для получения Certified for Windows Vista нужна инсталляция в MSI.(для меня и моей работы сейчас не особо актуально, но почему бы не сделать задел на будущее)

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

    воскресенье, 26 апреля 2009 г.

    Итоги недели: возня с Wix-ом.

    Продукты для бух. учёта нашей фирмы – чертвоски конфигурируемы. Клиент говорит, что ему нужно, а наши сотрудники собирают для него необходимую конфигурацию. Это делает наши продукты действительно удобными. Ходят слухи, даже о том, что люди привыкшие работать с нашими программами, больше не хотят работать с продуктами конкурентов. Всё это очень мило, но благодаря такому подходу, наши продукты до сих пор не имеют нормальной инсталляции. Точнее имеют, но она была собрана давно на Inno Setup, и используется только для базовой установки. И вот, один из клиентов выдвинул требование, предоставить ему установщик в формате MSI. Если кому-нибудь интересно, я как-нибудь напишу псто о том, почему MSI лучше, чем InnoSetup или Nsis.

    Это я плавно подхожу к тому, чтобы начать жаловаться и ругаться. =) Всю неделю я провозился с созданием MSI-инсталляции для наших продуктов. Я выкурил сотни страниц мануалов по Windows Installer и open-source набору инструментов по созданию MSI-файлов – Windows Installer XML (WiX) toolset. В броузере у меня постоянно открыто штук 30 закладок с разными статьями и форумами по Wix. За эту неделю я узнал о процессе установки больше чем за всю предыдущую жизнь. Временами я даже начинал ненавидеть формат XML, за излишнюю придирчивость к комментариям.

    И сейчас мне очень хочется написать что-то вроде: но наконец я закончил эту чертвоу инсталляцию. Но это не так. У меня уже есть инсталляха устанавливающая программу, копирующая конфиги и выдающая нужные права, в ней есть даже один hand-made диалог. Но сделать осталось ещё немало. Для начала надо написать DLL-ку для этой инсталляхи, добавляющую нужную запись в hosts-файл. Честно говоря, я уже начинаю жалеть о том, что взялся за это задание. Я оптимистично полагал, что сделаю всё за пару дней, – а на деле получается, что на это уйдёт как минимум 2 недели.

    Может кто-нибудь из читателей имел опыт работы с Wix-ом, и может ответить на пару вопросов? Полное описание того, что нужно сделать и вопросы по теме заданы здесь: http://forum.sources.ru/index.php?showtopic=270846


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

    пятница, 24 апреля 2009 г.

    Текучка 10: Что может случиться если сначала обнулять переменную, а потом вызывать деструктор.

    Прочитал на днях пост GunSmoker-a о том, что всегда нужно использовать FreeAndNil вместо Free. Прочитал, подивился, взял на заметку попробовать завести такую привычку, хотя так и не смог придумать объяснения, кроме как: а почему бы и нет?

    И вот бывает же! Как раз сегодня наткнулся на ситуацию, когда из деструктора объекта происходило обращение к самому объекту по имени переменной. Конечно обращение происходило не из самого объекта, а из одного из вложенных. Кстати, дело было в коде Lazy Delphi Builder.=) Из-за частых изменений в иерархии классов, и постоянной работе над проектом в режиме “скорей бы уже релиз выпустить” у меня там развёлся довольно милый бардачок, с большим количеством глобальных переменных.

    Итак..


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

    вторник, 21 апреля 2009 г.

    Пример добавляющий поддержку новых интерфейсов в существующие классы

    Недавно писал, как здорово было бы, если бы в Delphi были опреде��ены интерфейсы для базовых классов. Например, если бы все контролы, имеющие свойство Caption(например TLabel; TButton; TCheckBox; TRadioButton; TGroupBox; TBitBtn; TSpeedButton), реализовывали интерфейс ICaptionedControl с методом GetCaption. Подробнее читайте здесь.

    Я просто мечтал, а Алексей Казанцев взял и показал, что подобное можно реализовать уже сейчас, и даже выложил у себя в блоге пример, показывающий, как добавить поддержку интерфейса ICaptionedControl для классов TControl и TPanel. Реализация сделана с помощью хука на метод TObject.GetInterface и представляет собой практически готовое решение. =)))

    p.s. я до сих пор не могу поверить своим глазам. =) Это же действительно работает! O_o

    p.p.s. Даже код читать – одно удовольствие.


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

    понедельник, 20 апреля 2009 г.

    Кое-что о dcc32

    Началось всё с того, что ctapmex сообщил об ошибке, найденной в последней альфе билд-машины Lazy Delphi Builder. Суть ошибки сводилась к тому, что после компиляции, в папках с исходниками оставались dcu. Причём, некоторые dcu-файлы всё-таки попадали в нужную папку. Почти неделю я проковырялся с этой ошибкой пытаясь понять причину и найти способ их исправить. В результате узнал кое-что новое о работе компилятора командной строки dcc32.exe.

    Условия возникновения ошибки в Lazy Delphi Builder.

    Есть следующие файлы:

    D:\Dummy\Test1.dpk
    D:\Dummy\Test1.RES
    D:\Dummy\TestUnit1.pas
    D:\Dummy\TestUnit2.pas
    D:\Dummy\Source\TestUnit3.pas

    Если скомпилировать package Test1.dpk, указав в качестве папки для dcu, папку D:\Dummy\Build\dcu, то все файлы.dcu остаются рядом с соответствующими файлами.pas.

    Но, при этом, если вместо D:\Dummy\Build\dcu указать папку D:\Dummy\dcu, то все файлы.dcu оказываются там где нужно.

    При этом, если вместо D:\Dummy\ использовать папку с более длинным именем, например D:\DummyTest\Build\dcu то всё работает как надо.

    Отладка осложнялась тем, что Lazy Delphi Builder при запуске dcc32 пытается всеми правдами сократить длину полной команды, преобразуя все используемые пути в относительные и укороченные. Причина такого поведение – баг в dcc32.exe, когда в случае, когда длина командной строки превышает критическую, dcc32 начинает выбрасывать невразумительные сообщения типа System.pas not found, или даже AV. Мне не удалось сейчас найти упоминания об этом в интернете, хотя я точно его видел раньше(и даже сталкивался с ним сам) поэтому я просто приведу комментарий из JclBorlandTools.pas:


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

    суббота, 18 апреля 2009 г.

    О тестировании udf-ки

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

    После недавней перекомпиляции udf-ки для Firebird, я подумал, что неплохо бы её как-нибудь протестировать, чтобы убедиться что:

    1. она работает на Firebird 2.1.x
    2. будет работать и на других версиях сервера(опционально)
    3. работает так же как и последняя версия, считающаяся стабильной
    4. нормально переносит многопоточность
    5. не вызывает утечек памяти

    Тестировать нужно и под Linux и под Windows, да ещё и для 64-битных версий(в будущем), и что для этого наверняка понадобится по многу раз вызывать функции на разных серверах. Udf-ка экспортирует 70 функций.


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

    четверг, 16 апреля 2009 г.

    Продолжение темы интеграции с Funambol

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

    Недавно, поднялся вопрос о массовой покупке телефонов, для всех сотрудников работающих с клиентами. И тут всплыла та старая идея с экспортом данных в мобильные телефоны. Нужно было исследовать этот вопрос, и составить список требований к мобильным телефонам.


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

    вторник, 14 апреля 2009 г.

    Хотелка для Delphi: поддержка интерфейсов базовыми классами VCL

    Я вот тут подумал, что здорово было бы, если бы в Дельфи были определены интерфейсы для базовых классов. Например, был бы интерфейс IList, реализуемый классом TList. IStringList, реализуемый TStringsList и т.п. А особенно классно, было бы если бы были определены интерфейсы реализующие взаимодействие с компонентами.

    Например интерфейс:

    ICaptionedControl = interface
      property Caption:string;
    end;

    Если бы все контролы, имеющие свойство Caption(например TLabel; TButton; TCheckBox; TRadioButton; TGroupBox; TBitBtn; TSpeedButton), реализовывали его, было бы намного проще их изменять. Хотя, подобное на практике нужно только, когда начинаешь реализовывать собственный механизм перевода программы.

    Пример с Db-control-ами

    Более полезным было бы применение интерфейсов в Db-контролах. Например, имея интерфейсы:


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

    понедельник, 13 апреля 2009 г.

    Доступна вторая альфа Lazy Delphi Builder 1.1.7.117

    Доступна для скачивания вторая альфа-версия(после введения поддержки относительных путей) Lazy Delphi Builder.

    Исправления

    1. Не срабатывает смена текущей версии IDE.
      При первом сканировании и последующем удалении пакетов и компиляции, программа показывает неверное число выбранных пакетов.
    2. Info-panel не отображается автоматически для проектов собравшихся с ошибкой.
    3. Если в IDE в путях использовались переменные окружения(напр. $(BDS), $(DELPHI7)), то Lazy Delphi Builder пытался работать с ними как с директориями. Теперь он их раскодирует(как системные, так и переменные IDE).

    Новое(сделано)

    1. Сделать, чтобы при добавлении папок не приходилось делать 2 лишних клика. При клике на +, если текущая папка не указана, сначала показываем Browse диалог, а потом её сразу добавляем.
    2. Сделать, чтобы папки не удалялись и не создавались, если ничего не будет компилироваться и копироваться. Например, если в профиле нет и одного проекта, то папка Bin будет проигнорирована. Если не установлен флажок "Copy Resources", то папка Res будет проигнорирована и при удалении и при создании. Папка DebugDcu будет удалена/создана, только если включен флажок компиляции Debug Dcu. И т.п.
    3. Сделать, чтобы формы всегда открывались по центру.

    Что-то ещё…

    Жду новых баг-репортов, историй успешного использования и предложений улучшений.

    Скачивать здесь: www.lazyproject.info/downloads


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

    пятница, 27 марта 2009 г.

    Текучка 9. Итоги за неделю работы.

    Bluetooth + Funambol

    На работе подняли вопрос о покупке сотрудникам мобильных телефонов для работы. А я вызвался исследовать возможность синхронизации списка контактов и заданий между нашим офисным планировщиком и телефонами. Когда-то основательно повозился, настраивая синхронизацию между Nokia N73 и Google-календарём[1]. Nokia N73 работает на Symbian-e, и синхронизация там построена на SyncML. Большинство порталов, для такой синхронизации построены на базе open-source сервера Funambol.

    Скачал и установил на свой компьютер Funambol. Часа 3 провозился пытаясь настроить синхронизацию данных с мобильного телефона. Основная проблема в том, что компьютер может выходить в интернет через мобильный телефон подключенный через BlueTooth, а вот телефон подключенный через BlueTooth к компьютеру, через компьютер в сеть выходить отказывается. В интернете, вроде есть рецепты для N73, но они требуют установки в Symbian дополнительного софта, который придётся долго искать и настраивать. Это куда сложнее, чем, например, скачать аську на нокиа 5800, где всё просто - поставил и работает. =( Договорился с админом, в понедельник будем пробовать синхронизацию через WiFi. 


    DEP

    Коллега столкнулся с загадочной проблемой. У одного клиента, не работали формы созданные с помощью DreamVCL (это такие древние компоненты, включающие в себя дизайнер форм, и внутреннюю реализацию Pascal). При нажатии на кнопку выскакивал Access Violation. Известно, что аналогичная проблема встречалась ещё у двух клиентов (и не решилась). В офисе ошибку повторить не удалось. Коллега бился почти неделю, прежде чем пришёл за помощью. Пробовали отключать все возможные оптимизации, ошибка оставлась. Посоветовал ему попробовать подключить к проекту EurekaLog, чтобы точно определить место возникновения ошибки. Выяснилось что ошибка возникает при вызове события TButton.OnClick. При этом, до выполнения кода обработчика события, дело не доходит.
    В результате, оказалось, что причиной для проявления проблемы была старательность системного администратора, включившего на проблемном компьютере DEP не только для сервисов Windows, а для всех программ. После того как наша софтина была добавлена в исключения, проблема пропала. Что интересно, что сначала мне пришла в голову мысль: "а может это DEP как-нибудь влияет", и только после того как выяснилось что это действительно DEP, я прочитал в Wiki описание DEP, и стало ясно почему так происходило. Вот так вот, в кои-то веки интуиция выручила. Теперь интересно, свободны ли другие "Form Designer-ы"(Greatis Form Designer, EControl Form Designer) от подобного бага.

    Кстати, было бы очень интересно почитать обзор и сравнение функционала этих дизайнеров. Если кто-нибудь встречал сравнительный обзор, поделитесь пожалуйста ссылочкой. ;-)

    Пост о DEP(+набор ссылок): http://alt0.livejournal.com/118310.html

     


    UDF

    Помимо этого, начальство подняло вопрос о переходе на Firebird 2.x, и выяснилось, что сдерживающим фактором здесь являются наши внутренние udf-ки. Сервер 2.1 под Windows просто падает при вызове некоторых функций. Udf-ки писались и компилировались лет 5 тому назад. Человек, который их писал, уже давно ушёл. На Си у нас никто не программирует и опыта особого не имеет(я лет 8 назад все лабораторки в универе писал на Borland C 3.1, потому что на моём факультете Паскаль на первом курсе не преподали). Переход на Firebird 2.x был отложен до лучших времён. И вот эти времена настали. Часть времени этой недели было потрачено на попытки собрать исходник на Си в dll-ку под Windows c помощью MinGW. Хвала Dimitry Sibiryakov и неизвестному человеку из RedSoft за помощь, dll-ка получилась. Сейчас думаю, о том, как бы организовать сборку 4-х версий для Windows/Linux/32bit/64bit на одной машине. Но судя по тому, что удалось найти в интернете о cross toolchain, это задачка не из тривиальных и быстрее и выгоднее будет собрать нужные версии под соответствующими ОСями.

    [1] Для синхронизации планировщика в телефоне и календаря Гагл, я использую сервис ScheduleWorld. Этот сервис построен на базе Funambol, и умеет синхронизироваться с сервисами Google. Хотя совсем недавно, сервисы Google наконец-то обзавелись собственной поддержкой SyncML, но пока что это работает только для контактов.


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

    Контактная информация

    E-mail/Google Talk

    image

    ICQ

    image

    Skype

    My status

    Кошельки Webmoney:

    • R422445527838
    • E344705116688
    • Z247858224495

    В аське и скайпе бываю нечасто. При запросе о добавлении в аське, обязательно укажите ключевое слово Tdelphi, и о себе пишите translitom.

    Языки: русский, english, latviešu.


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

    пон��дельник, 23 марта 2009 г.

    Lazy Delphi Builder 1.1.6.115 Alpha

    1. Добавлена кнопка "Очистить".
    2. Сделано, чтобы по ExcludeMask=*6* проверялись только имена файлов, без папок.
    3. В дереве пакетов включено выделение правой кнопкой мыши.
      Исправлено: LazyDelphiBuilder в качестве пути берёт только LibPath/DebugLibPath (c:\Program Files\CodeGear\RAD Studio\Lib), игнорируя Library Search Path.
    4. Исправлена ошибка с удалением папок(созданием бекапа)
    5. Исправлено: не работало добавление папок, если есть BasePath
    6. Добавлено: Когда пользователь прерывает операцию, показывать текст, что операция была прервана
    7. Исправлено: После загрузки профиля с относительным каталогом, оный не подсвечивается жирным
    8. Исправлено: После переустановки базовой папки, удалённые файлы вновь становятся активными.

    Известный баг: если после сканирования, удалить несколько pacakge-й, а потом запустить компиляцию, то она может вылететь с ошибкой. Помогает закрыть и переоткрыть программу(сохранить/загрузить профиль).

    Остальные ошибки считаются неизвестными и ждут того чтобы о них сообщили разработчику.;)

    Скачивать здесь: http://code.google.com/p/lazyproject/downloads/list


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

    Итоги осеннего семестра в RTU, по программе Информационные технологии.

    Итак, я наконец ликвидировал в университете свои хвосты за первый семестр последнего курса, теперь буду отращивать новые и писать бакалаврскую. =)

    Заметил, что к учёбе сейчас стал относиться не так как раньше. Помню когда поступал в университет после школы – совсем не представлял как и где буду использовать полученные знания. Соответственно, предметы, которые не относились к программированию, в основном сдавались “для галочки”. Восстанавливаясь на обучение в этом году, я делал это для той же галочки, но ликвидируя хвосты, понял, что учиться стало намного интереснее.

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

    Операционные системы.

    Предмет познакомил меня с bash-скриптами, регулярными выражениями, Linux-загрузчиками lilo и grub, и поиском решений к задачам о синхронизации потоков. Несколько лекций было посвящено MS-DOS(память, загрузчики, autoexec.bat и config.sys) – а это по-моему уже совсем неактуально. Было бы здорово, если бы эту часть заменили лекциями об операционках для портативных компьютеров и мобильных телефонов.

    Большие Базы Данных.

    Большие БД мы проходили на примере Oracle. Преподаватель предоставил потрясающие слайды, дающие исчерпывающее представление о работе с СУБД Oracle. Чтобы не писать кучу объёмных отчётов по этому предмету, я договорился с преподом, что проведу исследование о механизмах доступа к БД Oracle из Delphi. Я собрал и установил все доступные компоненты для работы с этой БД, и провёл несколько тестов, с целью выяснить, с какими типами данных Oracle Delphi умеет работать. В результате у меня получился отчёт на 50 страниц. А результаты исследования получились довольно неожиданными, и, как мне сейчас кажется не совсем корректными(часть информации полученной мной, противоречит заявленной на официальных сайтах). Именно из-за этой некорректности, я пока не публикую эти результаты в этом блоге.:( Кстати, посты Стандартный DbGrid с многострочными заголовками и Сравнительная таблица технологий доступа к СУБД Oracle из Delphi являются побочным продуктом этого исследования.:) Я также решил, что было бы хорошо развить эту тему, и выбрал её в качестве основы для бакалаврской работы.

    Методы принятия решений.

    Интересный предмет, на котором нам рассказывали о методах принятия решений, таких как decision matrix, decision trees. Я не нашёл в интернете информации по этому предмету на русском языке. Эти методы довольно замечательно вписываются в курс Управление Проектами. Побочным продуктом этого предмета стала одна небольшая программка, по составлению расписания мероприятий с учётом в ограничения ресурсов. Изначально я собирался выложить программку вместе с исходным кодом, но потом, оценив трудозатраты, передумал. Думаю, что из этой программки получится отличный “планировщик”.

    Введение в управление проектами.

    С УП мне пришлось столкнуться ещё когда я работал над первым продуктом на своей текущей работе – там как раз нужно было реализовать модуль управления типовыми проектами в дополнение к модулю планирования ресурсов. Этот предмет для меня особенно важен, ибо кодерство-кодерством, а карьеру всё-таки нужно делать, и понимание принципов управления проектами в этом плане будет существенным подспорьем. Поначалу я собирался связать тему бакалаврской работы с УП, и даже успел прочитать весь архив сообщества ru_pm в livejournal. =)

    Введение в генетические алгоритмы.

    Генетические алгоритмы – интересный подход к решению задач, с которыми я на практике ни разу не сталкивался. Забавно, что это был второй выборный предмет, связанный с генетическими алгоритмами, который я выбирал, так что в этот раз было легко, благо многое я уже знал. =) Курс включал в себя: решение задач поиска экстремума функций методами генетических алгоритмов и градиентным методам, решение задачи коммивояжера. Что не понравилось – необходимость рассчитывать вручную большие объёмы информации и написание огромного отчёта.

    Информационные системы в логистике.

    Решение задач о планировании спроса на основании статистических данных за предыдущие годы, решение задачи коммивояжера с помощью Logware. Решение задач о планировании организации цепочки поставок, рассчитав конечную стоимость для разных случаев организации поставки с помощью ASDN.

    Средства для имитационного моделирования.

    Практика проходила с использованием Rockwell Arena. Достаточно интересный предмет, если не обращать внимания на то, что преподавательница вела лекции так, словно её задачей было ввести студентов в транс и усыпить.


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


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

    пятница, 13 февраля 2009 г.

    Сравнительная таблица технологий доступа к СУБД Oracle из Delphi

    То, что мне удалось найти:

    Название

    Open source?

    СУБД

    Автор

    Лицензия

    Жив?

    Разви-вается?

    Версии IDE

    1.

    BDE

    нет

    Paradox, Oracle, Sybase, Interbase, ODBC

    Codegear

    Delphi[1]

    да

    нет

    D1-2009

    2.

    dbGo(ADO)

    нет

    Visas OLE DB un ODBC DBVS

    Codegear

    Delphi[1]

    да

    нет

    D5-2009

    3.

    dbExpress

    нет

    DB2, Informix, Interbase, MS SQL, MySQL, Oracle, Sybase(ASA un ASE)

    Codegear

    Delphi[1]

    да

    да

    D6-2009

    4.

    DOA

    нет

    Oracle

    Allround Automations

    Коммерч.

    да

    да

    D3-2009, CB3-2009, Kylix

    5.

    ODAC

    нет

    Oracle

    DevArt

    Коммерч.

    да

    да

    D5-2009
    CB5-6

    6.

    DOCI

    да

    Oracle

    Андрей Романченко

    GPL

    нет

    нет

    D4-7

    7.

    SQLDirect

    нет

    DB2, Informix, Interbase, Firebird, MS SQL, MySQL, Oracle, PostgreSQL, Sybase(ASE un ASA), Unify (Centura, Gupta) SQLBase Server, ODBC un OLEDB

    sqldirect-soft

    Коммерч.

    да

    да

    D4-2009
    CB4-2009

    8.

    UniDAC

    нет

    Microsoft SQL Server, MySQL, InterBase, Firebird, PostgreSQL, Oracle

    DevArt

    Коммерч.

    да

    да

    D6-2009, CB6, FreePascal

    9.

    ZeosLib(ZeosDBO)

    да

    MySQL, PostgreSQL, Firebird, Interbase, Microsoft SQL Server, Sybase ASE, Oracle, SQLite, ADO.

    ZeosLib Community

    GPL, LGPL

    да

    да, но мед-ленно

    D5-2009, CB5-6, Kylix2-3, FreePascal
    10. AnyDAC 1 да MySQL, Oracle, MS SQL Server, MSAccess, DB2 Sybase ASA Da-Soft Da-soft license да нет D5-2006, CB5-6
    11. RemObjects AnyDAC 2.0 нет

    Oracle, MS SQL Server, DB2, Interbase, Firebird, MySQL, SQL Anywhere, MSAccess, BlackFish SQL, DbExpress, ODBC, SQLite, PostgreSQL

    RemObjects

    Коммерч.

    да

    да

    D6-D2009
    12. NCOCI8 да Oracle8,9,10g Da-Soft Da-soft license. нет нет D3-6, CB3-6

    [1] Delphi – поставляется вместе с Делфи


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

    воскресенье, 8 февраля 2009 г.

    Кое что об Andreas Hausladen

    Andreas Hausladen – человек, который много сделал для Delphi-сообщества. Он участвует в развитии Jedi Code Library, разрабатывает библиотеку AsyncCalls[1], является автором множества уникальных расширений(экспертов) для Delphi, наиболее известными из которых являются:

    • Delphi Speed Upрасширение для Delphi 5-2007, ускоряющее загрузку IDE в разы.(особая уличная магия менеджеров памяти)
    • DDevExtensionsрасширение, делающее IDE ещё более удобной(функционал частично пересекается с другими расширениями), например, оно умеет отключать вопрос “Source modified. Rebuild?”, добавлять в Delphi > 2006 палитру компонентов как в старых версиях, автоматически удалять свойства Explicit* из .dfm файлов, автоматически удалять .ddp файлы(интересно, ими хоть кто-нибудь пользуется?;]), а также самый удобный(на мой взгляд) селектор компонентов.
    • IDE Fix Pack – совершенно уникальное расширение, исправляющее кучу зарегистрированных в QC ошибок в Delphi 2007 и 2009, для которых CodeGear ещё не представило официальных исправлений.
    • dcc32Speed – ускоряющего работу dcc32.exe(особенно при создании map-файлов) для Delphi 5-2007.
    • IDE Compiler Pluginрасширение, позволяющее компилировать программу из Delphi используя любой компилятор командной строки. Основная идея для этого расширения – дать возможность из Delphi 2009 компилировать код используя dcc32 от Delphi 2007, и наоборот.

    Хочу подчеркнуть, что все они работают стабильно и именно так как описано на сайте.

    Не знаю как для вас, а для меня всё, что делает Andreas выглядит как особая уличная программистская магия. Человек, который скромно исправляет ошибки Codegear, и всё ещё не работает в компании? Чудеса да и только!

    Так думал я до сегодняшнего дня, пока не узнал, что

    Andreas Hausladen официально работает с Codegear!


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

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