QR-code. Бар-коды в современном интернете.

35 комментариев

Слово «бар-код» в русском языке появилось благодаря англичанам. Среди значений их глагола bar – «испещрять полосками, зарешечивать». В некоторых словарях этого слова нет вовсе, но в тех, где присутствует, оно пишется через дефис: бар-код. Хотя, не исключаю, что впоследствии его причешут до «баркод» — по привычке.

qr-code

На данный момент самым популярным и перспективным стандартом кодирования бар-кодов является QRQuick Response. Это сейчас стандартный для Японии способ кодировать текстовую и графическую информацию в форме маленьких картинок, которые легко отсканировать сотовым телефоном. Если вы напечатаете такую картинку и проведете по ней сотовым телефоном, то закодированный текст автоматически распознается, лишая вас сомнительного удовольствия долго вводить требуемый e-mail или веб адрес, пользуясь крошечными кнопками с клавиатуры телефона. Такие коды в Японии печатают на продуктах, в рекламе, на формах заказа и так далее. Вы можете сами найти такой баркод на процессоре своего компьютера – именно так производится их учёт в Intel и AMD.

QR была разработана в Японии, компанией Denso в 1994 году. Ключевое отличие QR от аналогичных стандартов — учет специфики японского языка средствами UTF-8, что для нас означает возможность спокойно шифровать и русские буквы в QR-кодах.

Этот формат даёт широкий простор для рекламных и вирусных акций с блогами, сайтами (особенно WAP), социальными приложениями. Вы можете печатать код своего блога на визитке, можно устраивать разнообразные игры и конкурсы, например, предлагая в качестве призов майки с бар-кодом вашего профиля или сайта. Рассуждения Danaki о применении бар-кодов для социальных сообществ можно почитать у него в блоге.

Специально для блогеров существует интересный сервис: Feed2Mobile. Этот сервис оптимизирует ваш RSS-поток для просмотра на мобильном телефоне — пользователю достаточно нажать на картинку и он уже не отвлекается на элементы навигации, рекламу и прочие отвлекающие от чтения красивости.

Читать далее »



Загадочная репутация.

3 комментария

По просьбе моего коллеги и друга Дамира Халилова, я поучавствовал в бета-тестировании проекта Репутация.ру. Впрочем, я бы это назвал пре-альфа-тестированием — до открытия проекту ещё очень далеко.

«Репутация» — это портал положительного и отрицательного оценивания компаний или людей. Миссия проекта: обращаясь к «Репутации», человек получает возможность делать более верный для себя выбор услуг, товаров или будущих работодателя, партнера, сотрудника. Так же каждый имеет право оставлять свои отзывы, для формирования объективной информации о ком-либо, чем-либо.

Одной из главных загадок «Репутации» для меня стало её быстродействие. Судя по ответам серверов, располагается она в хостинг-центре РБК (hc.ru). В коде страниц — свалка, подключается по 10-20 внешних JS и CSS-файлов на страницу, использован YUI, много скриптов дописано в код самих страниц, и так далее. Какой из этих фактов заставляет страницы «Репутации» грузиться по 15-20 секунд — я не знаю.

Следующая загадкаинтерфейс. Да простят меня разработчики, юзабилити у «Репутации» на уровне «Одноклассников», то есть не просто ноль, а даже минус. Что делает большинство кнопок на страницах понять практически нельзя, интерфейс при этом перегружен, а такого понятия как «меню» вообще нет. Почти ни на одной странице не заполнен тег TITLE. Завершает пируэт кнопка «Дискуссии», ведущая на обычный форум.

Репутация

Загадка номер три – нераскрытая тема самой репутации. Фирмы регистрируются, публикуют пресс-релизы, собирают отзывы недовольных пользователей (вы же понимаете, что довольные не пишут отзывы?). Фирма платит порталу, портал «модерирует» особо честных фанатов. Это всё? Я могу рассказать как сделать как минимум два проекта с таким именем и миссией, которыми реально будут пользоваться люди. Сказал бы, да жалко — может сам попробую ещё.

Загадка номер четыререпутация самой «Репутации». По данным whois, домен зарегистрирован на неизвестное лицо с телефоном +7 812 0000000. По всё-таки найденному телефону на мой вопрос о сотрудничестве с Дамиром сотрудник проекта ответил отрицательно, что говорит о сложных и далёких от идеала способов внутренней коммуникации на проекте.

