воскресенье, 29 декабря 2013 г.

Про robots.txt

Тут собрал несколько материалов про robots.txt


Вроде толковая статья
http://adblogger.ru/kak-pravilno-sozdat-robotstxt-pravila-nastrojki-i-proverki-robotstxt-dlya-novichkov.html


Руководство от Яндекса
http://help.yandex.ru/webmaster/controlling-robot/robots-txt.xml#996568

вторник, 24 декабря 2013 г.

Entity Framework 6 VS 2012 - ошибка при добавлении в модель хранимой процедуры

Окружение
VS 2012
EF6

Ситуация
при добавлении хранимой процедуры в EF6 модель
появилась ошибка при компиляции

Value of type 'System.Data.Objects.ObjectParameter' cannot be converted to 'System.Data.Entity.Core.Objects.ObjectParameter'.


Решение

Установить Entity Framework 6.0.2 Tools for Visual Studio 2012 & 2013
http://www.microsoft.com/en-us/download/details.aspx?id=40762

Помогла статья http://stackoverflow.com/questions/19661494/entity-framework-6-cannot-build-after-adding-stored-procedures-to-data-mode

четверг, 19 декабря 2013 г.

Битрикс. Выгрузка заказов из 1С: Произошла ошибка на стороне сервера

Ситуация
При выгрузке заказов из 1С в битрикс выдает ошибку
Произошла ошибка на стороне сервера. Не получен статус завершения операции. Файл не отправлен

Окружение
1С 8
Битрикс 14

Разбирательство
ошибка начала появляться после обновления на битрикс версию 14.

отлаживался в конфигурации.
вышел на модуль обработки Обработка.ОбменССайтом
функцию HTTPВыгрузить на сервер

Что вижу
файл ответа, который приходит от битрикса содержит в начале переход строки, т.е слово success начинается не на первой строке а на второй.

Исправление

В теле функции нашел строку
СостояниеОбмена = СокрЛП(НРег(СтрПолучитьСтроку(ОтветСервера,1)));

и заменил её на
СостояниеОбмена = НРег(СтрПолучитьСтроку(СокрЛП(ОтветСервера),1));

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


Кто знает более удобный способ-поделитесь

см. также
Если это решение оказалось не вашим случаем, есть еще одно описание проблемной ситуации при выгрузке и её решение
Битрикс выгрузка заказов проблема и решение

вторник, 3 декабря 2013 г.

EF6 тесты ошибка

Ситуация

Делаю тесты в Visual Studio 2012 для EF проекта.
Получаю ошибку.

Class Initialization method EFProviders.Problem.UnitTest.TestInitialize threw exception. System.InvalidOperationException: System.InvalidOperationException: The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information..


Решение
помогло добавление строки

var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

в метод инициализации теста

См. также
Другие проблемы с тестированием связанные с Visual Studio 2012 см. здесь
http://dev-doc.blogspot.com/2013/10/visual-studio-2012-create-unit-tests.html

Ссылки по теме
решение нашел здесь
http://entityframework.codeplex.com/workitem/1590


четверг, 21 ноября 2013 г.

Entity Framework: Как динамически сменить базу данных

Помогло решение из статьи
http://stackoverflow.com/questions/16752371/selecting-database-dynamically-in-entity-framework


похожие статьи
http://stackoverflow.com/questions/18532901/c-sharp-entity-framework-ef-4-1-change-schema-and-database-name-at-runtime

http://stackoverflow.com/questions/518535/how-to-use-ado-net-entity-framework-with-an-existing-sqlconnection

http://stackoverflow.com/questions/18841164/change-database-during-runtime-in-entity-framework-without-changing-the-connect

Битрикс: изменение формы счета (реквизиты платежных систем)

Задача
изменить формат счета (реквизиты платежных систем), выставляемого покупателю
Причина: в
Украине нет российских реквизитов БИК и КПП. Соответственно клиент попросил убрать БИК и КПП.

Решение
(не красивое но работает)
Краткий ответ 
(необходимо знание PHP/Html)
Отредактируйте файл
/bitrix/modules/sale/ru/payment/bill/payment.php
(не забудьте сохранить оригинал)

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

Детальный разбор
разобрал исходники компонента
bitrix.sale.order.payment
он находится в директории
bitrix/components/bitrix/sale.order.payment

в нем нашел место где инициализируется переменная $arPaySysAction
(у меня 62-ая строка)
и продиагностировл её
    echo "<pre>";
    print_r($arPaySysAction);
    echo "</pre>"; 
   

