Страницы

Sunday, August 31, 2008

Ajax for developers

Полезная коллекция Ajax компонент для разработчиков

JSR 289

JSR 289 (SIP servlet 1.1) готова. Reference Implementation может быть загружена по этой ссылке.
P.S. а все-таки пока еще не привычно читать инструкцию по установке для Oracle Weblogic Server.

Saturday, August 30, 2008

Главбух на карте

Еще один пример использования MetroMap - работа для бухгалтеров/аудиторов по данным HeadHunter.ru

Friday, August 29, 2008

Универсам

Google подтвердил, что аналог Apple Store для iPhone будет реализован и для платформы Android. Начнут с бесплатных приложений. Пользователь при загрузке будет видеть, по крайней мере, какие ресурсы на телефоне затрагивает приложение:



Что там может быть - можно понять здесь. Это финалисты и победители Android Development Challenge.

Золото превращается ...

Никак не удавалось увидеть нормальную работу Golden Wifi. И не удастся - развитие сети в Москве решено прекратить

QR коды на карте

Продолжая серию обновлений в наших картографических мэшапах (Большая карта, Мобильная карта) - обновился и мэшап QR-map. Теперь стала удобней навигация - можно прямо найти нужное место.
Идея простая. Вы находите нужное место на карте (маркер помечает середину карты) и создаете QR-код для данного участка карты (кликните на иконке с конвертом). Полученная ссылка как раз и ведет к QR-коду.
Вот пример кода по полученной тестовой ссылке (http://tinyurl.com/6fkdf9):


Далее этот код можно распечатать или каким-либо иным образом предъявить мобильным пользователям. Код можно сканировать с помошью мобильного телефона и получить после автоматического распознавания карту:



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

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

Aptana Jaxer

Мы описывали ранее Open Source Ajax сервер - Jaxer. А вот и руководство от IBM по практическому программированию Jaxer. Вот модель, предлагаемая Jaxer:



Соответственно, код на сервере и клиенте может быть один и тот же код (JavaScript):

<script type="text/javascript" runat="both">
/*
* Easy access to a named element in the DOM
*/
function $(id)
{
return document.getElementById(id);
}

/*
*
*/
function addTaskToUI(description, id)
{
var newId = id || Math.ceil(1000000000 * Math.random());
var div = document.createElement("div");
div.id = "task_" + newId;
div.className = "task";

var checkbox = document.createElement("input");
checkbox.setAttribute("type", "checkbox");
checkbox.setAttribute("title", "done");
checkbox.setAttribute("id", "checkbox_" + newId);
Jaxer.setEvent(checkbox, "onclick", "completeTask(" + newId + ")");
div.appendChild(checkbox);

var input = document.createElement("input");
input.setAttribute("type", "text");
input.setAttribute("size", "60");
input.setAttribute("title", "description");
input.setAttribute("id", "input_" + newId);
input.value = description;
Jaxer.setEvent(input, "onchange",
"saveTaskInDB(" + newId + ", this.value)");

div.appendChild(input);

$("tasks").insertBefore(div, $("tasks").firstChild);

if (!Jaxer.isOnServer)
{
saveTaskInDB(newId, description);
}
}
</script>

в одной части добавляется новый элемент (элементы) для ввода, в другой - еще и сохраняется в базе. А значение атрибута runat как раз и определяет, где исполнять код.

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

<script type="text/javascript" runat="server">

/*
* The SQL to create the database table we'll use to store the tasks
*/
var sql = "CREATE TABLE IF NOT EXISTS tasks " +
"( id INTEGER NOT NULL" +
", description VARCHAR(255)" +
", created DATETIME NOT NULL" +
")";

// Execute the sql statement against the default Jaxer database
Jaxer.DB.execute(sql);
</script>

Маленькая шара

Мэшап Мобильные карты позволяет теперь поделиться ссылкой на созданную карту через Twitter и/или Facebook. Реализация - здесь

Wednesday, August 27, 2008

Google алфавит

Аз, буки и веди, практически. В честь грядущего дня Знаний - алфавит от Google. Самые популярные слова русского языка по мнению Google Suggest:

А - аэрофлот
Б - бдж
В - в контакте
Г - грузия
Д - домодедово
Е - евросеть
Ё - ежик в тумане
Ж - жди меня
З - знакомства
И - игри
Й - йога
К - карта киева
Л - летище софия
М - мтс
Н - новости
О - одноклассники
П - погода
Р - работа
С - сонник
Т - техномаркет
У - унсс
Ф - фильмы онлайн
Х - хороскоп (!!!)
Ц - цхинвали
Ч - чез
Ш - шереметьево
Щ - щори
Ъ - ъпсурт
Ы - ыандекс (!!!)
Ь - ьщтун
Э - эхо москвы
Ю - южной осетии
Я - яндекс

найти хороскоп на ыандексе ...

Аналогичный список для английского можно посмотреть здесь.

Заголовки


Интересная коллекция бесплатных заголовков для сайта/блога. Ну а сам дизайн для сайта можно подобрать здесь: Open Source Web Design

Большая шара

Новости одной строкой. Мэшап BigMap (полноэкранная Google-карта) поддерживает теперь Twitter и Facebook.

Tuesday, August 26, 2008

Разовая ссылка

Сервис Secure Messages теперь позволяет посылать одноразовые ссылки через Twitter и Facebook. Попробовать можно здесь.

Почему здесь?

Интересные замечания о LBS приложениях. Действительно, важным моментом (именно для сервисов) является не просто определение координат пользователя (где он), а знание контекста (почему он здесь). Предлагать ведь что-то по месту можно (эффективно) только при знании контекста. Мы писали о схожих вещах здесь (по поводу рекламы в микроблоге)

Гео-поиск

Google добавил работу с географическими координатами к своему Аjax API. Мы уже писали об этом. Это простой способ получить информацию о географических координатах пользователя (пара широта/долгота для IP адреса). И получить эту информацию непосредственно в JavaScript, без использования собственного сервера. Вот простой пример, как это выглядит на практике: Гео-поиск. Задействуется поиск от Google, сообразно тому, где находится пользователь (его IP адрес, конечно). Попробуйте. Заодно можно будет проверить насколько точно Google определяет адрес.

P.S. а серверные комоненты для решения подобной задачи можно посмотреть, например, здесь. В мэшапе Geo trace, который визуализирует результаты команды traceroute, использовались серверные компоненты.

Monday, August 25, 2008

Как это делают в Одессе

В Польше нанимают (за деньги) актеров, изображать очереди за iPhone. Интересно, как это будет устроено в России ...

Тестирование производительности

Мы публиковали в блоге уже достаточно много материалов по производительности веб-приложений. А вот полезный практический сервис:

http://pagetest.patrickmeenan.com:8080/

Вы указываете URL для своего сайта и сервис прводит тестирование с выдачей рекомендаций в духе Yslow. Вот, например, картина загрузки для linkstore.ru (кликабельно):

Sunday, August 24, 2008

CSS reload

Частая проблема в процессе веб разработки - стили (CSS) на сайте поменялись, а в браузере, естественно, старая версия. Можно, конечно, перегрузить страницу, но что если не хочется после этого снова повторять какой-то ввод данных и т.п.? Вот полезный bookmarklet, который позволяет обновить CSS файлы в браузере без полной перегрузки страницы:

CSS reload

Как обычно - просто сохраните эту ссылку у себя в закладках. Другие публикации с bookmarklet см. здесь

Saturday, August 23, 2008

Apache + Tomcat

Пошаговое руководство по использованию Apache как load balancing для Tomcat 5.5

Где я

Google Ajax API теперь поддерживает гео-кодинг на основе IP адреса. После загрузки API теперь доступен объект google.loader.ClientLocation, со следующими атрибутами:

latitude
longitude
address.city
address.country (наименование страны)
address.country_code (код страны по ISO 3166-1)
address.region

(см. здесь)

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

Google Maps API

Что-то не все ладно в королевстве. Не успели отойти от проблем с blogger.com, как в Google Maps API поломалась функция map.enableGoogleBar().
P.S. от использования пока отказались, функционирование редактора мэшапов MetroMap восстановлено. Последняя версия - здесь.

JSR-281

Java API для IMS: JSR-281. Там же доступна Reference Implementation от Ericsson.

Friday, August 22, 2008

QR - коды в картографии

Примеры использования QR-кодов в картографии. Один из описываемых продуктов - это наш сервис QR map

Еще о визуализации

Мы уже описывали некоторые интересные средства визуализации данных. А вот и еще одна подборка

Репликации и кэширование данных

Интересный материал по поддержке репликаций в Facebook. 2 териториально разнесенных дата-центра (на разных побережьях США). Для MySQL, соответственно, схема master-slave. Задержка в передаче данных при репликации может достигать 20 секунд. Если, например, обновили мастер-базу и послали реплику в другую систему, то кэш на удаленной стороне (используется memcached) все равно будет содержать старое значение. Для решения этой проблемы расширили реализацию SQL. По сути - добавили триггер, который при получении обновления еще и удаляет старое значение из своего кэша. Так, чтобы при следующем обращении оно уже запросилось бы из базы. Вот так, например, выглядит модифицированный SQL запрос (изменение имени в профайле):

REPLACE INTO profile ('first_name') VALUES ('Monkey') WHERE 'user_id'='jsobel' MEMCACHE_DIRTY 'jsobel:first_name'

MEMCACHE_DIRTY - и есть добавка к синтаксису

На самом деле это даже более общий вопрос. Он, например, и в J2EE сообществах периодически поднимался. Кэш уровня приложения - он точно должен быть самостоятельным, или являться частью БД? Те же старые entity beans, применительно к EJB? Ведь то, что делает Facebook - это обеспечение совместной работы кэша и базы данных. Так может возможность их совместной работы должна быть изначально?

Thursday, August 21, 2008

Мобильный хот-спот

Интересный хак - за 15 евро можно превратить свой телефон с WiFi (S60, Windows Mobile) в точку доступа WiFi

Одноразовые сообщения

"Желтое" дело, начатое сервисами Аннотированные ссылки и Yellow Paper продолжается. Новый сервис Одноразовые сообщения позволяет (в соответствии с названием) обмениваться сообщениями с ограниченным временем жизни. Вы набираете текст и получаете ссылку для публикации. Ссылкой можно поделиться с получателями (email, twitter). При этом получатель ссылки сможет прочесть ее содержимое только один раз. После первого обращения она автоматически удаляется. После прочтения - сжечь, иными словами. Один из примеров использования - обмен приватными сообщениями через публичную среду (например, через публичную ленту в twitter). Детали - здесь

Развиртуализация?

VMware рассматривает вопрос об обретении собственной операционной системы и, возможно, купит Red Hat. Кстати, если это случится, то значимость (использование) JBoss явно вырастет.

За Машенек

Новая версия MySQL 6.0.6 поддерживает и новую storage engine - Maria. Эта система введена как устойчивая к сбоям альтернатива MyISAM. Расширенный журнал теперь поддерживает и такие операции как CREATE, DROP, RENAME, TRUNCATE.

Wednesday, August 20, 2008

Еще о bookmarklets

Мы уже писали о bookmarklet в связи с сервисом Click to Mobile. Bookmarklet - это небольшое приложение на JavaScript, которое может быть сохранено непосредственно в закладках пользовательского браузера. Смысл состоит в том, что сохранив такое приложение у себя в закладках, его можно будет использовать далее для какой-либо обработки текущей страницы в браузере. В сервисе Click to Mobile обработка заключалась в сохранении текущей страницы.

А вот новая коллекция полезных скриптов:

Google Translate - транслирует сайт на английский язык
Запретить Style Sheet - запрещает CSS на сайте. Можно посмотреть, как выглядит сайт в "голом" виде.

Как и с любым другим букмарклетом - для IE кликните правой кнопкой мыши на линке и выберите Add to Favorites. Для Firefox по правой кнопке мыши выберите Bookmark This Link.

10 ноября

Первый Android телефон от HTC одобрен заокеанским МинСвязи. Дата выпуска - 10 ноября. Есть уже и картинки (видео), список приложений и цены.

P.S. а 11 ноября в 1918 году окончилась Первая Мировая Война. Германия капитулировала.

Tuesday, August 19, 2008

Android SDK 0.9

Вышел новый релиз Android SDK. Размер кода - 8 миллионов строк. Еще не финальный релиз, но согласно опубликованному родмапу, финальная версия и сам телефон должны быть выпущены в 4-м квартале 2008 года. Что появилось нового - пока изучаем, но есть и потери: удалены GTalkService и Bluetooth API. Последнее решение особенно интересно - почему?

Маленькие хитрости Twitter

Как выяснилось, в Twitter можно задать команду изменения статуса (постинга нового сообщения) непосредственно в параметрах URL. Выглядит это так:

twitter.com/home?status=your_message

Например:

I am reading Abava blog

Что лучше

Очередной список "дорогих" слов для Google Adsense. Help Desk и Search Engine Marketing (стоят больше 20 долларов) лучше, чем Haircut и Online Degree (по доллару) :-)
Но в целом, IT терминология явно не в фаворе.