Следите за своей репутацией ;-)

Реклама: Банкирша.ком - все о банках, кредитах, ипотеке.

Жилинский Владимир.



OpenProfile – в режиме идеи.

16 комментариев

OpenProfileНа iCamp 2008 мы не только пили пиво, но ещё и очень-очень много общались. Под воздействием эпохальных речей норвежских парней из Opera Software о скорой смерти проприетарных стандартов, в голове у представителей различных социальных сетей начали шевелиться мысли…

И начали мы думать, как нам объединить усилия таким образом, чтобы проекты ничего не потеряли, но при этом стали сильнее. Некоторые гнули в свою сторону, мол мы будем интеграторами всея рунета, некоторые махали руками в сторону Google, SocialGraph, FoaF, OpenID и прочих вещей, которые технологически интересны и полезны, но законченного решения, увы, не дают.

Потом мы ещё очень долго думали и к концу третьего дня iCamp мысль начала понемногу фокусироваться и люди с ней начали соглашаться.

Проблема: необходимость для пользователей многократно заполнять свои профайлы в сети.

Причина: невозможность или незаконность парсинга сайтов для получения данных о пользователе даже при его желании.

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

Мы решили создать такой формат, придумав кодовое имя OpenProfile. Да, есть аналоги, может быть даже речь идёт об изобретении велосипеда, но мне кажется, что есть шанс сделать действительно удобный, гибкий и полностью децентрализованный формат. В каком-то роде это получится продолжение идеи OpenID, но пересекаться с ним никак не будет, разве что дополнит его.

Поскольку речь идёт о передаче пользовательского логина и пароля в одну сторону и его личной информации в другую, необходимо шифрование канала. Это не большая проблема, так как достаточно обычно SSL-сертификата и взаимодействия между веб-серверами по https-протоколу.

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

1. Спецификация и форматы обмена данными в разнородных информационных системах на базе XML-технологий.

2. Уже почти забытый формат обмена PDF OIFML.

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

Если у кого-то есть мысли на этот счёт – welcome в комментарии или в Wiki по адресу oProfile.ru.

Жилинский Владимир.



IT Nation. Как меня рассмешили.

13 комментариев

ITNation.ru - каталог IT-блоговНа днях я всё-таки переделал свой каталог IT-блогов “Коллеги” и вынес его на отдельный сайт – ITNation.ru, а со старого адреса сделал редирект.

Но из-за моей жуткой нехватки времени идея дополнительным функционалом так и не обзавелась, разве что поиск по всем блогам от Google CSE прикрутил. Его можно как поисковый плагин установить в браузере.

Меня сегодня насмешил автор блога IнTересности – он нашёл и подписал несколько “сюжетов”, сложившихся из иконок добавленных блогов:

ITNation

Пока кто-то идёт на вершину (1), кто-то уже носит медали (2), а кто-то курит чудо-траву(3).

ITNation

Одни ловят баги (1), другие ждут манные небесной (3), третьим уже конец (3).

Говорит, там ещё есть смешные моменты. Кстати,  про саму идею. Это матрица на 1000 блогов компьютерной тематики. Добавляется блог в пару кликов без регистрации, удаляется по просьбе. Ежедневно самые интересные из сообщений в добавленных блогах транслируются в общую ленту. На каждый блог, сообщение с которого транслируется, ставится прямая ссылка (хотя это зависит от того, как настроен у вас FeedBurner).

Жилинский Владимир.



WebSlug – сравниваем скорость загрузки сайтов.

16 комментариев

Я уже писал про проект Webo, позволяющий подробно анализировать скорость загрузки сайта и избавляться от тормозящих элементов. Сегодня мне на глаза попался ещё один интересный сервис на эту тему – WebSlug.

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

WebSlug

Так я узнал, что мой блог грузится быстрее сайта MicroSoft. К сожалению, у сервиса пока есть недочёт: на некоторых сайтах установлен простой скриптик, не разрешающий их открытие во фрейме. Такие сайты не обрабатываются – именно поэтому Google и Яндекс сравнить не удалось.

