January 8th, 2010

стид

Как пропатчить com_rss под joomla 1.5.14 или Тщательно доработать напильником

В нашу фирму пришло письмо. От Яндекса. «Экпортный файл RSS сайта sitename.ru не соответствует нашим требованиям. Пожалуйста, исправьте его».

Поддержкой данного сайта (портал областной администрации) занимается наша фирма. Мне поручили разобраться.

Заход в админку разбудил моего верного антивируса. Он настоятельно рекомендовал «прервать соединение».

Справедливо решив, что зараженные страницы лежат в папке administrator, я слил ее с сайта и натравил антивирус.

Плавающий фрейм с вирусным содержимым был внедрен во все т.н. индексные страницы (index.html,main.html, default.html и т.п.). Данная зараза, к сожалению, не дописывала код плавающего фрейма к легальному содержимому, а переписывала его. Данный трюк стремится обмануть систему идентификации атак и контроля сайта, сверяющую текущий размер файла с исходным. Таким образом, шесть компонентов joomla были повреждены.

Заменив их из резервной копии сайта, я снова вошел в админку. В меню отсутствовали какие-либо пункты настройки экпортного файла.

Интернет предложил решение проблемы с помощью компонента com_rss. На одном из сайтов, посвященным joomla, присутствовал патч для данного компонента, призванный облегчить его настройку для Яндекса.

Наученный горьким опытом, ставлю компонент на локальной версии сайта. Он появляется в админке. Щелкаю по ссылке, должной создать необходимый файл. Полученный экспортный файл также не соответствует требованиям Яндекса. «Накатываю» патч.

В админке появляется страница с несколькими кодировками сразу. Экспортный файл состоит из «кракозябров». Методом «научного тыка» выясняю, какие из файлов закодированы в юникоде. Исправляю эту ошибку (спасибо Notepad++), перекодировав их в ANSI. Перелопатив их вручную, исправляю кодировку в метатегах с экзотической ISO на windows-1251.

Админка радует русским интерфейсом. Одна из ссылок, подписана «RSS Yandex». Щелчок по ней приводит к созданию экспортного файла. По внешнему виду он соответствует заявленным требованиям.

Отсылаю ссылку на Яндекс. В ответном письме указывается на несколько недочетов. В их числе – отсутствие полного текста новости в тегах <yandex:fulltext> в полученном файле. И отсутствие логотипа сайта в качестве источника новостей.

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

Проверяю. Вновь отсылаю ссылку на Яндекс.

Новые требования Яндекса: «В тегах «полного текста» есть только вторая часть новости, первая – в описании. Логотип сайта должен быть в формате gif». Матерюсь снова, «приклеиваю» текст описания к полному тексту. Конвертирую логотип сайта в указанный формат.

В третий раз отсылаю ссылку на Яндекс. «Логотип должен быть таких-то размеров, а у вас – такие-то. И на сайте очень старые новости, а мы индексируем только недельной давности, не позже».

Меняю размеры логотипа. Пишу владельцам сайта, что в конце декабря новости за 19 ноября (самая свежая) , мягко говоря, неактуальны.

В четвертый раз отправляю ссылку. Яндекс молчит. Вероятно, задание выполнено.

В связи с изложенным, несколько просьб.

К вирусописателям. Будьте людьми. Переписывая файлы, дописывайте, пожалуйста, вашу заразу в конец, а не коряжте код. После этого движки выбрасывают ошибки и не работают. До ваших плавающих фреймов выполнение просто не дойдет. А кроме размера файлов существует еще и контрольная сумма. Многие IDS (системы обнаружения атак) ориентируются именно на нее. Давайте не усложнять друг другу жизнь.

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

К владельцам сайтов. Желание быть проиндексированными Яндексом накладывает некоторые обязанности. В частности, увеличение частоты обновления контента. Иначе ни Яндекс не поймет, ни ваши посетители.

К админам сайтов. Старайтесь проверять ваши компьютеры на вирусы почаще. И не храните пароли в настройках FTP-менеджеров, их оттуда легко выколупывают трояны.


стид

Программирование для самых маленьких. Вступление


Совсем не для детей.

Название «… для чайников» не подходит по ряду причин. Во-первых, никому не нравится, когда его называют «чайником». Во-вторых, человек, который решил самостоятельно писать программы, как правило, уже не «чайник».

 Он уже не зависает над окном с единственной кнопкой «ОК». Знает, как установить или удалить программы. Может переставить и настроить операционную систему. Прекрасно ориентируется в дремучем лесу реестра. И его творческую натуру уже не удовлетворяет создание BAT-файлов или «лего» из компонентов среды VBA или Delphi.

Не подходит и название «… для начинающих». Область программирования делится на множество узких областей. Научивший свою программу писать и читать файлы посчитает себя начинающим при работе с базами данных или XML-файлами. И наоборот.

Данный мануал познакомит читателя с синтаксисом сразу пяти языков программирования: C, PHP, Pascal, JavaScript, Action Script.

Начнем.


стид

Программирование... Комментарии


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

 

Комментарии в одну строку в языках Си, РНР, JavaScript, ActionScript , Pascal

// Это комментарий в одну строку

 

Комментарии в несколько строк в языках Си, РНР, JavaScript, ActionScript

/*

Многострочный

 комментарий

*/

 

Комментарии в несколько строк в языке Pascal

{

Многострочный

комментарий

}

 


стид

Программирование ...Операторы

