вівторок, 21 жовтня 2014 р.

Проблема: transceiver session with oserl

https://github.com/iamaleksey/oserl/issues/1

Год назад я написал SMPP-клиента используя библиотеку oserl для моего проекта SMS-рассылок. Тестировал в разных позициях долго и качественно. Но как только дошло до реальных дел, я поймал ошибку. Она оказалась достаточно глубоко зарыта не только в коде oserl, но и в архитектуре.

Суть проблемы в том, что на больших нагрузках в пределах сессии transceiver возникает lock, потому что параллельно вызываются две синхронных функции, что не есть правильно. В качестве временного решения можно обойти ошибку вызвав одну функцию как асинхронную, например обработку deliver_sm, что действительно может быть вполне асинхронным. В деталях я еще буду разбираться, но следующую версию SMPP-клиента надо будет переписать используя альтернативную библиотеку https://github.com/essiene/smpp34.

Спасибо этой ошибке за кардинальное трехнедельное разбирательство в OTP.

неділя, 12 жовтня 2014 р.

Модифицируем AnyEvent::PacketReader

После продолжительных поисков ошибки в Erlang SMPP клиенте, который сам же и написал на основе oserl, ошибка нашлась в свеженаписанном сервере на основе AnyEvent::PacketReader.
Даже не ошибка. Скорее это фича, но меня она не устроила.

Итак, PacketReader замечательно работает, когда надо отвечать на входящие запросы. Но протокол SMPP подразумевает и исходящие запросы в сторону подключившегося клиента тоже.

Что я только не перепробовал. И timer подключал, и пытался генерировать события на основе входящих пакетов. Не получилось ни разу. Код работал, но в определенное время зависал, потому что сокет был намертво заблокирован.

Приходиться доставать рашпиль. our $debug = 1 внутри AnyEvent::PacketReader и очень быстро находится следующий код:
<code>
sub resume {
    my $data = ${shift()};
    if (defined(my $fh = $data->[1])) {
        $data->[2] = AE::io $fh, 0, sub { _read($data) };
    }
}
</code>

Раз тут используется AnyEvent::IO, то что мне мешает на этом же уровне добавить и timer ? Подумал я и сделал следующий ход:

<code>
sub resume {
    my $data = ${shift()};
    if (defined(my $fh = $data->[1])) {
        $data->[2] = AE::io $fh, 0, sub { _read($data) };
        $data->[11] =  AnyEvent->timer ( after => $data->[10], interval => $data->[10], cb => $data->[9] );
    }
}
</code>

data->[10] = 1; data->[9] = sub { warn "Timer ring-ring."; }; data->[11] = undef (будущий watcher, по аналогии к data->[2];

Предварительные тесты показали работоспособность такого варианта. Продолжение следует.

середа, 24 вересня 2014 р.

Вы будете смеяться. Я снова написал SMPP-сервер. На основе опыта предыдущих. 
Был у нас такой продукт - http://www.netstyle.com.ua/solutions/smpp-server
Продавался некоторое количество раз. Свой первый MacBook Pro я за счет него и купил. 
И собираюсь продолжить эту традицию, благо есть спрос. 

Несмотря на готовую систему для массовых рассылок СМС многие клиенты все-таки просят продать и установить именно отдельно сервер, что бы дальше обрабатывать СМС собственными силами. Например, один клиент из Бразилии далее отправляет СМС по собственному HTTP-API. А другие клиенты из Испании интегрировали сервер с kannel и успешно используют. 

Но не бывает идеально написанного софта. Есть глюки в предыдущих версиях. В попытках исправить предыдущую версию я ее окончательно доломал и в результате долгих раздумий и помощи коллег родилась версия номер 3.  В лучших традициях perl она полностью переписана.  Полностью выброшен старый и грязный код Net::SMPP, а вместо этого используется SMPP::Packet авторства Mykola Marzhan.  Сетевое взаимодействие обеспечивает AnyEvent::tcp_server и AnyEvent::PacketReader.  

На летнем хакатоне Kiev.pm было принято решение сделать базовый класс сервера, куда прописать основную логику именно сервера, а конечные решения вынести на callback-и. Получилось очень удобно.

Хранилище данных - MySQL. Самая распространенная записная книжка всех времен и народов.  Но если надо, то в короткие сроки могу соорудить шлюз из SMPP  в куда-угодно. Благо архитектура базовых классов позволяет. 

Производительность: по предварительным оценкам в 1000 смс/сек помещаюсь с запасом.  
Я также убрал ограничение в 1024 активных соединения. 

Обращайтесь, дорого не возьму! :)  


вівторок, 1 липня 2014 р.

Итоги моего года Змеи

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

