Тег ‘сайтоводство’

Сайты на PHP, дешево, просто, быстро

Опробовал “в реальной жизни” озвученную два года назад идею о том, что большинство веб-сайтов можно и нужно рассматривать, как красивый интерфейс к базе данных. Учитывая то, что я знаю PHP примерно на уровне журнала “Ксакеп”, получившийся код мог бы быть и красивше, но вот такой код странички мне уже почти нравится:

require_once 'includes/config.inc';
require_once 'includes/database.inc';

require_once 'widgets/schemeWidget.inc';
require_once 'widgets/partslistWidget.inc';

$snum = isset($_GET['page']) ? $_GET['page'] : 1;

$link = new dbLink();

$scheme = new schemeWidget($link, "SELECT sdesc, sfilename
                                   FROM schemes
                                   WHERE snum='%s';",
                                  $snum);
$scheme->show();

$partslist = new partslistWidget($link, "SELECT shinnernumber, pname, phcatnum, phproducer
                                         FROM parts
                                         INNER JOIN shown_in ON shown_in.pnum=parts.pnum
                                         LEFT OUTER JOIN parts_phys ON parts.pnum=parts_phys.pnum
                                         WHERE snum='%s'
                                         ORDER BY shinnernumber;",
                                        $snum);
$partlist->show();

Понятно, что это очередная попытка переизобрести MVC (точнее, пока просто MV – Model-View, а Controller пока не нужен) – но идея делать сайты по принципу “база данных плюс форматирование результатов запроса” оказалась вполне жизнеспособной. В порядке дальнейшего изобретения велосипедов – а не замахнуться ли на “свой Wordpress с блекджеком и шлюхами“?

Про анонимность в интернете…

…которой, разумеется, не существует.

Немного ознакомился с возможностями такой системы, как Disqus (я всего лишь хотел залогиниться на одном сайте по OpenID, а там это сделать немного сложновато). Это довольно навороченный “движок” для комментариев, который можно встроить практически на любой сайт. Очень многие сайты используют его, например, вместо “штатного” Вордпрессовского. Честно говоря, был поражен.

Нет, я не хочу обсуждать функциональные возможности Disqus в сравнении с тем, что дает обычный Wordpress. Меня больше удивляет количество информации, доступной владельцам этой системы. Фактически, на серверах Disqus может храниться (и хранится) информация о том, кто и когда посещал какие странички, кто писал какие комментарии, с какими аккаунтами в Твиттере, Фейсбуке или Гугле этот кто-то связан. Видимо, на основании этих данных Disqus показывает мне, на какой бы сайт с этой системой комментирования я бы ни зашел, некоторые “персональные рекомендации” – явно основанные на том, что я писал в комментариях до этого.

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

Про Opera Mini

Столкнулся сегодня с довольно распространенным в рунете мошенничеством. Нет, я не отправлял какие-то СМСки – просто немножко подробнее изучил уже знакомую проблему.

Думаю, все знают, что на мобильниках очень выгодно использовать браузер Opera Mini. Несовместимость с некоторыми сайтами компенсируется существенной экономией трафика. Естественно, эту тему просекли, так сказать, кибермошенники, и при входе на некоторые сайты выдается сообщение типа “Ваш браузер устарел! Скачайте новую версию Opera Mini” – и предлагается скачать, разумеется, не новую версию браузера – а обычную отправлялку платных СМС. В некоторых вариантах этой странички предлагается оплатить скачивание СМСкой.

Оказывается, что у мошенников существует целая партнерская программа. Вебмастер размещает у себя перенаправлялку (вставляется либо в php-код страницы, либо в .htaccess, браузер определяет по User-Agent), и ему капают денежки за пришедших с его сайта лохов. Самый отмороженный вариант этого я увидел сегодня. Не буду называть имен-фамилий и адресов, потому что это только подозрения, но скорее всего, дело обстояло так: “студия веб-дизайна”, обслуживающая сайт одной организации, разместила там редирект. Деньги от партнерской программы шли, разумеется, “студии” – и более того, сайт терял некоторую часть посетителей.

По-моему, за такое крысятничество админа сайта стоило бы закатать в асфальт, чтоб другим неповадно было. А вы как думаете?

Блог как “избранное”

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

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

Похоже, польские спамеры ушли

В честь этого я обратно открыл комментирование для всех записей.

