Новогодние праздники прошли, у многих некоторых из нас наступили долгожданные новогодние дни отдыха. Пользуясь вашим свободным временем, хочу рассказать о проекте, которым я занимался последний месяц.
MapChat — это сервис для общения людей, в котором комнаты с сообщениями отображаются как точки на карте. Вы можете создавать новые точки, дописывать сообщения в уже созданные, делиться видео/аудио/фотографиями с друзьями где угодно!
обсуждение прошедших событий, встреч, концертов;
MapChat сделан используя CouchApp (J Chris Anderson, спасибо тебе!) и GeoCouch (спасибо CouchOne за предоставление бесплатного хостинга и Volker Mische за реализацию) и полностью живет в CouchDB без использования каких-либо других back-end'ов. Такая структура приложения позволяет запускать его локально, пользоваться им без всяческих задержек и вне зависимости от подключения к сети интернет. В данный момент ведется разработка Android приложения (используя CouchDB для Android от CouchOne и PhoneGap). Так же используется сторонний сервис embed.ly для автоматического включения интерактивных элементов в общение пользователей (youtube, twitpic, soundcloud и т.п.). Embed.ly предоставляет JSONP API, но так как во время создания сайта, я старался следовать максимально жесткой политики безопасности — использование этого сервиса потребовало разработки JSONP и Embed Sandboxing методики.
Как правило, при использовании стороннего контента (страниц/скриптов/embed элементов) разработчики сайтов прибегают к технике cookie-less domains, вставляя на страницу iframe указывающие на другой домен (конечно же, принадлежащий этому сайту). Таким образом содержимое iframe будет лишено доступа к главному окну и cookie сайта.
К сожалению, так как я разрабатывал распределенное приложение — реализация cookie-less domain была невозможна. (Каждый пользователь может запустить сайт у себя локально, а cookie-less domain является привязкой к какому-то определенному доменному имени). Поэтому пришлось разработать следующую нехитрую технику:
Получившийся iframe не будет иметь доступа к родительскому окну и не сможет прочитать/записать cookie для главного домена.
JSONP Sandboxing реализуется практически также, за исключением того, что используется postMessage метод (который опять таки доступен в большинстве браузеров). В Iframe вставляется javascript callback функция, которая вызовет postMessage, и тэг script указывающий на jsonp url с callback равным имени этой функции. А дальше все просто, родительское окно добавляет этот iframe и устанавливает listener на событие message. Полученное сообщение и есть результат JSONP запроса.
В завершении статьи хочу напомнить ссылку сайта. (Пользователям Google Chrome я рекомендую поставить приложение из Webstore).
P.S.
Желающие поучаствовать в разработке или помочь проекту могут написать мне в личку или послать письмо на fedor@indutny.com
MapChat — это сервис для общения людей, в котором комнаты с сообщениями отображаются как точки на карте. Вы можете создавать новые точки, дописывать сообщения в уже созданные, делиться видео/аудио/фотографиями с друзьями где угодно!
Возможности:
обсуждение прошедших событий, встреч, концертов;
- изучение иностранных языков посредством разговора с коренным населением;
- гео-таргетированные игры, головоломки и квесты;
- знакомства, поиск друзей.
Технологии:
MapChat сделан используя CouchApp (J Chris Anderson, спасибо тебе!) и GeoCouch (спасибо CouchOne за предоставление бесплатного хостинга и Volker Mische за реализацию) и полностью живет в CouchDB без использования каких-либо других back-end'ов. Такая структура приложения позволяет запускать его локально, пользоваться им без всяческих задержек и вне зависимости от подключения к сети интернет. В данный момент ведется разработка Android приложения (используя CouchDB для Android от CouchOne и PhoneGap). Так же используется сторонний сервис embed.ly для автоматического включения интерактивных элементов в общение пользователей (youtube, twitpic, soundcloud и т.п.). Embed.ly предоставляет JSONP API, но так как во время создания сайта, я старался следовать максимально жесткой политики безопасности — использование этого сервиса потребовало разработки JSONP и Embed Sandboxing методики.
JSONP и EMBED Sandboxing.
Как правило, при использовании стороннего контента (страниц/скриптов/embed элементов) разработчики сайтов прибегают к технике cookie-less domains, вставляя на страницу iframe указывающие на другой домен (конечно же, принадлежащий этому сайту). Таким образом содержимое iframe будет лишено доступа к главному окну и cookie сайта.
К сожалению, так как я разрабатывал распределенное приложение — реализация cookie-less domain была невозможна. (Каждый пользователь может запустить сайт у себя локально, а cookie-less domain является привязкой к какому-то определенному доменному имени). Поэтому пришлось разработать следующую нехитрую технику:
- Возьмем html-контент (foreign_html_content) со стороннего сайта, который мы хотим отобразить.
- Сгенерируем url следующего вида
"data:text/html;charset=utf-8;plain," + foreign_html_content
. Как видно, этот url есть ничто иное, как data url реализованый во всех современных браузерах - Вставляем в страницу iframe с src равным этому url'у.
- Все готово!
Получившийся iframe не будет иметь доступа к родительскому окну и не сможет прочитать/записать cookie для главного домена.
JSONP Sandboxing реализуется практически также, за исключением того, что используется postMessage метод (который опять таки доступен в большинстве браузеров). В Iframe вставляется javascript callback функция, которая вызовет postMessage, и тэг script указывающий на jsonp url с callback равным имени этой функции. А дальше все просто, родительское окно добавляет этот iframe и устанавливает listener на событие message. Полученное сообщение и есть результат JSONP запроса.
В завершении статьи хочу напомнить ссылку сайта. (Пользователям Google Chrome я рекомендую поставить приложение из Webstore).
P.S.
Желающие поучаствовать в разработке или помочь проекту могут написать мне в личку или послать письмо на fedor@indutny.com