пятница, 30 ноября 2007 г.

Четвертый день коференции Code  

На сайте CodeGear выложены материалы докладов в разбивке по дням конференции. Есть только flash-файлы. Исходников нет, но обычно в презентациях указывается где можно взять исходники.

На третьем и пятом дне (т.е. 28 и 30 ноября) я не был.
Зато был 29 ноября.

С большим удовольствием я послушал оба доклада Джима МакКи (Jim McKeeth): Exceptional Exceptions и Class Helpers: Friend or Foe.

Второй доклад мне лишний раз доказал, что хелперы есть хорошая разминка для ума, не более того. Я пока не решаюсь их широко использовать в работе - плохо документировны и имеют не всегда очевидное поведение (имхо). Для небольших вливаний (добавок) в класс вполне сгодятся. Главное - самому не запуться.
Замечу, что в презентации есть небольшой обзор блогов, которые писали о хелперах. Есть что почитать.

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

program Project1;
{$APPTYPE CONSOLE}
begin
end.


Если требуется наследование от Exception, то нужно подключать SysUtils, а это уже 44032 байта.

program Project1;
{$APPTYPE CONSOLE}
uses
 SysUtils;
begin
end.


Но ведь можно сделать проще - возбуждать не потомков Exception, а потомков TObject:

program Project1;
{$APPTYPE CONSOLE}
type
 TMyException = class
 end;
procedure Test;
begin
 raise TMyException.Create;
end;
begin
 try
  Test;
 except
  on E: TMyException do
   do something
 end;
end.


Такая программа уже весит 19456. Я, конечно, понимаю, что идиотизм экономить 20Кб, но это чем не ответ на вопрос о том, как сделать маленький EXE?

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

program Project1;
{$APPTYPE CONSOLE}
type
 TMyException = class
 end;
procedure Test;
begin
 raise TMyException.Create;
end;
var
 C: TMyException = nil;
begin
 try
 Test;
 except
  on E: TMyException do
   C := AcquireExceptionObject;
 end;
 if C <> nil then
 begin
  здесь можно использовать C, но его нужно
  потом явно удалить, т.к. после вызова
  функции AcquireExceptionObject нарушен
  обычный контроль над временем жизни
  исключения.
  C.Free;
 end;
end.


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

raise Button1;

Только нужно быть готовым к тому, что кнопка пропадет с экрана после такого вызова, т.к. будет удалена :)

Также имхо стоит обратить внимание на доклад Fighting Memory Leaks for Dummies, который сделал Francois Gaillard. Доклад про FastMM. В принципе материал схож с тем, который я приводил ранее. По теме сложно что-то сказать нового, т.к. вся документация по FastMM состоит из поисания в *.inc файле, поставляемом с FastMM.

среда, 28 ноября 2007 г.

Старая новая панель инструментов VS старая панель инструментов.

Источник блог Ника Ходжеса.

Ник сказал, что ему вчера на конференции CodeRage заметили о том, что не хватает старой панели иснтрументов. На что Ник ответил:
1. Новая панель в 723 раза удобней :)
2. Нелюбовь к новой панели является следствием незнания ее возможностей.

Сказал, как отрезал :)

Также он привел ссылочку на ролик, демонстрирующий возможности новой панели.
ИМХО интересно, я, например, что-то новое увидел для себя.

Второй день конферении CodeRageII

Вчера был второй день on-line конференции CodeRage II 2007.
Я посмотрел и послушал презентации Марко Кенту и Рея Конопки.

О своих презентациях Марко Кенту говорит в своем блоге. Там же находятся исходники к презентациям.

В презентации Delphi Dynamic Architectures with Packages Марко рассказал о том, как в дельфи с использованием BPL делать плагины (расширения), которые можно подцеплять к приложению без его перекомпиляции, возможно даже к работающему приложению! Также сравнил подход плагинизации с использованием BPL и DLL, есно сделал вывод в пользу первого подхода. В общем ничего нового для меня, т.к. я активно пользуюсь плагинами на основе BPL. Однаком презентация может быть полезна тем, кто еще не прочувствовал всей крутизны рантайм пакетов.