Жилинский Владимир.



goDB — библиотека для работы с MySQL из PHP.

28 комментариев

GoDB - MySQLi-интерфейс PHPКогда мои логические цепочки запросов заводят меня в MySQL-тупик, я сначала ищу в сети информацию, потом лезу в толстую книжку, потом обращаюсь к коллегам. Поскольку мы сейчас работаем с командой PHP.RU, то последний способ оказывается практически 100%-эффективным.

Именно эти люди убедили меня разобраться в интерфейсе GoBD – надстройки над MySQLi, делающей код работы с базой данных быстрее и короче, а модель плейсхолдеров – безопаснее.

Надстройки для работы с БД – любимое занятие PHP-программистов, но GoDB – не тот случай. Эта библиотека успешно прошла бенчмарки на надёжность и скорость и разработана действительно опытным человеком не без участия сообщества.

  • Разработчик GoDB: Григорьев Олег (aka vasa_c).
  • Требования для работы GoDB: PHP5 с расширением MySQLi.
  • Сайт GoDB.
  • Сайт MySQLi.

Жилинский Владимир.



Как сделать облако тегов на PHP.

41 комментарий

Облако теговОблако тегов” или “Облако меток” (англ. tag cloud) — визуальное представление списка ярлыков. Частота упоминаний, поисков, ссылок в интернете с определенного сайта неких слов, терминов, имен, отображается в виде изображения этих слов в формате гиперссылок. Размер изображения тем больше, чем выше релевантность данного слова.

Теги для многих удобнее категорий, и, наверное, поэтому без них сейчас не обходится ни один проект в концепциях Web 2.0. Для многих CMS есть модули или плагины, выводящие облако тегов. WordPress поддерживает такую функцию начиная с версии 2.3.

Но мне захотелось вывести такую штуку на самописном движке сайта “Коллеги: 1000 IT-блогов“. Реализация оказалась проще, чем я думал.

  • 1. Создал таблицу соответствий “Тег – Число”.
  • 2. Заполнил её (несложная функция, подсчитывающая число вхождений тега в таблице блогов).
  • 3. Рассчитал максимальное значение и исходя из него – популярность каждого тега в процентах.
  • 4. Разделил теги на группы по популярности и назначил им CSS-классы.
  • 5. Подготовил соответствующие CSS-классы для отображения.
  • 6. Вывел облако на страницу блоком.

скачать PHP скриптTagCloud.phps - формирование облака тегов.

В тексте исходника – все инструкции, дамп таблицы и CSS-классы. Посмотреть этот код в действии можно в “Коллегах”.

Жилинский Владимир.



Комплект PHP-функций для работы с UTF-8.

20 комментариев

PHP UTF-8Вдогонку к заметкам о морфологическом антимат-фильтре на PHP, функциях для экстренного конвертирования в UTF и обратно и функции для защиты от XSS-атак, публикую потрясающую по полезности находку.

Это полнейший must have для PHP-программистов – если даже и не включать это в готовый код, то для отладки – бесценно. Я уже не знаю, что бы я делал без функции is_utf8, например. Поэтому качаем архив, распаковываем его себе и пользуемся, изучив и сохранив описание.

Этот сборник продвинутых функций для работы с UTF-8 текстом создан коллективным разумом форума программистов и усилиями Рината Мухтарова. Скачать архив.

Далее – список доступных функций и их описания:

1. censure. Функция определяет наличие мата (нецензурных, матерных слов) в тексте. Возвращает false, если мат не обнаружен, иначе обнаруженное матерное слово. Алгоритм достаточно надежен и быстр, в т.ч. на больших объемах данных. Метод обнаружения мата основывается на корнях и предлогах русского языка, а не на словаре, поэтому скорость очень высока.

2. cp1251_to_utf8_recursive. Функция для перекодировки данных произвольной структуры из кодировки cp1251 в кодировку UTF8.

3. cp1259_to_utf8. Конвертирует текст из кодировки cp1259 и cp1251 в кодировку UTF-8.

4. html_template. HTML-ориентированный шаблонизатор с автоматическим квотированим значений меток-заменителей.

5. html_words_highlight. “Подсветка” найденных слов для результатов поисковых систем.

6. hyphen_words. Расстановка “мягких” переносов в словах.

