вторник, декабря 20

Интернет-магазин

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

Витрина в состоянии "просит дизайна", там есть корзина, которая обновляется аяксом, каталог товаров, которые через AJAX добавляются в корзину. Страница оформления заказа умеет показывать точки самовывоза и само находит ближайший до вашего места пункт самовывоза через сервис геолокации, встроенные в современные браузеры. Если не находит через браузер, то обновляет через геолокацию Яндекса. В оформлении заказа оно показывает на карте пункты самовывоза. Все это естественно настраивается в админке и требует ключа Яндекс.Карт.

Админка позволяет настраивать все объекты, в том числе заводить страницы, которые оформляются с помощью разметки MediaWiki.
Бекэнд использует mongodb + MySQL.
Есть система почтовых уведомлений. Я по работе писал генераторы для почтовых уведомлений, и уже потом возникли мысли, как его надо было написать. В этом магазине я переосмыслил почтовые уведомления.

В магазине предусмотрена социальная авторизация через сервис Loginza, для которой тоже необходимо зарегистрироваться в этом сервисе и получить ключ.

Сам магазин устанавливается на Ubuntu и сделан в виде debian пакета, который можно скачать с сайта Народ.Яндекс. Он требует пакет mongodb10gen, который можно установить с сайта разработчика mongo. Я не смог использовать пакет, который идет в поставке с Ubuntu, потому что он не поддерживает UTF-8 без настройки. А разбираться с тонкой настройкой монго я не считаю нужным.

Mongo Db в нем используется в качестве эксперимента, в основе лежит все равно MySQL, в котором хранятся все критичные данные. В монго хранятся почтовые уведомления и тому подобное.

Яваскрипт и css сжаты. В качестве вебсервера требуется nginx. Если вы зальете на сервер дамп данных городов и стран из моего прошлого поста, то чудесным образом у вас заработает саджест при вводе страны и города вашего адреса на вашем языке, который передается в Accept-Language и в админке при создании пунктов доставки и самовывоза.

Я выкладываю эту версию без всяких ограничений. Мне стало трудно работать над ним, т.к. я не вижу вот прямо сейчас ни одного магазина, который я мог бы взять, сделать на основе этой разработки и дальше его вести. Я хочу его разрабатывать, получая или удовольствие, или деньги.
Удовольствие медленно заканчивается, потому что в одиночку им заниматься скучно. Есть приватный git репозиторий, в который я готов пустить разработчиков, или перенести его на гитхаб в публичный репозиторий, если от вас увижу какие-то отзывы, и подумаю "Ага, кому-то это нужно".

пятница, сентября 30

База городов и стран для mysql

Я сделал урезанную базу с информацией о городах и странах на разных языках.

Структура таблиц такая:
CREATE TABLE `geocoding_geoalternate` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`geoname_id` int(10) unsigned DEFAULT NULL,
`variant` varchar(200) NOT NULL,
`isolanguage` varchar(3) NOT NULL,
`preferred` tinyint(1) NOT NULL DEFAULT '0',
`short` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `geocoding_geoalternate_variant` (`variant`)
)
CREATE TABLE `geocoding_geomodel` (
`typ` smallint(5) unsigned NOT NULL,
`geonameid` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`population` int(10) unsigned NOT NULL DEFAULT '0',
`country_code` varchar(3) NOT NULL,
PRIMARY KEY (`geonameid`),
KEY `geocoding_geomodel_52094d6e` (`name`)
)

Таблица `geocoding_geoalternate` содержит варианты названия пункта на разных языках. Поле preferred означает что это - предпочитаемое родное название. Например, есть Россия и Российская Федерация, второе будет предпочитаемым, зато первое - коротким (short=1).

Она связана с `geocoding_geomodel` через поле geoname_id. В `geocoding_geomodel` содержится информация о населенном пункте . Тип - страна или населенный пункт, количество населения на 2011 год, код страны, например "RU" для России.
База это выжимка с geonames.org. Я сейчас работаю над django приложением которое бы могло ходить в geonames.org и синхронизировать местную базу с их базой, а это - сокращенный вариант (261 MB в распакованном виде), там нет большого количества ненужной для меня информации и нет населенных пунктов с численностью населения меньше 5000 человек.

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