среда, 29 мая 2013 г.

Crossdomain Ajax calls

собираю материал

вроде хорошая обзорная статья
http://www.d-mueller.de/blog/cross-domain-ajax-guide/

про CORS в деталях от разработчиков мозилла
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control

от микрософт XDomainRequest
http://msdn.microsoft.com/en-us/library/dd573303%28v=vs.85%29.aspx

немного от стековерфлоу
http://stackoverflow.com/questions/5351236/javascript-cross-domain-allow-other-domains
http://stackoverflow.com/questions/298745/how-do-i-send-a-cross-domain-post-request-via-javascript

какая-то русская статья
http://javascript.ru/ajax/cross-domain-scripting

еще давняя статья с хабра
http://habrahabr.ru/post/120336/

вторник, 26 марта 2013 г.

FastReport 4 font reading and huge file size workaround solution

Information for Russian-speakingсDevelopers is in Russian version of this article

Environment:
Delphi 7 application, Fast Report 4 VCL


Problem 1:
Export files from FastReport to PDF is unreadable on Android-devices, iOS-devices and web mailers.


Solution 1 - PDF is unreadable on Android-devices, iOS-devices and web mailers
embed fonts in the report file.
In export component set this property to "true":
TfrxPDFExport.EmbeddedFonts

With embedded font report became readable on any client OS and Web Mailers.


Problem 2 (a consequence of the solution of the problem 1)
The report file is huge: approximately 1MB


Reason: embedded font (which we embed in pdf file to solve problem 1)

Particular Solution 2 -
The huge file-size of FastReport export to PDF with embedded fonts:

I must say that the general solution I have not found. Tried to use third-party filters, but they have bugs. Virtual pdf printer - is not suited for me as a solution, because it's hard to maintain. But I found a partial solution that work in my environment, hope it may be useful to someone:

The Main Idea of the solution: use a font with small file-size. Naturally this font you need to install on your development computer and on the client computer (only to computer of pdf-exporter customer).

Disadvantages solutions: font need to be installed on client computer.

Small in size (57KB) Arial-like font with Cyrillic Charset I've found here:
http://weblast.ru/fonts-493.html
direct link: http://weblast.ru/fonts/ukrainian/ARICYR.ttf

I've set Font property of all  labels and bands in a report to new font, and (BINGO!) export file reduced from 1MB to 120KB.

Please note that labels did not pickup new font when their CharSet property was setted to RUSSIAN_CHARSET, I had to change down all charsets to DEFAULT_CHARSET

Case history

The problem must be solved in 5 FastReport VCL (it includes only used font-characters in exported file), but there is stil not FastReport 5 VCL on developer's site, and who knows when it will be. Wrote to support - no answer.

Related Links

http://www.fast-report.com/en/forum/index.php?showtopic=7265

http://stackoverflow.com/questions/6844831/any-good-pdf-export-filter-that-works-with-fast-report



FastReport 4 экспорт в PDF шрифты и большой размер файла: обходное решение

Окружение:
Программа на Delphi 7, FastReport 4 (VCL)

проблема 1: 
экспорт из FastReport в PDF не читается на андроид-устройствах, iOS-устройствах и веб-почтовиках.

решение проблемы 1 - PDF из FastReport не читается на Android, iOS, веб-почтовиках:
внедряем шрифт в файл.
в компоненте-экспорте свойство: TfrxPDFExport.EmbeddedFonts устанавливаем в true

и отчет нормально читается на всех клиентских машинах.

Проблема 2 (вытекает из решения проблемы 1)
Файл отчета становится большим: примерно 1Мб

Причина: внедренный шрифт (который мы внедрили для решения проблемы 1)

Частное Решение проблемы 2 - 
Большой размер файла экспорта из FastReport в PDF с внедренными шрифтами:

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

Суть решения: использовать маленький по размеру шрифт. Естественно шрифт нужно установить и на компьютере разработчика и на компьютере клиента.

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

Маленький по размеру (57Кб) Arial-подобный шрифт с кириллицей нашел здесь:
http://weblast.ru/fonts-493.html
прямая ссылка: http://weblast.ru/fonts/ukrainian/ARICYR.ttf

перевел все надписи и банды в отчете на новый шрифт, и экспортный файл уменьшился с 1Мб до 120Кб.

Обратите внимание: шрифт не хотел подхватываться если у надписей в отчете стоял RUSSIAN_CHARSET, нужно было все надписи сбить в DEFAULT_CHARSET


История вопроса

Проблема должна была решиться в FastReport 5 VCL (типа там из всего шрифта в экспортный файл должны внедряться только реально используемые символы), но пятой версии нет, и неизвестно когда будет. Писал в поддержку - ответа не получил.

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

http://www.fast-report.com/en/forum/index.php?showtopic=7265

http://stackoverflow.com/questions/6844831/any-good-pdf-export-filter-that-works-with-fast-report


среда, 20 февраля 2013 г.

MS SQL - убирание всех соединений с базой

Задача:
обновить MS SQL базу, когда к базе есть подключения. нужно все подключения удалить

помог такой код с этой страницы http://www.julian-kuiters.id.au/article.php/sql-server-2005-snippet-drop-db-conn


USE master
GO