И – новая напасть. Сейчас в ЖЖ не работает OpenID и загрузка аватар сторонними сайтами. Вырубили их 4 декабря, к выборам, и до сих пор не врубили обратно.

Итоги-2011

Кстати, решил подвести итоги по своему бложику на 2011 год.

Написано 389 записей.
К ним оставлено 1385 комментариев.
Три самые комментируемые записи:

Первое место занимает “Портрет чмошника” с 34 комментариями – и, ЧСХ, ни в одном из них мне не указали на дебильнейшую орфографическую ошибку.

На втором месте – “Сегодняшние новости“, датирующиеся 6 декабря. Как и положено “горячей” теме, они набрали 32 комментария.

На третьем месте – совсем неполитическая запись “Как я учился в школе“. Под совершенно невинным заголовком скрывается “рвущий шаблон” текст, собравший 22 коммента и даже перепост в ЖЖ кнопочкой.

Оказывается, я проглядел “настоящее” третье место – “Антирелигиозное мракобесие“, написанное еще в апреле и собравшее 23 комментария.

В новом году я начал не менее круто – с расчета радиохулиганского воздушного шарика аж на 25 комментариев.

Тут показываем, тут не показываем

Одна из самых популярных баннерорезок будет по умолчанию показывать “ненавязчивую” рекламу.

https://adblockplus.org/ru/acceptable-ads

Так они скоро места в “белом списке” за мелкий прайс продавать начнут.

Про фильтрацию спама

В Wordpress есть возможность автоматически помечать комментарии, удовлетворяющие определенным условиям, как спам. Обычно спам в комментарии идет с вполне определенных IP-адресов и их дипазонов, но фильтрации именно по IP нет – проверяется просто наличие слов из определенного администратором списка в тексте комментария, имени пользователя, адресе электронной почты, IP-адресе или URL. Если эти слова есть – то комментарий отправляется в “Спам”. Хочу заметить, что при этом он не удаляется, а кладется “отдельно”.

Сравнение со словами из списка – простое “текстовое”. Например, проверку на содержание слова “123.45.” не пройдет как чисто спамерский IP-адрес 123.45.67.89 (собственно, блокируется вся его подсеть), так и “нормальный” 89.123.45.67. В общем, есть некая вероятность попадания в спам “нормальных” комментариев. Совесть велит перед удалением всех спамерских комментариев просмотреть их на предмет ложного срабатывания фильтров, лень подсказывает, что сделать это за разумное время нереально – за неделю может набраться до нескольких тысяч “комментов” от особо тупых польских спамеров.

Естественно, что на совесть я положил и просто завел привычку регулярно нажимать на кнопку “Удалить весь спам” – но иногда она меня все же мучит. А не было бы “промежуточного хранилища” для спама – было бы немного спокойнее.

PS Если совесть мучит слишком сильно – то успокаиваю ее тем, что завел сайт для личного развлечения и это лично мое дело, какие комменты я тру, редактирую до неузнаваемости или удаляю.

Про всякие глупости

Зарегистрировал домен fuckfueleconomy.org. Удивительно, что такое интересное доменное имя до сих пор было не занято.

В общем, буду издеваться над fueleconomy.gov, естественно, на английском языке. Есть несколько вопросов к разбирающимся в “сайтах для США” и не только людям.

1. Что имеет смысл использовать для “полустатического” контента (пара десятков “статей” типа вчерашней рекламы баржи, может быть – некоторое количество видеороликов, флешевые картинки в заголовке, калькулятор расходов на Javascript)? Я неплохо знаю возможности Wordpress и догадываюсь, что его можно для всего этого использовать, но, возможно, есть более подходящие и более легкие CMS? Наличие/отсутствие русского перевода не критично.

2. Насколько легко сделать/найти (второе лучше) в CMS из первого пункта тему оформления, похожую на fueleconomy.gov?

3. Как подобный дизайн “смотрится” в американских интернетах? Есть ли американский аналог Лебедева, на которого там надо ориентироваться? В общем, как выглядит “сайт для пиндосов”?

Бей врага его же оружием

Леонид Каганов борется со спамерами с помощью верного робота Жопика:

To: admin@*******.**
Cc: abuse@******.***, abuse@***.**, info@***.**, noc@***.**, abuse@***.**, abuse@***.**, ***********@***.**, ***@*******.**, ****@***.***, ***@***.***, ********@****.***.**, ****@*****.***, ******@*****.****.**, *****@****.**, *****@***.**, *****@***.**, *****@****.*****, ******@****.***, ********.****@*****.***, ******@******.****, ******@*****.***, ******@***.**, ***@******.**, ********@***.**, *******@***.**, *****@********.**, ***@*********.****, *****@****.**, ***@***.**, ***@***.**, ***@***.**, *********@***.**, ********@***.**, *******@***.**, ***@***.**, ***@***.**, ***@*********.**, ***@***.**, ***@*******.**, ***@**********.**
Subject: сайт ********.** снова сделал спам-рассылку

Здравствуйте!

С вами говорит мейл-робот Жопик.

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

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

Когда спам пришел в десятый раз, мой хозяин натравил на вас меня — своего старого верного робота Жопика. Теперь только я, робот Жопик, буду вести всю переписку с вами, вашим хостером-провайдером и провайдером, через которого вы рассылаете свой спам. А также со всеми фирмами-рекламодателями, которые виноваты лишь в том, что так неудачно доверили рекламу своего бизнеса в интернете малолеткам с ********.**, которые ни на что не способны, кроме рассылки спама.

Чтобы это письмо снова получили все провайдеры, рекламодатели и незадачливые партнеры того несчастного сайта — просто отправьте мне еще что-нибудь с рекламой от ********.**

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

Большое спасибо за внимание.

С вами говорил мейл-робот Жопик.
Пишите чаще, мне щекотно!

Интересно, чем такого рода автоответчик лучше “интернет-малолеток и горе-раскрутчиков”?

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

Про iPad

Помните, я писал, что сенсорный дисплей (например, на iPad) имеет вдвое меньшие возможности по “целеуказанию” на экране, чем мышь или аналогичный манипулятор? А вот еще подтверждение:

Больше нельзя делать, чтобы что-то ценное появлялось или срабатывало при наведении. С айпадами уже достаточно много народу, чтобы не рассчитывать на наличие у пользователя «наводимого» устройства ввода. И ясно, что число этих людей и устройств будет только расти

Человек с айпадом на активно использующем мышь сайте (например, в панели редактирования комментариев Вордпресса) – однорукий инвалид.

Про robots.txt

Кстати, на этой неделе народ яростно обсуждал, правильно или неправильно поступают поисковики, индексируя заказы в сексшопах. Особенно упирали на файл robots.txt, который якобы запрещает поисковикам заходить на определенные страницы.

Так вот, robots.txt был придуман не для обеспечения безопасности. Он был придуман для того, чтобы вебмастер мог ограничить тем самым “роботам” заход в некоторые разделы сайта. Например, у меня на сайте есть PHP-скрипт (в реалиях начала 90-х это была бы программа на C или скрипт на Perl), решающий дифференциальное уравнение и строящий график. Если запрашивать странички с чем-то подобным слищком часто, то такое поведение будет называться DoS – Denial of Service, или (вставить название популярного сайта)-эффект. Думаю, если разместить ссылку на этот “построитель графиков” где-то на главной странице сайта с десятком тысяч посетителей в день, то мой сайт просто загнется.

Есть страницы, куда поисковых роботов пускать не надо – например, “версия для печати”. Они дублируют существующие страницы и не должны появляться в выдаче поисковика. robots.txt был придуман для того, чтобы поисковик не нарушал работу веб-сервера:

During one of my periods of burn-out I decided to teach myself Perl. So I started by trying to write a web spider — a bot that did a depth-first traversal of the web, to retreive (and eventually index) what it found, or just to download pages (a la wget or curl). There weren’t many resources for robot writers back then; the internet in the UK was pretty embryonic, too. (SCO EMEA had a 64K leased line in those days, shared between 200 people.) I was testing my spider and, absent-mindedly, gave it a wired-in starting URL. What I didn’t realize was that I’d picked a bloody stupid place to start my test traversals from; a website on spiders, run from a server owned by a very small company — over a 14.4K leased line. I guess I’d unintentionally invented the denial of service attack! Martin, the guy who ran the web server, got in touch, and was most displeased. First, he told me to stop hammering his system — advice with which I hastily complied. Then he invented a standard procedure: when visiting a new system, look for a file called “robots.txt”, parse it, and avoid any directories or files it lists. I think I may have written the first spider to obey the robots.txt protocol; I’m certainly the numpty who necessitated its invention.