7. is_utf8. Возвращает true усли переданная строка – правильный UTF-8, иначе false.

8. php2js. Конвертирует данные PHP из scalar, array и hash в данные JS в scalar/array/hash.

9. strip_tags_smart. Более продвинутый аналог strip_tags() для корректного вырезания тегов из html кода. Возможности:

– корректно обрабатываются вхождения типа “a < b > c”.
– корректно обрабатывается “грязный” html, когда в значениях атрибутов тагов могут встречаться символы < >.
– корректно обрабатывается разбитый html.
– вырезаются комментарии, скрипты, стили, PHP, Perl, ASP код, MS Word теги.
– автоматически форматируется текст, если он содержит html код.
– защита от подделок типа: “<script>alert(‘hi’)script>”.

10. textarea_rows. Вычисляет высоту области редактирования текста (<textarea>) по значению и ширине.

11. ucs2_to_utf8. Преобразует строку из кодировки UCS-2 в UTF-8, без использования iconv.

12. utf8_autoconvert_request_charset. Перекодирует значения элементов массивов $_GET, $_POST, $_COOKIE, $_REQUEST, $_FILES из кодировки cp1251 в UTF-8, если необходимо. Побочным положительным эффектом функции является защита от XSS атаки с непечатаемыми символами на уязвимые PHP функции.

13. utf8_check. Пытается определить, находится ли строка в кдировке Unicode.

14. utf8_convert_case. Конвертирует регистр букв в строке в кодировке UTF-8.

15. utf8_escape. Перекодирует строковые объекты так, чтобы они читались везде.

16. utf8_html_entity_decode. Конвертирует все HTML-entities в символы UTF-8.

17. utf8_html_entity_encode. Конвертирует спецсимволы UTF-8 в HTML-entities.

18. utf8_simple_search_sql. Создает условия для простого поискового SQL запроса, основанного на LIKE и REGEXP.

19. utf8_str_limit. Обрезает текст в кодировке UTF-8 до заданной длины, причём последнее слово показывается целиком, а не обрывается на середине.

20. utf8_strlen. Расширенная функция strlen() для работы со строками в utf-8.

21. utf8_substr. Расширенная функция substr() для работы со строками в utf-8.

22. utf8_ucfirst. Преобразует первый символ строки в кодировке UTF-8 в верхний регистр.

23. utf8_ucwords. Преобразует в верхний регистр первый символ каждого слова в строке в кодировке UTF-8, остальные символы каждого слова преобразуются в нижний регистр.

24. utf8_unescape. Функция декодирует строку в формате %uxxxx в строку формата UTF-8.

25. utf8_unescape_recursive. Рекурсивный вариант utf8_unescape().

26. utf8_unescape_request. Корректирует глобальные массивы $_GET, $_POST, $_COOKIE, $_REQUEST, декодируя значения в юникоде, закодированные через функцию javascript escape() ~ “%uxxxx”.

Жилинский Владимир.



Организация общения с посетителями сайта: варианты.

10 комментариев

Организация общения с посетителями сайтаДовольно интересная тема, особенно важная для интернет-магазинов, сайтов турагенств и прочих оператор-ориентированных сервисов. Стандартный подход в рунете такой: в шапке сайта указывается телефон, в подвале – е-мейл, в лучшем случае есть ICQ или форма обратной связи.

Такой подход явно не располагает посетителей к контакту: я не люблю звонить непонятно куда по телефону (да и зачем, я же в сети), ICQ – это что-то личное, да и для контакта требуется слишком длинная цепочка действий, а по почте мы все знаем, что не дождёмся ответа скорее всего никогда.

На западе решением этой проблемы было озадачено несколько компаний, разработавших всё, что можно найти в Google по запросу “Live Chat Software“, то есть программы для мгновенной связи оператора с посетителем сайта. По некоторым данным, такой механизм в хорошей реализации может увеличить конверсию и, соответственно, продажи более чем на 80% (!). Это вполне логично – задать вопрос специалисту проще, чем лазать по каталогу и легче, чем звонить, искать кого-то в ICQ или ждать ответа по e-mail.

Отсюда логически следует жизненный вопрос: как это реализовать, желательно самостоятельно и бесплатно?

