Object Pascal для Java и Android
Блог Чорнага кашака
В ролике показано, как под Mac-OS в командной строке скомпилировали паскалевский код консольной программы и калькулятора, использующего swing-контролы, а затем запустили полученные jar-файлы.
Планируется интеграция Cooper в Visual Studio и MonoDevelop (аналогично с компилятором для .NET). Обещают выпустить это чудо уже в этом году.
Сохранение в базу данных отчета FastReport в формате PDF
Блог Чорнага кашака
1. сформировать отчет в FastReport;
2. экспортировать отчет в файл PDF-формата и сохранить его в базе данных;
3. возвратить идентификатор сохраненного в базе данных файла.
Предположим, что исходная структура таблицы для хранения файла в базе данных была такая (MS SQLServer 2000):
CREATE TABLE X.FILES (
ID BIGINT IDENTITY NOT NULL,
FILE_BODY IMAGE NULL,
CONSTRAINT PK_FILES PRIMARY KEY (ID)),
где FILE_BODY – это поле, в которое сохраняется файл, а ID – идентификатор файла.
Для начала я создал процедуру, которая будет вставлять файл в базу данных и возвращать идентификатор вставленного файла.
CREATE PROCEDURE X.InsertFile
@FILE image,
@ID bigint OUTPUT
AS
INSERT INTO X.FILES(FILE_BODY) VALUES(@FILE)
SET @ID = SCOPE_IDENTITY()
GO
…
db: TSDDatabase; // база данных SQLDirect
spInsertFile: TSDStoredProc; // вызов X.InsertFile
frxReport: TfrxReport;
frxPDFExport: TfrxPDFExport;
…
Function GetDoc(const sDotName: String; …): Integer;
begin
Result := -1;
// загружаем шаблон отчета
If frxReport.LoadFromFile(sDotName)
then begin
// устанавливаем параметры отчета
…
If frxReport.PrepareReport
then try
// получаем имя временного файла
frxPDFExport.FileName := GetTempFileName;
Try
// экспортируем отчет во временный файл
frxReport.Export(frxPDFExport);
// загружаем PDF-файл в параметр процедуры
// из временного файла
spInsertFile.Params[1].LoadFromFile(frxPDFExport.FileName, ftBlob);
Except
on E: Exception do
WriteErrorMessage(E.Message);
End;
// сохраняем PDF-файл в базу данных
Try
db.StartTransaction;
spInsertFile.ExecProc;
db.Commit;
Result := spInsertFile.Params[2].AsInteger;
Except
on E: ESDEngineError do
begin
db.Rollback;
WriteErrorMessage(E.Message);
end;
End;
Finally
// удаляем временный файл
DeleteFile(frxPDFExport.FileName)
End
else WriteErrorMessage(‘Ошибка подготовки отчета’)
end
else WriteErrorMessage(‘Файл шаблона не найден’)
end;
Function GetDoc(const sDotName: String; …): Integer;
begin
Result := -1;
// загружаем шаблон отчета
If frxReport.LoadFromFile(sDotName)
then begin
// устанавливаем параметры отчета
…
If frxReport.PrepareReport
then begin
Try
Try
// создаём поток в памяти
frxPDFExport.Stream := TMemoryStream.Create;
// экспортируем отчет в поток
frxReport.Export(frxPDFExport);
// загружаем PDF-файл в параметр процедуры
// из потока в памяти
spInsertFile.Params[1].LoadFromStream(frxPDFExport.Stream, ftBlob);
Except
on E: Exception do
WriteErrorMessage(E.Message);
End;
Finally
frxPDFExport.Stream.Free;
End;
// сохраняем PDF-файл в базу данных
Try
db.StartTransaction;
spInsertFile.ExecProc;
db.Commit;
Result := spInsertFile.Params[2].AsInteger;
Except
on E: ESDEngineError do
begin
db.Rollback;
WriteErrorMessage(E.Message);
end;
End;
end
else WriteErrorMessage(‘Ошибка подготовки отчета’)
end
else WriteErrorMessage(‘Файл шаблона не найден’)
end;
Часть антивируса Касперского написана на Delphi
Блог Чорнага кашакаСсылки по теме:
1. Кому выгодно раскручивать тему утечки кодов из Лаборатории Касперского?
2. Kaspersky Anti-Virus Source Code Leaks online
Delphi и C++Builder Starter Edition
Блог Чорнага кашакаСтоимость Delphi и C++Builder Starter Edition – всего 199$ (для сравнения, Professional Edition стоит около 899$)! Пользователи Turbo Edition и других конкурирующих IDE могут получить обновление на Delphi и C++Builder Starter Edition за 149$. Ограничения только юридические: не более пяти подобных лицензий в пределах одной локальной сети и общий доход с сервиса или организации не более 1000$ в год. Кто превысит этот порог или хочет больше возможностей, то должен обновить свой Starter Edition до Professional, Enterprise или Architect со скидкой в 100$.
Думаю, от данного предложения мало радости большинству пользователей Delphi. Но оно вполне подходит тем, кто только учится программировать, для кого программирование – это хобби (например, разработчикам open-source проектов), разработчикам бесплатных продуктов или тем, кто только начинают разработку своего продукта.
Принесет ли этот маркетинговый ход Embarcadero какие-нибудь плоды? Увеличит ли это количество пользователей Delphi и C++Builder? Думаю, что нет. Причина этому то, что Microsoft раздает Visual Studio Express бесплатно. А бесплатно и 199$ – это большая разница.
Конечно, некоторые объемы продаж этой редакции будут. Думаю, что большинство продаж будет только для легализации своих продуктов. Не в каждой стране будут разбираться в тонкостях лицензии, поэтому лицензии на Starter Edition будет достаточно, чтобы узаконить свою деятельность (например, при получении лицензии на разработку ПО чиновнику будет наплевать на редакцию средств разработки).
Остается надеяться, что Embarcadero не будет разочарована в Delphi и C++Builder Starter Edition.
Дополнено 31.01.2011:
На сайте Embarcadero открыли странички посвященные Delphi XE Starter Edition / C++Builder XE Starter Edition и опубликовали Delphi XE Starter Edition and C++Builder XE Starter Edition FAQs (перевод FAQ).
Интернет на халяву
Блог Чорнага кашака«Граждане, храните деньги в сберегательной кассе!», — сказал Жорж Милославский, герой всенародно любимого кинофильма «Иван Васильевич меняет профессию», запихивая в карман пухлую пачку денег, похищенную из квартиры доктора Шпака. Так и я таким же поучительным тоном скажу: «Граждане, защитите свою беспроводную сеть! Хотя бы ограничьте подключения к вашей точке доступа по MAC-адресу устройств».
P.S. Вечером на кухне ноутбук находил уже 15 точек доступа, две из которых были открыты для общего пользования…