Как я упомянул чуть раньше, его можно использовать, чтобы посоветовать поисковику не индексировать некоторые страницы – для чего его применение оправдано. Но вот запретить посещать страницы он в принципе не может (есть даже некий “черный список” роботов, игнорирующих этот файл).

Вообще, считается, что упоминать в robots.txt страницы, которые “не должен видеть никто” нельзя – просто потому, что ознакомиться с содержимым этого файла может любой, а для ограничения доступа надо применять другие средства. Например, на упомянутых сайтах использовались уникальные ключи, передаваемые в качестве адреса страницы. Считалось, что никто, кроме пользователя, эти ключи не увидит, и средства типа robots.txt применять не надо.

Так вот, недавно Яндекс соорудил новый “инструмент для вебмастеров” – Яндекс.Метрику, которая позволяет, например, отслеживать маршруты пользователей по сайту. Для этого поисковику передаются адреса всех посещенных пользователями страниц (говорят, что “обезличенно” – но мы-то знаем, пользователя можно практически однозначно идентифицировать по особенностям его браузера) – и кто-то умный решил, что эти адреса тоже стоит включить в индекс. Результаты все видели сами.

На самом деле поисковики могут получать адреса страниц и другими способами, например, используя как счетчик код контекстной рекламы (при этом они узнают и URL страницы). В общем, никто сейчас ничего не гарантирует, а защищать страницы от шляющихся где попало роботов надо другими средствами.

Кто круче в интернете

fedotov-itogi Проведенный давным-давно по на водке [info]infowatch (на фото справа) эксперимент с одновременным комментированием записей в ЖЖ и на стендалоне дал такие результаты:

- в ЖЖ 13 записей (пока мне не надоело) получили 26 комментариев
- на сайте – всего 18

Казалось бы, безоговорочная победа ЖЖ? Не совсем. Все, кто комментировал в ЖЖ, прекрасно оставляли комментарии и на стендалоне (спасибо технологии OpenID). Проблемы у меня не в невозможности оставить комментарий, а в двух простых вещах (как мне кажется по опыту комментирования на dreamwidth и прочих тифаретниках), которые мне лень сделать уже года три:

- уведомление на почту при ответе на комментарий
- более привычный для ЖЖистов вид формы комментариев

Почему лень? Потому что в борьбе с непрерывно обновляющимся вордпрессом есть только один выход – сделать свой вордпресс с блекджеком и шлюхами. У некоторых получается.

Я сейчас хочу обратить внимание на другое. А именно – на простой способ определить, какой сайт “круче”. Достаточно посмотреть, можно ли зайти на сайт А, используя авторизацию сайта Б. Если А доверяет Б, то есть считает, что пользователь, сумевший залогиниться на Б тем самым в достаточной степени подтвердил свою “индивидуальность” – то Б “круче”.

Например, лет пять-десять назад, когда рулили “мегапорталы”, зарегистрироваться на каком-нибудь средней руки форуме было нельзя без указания адреса электронной почты. Идея простая – e-mail можно получить с некоторым геморроем (типа указания размера обуви, девичьей фамилии матери и доказательства арийского происхождения), зато возможность доступа к ящику электропочты считается достаточной для идентификации пользователя.

I was pretty good at skeet shooting, but was eventually kicked off the range for catching the clay pigeons in a net and dispatching them execution-style.

Мегапорталы благополучно издохли, ныне вмето них появились “социальные сети” – та же хрень, только в профиль. Но самой важной их фишкой в довольно скором времени стала возможность регистрации без указания e-mail, например, с помощью одного только номера мобильного телефона. Вместо того, чтобы “доверять” серверам электронной почты в деле проверки личности пользователя, соцсети стали делать это сами.

Еще одно недавнее новшество – возможность “прозрачного” взаимодействия пользователей разных сервисов. Например, сейчас любой сайтовладелец может, при некоторых усилиях, “прогнуться” перед Twitter или Facebook и воспринимать залогиненных там пользователей, как “своих”.