В презентации Delphi 2007 and Vista Марко рассказал есно о Дельфи и Vista. Vista я пока в глаза не видел, поэтому ничего не понял.

Презентации Рея Конопки:
1. Introduction to Generics in Delphi
2. Creating Composite VCL Controls

Первая презентация мне очень понравилась. Вся презентация практически полностью идентична материалам, представленным в блоге Hallvard Vassbotn в статье Highlander2 Beta: Generics in Delphi for .NET. В Delphi 2007 for Win32 джнериков пока нет, обещают в Tiburon'е в 2008 году. Но на меня презентация произвела большое впечатление - представил, какая светлая жизнь начнется после выхода Tiburon'а :)

Вторая презентация в стиле Рея - он же известны и опытный писатель компонентов. Было интересно.

Исходники по докладам Рея у меня есть - прямые ссылки на исходники Рей озвучивал в чате. Но сейчас я их не могу найти. Когда найду, выложу.

Еще от Рея я узнал, что есть второе издание его книги про написание компонентов. Он считает, что она с упехом применима также и для Delphi 2007, а не только для более ранних версий Delphi. Я так понял, что она на русский язык книга переведена не была :(

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

Конференция CodeRage II

CodeGear устраивает вторую online-коференцию CodeRageII.

Сегодня прошел первый день. Не знаю как кому, а мне интересно - мне практика таких конференций для собственного бизнеса пригодится. Пока, конечно, ничего нового не сказали (ну там unicode будет, generics и усовершенствованная документация). Про любимый россиянами баг в Delphi2007 с вводом русских символов есно ничего не сказали: там русских 2 или 3 человека. При случае спрошу кого-нибудь из CodeGear'а.

Завтра будут выступать Марко Кенту и Рей Конопка. По Москве это +11 часов: т.е. Кенту, начиная в 7:15 АМ по ихнему времени, по Москве начинает в 18:15. Подробное расписание можно найти по приведенной выше ссылке.

Если кто решится присоединиться к конференции, то имейте в виду:
1. Нужно будет поставить ActiveX для вашего IE60 (и вроде только его) от Interwise. На сайте CodeGear написано где брать и как ставить. Делов на 1 минуту.
2. Я при регистрации использовал свой CDN логин. Наверное он обязателен, точно не знаю.

воскресенье, 25 ноября 2007 г.

Несколько новостей

1. Где-то 14 ноября CodeGear'у было ровно год. Офигеть. Вот тут http://blog.marcocantu.com/blog/one_year_codegear.html говорит о сабже. Коротко - CodeGear молодец!
2. Книга Марка Кенту http://www.marcocantu.com/dh2007/. Может переведут когда-нибудь. Будем ждать.

Я вот тут решил пофилосовствовать о Unicode for VCL. Я, признаться, совершенно не могу представить себе - как это и что это!?!?! (и ?! в периоде). С одной стороны - дело нужное. С другой - реально ли это?

Для того, чтобы был Unicode нужно делать нормальные двухбайтовые строки, я не то уродство, что есть сейчас в виде WideString. Верно ведь? Ибо AnsiString и WideString - две большие разницы, и не в 2 раза :) Естественно, что CodeGear решит сделать умольчательным типом для жереника string именно новый тип для unicode-строки.

Но сколько тогда завалится старого кода?! Например, простое преобразование PChar(S), где S типа String что должно давать? Часто такое преобразование делается при пераче параметров для win-api функций. Сколько разработчиков не учтет факт смены формата представления в памяти значений типа string.

В общем так:
1. Если они сделают это таким образом, что миграция не-unicode -> unicode будет простой и понятной, то я ... скажу, что они молодцы!
2. Жду с нетерпением новых тестовых билдов. Я хочу делать софт для буржуинов и не хочу пользовать сторонние компоненты.