Распечатка массива привела меня к директории
/bitrix/modules/sale/payment/bill

В котрой находился файл
/bitrix/modules/sale/payment/bill/payment.php

в нем собственно и была ссылка на
/bitrix/modules/sale/ru/payment/bill/payment.php

я сделал копию найденного файла,
а оригинал подредактировал в соответствии с требованиями заказчика
(совет, конечно несистемный, но можно туда явно забить html-текстовки с нужными реквизитами, если у Вашего заказчика они меняются не так часто)

Ссылки по теме
К сожалению ссылок по теме не нашел.
Кто знает - поделитесь.

jQuery-UI CDN Themes

Ссылки на Темы JQuery UI из гугловского CDN

Беру отсюда

http://stackoverflow.com/questions/820412/downloading-jquery-ui-css-from-googles-cdn


Определить InternetExplorer 10 через JavaScript

Задача:
Сделать дополнительный код для IE 10

Решение
Если не вдаваться в детали, то JavaScript-код, устанавливающий переменную
выгладит так.

var isIE10 = false;
/*@cc_on
    if (/^10/.test(@_jscript_version)) {
        isIE10 = true;
    }
@*/
alert(isIE10);


После этого можно использовать переменную isIE10


Ссылки по теме
Помогла статья
http://stackoverflow.com/questions/16366907/how-do-i-detect-ie10-using-javascript

Еще одна статья
http://stackoverflow.com/questions/9900311/how-do-i-target-only-internet-explorer-10-for-certain-situations-like-internet-e

Хороший JQuery слайдер: bxSlider

Хороший слайдер
http://bxslider.com/

Быстро внедрил и настроил

Почему понравился 
т.к. он используется в KickStart-фреймворке (http://99lime.com)

Ссылки по теме
JQuery-Слайдер на инфоблоках Битрикс

суббота, 16 ноября 2013 г.

вторник, 12 ноября 2013 г.

Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

Проблема
Переводил MVC3 проект на MVC4 (сам переход описан в статье Переход с ASP.NET MVC 3 на MVC4). Столкнулся с проблемой: перестало вызываться событие ExecuteCore (у меня на нем был завязан код инициализации контроллера).

Решение
перешел на событие BeginExecuteCore

На практике сделал поиск и замену во всем проекте 2-х строк
1.
protected override void ExecuteCore()
заменил на
protected override IAsyncResult BeginExecuteCore(AsyncCallback callback, object state)

2.
base.ExecuteCore();
заменил на
return base.BeginExecuteCore(callback, state);


Ссылки по теме
помогло это обсуждение
http://stackoverflow.com/questions/9555069/executecore-in-base-class-not-fired-in-mvc-4-beta

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

Переход с ASP.NET MVC 3 на MVC4 (с VS 2010 на VS2012)

Задача
Перенести проект с MVC 3 на MVC4 (с VS 2010 на VS2012)

Решение
1. Смена студий с Visual Studio 2010 на Visual Studio 2012
Переоткрыл солюшн в новой студии. Студия сама сделала перконвертацию. У меня обошлось без ошибок

2. Смена MVC 3 на MVC 4
Использовал NuGet пакет
Auto Upgrade MVC 3 To MVC 4 version 1.0.1
https://www.nuget.org/packages/UpgradeMvc3ToMvc4

В окне Manage NuGet Packages в поиске ввел "upgrade". Нужный плагин нашелся на первой странице.

3. Правка кода
3.1. Не вызывается событие ExecuteCore
Предыдущие этапы у меня прошли гладко.Но столкнулся с проблемой.
Суть: перестало вызываться событие ExecuteCore
Обращу внимание: у Вас этой проблемы может не возникнуть, если вы не использовали ExecuteCore.
Решение описал в статье:
Проблема перехода с MVC3 на MVC 4 : Не вызывается событие ExecuteCore

3.2. Ошибка компилятора Compiler Error Message: CS1513: } expected
Тут просто компилятор ведет себя по другому.

теперь код вью нужно поправить в соответствии с рекомендациями

Dont : @{if(check){body}}
Recommended : @if(check){body}

Dont : @if(@variable)
Recommended : @if(variable)

Don't : @{int a = @Model.Property }
Recommended : @{int a = Model.Property }


обсуждение
http://stackoverflow.com/questions/12809855/issue-migrating-mvc3-application-to-mvc4-compiler-error-message-cs1513-expe

3.3. Ненужная валидация hidden полей
Стала работать валидация hidden полей. она мне не была нужна
Она была мне не нужна, поэтому отключил её.