Идея эта отнюдь не новая, как пишет в заметке “Принуждение к безопасности” Н. Н. Федотов, “в реальном мире удалось как-то договориться о признании удостоверений личности, выданных другими”. В виртуальном мире можно назвать такие (несостоявшиеся) инициативы, как Microsoft Passport или более удачный OpenID или OAuth. Правда, OpenID тем отличается от “серпастого, молоткастого советского паспорта”, что его “провайдером”, то есть органом выдачи, может выступать кто угодно (кстати, и e-mail страдает от той же проблемы). Я “признаю” пользователей LiveJournal, LiveJournal “признает” меня и даже отображает в вот таком виде: Шура Люберецкий [luberetsky.ru].

Собственно, OpenID-пользователь мало чем отличается от пользователя ЖЖ – тоже может читать френдленту, с недавних пор нам стало можно писать в сообщества – разве что собственного блога на livejournal.com у него нет. С другой стороны, можно настроить Wordpress так, чтобы он воспринимал как “своих” пользователей из ЖЖ – и даже позволить им писать записи, ничуть не хуже, чем в ЖЖшных “сообществах”.

Весь это кайф с OpenID придуман создателем ЖЖ, программистом-идеалистом Бредом Фицпатриком. Программистам-идеалистам вообще свойственно представлять реальность в духе лучшего, талантливейшего поэта советской эпохи:

"Дяденька,
          что вы делаете тут,
столько больших дядЕй?"
- Что?
      Социализм:
                свободный труд
свободно
        собравшихся людей.

Разумеется, в нашей капиталистической реальности ни о какой “саморганизации трудящихся” речь не идет. Вместо открытого распределенного протокола OpenID (придуманного для реализации модели “равный-с-равным”) Twitter, Facebook и ВКонтакте предлагают свои собственные механизмы для авторизации своих пользователей на других сайтах. При этом ни о каком “равенстве” речь не идет: даже если я добавлю возможность оставлять комментарии для пользователей Twitter, это не будет означать, что Twitter будет воспринимать пользователей luberetsky.ru, как родных.

Знакомые историки не могут не смеяться, когда слышат слово “домен” применительно к Интернету. Как это не странно, термин, обозначающий владения феодала, как нельзя лучше описывает “общественно-экономическую формацию” нынешнего Интернета. Каждый, кто способен настроить web- или почтовый сервер, превращается в такого вот мелкого феодала. Может быть, это имело смысл, когда кто-то придумывал структуру устойчивого к ядерной войне ARPANET и последующие интернетовские сервисы, но сейчас наступает эпоха первых “буржуазных революций” и прочего мракобесия, пришедшего на смену развеселому Средневековью.

Как учил нас Карл Маркс, смена общественно-экономических формаций неизбежна и определяется развитием экономических отношений. Развиваясь, пресловутое “Интернет-сообщество” за какие-то несколько десятков лет прошло путь от обезьяны до человека от первобытного строя до развитого феодализма, который вот-вот и превратится в начальный этап капитализма.

Вместо средневековых баронов и магнатов, осмеливавшихся спорить с королями, будущих интернетчиков ждет то, что в учебниках истории называлось “становление (нужное вписать) централизованного государства”. А что это означает в вопросе авторизации пользователей? Вместо того, чтобы всякий удельный князь чеканил свою монету, позднее Средневековье и “укрепление королевской власти” предполагают, что чеканка монеты – это прерогатива центральной власти. Переводя это на “интернетовский” язык, получим очень простую вещь: всемерное развитие “единой и централизованной” авторизации. Всем, кто не обладает достаточной известностью, чтобы их система авторизации была более-менее интересна другим, придется признавать что-то “централизованное”.

Заметьте, что в нашем любимом ЖЖ в последнее время именно это и происходит – все больше и больше внимания уделяется удобству пользователей Facebook и Twitter, на развитие OpenID забито (а для многих он вообще отключен). ЖЖ, по приведенному в первых абзацах определению, теряет свою “крутость” и фактически признает, что Twitter и Facebook теперь стали “главнее”. Не будем забывать и про ВКонтакте с его авторизацией, и про попытки Mail.ru тоже сделать что-то “такое” – в общем, ЖЖ превращается из “главного блогохостинга всея Руси” в совершенно рядовой сайт, пусть даже и с немалым количеством пользователей.