Это был мой очередной год разработки. Я устал, если честно. Если в 2012-2013 годах я писал PearlPBX, которая сейчас успешно продается, то в прошедшем 2013-2014 году я писал Pearl SMS Stream. Perl + Erlang. Причем erlang-a значительно больше. Жуткое сочетание :) Теперь я займусь развитием, продажами, поддержой и вообще всякой нудятиной, которая меньше загружает мозГ, чем чистая разработка. 

Год назад, когда мне исполнилось 36, я обещал себе : "Это мой год, ох я наворочу!". Оглядываясь назад могу сказать: "Да, наворотил! Не так много как хотелось бы, потому что лентяй, но наворотил". 

Год назад я начал изучать Erlang, сломал себе полголовы. Все это время я пытался совместить стройку, разработку, семью. Получалось плохо. C весны получается лучше. Я нанял на работу смышленого junior-а, который уже превратился в middl-а. И помогает строить мне дом. А я в это время "всё кодю и кодю".  :-) 

Следующий год - год музыки. У меня есть несколько проектов, которые я хочу дописать, аранжировать и выпустить в iTunes/YouTube. 

А пока реклама того, что я писал последние 11 месяцев ( говорю же, лентяй :).

Пользователь Web: 
- отправка одиночного СМС 
- подготовка, верификация, отправка, постановка в паузу, отмена рассылок, просмотр СМС в рассылках
- использование шаблонов в рассылках 
- статистика по рассылкам или за период с просмотром деталей и текста SMS/DLR
- работа с контактами. Импорт списков и просмотр, поиск контакта. 
- наблюдение за процессом рассылки в режиме реального времени.

Пользователь SMPP: 
- Все тоже самое, кроме работы с рассылками.  Если он SMPP-пользователь, то у него могут быть другие цены (в России, как правило, ниже, чем у GUI-пользователей)

Администратор:  
- Просмотр текущего статуса системы 
- Послать одиночное сообщение 
- Работа с пользователями: добавление, изменение, пополнение счета, просмотр истории пополнений.
- Настройки маршрутизации и SMPP-подключений к операторам 
- Справочник операторов/префиксов
- Статистика по всей системе в разрезе рассылок, с разбивкой по пользователям, по операторам с экспортом в Excel/Calc. 

Биллинг: на текущий момент Prepaid-only, считает SMS-ки, но добавить любой другой тип не проблема.  В планах добавить Post-Paid. А когда-нибудь можно и деньги вводить. В разных странах разные условия.  

Методы отправки SMS: 
- Web-интерфейс 
- SMPP-подключение (да-да, я опять написать SMPP-сервер. На этот раз, на Erlang!) 
- HTTP API 

Планируется: 
- RESTful API
- XML (для совместимости с предыдущей версией имени NetStyle и Миши Бочкарёва) 
- Отправка DLR через HTTP. 

Производительность :1000 SMS/сек на минимальном VPS в Digital Ocean. Больше не пробовал, буду пробовать позже. Все равно никто таких каналов в Украине не предоставляет. 

На чём это всё ? Erlang, OTP (без него уже никуда!), PostgreSQL, RabbitMQ. 
Используемые библиотеки и фреймворки: n2o - web, oserl - smpp, cowboy - веб-сервер, epgsq && epgsql_pool для работы с PostgreSQL, erlydtl - шаблонизатор, iconv, jiffy.  

Для кого это все ? 
Во-первых: для моего постоянного клиента ТОВ "Фарос Мобайл", который частично оплатил эту разработку. 
Во-вторых: для крупных корпораций, которые не желают отдавать свои базы контактов в целом виде на сторону, при этом желая получить полный контроль над отправкой сообщений и экономию средств (SMPP-онли зачастую дешевле, чем веб-интерфейс). 
В-третьих: для агрегаторов SMS-рассылок. Архитектура настолько гибкая, что можно построить любой учет денег, сообщений и прочее и прочее. 

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

PS. Поехал я за новым чехлом для моего MacBook-a. Посылка днем пришла. 

PPS. И да,  я тут придумал новую штуку, которая соседствует с SMS-платформой. Мне на part-time нужны два разработчика - iOS и Android для разработки прототипа приложения. Рекомендации принимаются.  

середа, 16 квітня 2014 р.

PearlPBX features