Код программы состоит из команд.
Команды должны отделяться друг от друга каким-либо разделителем. Чаще всего это точка с запятой «;». По этим разделителям компилятор отделяет одну команду от другой.
В языках Си, РНР, Pascal разделитель «;» обязателен. В JavaScript, ActionScript необязателен, его может заменить перенос строки.

Команды можно записывать по каждому на строке

Команда1;
Команда2;


Или в одну строку, друг за другом

Команда1;Команда2;
стид

Программирование ... Переменные


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

Переменная – это ячейка памяти, в которую можно поместить какие-либо данные (число или строку).

Во всех языках программирования переменные состоят из символов латинского (для «танкистов» – английского) алфавита, чисел и знака подчеркивания. Имя переменной не может начинаться с числа.

В языке PHP переменные должны начинаться со знака $ (доллар).

 

Переменные в языках Си, JavaScript, ActionScript , Pascal

dengi

money

tovar

 

Переменные в языке PHP

$dengi


стид

Программирование ... Типы переменных

Переменные имеют различные типы. Основные из них это – числа и строки.

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

Строки могут иметь длину от одного символа до бесконечности.

 Языки программирования делятся на типизированные (Си, Pascal) и нетипизированные (PHP, JavaScript, ActionScript ). В типизированных языках в переменную целого числового типа нельзя поместить дробь или строку. В нетипизированных языках переменная меняет свой тип в зависимости от содержимого.

В типизированных языках переменную перед использованием необходимо объявить, обязательно указав ее тип и проинициализировать (т.е. записать в нее какое-либо значение).

В нетипизированных языках переменная начинает свою жизнь, как только к ней обратились. Объявлять ее не нужно, но желательно проинициализировать.

 Объявление в языке Си

int dengi ;//число

double money; // дробное (вещественное) число

char* tovar ; // строка

 

Объявление в языке Pascal

 dengi: Integer; // число

money :Double ;// дробное (вещественное) число

tovar :String; // строка

 

Объявление с инициализацией в языке Си

int dengi=25 ;// число

double money=23.5; // дробное (вещественное) число

char* tovar ="Строка"; // строка

 

Объявление с инициализацией в языке Pascal

 dengi=25 :Integer; // число

money=23.5 : Real ;// дробное (вещественное) число

tovar ="Строка" :String; // строка

стид

Программирование ... Присваивание

Оператор присваивание помещает значение (справа от него) в переменную (слева от него).

Присваивание в языках Си, JavaScript, ActionScript
dengi=25 ;

Присваивание в языке Pascal
dengi:=25 ;

Присваивание в языке PHP
$dengi=25 ;
стид

Программирование ... Блок кода


Несколько операторов подряд могут обрабатываться вместе. Их называют блоком кода. Выделить операторы в блок можно при помощи логических скобок

 

Блок кода в языках Си, РНР, JavaScript, ActionScript

{

 

}

 

Блок кода в языке Pascal

begin

 

end


стид

Программирование ... Три синтаксические конструкции


В любом языке программирования есть всего три синтаксические конструкции.

·                   Условие

·                   Выбор

·                   Цикл

Этими конструкциями написан любой код в любом языке программирования. Почти все стандартные функции построены на них. Остальные функции служат вводу или выводу информации в/из программы.


стид

Программирование ... Условие


Условие хорошо объяснить на примере денег. Если они есть, то вам продадут товар. Иначе – не продадут.

В различных языках программирования условие записывается по-разному. Вот несколько примеров.

 Оператор Условие в языках Си, РНР, JavaScript, ActionScript

 if (здесь должно быть условие)

{

//здесь должен быть блок кода, выполняющийся по условию

}

else

{

//здесь должен быть блок кода, выполняющийся против условия

}

 Оператор Условие в языке Pascal

 if  здесь должно быть условие then

begin

//здесь должен быть блок кода, выполняющийся по условию

end

else

begin

//здесь должен быть блок кода, выполняющийся против условия

end

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


стид

Программирование ... Операторы сравнения

> больше // a > b; $a > $b;

< меньше // a < b; $a < $b;

>= больше или равно // a >= b; $a >= $b;

<= меньше или равно // a <= b; $a <= $b;

 Хотя некоторые операторы сравнения отличаются. Например, равно и неравно

 В языках Си, РНР, JavaScript, ActionScript

== равно (два знака равно) // a==b; $a == $b;

!= неравно // a != b; $a != $b;

 В языке Pascal

= равно // a = b;

<> неравно // a<>b;

стид

Программирование ... Математические операторы

С числами (и переменными, содержащими числа) можно производить различные математические операции:

В языках Си, РНР, JavaScript, ActionScript , Pascal

+ сложение

вычитание

* умножение

С делением есть некоторые отличия в языках

В языках Си, РНР, JavaScript, ActionScript

/ деление

% остаток от деления

В языке Pascal

mod остаток от деления

div целочисленное деление

/ деление дробных чисел

 

Сокращенная запись математических операций

В языках Си, JavaScript, ActionScript

Обычная запись

Сокращенная запись

a=a+1 ; 

a++ ;

a=a-1 ;  

a-- ;

a=a+5;

a + =5 ;

a=a-7 ;  

a - =7 ;

В языке PHP

Обычная запись

Сокращенная запись

$a=$a+1 ; 

$a++ ;

$a=$a-1 ;  

$a-- ;

$a=$a+5;

$a + =5 ;

$a=$a-7 ;  

$a - =7 ;

В языке Pascal

Обычная запись

Сокращенная запись

a=a+1 ; 

Inc(a) ;

a=a-1 ;  

Dec(a);