Monday, August 18, 2008

Обмен файлами

Простая система обмена файлами fwup. Никакой регистрации, что главное :) Просто загружаете файл и получаете ссылку на него. Кстати, реализация подобного сервиса на JSP - это всего лишь один пользовательский таг из Coldtags suite коллекции - Upload taglib

Кому война ...

Война и Web 2.0 ресурсы:

Видео на YouTube, посвященное событиям в Осетии
Фотографии на Flickr - Georgia war

Кэширование в JSP

Один интересный способ использования кэша в JSP. Компонента (taglib) Timer tag позволяет выполнять указанный фрагмент JSP кода не чаще чем один раз в течение заданного интервала. Например, запрашивать данные из БД не чаще, чем один раз в 60 секунд и т.д. Слова "не чаще" относятся, с очевидностью, к тому факту, что конкретный JSP файл в веб-приложении будет выполняться так, как того требует логика приложения, что зависит от пользователя. Так вот - помимо собственно кэширования эту компоненту можно использовать для программирования работы с публичными API, которые предоставляются Web 2.0 приложениями. Многие из них накладывают ограничения на использование. Например, Twitter разрешает 70 запросов в час, Google geocode также накладывает ограничения на частоту использования и т.д. Можно просто "обернуть" вызовы таких API с помощью Timer tag. Например, обращение к Twitter не чаще, чем 1 раз в 60 секунд:

<t:timer interval="60">
    здесь код, работающий с Twitter API
</t:timer>

Sunday, August 17, 2008

Еще о REST

Хорошая презентация по построению сервисов на базе REST

Отдам даром

ЖЖ сообщество Отдам Даром - на карте Google Maps. Еще одно использование MetroMap.

Saturday, August 16, 2008

Все о PDF

Полезная коллекция бесплатных инструментов для работы с PDF

Friday, August 15, 2008

IM национальность

Интересная статистика - разделение популярности IM по национальным признакам. Русско-германское ICQ получается. Отсюда

Thursday, August 14, 2008

Не идет

Twitter приостановил обновления по SMS в Европе. Причина естественна - дорого получается. Но удобство использования direct messages сильно снизилось.

Image info

Мы уже описывали полезные приложения, запущенные на основе Google Apps Engine (см. например, smtp2web). А вот еще одно - IMG 2 JSON. Позволяет выделять мета-данные из картинок. Можно, например, получить EXIF секцию, содержащую информацию о камере, месте съемки (очень актуально, в связи с разными информационными войнами) и т.д. Данные, как следует из названия, возвращаются в формате JSON. Соответственно, не составило труда запустить простой мэшап, который позволяет исследовать картинки в онлайне - Image info. Просто скопируйте в форму URL с картинкой и получите содержащиеся там мета-данные. Детали - здесь.