PS Кстати, если вам так дороги ваши записи в ЖЖ – сделайте нормальный backup. Сравнительно недавняя история Интернета показывает, что “быть популярным” и “быть прибыльным” – это совсем не одно и то же. Вспомините тот же GeoCities – одну из самых старых (и популярных) служб веб-хостинга, созданную еще в 1994 году. Она поменяла нескольких владельцев, но никто так и не добился прибыльности. В конечном итоге Yahoo!, которому все это досталось, объявил о закрытии этого сайта. Не думайте, что кто-то будет испытывать нежные чувства к блевничкам всяких навальных и ибигданов. ЖЖ явно балансирует на грани рентабельности, и если рассматривать этот проект с чисто “бизнес-стороны” – то прекращение его работы из-за убытков неминуемо. Впрочем, владельцы ЖЖ могут преследовать и иные цели, чем непосредственное извлечение прибыли.

Ктулху зохавает фсех

Увидел интересную новость под скандальным заголовком ““Документы” В Контакте похоронят e-mail“. В комментариях гики смеются над тем, что вконтакт что-то похоронит, и утверждают, что древняя, как говно мамонта, электронная почта с волшебными аббревиатурами SMTP, POP3 и IMAP всех нас еще переживет.

Я не был бы так оптимистичен. Вконтакт уже давно похоронил такое явление рунета, как “Страничка 203 группы Факультета бизнес-технологий Задрищенской Академии климата” (”Академия климата” – это бывшее ПТУ по ремонту холодильного оборудования). Теперь будущие специалисты по бизнес-технологиям общаются в “группах” вконтакте. Там же, вконтакте – игры, там же и некое подобие электропочты, там же и кино, и музыка, и фотографии – в общем, для развлечений вконтакт стал самодостаточен.

Теперь “вконтактовцы” замахнулись на killer feature старого e-mail – возможность отправлять письма с вложениями. И я более чем уверен, что немалая часть пользователей вконтакта будет пользоваться привычным им вконтактом вместо довольно сложной “обычной” электропочты.

Я бы не сказал, что тенденция “все, что надо в интернете – под одним колпаком” появилась только сейчас, с приходом фейсбука и вконтакта. Что-то подобное хотели сделать и AOL, и MSN, даже ICQ в свое время обзавелась полным набором “сторонних сервисов”. У меня валяется книжка А. Левина “Самоучитель полезных программ” (довольно древняя, 2001 года), там про тогдашние “примочки” аськи сказано следующее:

Просто живи в этой асе и не вылезай – тут поешь, тут и выпьешь, тут женишься, тут тебя и закопают…

До недавнего времени мало у кого получилось сделать такой “интернет в себе”. Да, были мега-порталы типа Рамблера, был и AOL, но так или иначе необходимость “внешнего” Интернета сохранялась. Нынешние “социальные сети”, похоже, смогут добиться в этом куда больших успехов, если, конечно, ничего плохого с ними не случится.

Взрослеющие поисковики

Как-то я написал в одной из ЖЖ-дискуссий, что мне не нравится в современных поисковиках. Ожидал забрасывания ссаными тряпками, но (к сожалению?) не получил оного.

Если совсем тезисно – то позиция поисковиков “мы зеркало интернета, мы не фильтруем информацию” – это очень наивный подход разного рода компьютерщиков 90-х годов. С тех пор Интернет из чисто технического курьеза превратился, в общем, в элемент общественно-политической жизни – во-первых, а во-вторых – в безграничное хранилище личной информации. Почему-то мало кто воспринимает тезис “все, что попало в Интернет, известно жене/боссу/судебным приставам”, и не стесняясь, рассказывает на личной страничке о тех вещах, которые рассказывать не хотелось бы.

Не буду говорить, что слова про “зеркало интернета” устарели, просто приведу пару примеров.

Недавно с удивлением обнаружил, что в выдаче Яндекс.Директа реклама фармпрепаратов и медицинских услуг сопровождается пометкой “Имеются противопоказания. Проконсультируйтесь с врачом.” Замечу, что это противоречит принципу “зеркала интернета” – здесь уже даются некие оценки “правильности” рекламы.

А еще на этой неделе с жаром обсуждали то, что Google убрал из поисковой выдачи некоторое количество “пиратских” онлайн-библиотек. Заметьте – не стал прикрываться тем, что это проблемы правообладателя, и бороться надо не с поисковиком, а с самими сайтами и их пользователями, не отмазывался, что для совершения сего эпохального действия нужна бумажка, подписанная лично прокурором Калифорнии, не вопил про “экстерриториальность интернета” и не утверждал про неприменимость “оффлайновых” законов одной страны к сайту, хостящемуся в другой – а просто убрал и все.