Подход первый. Грамотный.
Будем писать сервис под себя. Самый удобный, открытый и подходящий для этой цели стандарт, на мой взгляд – Jabber Jabber. Берём class.jabber.php class.jabber.php или немного его доработанный вариант PHP Jabber Client PHP Jabber Client и пишем всё, что нам нужно. Для любителей Python: xmpppy xmpppy.

Не нравится XMPP – можно рискнуть и заморочиться с ICQ, например на основе PHP-класса WebIcqPro WebIcqPro или даже Java-библиотеки Joscar Joscar. Я думаю, что ICQ следует использовать только в том случае, когда нет возможности использовать Jabber, так как этот протокол не блещет стабильностью, надёжностью и предсказуемостью. Да и возможность несложного создания Jabber2ICQ гейта даёт Jabber`у дополнительное преимущество.

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

1. Hab.la Hab.la. Весьма удобный сервис, основанный на Jabber. Легко настраивается, не вызывает конфликтов, легко интегрируется в любую страницу, позволяет использовать любой jabber-клиент на стороне оператора. Подробнее про хаблу можно почитать у Дикого Hab.la.

2. Google Talk chatback badge Google Talk chatback badge. Просто и со вкусом, если грамотно оформить, то вполне приемлемо. Но найден недостаток в реализации – сделано с использованием Flash (Google, ЗАЧЕМ?), что ограничивает в общении неанглоязчных пользователей не-windows. Я надеюсь, в Google исправят этот косяк.

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

  • Веб Мессенджер Веб Мессенджер
  • SiteHelper.NET SiteHelper.NET
  • GoTalk GoTalk
  • LiveContact LiveContact

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

Спонсор статьи: продвижение сайтов от StarDesign. Без комментариев.

Жилинский Владимир.



PHP: фильтр от XSS и SQL-инъекций.

49 комментариев

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

В PHP есть ряд специальных функций для работы со строками, применимых для этой цели. Вот они:

strip_tags() – вырезает теги HTML и PHP из строки.

htmlspecialchars() — конвертирует только специальные символы (‘&’, ‘”‘, ”’, ‘<‘ и ‘>’) в HTML сущности (‘&amp;’, ‘&quot;’…). Используется для фильтрации вводимых пользователем данных для защиты от XSS-атак.

htmlentities() – конвертирует все символы в строке (кроме букв) в мнемоники HTML. Используется для защиты от XSS, являясь более гибким аналогом htmlspecialchars.

stripslashes() – удаляет заэкранированные символы (после преобразования в сущности предыдущими функциями их незачем экранировать). Обычно используется в связке с проверочной функцией get_magic_quotes_gpc(), показывающей текущую установку конфигурации magic_quotes_gpc.

Эта конфигурация влияет на то, как будут обрабатываться специальные символы, содержащиеся в данных, передаваемых пользователем (массивы $_GET, $_POST, $_COOKIE). При magic_quotes_gpc = 1 эти спецсимволы (одиночные и двойные кавычки, обратный слэш, байт NULL) автоматически экранируются. При magic_quotes_gpc = 0 все данные передаются в таком виде, в каком их ввел пользователь. В последнем случае в целях безопасности требуется обрабатывать передаваемые данные.

mysql_real_escape_string – мнемонизирует специальные символы в строке для использования в операторе SQL с учётом текущего набора символов в кодировке соединения. Иными словами, функция превращает любую строку в правильную и безопасную для MySQL-запроса. Используется для очистки всех данных, передающихся в MySQL-запрос для защиты от SQL-инъекций.

На основе этих данных, можно собрать функцию для однозначной очистки непроверенных данных. Эта функция получает две переменные – строку с введёнными символами и булево значение для определения – требуется ли приведение к MySQL-запросу. Возвращает функция очищенную строку. Конечно, это не панацея, но функцию легко изменить под собственные нужды.

скачать PHP скриптInputClear.phps - фильтрация введённых пользователями данных.

Если кто-то обнаружит ошибки, или знает способ лучше – добро пожаловать в комментарии, мне очень интересно.

Жилинский Владимир.




© 2007-2010 Блог интернет-разработчика, автор — Zhilinsky.ru.
При использовании информации ссылка на источник обязательна.