$(document).ready(function () { 
    //-- отключаю валидацию скрытых полей в форме
    $.validator.setDefaults({ ignore: 'input:hidden' });
});

тут помогло обсуждение
http://stackoverflow.com/questions/10136342/perform-validation-on-hidden-fields


Ссылки по теме
В этом обсуждении подсмотрел ссылку на пакет Auto Upgrade MVC 3 To MVC 4
http://stackoverflow.com/questions/8853330/converting-a-asp-net-mvc-3-project-to-mvc-4


Upgrading an ASP.NET MVC 3 Project to ASP.NET MVC 4 - этой статьей честно говоря не воспользовался

суббота, 12 октября 2013 г.

Visual Studio 2012 пропал пункт меню "Create Unit Tests...". Восстановление

Проблема:
В Visual studio 2012 пропал пункт меню Create Unit Tests...

Решение

помогло решение отсюда
http://dl.my/2013/enable-create-unit-tests-on-visual-studio-2012/
в этой статье помог раздел Solution 1: The Elegant Way


Пункт меню появился, но он стал в неактивном состоянии
на этом же блоге есть еще одна статья, которая решила и вопрос с неактивностбью пункта меню "Create Unit Tests..."
http://dl.my/2013/create-unit-tests-function-not-available-or-disabled/

UPD
тесты могут не запустаться если у ввас решарпер 7.1.1
нужно обновить до 7.1.3
вот статья
http://devnet.jetbrains.com/thread/442769

См. также
Решение проблемы при тестировании с Entity Framework 6 (EF6)
http://dev-doc.blogspot.com/2013/12/ef6.html


Нехорошее решение
попробовал было установить Unit Test Generator отсюда
http://visualstudiogallery.msdn.microsoft.com/45208924-e7b0-45df-8cff-165b505a38d7

Но он не понравился: генерирует свой тестовый проект и заглушки не заполняет. Кустарщина какая-то в общем.

Но только эта кустарщина помогла в VS 2013.
Смотрите статью:
http://dev-doc.blogspot.com/2014/08/visual-studio-2013-create-unit-tests.html

Ссылки по теме
обсуждение в мсдн коммьюнити
http://social.msdn.microsoft.com/Forums/vstudio/en-US/f76aafa9-3ea8-4ff3-940d-0dcf3bb70273/visual-studio-2012-right-click-create-unit-test-is-gone?forum=vssetup 

воскресенье, 8 сентября 2013 г.

Внезапная остановка сайта и отладочные сообщения PHP dispay_errors

Ситуация
Внезапно работать сайт на виртуальной машине.
Учитывая, что CMS не обновлялась, на саму виртуальную машину я не заходил. Сразу решил что вопрос в аппаратной части, или в настройках линукса. Привлек администратора. Он то и вывел меня на правильное решение. Решение простое до безобразия. но именно из-за того, что я не сразу начал копать в сторону кода, потратил много времени.

Собственно решение: включить отладочные сообщения PHP.
В index.php в корневой директории просто добавились 2 строки

ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

Это все. Ошибка сразу направила к нужному файлу и нужной строке.

К слову причина оказалась в поврежденном коде в одном из файлов движка.

пятница, 21 июня 2013 г.

Битрикс Выгрузка заказов Проблема и решение (Управление торговлей для Украины)

Среда

Битрикс 12
1С: УТ Версия конфигурации 1С: 2.3.18.1 Управление торговлей для Украины


Ситуация

Обновили модуль интеграции до версии "1С 8.2 УТ 10.3.16.1 ред 2.9.16"

Пытаемся провести выгрузку заказов. Система считает, что все заказы нужно изменять.
Делает большой файл (порядка 18 Мб и пытается заслать его на сервер).
Выгрузка заканчивается с ошибкой 500.


Как диагностировал

1С-ка диагностирует ошибку так

Выгружено заказов: 1 726 Ошибка при вызове метода контекста (ОтправитьДляОбработки): Ошибка при выполнении файловой операции 'bitrix/admin/1c_exchange.php?type=sale&mode=file&filename=v8_253F_66.zip': Ошибка работы с Интернет: внутренняя ошибка сервера (500) Internal Server Error.
Произошла ошибка: . По причине: Произошла ошибка на стороне сервера. Не получен статус завершения операции

Залез в логи сервера
(на моем хостинге 1gb - они доступны по ftp в папке logs фалй с именем error...<дата>.log)
Ошибка из логов выглядит так
[warn] [client XX.XX.XX.XXX] mod_fcgid: read data timeout in 150 seconds
[Tue Jun 04 16:05:42 2013] [error] [client XX.XX.XX.XXX] Premature end of script headers: 1c_exchange.php