Это уже “взрослый” для наших с вами интернетов поступок – вместо “детского” дисклеймера о свободе информации и “настроениях пользователей” было принято решение, устраивающее в коммерческом плане. На место старого лозунга “Не делай зла” пришел другой – “Не делай зла тому, кто платит”. Яндекс, кстати говоря, заявляет о том, что так делать не будет. Посмотрим, лично я готов поспорить, что уже лет через пять коммерциализация Рунета дойдет до “общемировой” и поисковики станут играть на стороне тех, кто платит.

Правда, к тому времени Google придумает что-нибудь еще, гораздо более цинично-коммерческое. Скажем, продажу PageRank за некоторую мзду. А почему, собственно, и нет?

Про интерфейсы

Когда-то давно, еще, наверное, в IE5, при вводе в адресную строку чего-то, заведомо не являющегося URL, браузер искал это с помощью поисковика MSN или чего-то прописанного вместо него (хоть замена MSN на другой поисковик нигде не описывалась). Итого в панели браузера имелось лишь одно поле ввода, предназначенное как для поиска, так и для ввода URL. В современных браузерах существуют отдельные поле ввода URL и поле для “быстрого поиска”, причем понять, что для чего предназначено, “юзеру” затруднительно (не говоря о том, что многие не отличают поле ввода поискового запроса на Яндексе от поля ввода URL в браузере). По-моему, получилось просто усложнение интерфейса.

И еще. Читал вчера у Joel’а по поводу картинок в FrontPage. Вспомнилась еще одна неприятная штука с картинками в HTML. В свое время считалось, что загрузка картинок в браузере может быть отключена, и тег img был снабжен атрибутом alt, в котором должен был прописываться некий текст, описывающий изображение. В “элементарных руководствах” по HTML всех призывали писать в нем описание картинки, что-нибудь типа “Белое облако, летящее с востока на запад”. Надо ли говорить, что никто сегодня этим атрибутом толком не пользуется? К сожалению, человечество так и не придумало, как нормально снабдить графический файл альтернативным “текстовым описанием”. Возможно, имело бы смысл отправлять эти данные в HTTP-заголовке, тогда вместо загрузки большого файла целиком можно было бы обойтись только запросом HEAD. Впрочем, все получилось так, как оно есть, с полной невозможностью найти картинку по ее описанию в “поиске по картинкам”.

Пока тут разговаривают о конце жежешечки…

…а точнее, о криворукости СУПа, у меня, похоже, завершилось нашествие польских спамеров. Так что открою я сейчас комменты, а с утра посмотрю на результат.

Кстати, про веб-программизм

Одной из самых неудачных черт PHP (да и вообще современного сайтостроительства) лично я считаю то, что очень неудобно хранить настройки где-либо, кроме базы данных. Конечно, почти всегда существует текстовый файлик с назанием типа config.php или config.inc, но в нем прописываются только параметры, необходимые для доступа к БД. В вордпрессе, например, такие параметры, как часовой пояс, название темы оформления и тому подобные хранятся в отдельной таблице БД, имеющей очень простую структуру – имя+значение. Если надо “узнать” один из этих параметров – пишите запрос :)

Я не знаю, как это можно “согласовать” с реляционной моделью, но, к сожалению, более удобного способа хранить какой-нибудь ассоциативный массив (”хеш”) между различными выполнениями скрипта в PHP нет. Но дело не только в этом. Как мне кажется, подобное использование БД – “нецелевое”, оно провоцирует на то, чтобы рассматривать базу данных, как какую-то “помойку” без определенной структуры, а не на очень удобное средство для хранения и (что более важно) выборки данных.

Хорошо спроектированная база данных вообще не нуждается в PHP-обертке, роль скриптов должна сводиться к “красивому” форматированию данных, полученных SELECT-ом. Может, конечно, я заново изобретаю велосипед (во всяком случае, идеи очень похожи на принцип Model-View-Controller), или призываю к “экстремизму”, но вот мне кажется, что большинство движков веб-сайтов можно заменить на PHP MyAdmin :) Наверное, вряд ли это новость, но недавно я видел одну систему, построенную по довольно оригинальному принципу: есть база данных с кучей таблиц. Каждая таблица соответствует страничке сайта, которые строятся одним и тем же скриптом. Данные в таблицы можно добавлять через автоматически генерируемые веб-формы.