Wednesday, August 13, 2008

Аренда в Москве

Еще один пример использования редактора мэшапов MetroMap:

Аренда квартир в Москве

источник данных - сайт balog.ru

Tuesday, August 12, 2008

Коммерческая недвижимость

И еще один пример использования редактора мэшапов MetroMap:

Коммерческая недвижимость в Москве

источник данных - сайт AIP Realty

Java PHP

Quercus - 100% реализация PHP на Java. Тем, кто давно работает с Java, производитель продукта хорошо известен - это Caucho. Компания, подарившая миру Resin :-)

iPhone-изация

Мы уже описывали простой трюк, который позволяет быстро построить мобильную версию сайта. Там используется Google reader и RSS фид для сайта. Кстати, адрес фида(если он есть) можно ведь получать и программно - просто разобрав заголовок страницы сайта. А вот еще интересный подход, ориентированный на iPhone.
Schmap - позволяет быстро и просто создавать мобильные визитки существующих сайтов для iPhone. Здесь вместо сайта предлагается показывать мобильным пользователям карту и контактную информацию. Все это очень просто интегрируется с существующим сайтом (фрагмент кода на JavaScript)

Monday, August 11, 2008

Sunday, August 10, 2008

online сервисы

Blogger.com испытал, возможно, один из худших своих периодов. В какой-то момент времени сломалась даже конференция в google groups, куда пользователи безостановочно помещали сообщения о не работающих блогах. Честно говоря, поддержка в Google мало отличается от какой-либо другой. Разве что пользователей не обзывали, а так - никакой информации не было: чинят что-то или нет, когда что-либо можно ожидать и т.п. Кстати, судя по сообщаниям в группе, совсем все еще не кончилось. Перерывы в сервисе были по 72 часа и больше. Вот так они выглядят online приложения. А если это торговая система и 72 часа без продаж ...