Уважаемые подписчики!
Я написал список возможностей PearlPBX, о которых наиболее часто спрашивают. Я собираюсь вывесить этот список на сайт. Но перед этим я попрошу Вас сделать репост этого сообщения для того, что бы побольше людей увидело эту информацию.
Кто приведет клиента из Украины, тот получит от меня персональный ужин в пабе "О'Брайенс" за мой счет. Клиенты из других стран (у меня открыты счета так же в рублях РФ, долларах США и Евро ) оплачиваются пивом, посланным в посылке 
Уже есть счастливчики, которые свое пиво выпили. 
Итак, список возможностей PearlPBX:
* Права доступа по направлениям (грузчики не должны иметь возможность звонить в Америку-Европу)
* Управление голосовыми файлами через веб-интерфейс
* Черный и белый списки
* Общая адресная книга
* Запоминание выбранного языка IVR для звонившего
* IVR, который редактируется через веб-интерфейс
* Запись разговоров и прослушивание администратором
* Вставка рекламных и информационных материалов для звонивших из определенного списка на определенный период
* Календарь рабочих и выходных дней
* Воспроизведение рекламно-информационных материалов во время ожидания
* Множество очередей
* В случае переполнения очереди можно оставить заявку на callback с информированием по e-mail
* Статистика с привязкой по операторам, группам
* CDR-фильтр - поиск по таблице CDR
* Парковка, переключение, конференции "на троих"
* Выбор наиболее оптимального маршрута с редактированием через веб-интерфейс
* Подключение к активному разговору
* Интеграция с 1С, vTiger и самописными CRM-системами
Контактный телефон: +380-44-3039338.

Статистика скачиваний PearlPBX-demo.zip за неделю 07.04.2014 - 13.04.2014

Напоминаю, что демо PearlPBX можно скачать отсюда.
Пожалуйста, кто качает и не качает, расскажите о PearlPBX друзьям и знакомым.

Итак, страны за неделю: Сербия, Нидерланды, GB (Rackspace cloud servers).


понеділок, 7 квітня 2014 р.

Статистика скачиваний PearlPBX-Demo.zip за неделю 31.03 - 06.04.2014

Ситуация развивается. За прошедшую неделю демо скачали из США (округ Колумбия), Киева, Ростова-на-Дону и Rackspace. Отдельно хочется отметить посетителя из корпорации Google, а точнее из города Mountain View, который приходил с Linux / X11 / Firefox на борту. 

И ни одного отзыва от скачавших. 

Будем пиариться дальше. В планах доклад на Львовской тусовке OSDN, презентация на habrahabr.ru, linux.org.ru и т.д.  
 


субота, 29 березня 2014 р.

Статистика скачиваний PearlPBX-demo.zip

Города и страны, откуда качали PearlPBX-demo.zip за прошедшую неделю:
  • Китай ( China Mobile ) 
  • Хабаровск 
  • Ижевск 
  • Москва
  • Латвия ( Рига ) 
  • Украина  ( Укртелеком ) 
Желающим оплатить коммерческое внедрение или поддержку напоминаю, что я имею счета во всех основных валютах мира, кроме китайского юаня. 

понеділок, 24 березня 2014 р.

Что такое PearlPBX ?


  1. Веб-интерфейс для VoIP - сервера на базе asterisk. 
  2. Разнообразные отчеты 
  3. Коммерческая поддержка от разработчика 

пʼятниця, 21 березня 2014 р.

Новости PearlPBX

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

Curriculum Vitae

I came to work in telecom in october of 1997.
I've come a long way from a junior sysadmin to the Chief Technical Officer and founder of few companies.

Since 2007 I focused on Mobile VAS solutions and VoIP-networking. Since 2011 I develop PearlPBX (www.pearlpbx.com). Since 2013 I start to develop Pearl SMS Stream - it's a new platform for SMS bulk messaging. It's not done yet, testing in progress.

My expertise includes:
* Project management of IT related projects.
* Product management
* System architecture for telecom applications.
* Software design and implementation.
* System and network administration.
* VoIP network design and implementation.

Technical skills, which are used in the recent 7 years:
* VoIP installations up to hundreds of users and thousands of calls per day
* Erlang/OTP, Perl, PHP, Javascript, C
* SQL and NoSQL databases
* Network architecture including fail-over clustering
* Network applications design and implementations
* Web development

Specialties: project management, product management, software and system architecture, software engineering, VoIP expert, SMPP expert.

Since 2012 till now() found and work in PearlPBX in single mode :)

Since 2007 till 2012 found NetStyle (www.netstyle.com.ua) with Michael Bochkaryov (misha@ratter.kiev.ua).  Our company was develop solutions for VoIP (conference software, call centres based on asterisk and others) and VAS SMS services.

What was earlier does not matter ;-)



Обо мне.

На текущий момент я занимаюсь двумя направлениями, которые мне интересны:
1. Разработка и внедрение контакт-центров на базе PearlPBX (www.pearlpbx.com).
2. Разработка и внедрение систем массовой рассылки SMS Pearl SMS Stream (пока не рекламируется ). 
Так же оказываю консультации по вопросам VoIP ( asterisk, sip ), SMS (kannel, smpp).

Более подробно о предоставляемых мною услугах Вы можете найти на страницах "Контакт-Центры" и "СМС-рассылки".