В принципе, это еще один шаг в сторону “веб-программирования мышкой“. Уже есть автоматизированные средства создания структуры БД (например, на основе Entity-Relationship диаграмм). При желании можно определить “визуализаторы” для различных типов SQL-запросов (например, запись в блоге или лента записей выводятся с указанием заголовка, автора, даты и т. п., комментарии – “лесенкой” или линейно), “вставить” их мышкой на страничку и получить готовую CMS для блога. Например, страничка, содержащая запись и комментарии к ней, полностью генерируется за два запроса:

SELECT author, title, text FROM entries WHERE entryid=$id;
SELECT author, text FROM comments WHERE entryid=$id;

Достаточно правильно отформатировать то, что вернула нам СУБД – и все готово!

Конечно, реальные запросы будут сложнее, например, явно стоит сделать таблицу authors (с полями типа name, surname, avatar), которую надо “соединять” с entries и comments, но все содержимое страницы определяется только SQL-запросами.

Есть, конечно, шутки об уникумах, которые сооружали сайты только на SQL-запросах (да-да, добавляя туда HTML-форматирование), и тем самым обеспечивали себе свое рабочее место до глубокой старости (потому что ни один пэхэпист ни в жисть не поймет, что это за извращение), но разве нельзя так делать сайты? И разве всем так нужны возможности тьюринг-полного PHP, когда вся его роль может быть сведена к форматированию отданных СУБД данных?

Временно отключу комментарии

По причине нашествия тупых польских спамеров временно выключу комментирование на сайте.

Про PHP и базы данных

В который раз убеждаюсь, что изложение SQL в “непрофильных” книжках по всякому там PHP приводит разве что к бесконтрольному распространению похапешных кодеров.

Недавно наблюдал замечательное – из базы данных извлекаются все записи таблицы (SELECT * FROM foo.bar;), затем сортируются пузырьком (!) в PHP-скрипте (про usort() аффтар был не в курсе), а затем выводятся те из них, которые имеют значение некоторого числового поля, равное 0 и 1. Про существование WHERE и ORDER BY мега-похапешник был не в курсе.

Собственно, осуждать похапешника и обвинять того в быдлокодерстве не стоит – я и сам был таким, делал сайты на самописном подобии CMS. Все это даже работало – с посещаемостью два недочеловека в день и не такое работать будет. Впрочем, некое “оправдание” у меня есть – я “изучал” SQL и PHP по статьям в журнале “Мурзилка” “Ксакеп”. С гордостью могу заявить, что никаким SQL Injection у меня никогда не пахло! Впрочем, больше ничего хорошего сказать нельзя. Чему можно научиться вот из такого?

$sql2="select * from xforum";
$res2=mysql_query($sql2);
$a=mysql_num_rows($res2); #считаем количество тем в форуме
$b=ceil($a/30); # считаем количество страниц с результатами запроса
echo "Страницы: "; for ($i=1; $i<=$b; $i++) {if ($i!=$page) {echo "<a href=forum.php?page=$i>";} echo "$i"; if ($i!=$page) {echo "</a>";} echo " ";}
# выводим в цикле список доступных страниц с сообщениями
$sql="select * from xforum order by 'pid' desc limit $from,29"; #запрос на постраничный вывод дискуссий форума
$res=mysql_query($sql);

Собственно, самые продвинутые похапешники, которые даже знают “классические” алгоритмы, могут не заморачиваться со вторым запросом, а, как я уже говорил, отсортировать все “пузырьком”. А представляете, что творится, когда в таблице xforum хранятся не короткие заголовки тем, а что-то более содержательное?

Я не говорю про всякое сложное типа “нормальных форм”, но почему-то большинство похапешников совершенно не представляют себе, что такое SQL и что он может. Самое главное – это не мешает им считать себя большими специалистами по базам данных (умеют написать UPDATE и SELECT). Не так давно видел “критику” одного популярного вордпрессовского плагина – человек немного потупил в код, переписал пару SQL-запросов, убрал “сортировку пузырьком” – и добился весьма существенного роста производительности.

И эти люди запрещают нам ковыряться в носу :)

UPD Все было еще круче! Сортировка пузырьком понадобилась ровно по той причине, что чел просто не разобрался, как использовать usort(). Интересно, а лет пятнадцать назад, такие же монстры писали на C?