Friday, August 08, 2008

И ты Брут ...

Blogger.com поломался. Старые сообщения вдруг стали недоступны по прямым ссылкам. Поэтому пришлось продублировать Google Maps Mania - 10. Что-то не так в Google ...

Google Maps Mania - 10

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

Информационные системы:

Авто-услуги
Агентство недвижимости Спб
Афиша
Все аптеки
Все банкоматы.ru
Где этот дом
Донецк
Зеленоград

Карта кофемана
Карта цен на квартиры в Москве
Карта рыбака
Картакадабра
Квартиры в Москве
Квартиры в Пензе
Квартиры в Питере
Кинотеатры в Москве

Маршруты в Москве
МАКС 2007
Местная погода
Мурманск

Население и рекреационные ресурсы Ставропольского края *
Недвижимость на карте
Новостройки в Сибири
Окрестности Екатеринбурга
Отели Египта
Омская область на карте

Пермь
Пермь на карте

пос. Правдинский
Пушкино

Погода на карте
Посуточная аренда квартир

Путешествия
Путешествия с Google Maps
Путешествия и карты
Путешествия на карте
4 туриста
Туристические карты
Туристические блоги

Роддома Москвы и Санкт-Петербурга
Рестораны на карте Петербурга *
Сеть распространения печатной продукции
Сноуборд

Храмы России
Православная архитектура - каталог

Cosmopolitan шоппинг
Фото-биеннале
Футбольные поля
Live Events
National Geographic Traveler

User generated content (geo tagging):

Geo links
Geo SMS

GPS треки
GPS Club
View and organize geographical data
WikiMapia
WiFi навигация

Инструменты:

Большая карта (Big map)
Geo traceroute
Google Msk TV
Metro map
Мобильные карты
Maps2lj - публикация карт в ЖЖ
Технические аспекты
Custom geo tagging
QR-коды для карт *

Социальные сети:

Вокруг меня
За баранкой
Мир Тесен
Отдыхали.ru
Соседи-онлайн

Гаджеты и карты:

Атлас Москвы
Вакансии программистов (работа.ru) *
Ветеринарные клиники в Москве
Видеокамеры ГАИ на карте Google Maps
Видеокамеры ГАИ
Веб-камеры в России
Веб-камеры в Москве

ЖЖ комьюнити о квартирах (ЖЖ сообщество Zhilploshchad)
Сдам, сниму квартиру,комнату (ЖЖ Msk_kvartira)
Сдам, сниму, куплю, продам квартиру,комнату (ЖЖ сообщество Kvartira_msk)
Ищу соседей (ЖЖ сообщество msk_neighbors)
ЖЖ сообщество ru_metro *

Цены на жилье
Маршруты Москвы (гаджет)
Москва, район Аэропорт
Мото-сайт: помощь в дороге
Новые рестораны
Поджоги машин в Москве
Посадочные модули на Луне
Посадочные модули на Марсе
Походы по Ладоге на ялах
Публичные туалеты в Москве
Точечная застройка в Москве
Штрафные автостоянки в Москве

Черный список бензоколонок