Что пробовал

(в моем случае не помогло, но может помочь в Вашем)

Настройки среды PHP

Если позволяет хостинг, попробуйте увеличить лимиты среды php
max_execution_time = 600
max_input_time = 600
memory_limit = 256M
post_max_size = 256M

Это настройки из файла php.ini


Настройки сервера 

В ходе общения со службой поддержки и гугления вышли на еще одни настройки.
Параметры такие:
FcgidIOTimeout/IPCCommTimeout
Тут я просто попросил службу поддержки сервера увеличить эти параметры.
Ребята сделали, ошибка в логах изменилась, но выгрузка заказаов все равно не произошла

в логах-такое
[Thu Jun 06 18:38:57 2013] [warn] [client XX.XX.XX.XXX] (104)Connection reset by peer: mod_fcgid: error reading data from FastCGI server
[Thu Jun 06 18:38:57 2013] [error] [client XX.XX.XX.XXX]  Premature end of script headers: 1c_exchange.php
Потом я дал службе поддержки удаленный доступ к 1с, чтобы они сами смогли проинициировать выгрузку. Ребята из поддержки позанимались еще несколько дней и выдали неутешительный вердикт.

В конце концов служба поддержки хостинга дала такой ответ
Увы, в Вашем случае достигается лимит в 300 секунд процессорного времени на один процесс (т.е. процесс подгрузки на протяжении 5 минут создаёт процессорную нагрузку в 100%). Этот лимит у нас, к сожалению, обойти нельзя.
Вам нужно либо как-то "дробить" процесс импорта на части, чтобы он "помещался" в этот лимит, либо же переносить сайт на VDS -- там таких лимитов нет.
На VDS переходить не хотелось.

Я переслал ответ поддержки хостинга в Битрикс - получил ответ, который и помог с выгрузкой заказов


Решение, которое помогло

Тут цитирую ответ службы поддержки Битрикса, после того как все возможные варианты решения со службой поддержки хостинга мы уже испробовали

В модуле обмена с сайтом существует режим принудительной полной выгрузки. Этот режим включается автоматически при любом изменении настройки обмена. В режиме принудительной полной выгрузки изменения заказов 1С игнорируются, происходит полная выгрузка заказов. Режим принудительной полной выгрузки отключается автоматически после первого удачного сеанса обмена. 
Режим принудительной полной выгрузки, при необходимости, может быть отключен вручную. Для этого необходимо через меню «Операции» открыть регистр сведений «Настройки обмена с сайтом с принудительной полной выгрузкой» и удалить в нем записи, относящиеся к используемой настройке обмена.

Действия на будущее

Попросил у Битрикса-1С - разбивать файлы заказов на части, как это делается с товарами

Благодарности

Спасибо большое специалистам службы поддержки хостинга http://1gb.ua за участие в решении вопроса

См.также

Если это решение оказалось не вашим случаем, есть еще одно описание проблемной ситуации при выгрузке и её решение
Решение еще одной проблемы с выгрузкой заказов с ошибкой "Не получен статус заврешения операции"

среда, 5 июня 2013 г.

Нестандартный шаг в JQuery слайдере

Должна помочь статья

http://www.linkexchanger.su/forum/viewtopic.php?f=3&t=1483

и со стековерфлоу статья
http://stackoverflow.com/questions/967372/jquery-slider-how-to-make-step-size-change

пятница, 31 мая 2013 г.

Delphi TDateTimePicker редактирование даты и времени одновременно

Проблемы: стандратный компонент Delphi TDateTimePicker позволяет редактировать или дату или время.
Одновременное редактирование даты и времени в стандартном варианте невозможно.

Погуглил  - выручила статья
http://www.foxbase.ru/delphi/redaktirovanie-daty-i-vremeni-odnovremenno.htm

вторник, 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

среда, 23 января 2013 г.

Атака Ботов. Повышение нагрузки из за ботов на сайт Битрикс и борьба с ними

Суть вопроса

