Задача

На днях пришлось работать с Foursquare API и я сразу могу сказать что это не очень понятный и приятный процесс. Информация на странице для разработчиков странно структурирована, да еще и неполная. Моей задачей было получить последние 9 фотографий заведения и вывести их красиво на сайте. Решено было реализовать это на JavaScript дабы не нагружать сервер лишней работой.

Поиск решения

API того же Instagramm позволяет это сделать очень просто, и документация у них более полная. В случае Foursquare пришлось перечитать половину документации и тем на stackoverflow. Опытным путем выяснилось, что для начала нужно добавить свое “приложение” в кабинет Foursquare. Сделать это можно тут – https://foursquare.com/oauth. Далее нужно получить client_id и client_secret в настройках добавленного приложения:
foursquare
После чего формируем ссылку для запроса на получение фотографий места. Для этого сначала нужно узнать его идентификатор. Чтобы это сделать нужно найти место на сайте Foursqure и посмотреть на его URL. Например, у стадиона Camp Nou, что в Барселоне, ссылка https://ru.foursquare.com/v/camp-nou/507fe73fd63e93639fd2a84f, где 507fe73fd63e93639fd2a84f это его уникальный идентификатор. После этого можем проверить правильно ли подобрали свои данные перейдя по ссылке https://api.foursquare.com/v2/venues/VENUE_ID/photos?client_id=ID&client_secret=SECRET&v=20131016 вставив 507fe73fd63e93639fd2a84f на место VENUE_ID, а так же свои client_secret и client_id. Если все сделано правильно то в браузере появится ответ API в формате JSON. Далее начинается самое интересное…

Решение

В ответе у каждой фотографии есть такие параметры как prefix и suffix которые выглядят как начало и конец ссылки на фотографию(например https://irs3.4sqi.net/img/general/ и /11281014_KBEHG6IiXcRkqpPKsa129FFi7T1gW9O-obOKDKBQgyM.jpg). Но если перейти по ссылке https://irs3.4sqi.net/img/general/11281014_KBEHG6IiXcRkqpPKsa129FFi7T1gW9O-obOKDKBQgyM.jpg то получаем 500 ошибку без пояснений. В документации я ничего не нашел, что помогло бы мне решить эту проблему. Зато коллективный мозг на stackoverflow частично подсказал решение. Между prefix и suffix нужно добавить желаемый размер изображения и тогда мы получим фотографию! Причем Foursquare отдает любые размеры, еще и кропает фотографии! А если нужно получить оригинал изображения, то вместо размера надо указать “original”.

Примеры:

Исходная фотография
Тумба 150х150

GistBox – удобное веб-приложение для организации своих гистов(кусочков исходников) с гитхаба

FireBase logoНедавно наткнулся на FireBase – это абсолютно новый способ хранить данные и отдавать их пользователю. Если коротко, то FireBase это облачная база данных для real-time приложений. То есть, Ваши данные хранятся где-то в облаке, которое готово почти к любым нагрузкам. Ваши данные моментально обновляются на всех клиентах, которые в данный момет подключены к FireBase. Совершенно отпадает необходимость строить сложную систему с использованием веб-сокетов для обмена данными между сервером и клиентами в реальном времени. Вы просто подключаете JS файл на страницу и настраиваете события на изменения данных. Все – дальше FireBase будет самостоятельно следить за данными и отдавать их пользователям. Причем происходит это почти мгновенно! А еще с FireBase можно создавать веб-приложения которые вообще не используют сервер. Причем для небольших проектов использование FireBase совершенно бесплатно!

Возможности бесплатного аккаунта:
• 5 GB Data Transfer
• 50 Max Connections
• 100 MB Data Storage

Этого вполне хватит для простого сервиса. Тем более, нет смысла хранить большое количество данных в FireBase. В облаке стоить хранить только те данные, которые обновляются в реальном времени прямо сейчас. Например – текстовая трансляция текущего футбольного матча должна храниться в FireBase, а завершенные матчи можно переносить в другую БД, например RethinkDB.

Так же у FireBase есть библиотеки для популярных языков программирования – Python, JS, Java и даже REST API для всех остальных. Есть даже расширения для встраивания фуникцонала в iOS и Android приложения.

Я уже успел использовать FireBase в одном из проектов для уведомления менеджеров и администраторов интернет-магазина о различных событиях, например о поступлении нового заказа или нового комментария используя HTML5 Notifications API. И я готов даже поделиться рабочим кодом:
Для начала необходимо скачать и подключить на страницу jQuery.notifications Plugin
https://github.com/monkeymonk/jquery.notifications.js
После этого подключаем FireBase
<script type='text/javascript' src='https://cdn.firebase.com/v0/firebase.js'></script>
А далее используем такой код:

И все! Теперь при обновлении данных все клиенты, которые разрешили посылать уведомления будут оповещены сообщениями о новых событиях.

nitrous.io – бесплатная среда для разработки Django/RoR/NodeJS/Go приложений с бесплатным сервером для тестирования и web-IDE для моментального старта!

Начать нужно с того, что RethinkDB это еще одна документно-ориентированная база данных. Это значит, что оснонвыми ее конкурентами должны быть такие монстры как MongoDB. Однако, как оказалось на практике, это не совсем так.

RethinkDBКогда я первый раз увидел упоминание об этой базе данных я подумал что это очередная разработка кучки студентов, которая скоро загнется. Изучив вопрос глубже и пообщавшись с ее разработчиками я узнал что проекту уже несколько лет и он довольно активно развивается. Разработчики уделяют очень много внимания легкости настройки и использования. Файл настроек БД содержит не больше 20 параметров, из которых обязательных к настройке всего несколько штук, а критичных вообще ни одного. Такие вещи, как шардинг данных и создание ключей в таблицах, настраиваются в пару кликов с помощью удобного веб-интерфейса. О веб интерфейсе хочется говорить много хорошего. Он сделан очень качественно и подтверждает тот факт, что эта БД хорошо подходит для быстрого прототипирования. Да и вообще, я согласен с разработчиками RethinkDB, которые говорят что базы типа MongoDB слишком ориентированы на разработчиков, а на базы типа Cassandra слишком зациклены на оптимизацию работы с данными. Чаще всего все это не нужно, если Вы хотите вынести какой-то кусочек проекта в быструю документно-ориентированную БД. Я уже успел запустить в работу базу с простой схемой данных для разгрузки MySQL. Я просто продублировал часть данных MySQL в RethinkDB и перенес на нее часть запросов. Это заметно ускорило не только вынесенную отдельно часть, но и сильно разгрузило MySQL. Все вышесказанное совсем не означает, что эта БД подходит только в роли игрушки! Это реально мощный инструмент, чего только стоит возможность join’a данных в запросе на разные шарды!

performance

Сообщество в Google Groups отвечает почти моментально, причем большинство ответов исходит от самих разработчиков!

А теперь о плохом – на данный момент язык запросов очень беден и подходит только для простых выборок. Разработчики обещают изменить ситуацию к лучшему, и на момент написания статьи уже вышла версия 1.6, в которой, кроме многочисленных улучшений, упростили некоторые запросы. К версии 1.7 обещают намного основательнее перейти к доработке языка запросов.

Скачать последнюю версию – http://www.rethinkdb.com/docs/install/
Сравнение с MongoDB – http://www.rethinkdb.com/docs/comparisons/mongodb/
Попробовать RethinkDB в действии – http://tryrethink.info/