Львы Петербурга *
Совы и Девы в Спб

Кого-то пропустили? Что-то новое? Пишите, список будем обновлять.

digg toolbar

Digg toolbar для FireFox теперь полность Open Source продукт. Опубликованный код есть хороший источник, между прочим, для изучения того, как программировать тулбары в FireFox.

Thursday, August 07, 2008

Стенгазета - 2 07.08.2008

linkstore.ru is up and running. Равно, как и все расположенные там сервисы. Действительно, все стало побыстрее.

В помощь Java программисту

Sun собрал Wiki с примерами исходных кодов для различных API в Java. Полезный ресурс получился

Стенгазета 07.08.08

Хостер проводит срочные работы, связанные с заменой аппаратуры. В ближайшие час-два linkstore.ru (и связанные приложения) будут недоступны.

Мобильные карты

Обновления в проекте Mobile maps maker. Выберите фрагмент карты и получите ссылку на него в виде статической картинки (в этом вся идея - итоговая ссылка есть обычный .gif файл). А такая статическая картинка может быть просмотрена на любом мобильном телефоне. Так можно карты для мобильных пользователей распространять, например. См. детали в мэшапе Мобильные карты.

Wednesday, August 06, 2008

OSCON

О'Рейли публикует все презентации докладов с последней конференции OSCON. Интересные и полезные материалы, описывающие современные Open Source проекты

Tuesday, August 05, 2008

Большая карта

Очередные обновления в мэшапе Большая карта. Теперь можно искать адреса непосредственно на полноэкранной карте.

Monday, August 04, 2008

smtp2web

Интересный сервис, который можно использовать в собственных приложениях - smtp2web. Он позволяет перевести принятый email в HTTP POST запрос. Можно зарегистрировать свой адрес в домене smtp2web.com и все принятые на этот адрес сообщения будут передаваться по указанный URL. Это может оказаться проще, чем реализовывать почтовый мониторинг в своем приложении. А если хочется, чтобы пользователи присылали почту на адрес в собственном домене, то можно завести такой адрес и поставить forward на адрес в smtp2web. И уже оттуда получать HTTP POST с письмом.
А сделан сервис - на Google Apps Engine.

OpenRemote

Очень интересный Open Source проект - OpenRemote. Цель - открытая среда для управления устройствами в умных домах. За этим проектом стоят Mark Fleury (JBoss) и Mark Spencer (Astersik, Digium). В итоге проекта должен получиться сервер с открытым кодом (Java middleware внутри - JBoss конечно), который будет использоваться для управления домашними устройствами. Система должна получиться независимой от конкретных аппаратных решений и поддерживать различные протоколы (X10, KNX и т.д.)
Один из полезных подпроектов, например, база кодов управления для различных домашних устройств

Sunday, August 03, 2008

+1

Еще одна платформа для микро-блоггинга с открытым кодом: Jisko. Интересно, что есть и мобильная версия и открытый API, очень схожий с API Twitter. Другая платформа с открытым кодом - identi.ca

Saturday, August 02, 2008

Кэширование в Facebook

Подборка материалов по кэшированию данных в Facebook. Интересно разделение уровней кэширования. Для кэширования общей информации используется APC. При этом специфичные пользовательские данные так не кэшируются, поскольку запросы от одного пользователя могут обслуживаться разными серверами. Все user-specific кэшируется с помощью memcached.

Friday, August 01, 2008

По-midori

Микрософт планирует, как переводить пользователей Windows на свою новую ОС - Midori

Еще о мобильных сайтах

В развитие предыдущего постинга о средствах разработки. Есть один простой трюк, который позволяет создать мобильную версию блога (сайта) используя Google Reader. А именно - просто использовать RSS feed своего блога (сайта) как параметр для Google Reader.
Просто ссылка:

http://www.google.com/reader/m/view/feed/ваш_RSS

Например, вот мобильные версии для данного блога, ЖЖ abava и сайта gazeta.ru:

Abava blog
ЖЖ abava
Gazeta.ru

Мобильный портал http://m.linkstore.ru использует эту технику.

P.S. а ссылки произвольной длины легко скопировать на свой телефон с помощью сервисов Мобильные страницы, QR code maker и Click to Mobile