Сайт на Биртиксе стал перегружать хостинг (хостинг http://1gb.ua)
Нужно было решить вопрос, чтобы сайт не закрыли

Задача:
Определить причину перегрузки сайта на Битриксе и устранить её.

1.Определение причины
 Как определил, что перегружают боты
Поддержка хостинга посоветовала посмотреть статистику нагрузки по IP адресам
Статистика процессорной нагрузки/Детализация по страницам, IP адресам

На этой странице видно было что пиковую нагрузку создавал msnbot

После выяснения того что в нагрузке на сайт виновны боты, появился уточненный вариант задачи

Задача уточненная
Уменьшить нагрузку на сайт от поисковых ботов


2. Решение проблемы.
Замедление ботов

Опять же поддержка посоветовала править robots.txt
(тут идея такая: в корне сайта нужно создать файл robots.txt в котором можно настроить ограничения для поисковиков
подробнее про файл robots.txt в ссылках ниже
(также в ссылках ниже есть информация про параметр Crawl-delay, который замедляет боты)

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


# замедляем боты
User-agent: msnbot
User-agent: bingbot
User-agent: MSNBOT/0.1
Crawl-delay: 30





Доп информация по теме

инфо про файл robots.txt
http://robotstxt.org.ru/
http://dataword.info/robots.php

http://lermont.ru/blog/msg.php?msg=7 (тут есть инфо про замедление ботов)
http://webartsolutions.com/articles/doklad-robotstxt.html (тут есть примеры замедления ботов)


несколько ссылок с именами ботов
http://forum.searchengines.ru/showthread.php?t=12731
http://www.jafsoft.com/searchengines/webbots.html
http://mastertalk.ru/discussion/119161/podskazhite-imena-botov-poiskovyh-sistem/#Item_5


История общения с поддержкой



2013-01-22 11:02 Вы: Добрый день!
проблемы с магазином на битриксе
vavilon-shop.com.ua
: после переноса на новый сервер с PHP 5.3 он вызывает перегрузку оборудования
на старом сервере такого не было (был установлен акселлератор).

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

вопрос: появился ли у вас сервер с PHP 5.3 на Fast/CGI ?

2013-01-22 11:02 1Gb.ua: Дежурит специалист(ов): 5
Задавайте вопрос (если есть) - свободный специалист ответит вам.
(если вы уже задали вопрос - ожидайте ответа)

2013-01-22 11:03 1Gb.ua: Здравствуйте

2013-01-22 11:03 Вы: у вас заявлено соответсвие параметрам битрикса начиная с тарифного плана основной+,
а у нас сайт не может нормально работать на плане Максимальный
http://www.1gb.ua/price_bitrix.php#p2

2013-01-22 11:04 1Gb.ua: PHP 5.3 на Fast/CGI пока нет

2013-01-22 11:04 Вы: что с ресурсом делать? каждый день приходят письма о больших перегрузсках с угрозой отключить ресурс

2013-01-22 11:07 1Gb.ua: это не угроза, просто предупреждение. Нагрузка никак не связана с переходом на другой тип сервера

2013-01-22 11:07 1Gb.ua: судя из логов большую часть нагрузки создает msnbot

2013-01-22 11:08 Вы: а что это? есть где почитать

2013-01-22 11:08 Вы: просто раньше таких проблем в принципе не было

2013-01-22 11:09 Вы: а при переносе на сервер с пхп 5.3 с отключенным акселлератором производительность битрикса упала с 30-ти до 7-ми пунктов

2013-01-22 11:09 1Gb.ua: Настроить скорость проходения поисковых ботов можно в файле robots.txt
Так же в нем можно вообще запретить к индексации msn ботом Ваш сайт

2013-01-22 11:10 1Gb.ua: детальнее http://robotstxt.org.ru/

2013-01-22 11:10 Вы: ок, это может помочь.
посдскажете ссылки где почитать про скорость прохождения ботами?

2013-01-22 11:10 Вы: ок, спсб

2013-01-22 11:11 1Gb.ua: смотрите так же статистику https://www.1gb.ua/c/cpustat

2013-01-22 11:11 Вы: подскажите пож как вы статистику смотрели?
(чтобы я в след раз сам идентифицировал проблему)

2013-01-22 11:11 1Gb.ua: "Детализация по страницам, IP адресам"

2013-01-22 11:12 1Gb.ua: на крайний случай, можно просто напрямую заблокировать ip которые создают нагрузку, их там не много

2013-01-22 11:14 Вы: читаю http://robotstxt.org.ru/
не вижу раздела про скорость прохождения.
может подскажете?

2013-01-22 11:16 1Gb.ua: там довольно много информации смотрите, так же можете посмотреть и на других ресурсах, msnbot можно вообще заблокировать. Ваша целевая аудитория им точно не польщуется

2013-01-22 11:27 Вы: здесь
http://dataword.info/robots.php
нашел про Crawl-delay,
спасибо, буду пробовать

2013-01-22 11:27 1Gb.ua: пожалуйста

2013-01-22 11:27 1Gb.ua: Всего доброго