ALTER DATABASE database name
SET OFFLINE WITH ROLLBACK IMMEDIATE


ALTER DATABASE database name
SET ONLINE



этот совет помогает, но почему-то приходится делать команды по очереди (одним запросом перевел базу в офлайн, другим - в онлайн)
и имя базы нужно брать в квадратные скобки [ ]







понедельник, 11 февраля 2013 г.

Битрикс. Не выгружаются заказы с сайта

Суть проблемы
Перестали выгружаться заказы с сайта на Битриксе в 1С.

Симптомы
ошибок нет, при попытке загрузки заказов из 1с просто пишет, что изменения не зарегистрированы. и в выгружаемых файлах нет информации о заказах.


Расследование
Судя по всему хостер перенес мой сайт на другой сервер, с другой конфигурацией. И сайт стал читать локальный php.ini.

Решил проанализировать время с помощью php функции date()
Вывел в выводном фромате часовой пояс и обнаружил, что смещение идет на 4 часа вместо нужных 2-х.

Как анализировал:

Административная панель битрикса/Настройки/Инструменты/Командная PHP-строка
Ввел

echo (date("l dS of F Y H:i:s Z"));

Общение с поддержкой хостинга подтвердило мои догадки. Они посоветовали правильно настроить временную зону


Решение

Подредактировал php.ini,
установил параметр

date.timezone = "Europe/Kiev"

(ранее там было значение "Europe/Moscow")


Вопросы/пожелания/предложения оставляйте в комментариях

Справочные материалы


php-настройка временных зон

php-доступные временные зоны для европы

Про функцию дате - здесь:
http://www.codenet.ru/webmast/php/date.php





четверг, 7 февраля 2013 г.

Delphi отправить сообщение с уведомлением о доставке Indy-компоненты

Задача
Отправить сообщение с уведомлением о доставке

Средства реализации
Delphi 7, компоненты Indy 10

Решение

В сообщении TIdMessage устанавливает поле ReceiptRecipient

 lMessage.ReceiptRecipient.Text:= 'a@b.com';


Что происходит на фоне: устанавливается заголовок  в письме Read-Receipt-To


Продолжение темы
Если вы захотите автоматически разбирать подтверждения о доставке, смотрите статью
Delphi Indy 10 POP3 пример


UPD
Возникла проблема, которую пока не знаю как решить. Веб-интерфейс mail.ru игнорирует адрес из заголовка ReceiptRecipient. Уведомления о доставке он отправляет на адрес отправителя.

Вопросы/пожелания/предложения оставляйте кв комментариях

см. также

Общие вопросы отправки почты через Indy 10
http://dev-doc.blogspot.com/2012/08/delphi-indy-10.html

заголовки почтовых сообщений
http://www.activexperts.com/smtp-pop3-component/headers/


тут еще есть ссылка на заголовок X-Confirm-Reading-To
я его не использовал
http://delphimaster.net/view/6-25490

обсуждение вопросов гарантированной доставки
http://stackoverflow.com/questions/3525145/email-open-notification-ruby-on-rails/3525199#3525199

описание класса TIDMessage
http://kumanov.com/docs/prog/indy/007544.html

Delphi Indy 10 POP3 Пример

Простой пример обработки входящей почты с использованием POP3 компонент Indy10 для Delphi 7

(практическая задача была: обработать уведомления о доставке)

на форме компоненты:

  IdPOP3: TIdPOP3;
  IdMessage: TIdMessage;


Ниже: текст процедуры


...
var
  msgs: integer;
  i: integer;
  flag: boolean;

  msgcnt: integer;
begin
  IdPOP3.Host:= 'XXXX';
  IdPOP3.Username:= 'XXXX';
  IdPOP3.Password:= 'XXXX';
  IdPOP3.Port:= 110;

  IdPOP3.Connect;
  try
    msgcnt:= IdPOP3.CheckMessages;
    
    for I:= msgcnt to 1 do
    begin
      IdMessage.Clear;
      flag:= false;

      if (IdPOP3.Retrieve(i, IdMessage)) then
      begin
        ProcessMessage(IdMessage.From.Address, IdMessage.Subject);        
        flag:= true;        
      end;
      if flag then
      begin
        IdPOP3.Delete(i); //удаление письма
      end;
    end;    
  finally
    IdPOP3.Disconnect;
  end;
end;


UPD если нужно извлечь текст сообщения, может помочь такой код

var
  locBody: string;
...

        if (locBody = '') then
        begin
          for j:= 0 to IdMessage.MessageParts.Count - 1 do
          begin
            if (IdMessage.MessageParts[j] is TidText) then
            begin
              locBody:= (IdMessage.MessageParts[j] as TidText).Body.Text;
              if locBody <> '' then break;
            end;
          end;
        end;
...


Вопросы/пожелания/предложения оставляйте в комментариях.

см. также

Отправка почты через Smtp компоненты Indy10 в Delphi7
http://dev-doc.blogspot.com/2012/08/delphi-indy-10.html


За основу взял код на стековерфлоу
http://stackoverflow.com/questions/5336984/how-to-receive-emails-using-indy-10-and-delphi-7-with-the-file-attachment

Еще один простой пример
http://www.lazarus.freepascal.org/index.php?topic=17626.0