Разработка программного обеспечения
на заказ

Сайты и веб-сервисы

Сайты и веб-сервисы

Раз­ра­бот­ка веб-сервисов разной степени слож­ности: об­ра­зова­тель­ных и пла­теж­ных систем, CRM, мар­кет­плей­сов, интернет-ма­гази­нов, пар­тнерских программ, кор­по­ратив­ных порталов и другого прог­рам­мно­го обес­пе­чения для вашего бизнеса.

Мобильные приложения

Мобильные приложения

Раз­ра­бот­ка нативных и кросс­плат­формен­ных при­ложе­ний. Дора­бот­ка и мо­дифи­кация су­щес­тву­ющих систем в сфере LifeStyle, тран­спор­та, медиа.

Прикладное программное обеспечение

Прикладное программное обеспечение

Раз­ра­бот­ка нас­толь­ных при­ложе­ний, прог­рам­мно­го обес­пе­чения для вен­динго­вых ап­па­ратов, ме­дицин­ских систем и другое.

img

PHP

  • Laravel, Yii, Zend, Symfony

.NET

  • .NET Core, ASP.NET, C#

Web

  • Bootstrap, CSS, WordPress, Kohana, Bitrix

JavaScript

  • Vue, React, Node, Angular

TypeScript

  • Angular
img

Android

  • Kotlin, Java

iOS

  • Swift, SwiftUI, UIKit, Objective-C

Cross Platform

  • ReactNative, Xamarin, Apache Cordova
img

C++

  • Qt, Web Toolkit

Python

  • Django, Flask, FastAPI, CodeIgniter

C#

  • .NET, .NET Core, ASP.NET, WinForms

DevOps

  • Bash, Powershell, Docker, CI/CD

Data

  • XML, Json, SQL, Elasticsearch

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

  

Проектирование

Уточ­не­ние тре­бова­ний за­каз­чи­ка, бизнес-анализ, от­ри­сов­ка макетов, раз­ра­бот­ка тех­ни­чес­ко­го задания

  

Прототипирование

Раз­ра­бот­ка рабочего про­тоти­па системы - пробной версии прог­раммы для проверки верности пред­ла­га­емых тех­но­логи­чес­ких и ар­хи­тек­турных решений

  

Разработка

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

  

Тестирование

Проверка кор­рек­тнос­ти работы системы на всех основных ус­трой­ствах и в бра­узе­рах. Наг­ру­зоч­ное тес­ти­рова­ние и тес­ти­рова­ние бе­зопас­ности

  

Внедрение

Раз­ме­щение на сервере, ин­тегра­ция с другими сис­те­мами за­каз­чи­ка, обучение пер­со­нала

  

Документирование

Раз­ра­бот­ка ру­ководс­тва поль­зо­вате­ля, ад­ми­нис­тра­тора, раз­ра­бот­чи­ка

Мы разработали

Разработка модификаций для Nolim

Проблема и решение

Nolim — команда, которая об­ра­тилась к нам для по­луче­ния помощи в ре­али­зации мо­дифи­каций для Tilda, по­пуляр­ной плат­формы для создания веб-сайтов без прог­рамми­рова­ния. «Нолим» за­нима­ет­ся раз­ра­бот­кой и ин­тегра­ци­ей кас­томных фун­кци­ональ­ных воз­можнос­тей для Tilda, чтобы удов­летво­рить спе­цифи­чес­кие тре­бова­ния и пот­ребнос­ти своих клиентов.

Улуч­ше­ние воз­можнос­тей Tilda

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

Мно­гоп­латфор­менная под­дер­жка

Для обес­пе­чения мак­си­маль­ной сов­мести­мос­ти и от­зывчи­вос­ти веб-сайтов, раз­ра­ботан­ных с помощью Tilda, мы уделяли особое внимание кросс-бра­узер­ной сов­мести­мос­ти и адап­тивно­му дизайну. Неза­виси­мо от ус­трой­ства или браузера, поль­зо­вате­ли могут получить оди­нако­во ка­чес­твен­ный опыт ис­поль­зо­вания сайта, бла­года­ря работе по оп­ти­миза­ции и тес­ти­рова­нию.

Воз­можнос­ти нас­тра­ива­емо­го дизайна

С помощью CSS, jQuery и JavaScript мы соз­да­вали нас­тра­ива­емые элементы дизайна для Nolim на основе их уни­каль­ных брен­до­вых иден­ти­фика­торов. Это включало раз­ра­бот­ку нас­тра­ива­емых шрифтов, цветовых схем, стилей кнопок, анимаций и пе­рехо­дов между раз­де­лами веб-сайта. Таким образом, Nolim могли пре­дос­тавлять клиентам пол­ностью пер­со­нали­зиро­ван­ные веб-страницы, со­от­ветс­тву­ющие их ин­ди­виду­аль­ным пот­ребнос­тям и ви­зу­аль­ным пред­почте­ни­ям.

Бизнес-ре­зуль­та­ты

Бла­года­ря сот­рудни­чес­тву с нами Nolim смогли удов­летво­рить тре­бова­ния своих клиентов, пред­ла­гая ин­ди­виду­аль­ные решения на основе Tilda, а также обес­пе­чить более высокий уровень фун­кци­ональ­нос­ти и про­из­во­дитель­нос­ти их сайтов. Это поз­во­лило за­каз­чи­ку укрепить свое при­сутс­твие на рынке и привлечь новых клиентов.

Инно­вации и качество

Мы гордимся тем, что смогли помочь команде Nolim за короткий про­межу­ток дать много ка­чес­твен­ных мо­дифи­каций для Tilda. Наш подход к работе был основан на высоком качестве кода, ис­поль­зо­вании сов­ре­мен­ных тех­но­логий и пос­то­ян­ной ин­но­ваци­он­ной мысли. Мы стре­мились создать гибкое и эф­фектив­ное решение, которое вы­деля­ет­ся среди раз­ра­боток кон­ку­рен­тов и спо­собс­тву­ет даль­ней­ше­му успеху бизнеса Nolim.

Зак­лю­чение

Сот­рудни­чес­тво с командой Nolim было зах­ва­тыва­ющим и успешным опытом. Наш вклад в ре­али­зацию мо­дифи­каций для Tilda дал Nolim кон­ку­рен­тное пре­иму­щес­тво и помог им привлечь больше клиентов. Мы гордимся тем, что наша работа спо­собс­тво­вала успеху за­каз­чи­ка. А работа поль­зо­вате­лей стала зна­читель­но проще и эф­фектив­нее, при ис­поль­зо­вании об­новлен­ных инс­тру­мен­тов.


  • Технологии:
  • JavaScript
  • jQuery
  • HTML
  • Three.js
  • TweenMax.js

Team-Finder: доработка и рефакторинг сервиса по подбору игроков и команд

Сервис team-finder.ru был запущен в 2019 году группой эн­ту­зи­ас­тов футбола, которые хотели об­легчить людям занятие любимым видом спорта. С помощью сервиса team-finder.ru игроки в футбол любого уровня могут искать команду, а команды — игроков.

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

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

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

По итогу все ошибки, воз­ни­ка­ющие при работе в личном кабинете сервиса, были ус­тра­нены. Также были внесены из­ме­нения в верстку, которые поз­во­лили более красиво отоб­ра­жать карточки игроков.

  • Технологии:
  • PHP
  • Laravel Framework

Приложение для умного дома

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

При­ложе­ние раз­ра­бота­но на основе открытой бес­плат­ной плат­формы openHAB, вклю­ча­ющей в себя также и сер­верную часть.

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

Наиболее зна­читель­ным и ин­те­рес­ным моментом было до­бав­ле­ние в при­ложе­ние воз­можнос­ти создания сце­нари­ев. Сценарий пред­став­ля­ет из себя ло­гичес­кую связку из условия и действий «если, то», что поз­во­ля­ет связать из­ме­нение сос­то­яния датчика с уп­равле­ни­ем ус­трой­ством, тем самым ав­то­мати­зиро­вав уп­равле­ние. К примеру, открыли дверь - сработал датчик двери - вклю­чил­ся свет; все ушли на работу - в 8:00 вклю­чил­ся сценарий «Никого нет дома» - свет и кон­ди­ци­оне­ры вык­лю­чились. Можно не только включать/вык­лю­чать ус­трой­ства или сценарии, но и от­прав­лять push-уве­дом­ле­ния или со­об­ще­ния в Телеграм.

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

 

  • Технологии:
  • Firebase
  • Kotlin
  • Swift
  • Mockito

  • Технологии:
  • Docker
  • Python
  • Selenium

Сервис поиска и выбора отелей и мест для отдыха Inntravel

К нам об­ра­тил­ся заказчик для до­работ­ки сервиса Inntravel.ru — сайта выгодных пу­тешес­твий по России. Задача на первый взгляд не­боль­шая — поп­ра­вить логику отоб­ра­жения и филь­тра­ции отелей.

Заказчик был уверен, что сайт почти готов.

С какими труд­ностя­ми мы стол­кну­лись

При изучении проекта мы стол­кну­лись с не­ожи­дан­ны­ми вызовами. Ока­залось, что термин «почти готов» в этом кон­тек­сте означал, что готов был только «каркас» проекта. В час­тнос­ти, об­на­ружи­ли, что база данных содержит только сырые SQL-запросы, а система backend'а не струк­ту­риро­вана. Даже при простой попытке раз­вернуть проект для ло­каль­ной раз­ра­бот­ки и анализа кода пришлось ис­пра­вить большое ко­личес­тво ошибок. Как ре­зуль­тат, проект на­ходил­ся в пол­ностью не­завер­шенном сос­то­янии и требовал зна­читель­ной работы для со­от­ветс­твия тре­бова­ни­ям стан­дар­тно­го пол­но­цен­но­го сайта.

Что мы делали

  1. Backend проекта был написан на Flask. Для вза­имо­дей­ствия с базой данных приняли решение ин­тегри­ровать биб­ли­оте­ки SQLAlchemy (ORM для вза­имо­дей­ствия с базой данных) и Alembic (для уп­равле­ния миг­ра­ци­ями базы данных) в уже су­щес­тву­ющий код.

Все ранее су­щес­тву­ющие SQL-запросы пе­репи­сали через новый ORM и создали со­от­ветс­тву­ющие модели, опи­сыва­ющие струк­ту­ру базы данных. Это было не­об­хо­димо как для ис­поль­зо­вания SQLAlchemy, так и для работы с Alembic. В ре­зуль­тате этих из­ме­нений зна­читель­ная часть пре­дыду­щего кода была пе­рера­бота­на, ис­пра­вили большое ко­личес­тво ошибок, добавили ди­нами­чес­кий контент в ста­тич­ные элементы сайта.

  1. Также были успешно ин­тегри­рова­ны пла­теж­ные системы: система быстрых платежей (СБП) и «Альфа-банк». Это решение поз­во­лило поль­зо­вате­лям сайта выбирать оп­ти­маль­ный способ оплаты и сделало процесс про­веде­ния тран­закций более удобным и гибким.



  2. Создали систему по указанию цен на кон­крет­ную комнату в отеле в пределах от одного дня и до всего года.



  3. Раз­ра­бота­ли новый личный кабинет для поль­зо­вате­лей, который поз­во­ля­ет им соз­да­вать и ре­дак­ти­ровать ин­форма­цию об отелях, а также осу­щест­влять покупку и прод­ле­ние подписок.



  4. Добавили парсер для сбора данных по сайту hochu-na-yuga и создания на основе этих данных отелей на сайте за­каз­чи­ка. Для его работы ин­тегри­рова­ли систему по запуску фоновых задач через Celery.



  5. Также провели большое ко­личес­тво работ с frontend-частью проекта. Несмотря на то что у за­каз­чи­ка уже были готовые шаблоны, во многих аспектах они не удов­летво­ряли пот­ребнос­тям.

 

Выводы

В конечном итоге можно сказать, что большая часть работ кос­ну­лась backend-части. Главной задачей было уйти от старой струк­ту­ры проекта, добавить больше воз­можнос­тей по нас­трой­ке контента через ад­минпа­нель, улучшить про­из­во­дитель­ность и «вылечить» все най­ден­ные ошибки. А также, конечно, вы­пол­нить все пос­тавлен­ные за­каз­чи­ком задачи.

 

  • Технологии:
  • Celery
  • Python
  • PostgreSQL
  • Jinja2
  • Redis
  • Flask
  • SQLAlchemy
  • Alembic

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • PHP
  • Joomla
  • Yandex SpeechKit

  • Технологии:
  • Celery
  • Docker
  • Vue.js
  • Python
  • FastAPI
  • Httpx Python
  • Isort
  • Pottery
  • Pydantic
  • Uvicorn
  • Uvloop
  • Drf-yasg
  • Psycopg2
  • Pillow
  • IP2Location
  • PySocks
  • Requests Python
  • Quasar
  • Black Python
  • Redis
  • Pinia

  • Технологии:
  • Typescript
  • CSS
  • Vue.js
  • HTML
  • Ant Design

  • Технологии:
  • C#
  • .Net
  • Docker
  • Angular
  • PostgreSQL

Юридический портал ILEGG.ru

Недавно к нам об­ра­тил­ся под­рядчик itway.ru и передал подряд на до­работ­ку портала юри­дичес­ких услуг - ILEGG.ru с задачей улучшить их сайт и рас­ши­рить су­щес­тву­ющий фун­кци­онал.

Плат­форма ILEGG.ru поз­во­ля­ет получить быстрые юри­дичес­кие кон­суль­та­ции фи­зичес­ким лицам и пред­ста­вите­лям раз­лично­го бизнеса. На сайте пред­став­ле­но более 250 юристов, ра­бота­ющих в разных областях права. Все кон­суль­та­ции пре­дос­тавля­ют­ся онлайн.

Задачи

На сайте ILEGG.ru много юристов и пос­то­ян­ных по­сети­телей. Команде аг­ре­гато­ра пот­ре­бова­лось мо­дер­ни­зиро­вать сайт, чтобы спе­ци­алис­ты смогли с ком­фортом вести ком­мерчес­кую де­ятель­ность, а клиенты – удаленно оп­ла­чивать услуги. С этими зап­ро­сами они об­ра­тились к нам, в Softorium.

Вот задачи, которые стояли перед нами:

  1. Раз­ра­ботать систему мо­нети­зации услуг.
  2. Дора­ботать личный кабинет поль­зо­вате­ля.
  3. Внедрить систему ре­комен­да­ций.
  4. Изменить главную страницу портала.

Что мы сделали

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

Система мо­нети­зации услуг

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

Главной задачей для наших спе­ци­алис­тов стало создание бе­зопас­но­го и на­деж­но­го сервиса, спо­соб­но­го быстро об­ра­баты­вать денежные тран­закции.

Форма создания платных заявок была встроена в уже име­ющу­юся струк­ту­ру юри­дичес­ко­го аг­ре­гато­ра с учетом су­щес­тву­ющей ар­хи­тек­ту­ры сайта.

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

Внед­ре­ние системы ре­комен­да­ций

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

Дора­бот­ка личного кабинета поль­зо­вате­ля

Мы создали 3 уни­каль­ные формы профиля поль­зо­вате­ля – для юристов, для клиентов и для юри­дичес­ких компаний. В ходе работы был про­из­ве­ден тща­тель­ный анализ по­сети­телей аг­ре­гато­ра и выделены главные осо­бен­ности каждой группы.

Профиль клиента

Ре­али­зован в виде стан­дар­тной поль­зо­ватель­ской анкеты. Эта группа по­сети­телей сайта не обладает рас­ши­рен­ны­ми правами и дос­ту­пами, так как единс­твен­ная цель клиента – по­луче­ние ка­чес­твен­ной юри­дичес­кой помощи.

Профиль частного юриста

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

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

Для ве­рифи­кации тре­бу­ет­ся заг­ру­зить скан паспорта. Нами также была ре­али­зова­на воз­можность привязки профиля спе­ци­алис­та к со­ци­аль­ным сетям.

Профиль юри­дичес­кой компании

Запол­не­ние профиля юри­дичес­кой компании осу­щест­вля­ет­ся по аналогии с профилем частного юриста. Мы добавили в анкету блок «Рек­ви­зиты». Инфор­ма­ция туда до­бав­ля­ет­ся ав­то­мати­чес­ки из открытых ис­точни­ков после ввода на­име­нова­ния ор­га­низа­ции.

Изме­нение главной страницы

Раз­мести­ли на главной странице ин­форма­цию о том, как работает аг­ре­гатор и как рас­счи­тыва­ет­ся сто­имость услуг юристов. Сущес­тву­ющие ин­форма­ци­он­ные блоки были от­ре­дак­ти­рова­ны.

Ход проекта

  1. Иссле­дова­ние ин­терфей­са и фун­кци­онала юри­дичес­ко­го аг­ре­гато­ра.
  2. Анализ основных тре­бова­ний поль­зо­вате­лей.
  3. Раз­ра­бот­ка не­об­хо­димых клиенту систем.
  4. Тес­ти­рова­ние и внед­ре­ние об­новлен­но­го фун­кци­онала.

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • CSS
  • Ajax
  • PHP
  • HTML
  • Laravel Framework

Программное обеспечение «Раскрои»

Компания «Тех­но­робот» за­нима­ет­ся ав­то­мати­заци­ей про­из­водс­твен­ных про­цес­сов на базе про­мыш­ленных роботов FANUC и KUKA.

Клиенты компании просили немного до­рабо­тать прог­рамму сос­тавле­ния раскроев для машины резки профиля. Прог­рам­мное обес­пе­чение «Раскрои» поз­во­ля­ет про­ек­ти­ровать детали и фор­ми­ру­ет файл с па­рамет­ра­ми деталей в раскроях, который от­прав­ля­ет­ся на машины линии резки профиля. Их прог­рам­мное обес­пе­чение берет из файла данные для резки.

Что мы сделали

Мы до­рабо­тали ин­терфейс и фун­кци­ональ­ность прог­раммы для удобства поль­зо­вате­лей. Теперь в прог­рамме можно делать мас­шта­биро­вание при ре­дак­ти­рова­нии 2D-отоб­ра­жения детали и от­прав­лять на станок нес­коль­ко раскроев од­новре­мен­но.

А еще

Провели отладку фун­кци­ональ­нос­ти ко­пиро­вания и удаления резов, также добавили до­пол­ни­тель­ные па­рамет­ры резов и до­рабо­тали редактор деталей.

  • Технологии:
  • C#
  • WPF

Доработка сервиса Wi-Fi аналитики HVALA

HVALA пре­дос­тавля­ет своим поль­зо­вате­лям услуги Wi-Fi, а также сервис ав­то­риза­ции с ана­лити­кой и мар­ке­тин­го­выми инс­тру­мен­та­ми.

Кли­ен­та­ми сервиса являются кафе, рес­то­раны, гос­ти­ницы, пре­дос­тавля­ющие своим гостям доступ к ин­терне­ту.

HVALA поз­во­ля­ет получить отчеты о по­сети­телях и пре­дос­тавля­ет мар­ке­тин­го­вые инс­тру­мен­ты: ин­форми­рова­ние об акциях, опросы, сбор отзывов, и другое. Отчеты о гостях содержат ин­форма­цию о поле, возрасте, MAC-адресе, ко­личес­тве по­сеще­ний, пос­леднем визите, дне рождения гостей и тд. С помощью личного кабинета можно нас­тро­ить тар­ге­тиро­ван­ную рекламу в рек­ламных сетях.

К сети HVALA под­клю­чено более 1000 за­веде­ний на тер­ри­тории России, Казах­ста­на и Узбе­кис­та­на.

Спе­ци­алис­ты Softorium вы­пол­ни­ли ин­тегра­цию с новым дизайном админки, до­рабо­тали способы ав­то­риза­ции, систему отчетов.

 

 

  • Технологии:
  • JavaScript
  • jQuery
  • CSS
  • PHP
  • HTML

Маркетплейс одежды

Перед нами стояла задача создания мар­кет­плей­са одежды за­рубеж­ных пос­тавщи­ков на базе решения от 1С‑Битрикс. В ходе работ была про­веде­на адап­та­ции ядра Битрикс под тре­бова­ния за­каз­чи­ка: до­рабо­тана корзина, карточка товара, создан ком­по­нент рас­про­дажи. Раз­ра­бота­ны модули для ин­тегра­ций с пла­теж­ной системой CONTACT PAY, сервисом доставки Почты России, RetailCRM, сервисом e‑mail мар­ке­тин­га Mailganer.

Кроме того, был раз­ра­ботан модуль син­хро­низа­ции каталога с сайтом пос­тавщи­ка, для ежед­невной ак­ту­али­зации каталога с 75 000+ позиций. Написан модуль перевода, ин­тегри­рован­ный с модулем импорта: на входе файл на языке пос­тавщи­ка, на выходе ─ каталог товаров на русском языке.

Был проведен аудит хостинга для выбора оп­ти­маль­но­го решения по со­от­но­шению про­из­во­дитель­нос­ти и сто­имос­ти.

  • Технологии:
  • jQuery
  • CSS
  • Bitrix
  • Ajax
  • RetailCRM
  • CONTACT PAY
  • JS
  • PHP
  • HTML

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Симулятор Генерального Директора

Интег­ра­ции пла­теж­ной системы в игру «Симу­лятор Гене­раль­но­го Дирек­то­ра» SGD Игра пред­став­ля­ет собой глубоко мо­дер­ни­зиро­ван­ный алгоритм - квест делового района Москвы у метро Бело­рус­ская, дающий полное пог­ру­жение в мир пред­при­нима­теля-эк­спор­те­ра. Игроку пред­сто­ит пройти путь от открытия валютных счетов до поставки своей про­дук­ции за­рубеж­ным по­купа­телям. Квест сос­тавлен мак­си­маль­но приб­ли­жен­ным к реалиям жизни. Все пер­со­нажи: та­можен­ный пред­ста­витель, юристы, сот­рудни­ки юри­дичес­ко­го отдела банка, иные «слу­чай­ные» люди - взяты из де­лоп­ро­из­водс­твен­ной жизни.

В ходе сов­мес­тной работы с раз­ра­бот­чи­ками игры была вы­пол­не­на ин­тегра­ция пла­теж­ной системы Робо­кас­са и про­из­ве­дены до­работ­ки ос­новно­го сайта с доступом в игру.

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Модернизация системы учёта рабочего времени сотрудников

Рост бизнеса сложно пред­ста­вить без развития систем ав­то­мати­зации. FORA – одна из ведущих компаний на рынке Казах­ста­на в сфере продаж цифровой техники. Ее история началась в 1997 с не­боль­шо­го офиса в городе Актобе. Сейчас компания работает в го­сударс­твен­ных закупках, а также в сфере оптовых и роз­ничных продаж, в том числе онлайн.

FORA ис­поль­зу­ет прог­рам­мный комплекс ав­то­мати­зации учёта рабочего времени сот­рудни­ков, вклю­ча­ющий мо­биль­ное и веб- при­ложе­ния. Регис­тра­ция рабочего времени осу­щест­вля­ет­ся путём ска­ниро­вания, сфор­ми­рован­но­го в системе QR-кода: открытие/закрытие дня. Система собирает ин­форма­цию по каждому сот­рудни­ку и пре­дос­тавля­ет ад­ми­нис­тра­тору воз­можность прос­мотра ста­тис­ти­ки и фор­ми­рова­ния отчетов.

Развитие сети ма­гази­нов FORA пот­ре­бова­ло мо­дер­ни­зации системы и до­работ­ки ее фун­кци­она­ла. Мобиль­ное при­ложе­ние, вы­пол­ненное на Qt, было пол­ностью пе­репи­сано на Kotlin Multiplatform для уп­ро­щения его соп­ро­вож­де­ния и об­слу­жива­ния. Это также помогло из­ба­вить­ся от старой ре­али­зации Qt QML и улучшить сов­мести­мость с новыми версиями NDK. Исполь­зо­вание муль­тип­латфор­менно­го решения сок­ра­тило время на на­писа­ние кода для мо­биль­ных при­ложе­ний Android и iOS. Большая часть логики вынесена в общий модуль, за ис­клю­чени­ем макетов экранов и фун­кци­она­ла рас­позна­вания QR-кода.

В ходе до­работ­ки системы была до­бав­ле­на функция по­луче­ния ге­оло­кации сот­рудни­ка при ре­гис­тра­ции. Это поз­во­лило на основе ге­одан­ных при­вязы­вать сот­рудни­ка к ор­га­низа­ции про­филь­но­го под­разде­ления объекта за­каз­чи­ка. Также был до­рабо­тан фун­кци­онал сервера, по­высив­ший бе­зопас­ность пе­реда­ва­емых данных и сок­ра­тив­ший трафик между сервером и клиентом.



  • Технологии:
  • C#
  • Entity Framework
  • Kotlin Multiplatform
  • ASP.NET
  • Qt
  • QML
  • Swift

Разработка desktop -приложения для интеграции онлайн ERP-системы с POS-терминалами

ERP-система ProSklad со­от­ветс­тву­ет тре­бова­ни­ям трех­компо­нен­тной ин­тегри­рован­ной системы (далее ТИС). ProSklad работает как веб-при­ложе­ние (SPA на Vue.js). Одним из тре­бова­ний к ТИС является ин­тегра­ция с POS-тер­ми­нала­ми раз­личных банков. Под ин­тегра­ци­ей под­ра­зуме­ва­ет­ся процесс, когда поль­зо­ватель ини­ци­иру­ет оплату в веб-при­ложе­нии, а терминал ав­то­мати­чес­ки под­хва­тыва­ет сумму и готов принять платеж.

Раз­ра­бот­ка desktop-при­ложе­ния зак­лю­чалась в про­ек­ти­рова­нии и раз­ра­бот­ке модуля, свя­зыва­юще­го POS-тер­ми­налы раз­личных банков и ERP-систему. Раз­ра­бот­чи­кам ProSklad больше не нужно знать об осо­бен­ностях работы раз­личных POS-тер­ми­налов, их раз­но­род­ных API и биб­ли­отек. Модуль позволят ис­поль­зо­вать единый ин­терфейс для работы с POS-тер­ми­нала­ми. Под­дер­жка каждого нового банка или тер­ми­нала осу­щест­вля­ет­ся в самом модуле без не­об­хо­димос­ти вносить из­ме­нения в ERP-систему ProSklad. Таким образом, раз­ра­бот­ка desktop-при­ложе­ния поз­во­лила привлечь новых пот­ре­бите­лей и рас­ши­рить список банков-эк­вай­еров, под­клю­чение которых ранее было зат­рудни­тель­но.

  • Технологии:
  • C#
  • .Net
  • С++/CLI
  • RS-232
  • Windows Forms
  • Websocket

CRM-система Relays для управления QR-кодами

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

Заказчик об­ра­тил­ся с не­завер­шенным проектом. Нами была за­кон­че­на раз­ра­бот­ка CRM-системы, под­клю­чен модуль перевода ин­форма­ции о товаре, до­рабо­тан личный кабинет поль­зо­вате­ля, раз­ра­ботан визард для об­легче­ния освоения прин­ци­пов работы поль­зо­вате­ля в системе, до­рабо­тана ад­ми­нис­тра­тив­ная панель сайта, про­веде­на отладка раз­личных частей системы.

  • Технологии:
  • Nuxt.js
  • MySQL
  • Symfony
  • Docker
  • Node.js
  • PM2
  • Vue.js

Разработка умного поиска с учетом морфологии в BigData решениях

Заказчик – пос­тавщик и арен­до­датель обо­рудо­вания для ат­трак­ци­онов. Перед нами была пос­тавле­на задача раз­ра­бот­ки умного поиска по сайту https://www.art-active.ru/. Также тре­бова­лось раз­ра­ботать парсинг с сайта по его фиду - потоку контента, который ав­то­мати­чес­ки под­гру­жа­ет­ся блоками на веб-странице или в при­ложе­нии.

Фид пред­став­ля­ет из себя XML-файл, со­дер­жа­щий всю ин­форма­цию, о товарах, отоб­ра­жа­ющу­юся на сайте: на­име­нова­ние, цена, ка­тего­рия и прочее. Эти данные оп­ре­деля­ют объекты, хранимые в базе данных.

Был ре­али­зован поиск с учетом мор­фо­логии, до­бав­ле­на не­об­хо­димая при­ори­тет­ность поиска, скор­ректи­рова­но раз­би­ение фразы на токены, пе­рера­ботан поиск по ключевым словам. Токены пред­став­ля­ют из себя массив слов из которых состоит запрос. Например, то­кени­затор пробелов, который ис­поль­зу­ет­ся по стан­дарту, разделит текст на токены, когда увидит пробел. Текст «Быстрая ко­рич­не­вая лиса!» Пре­об­ра­зу­ет­ся в [«Быстро», «ко­рич­не­вая», «лиса!»].

В работе ис­поль­зо­вана по­ис­ко­вая система Elasticsearch, которая работает с от­дель­ной базой данных. Elasticsearch пре­дос­тавля­ет сле­ду­ющие воз­можнос­ти:

  • Авто­мати­чес­кую ин­декса­цию новых JSON-объектов, которые заг­ру­жа­ют­ся в базу и сразу ста­новят­ся дос­тупны­ми для поиска, за счет от­сутс­твия схемы согласно типичной NoSQL-кон­цепции. Это поз­во­ля­ет ускорить про­тоти­пиро­вание по­ис­ко­вых Big Data решений;
  • Гибкость по­ис­ко­вых фильтров, включая нечеткий поиск и муль­ти­арен­дность, когда в рамках одного объекта ES можно ди­нами­чес­ки ор­га­низо­вать нес­коль­ко раз­личных по­ис­ко­вых систем;
  • Наличие встро­ен­ных ана­лиза­торов текста поз­во­ля­ет Elasticsearch ав­то­мати­чес­ки вы­пол­нять то­кени­зацию, лем­ма­тиза­цию - процесс при­веде­ния сло­вофор­мы к её нор­маль­ной (сло­вар­ной) форме, стемминг - это процесс на­хож­де­ния основы слова для за­дан­но­го ис­ходно­го слова и прочие пре­об­ра­зова­ния для решения NLP-задач, свя­зан­ных с поиском данных.

Поиск про­ис­хо­дит по сле­ду­юще­му ал­го­рит­му:

  1. Соз­да­ет­ся и нас­тра­ива­ет­ся запрос, со­дер­жа­щий сле­ду­ющие па­рамет­ры:
    a. type – тип запроса;
    b. fields – поля по которым про­ис­хо­дит поиск и их при­ори­тет­ность;
    c. query – сам запрос;
    d. minimum_should_match – ко­личес­тво знаков на сколько ре­зуль­тат может от­ли­чать­ся от запроса.
  2. Запрос подается на вход ана­лиза­тору.
  3. Ана­лиза­тор раз­би­ва­ет запрос на токены, ис­поль­зуя фильтры.
  4. Про­из­во­дит­ся поиск по заданным полям и сор­ти­ру­ет­ся в за­виси­мос­ти от заданных настроек запроса.
  5. Воз­вра­ща­ет­ся список ре­зуль­татов.

Поиск, по ключевым словам, ре­али­зован с помощью ана­лиза­тора «keyword», который под­ра­зуме­ва­ет полное вхож­де­ние запроса в ре­зуль­тат, учи­тыва­ющий регистр букв, пробелы и спе­ци­аль­ные знаки.

Учет мор­фо­логии под­ра­зуме­ва­ет раз­би­ение запроса по таким частям как предлоги, частицы и др. С помощью мор­фо­логии запрос раз­би­ва­ется на токены, пред­став­ля­ющие из себя основу слова, например, «отвертка» после работы ана­лиза­тора будет пред­став­лять из себя «отвертк».

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

Заказ­чи­ку были пре­дос­тавле­ны кон­суль­та­ции по тон­костям работы и нас­трой­ке поиска.

  • Технологии:
  • JavaScript
  • Elasticsearch
  • Python
  • Django

Разработка модификаций для Nolim

Проблема и решение

Nolim — команда, которая об­ра­тилась к нам для по­луче­ния помощи в ре­али­зации мо­дифи­каций для Tilda, по­пуляр­ной плат­формы для создания веб-сайтов без прог­рамми­рова­ния. «Нолим» за­нима­ет­ся раз­ра­бот­кой и ин­тегра­ци­ей кас­томных фун­кци­ональ­ных воз­можнос­тей для Tilda, чтобы удов­летво­рить спе­цифи­чес­кие тре­бова­ния и пот­ребнос­ти своих клиентов.

Улуч­ше­ние воз­можнос­тей Tilda

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

Мно­гоп­латфор­менная под­дер­жка

Для обес­пе­чения мак­си­маль­ной сов­мести­мос­ти и от­зывчи­вос­ти веб-сайтов, раз­ра­ботан­ных с помощью Tilda, мы уделяли особое внимание кросс-бра­узер­ной сов­мести­мос­ти и адап­тивно­му дизайну. Неза­виси­мо от ус­трой­ства или браузера, поль­зо­вате­ли могут получить оди­нако­во ка­чес­твен­ный опыт ис­поль­зо­вания сайта, бла­года­ря работе по оп­ти­миза­ции и тес­ти­рова­нию.

Воз­можнос­ти нас­тра­ива­емо­го дизайна

С помощью CSS, jQuery и JavaScript мы соз­да­вали нас­тра­ива­емые элементы дизайна для Nolim на основе их уни­каль­ных брен­до­вых иден­ти­фика­торов. Это включало раз­ра­бот­ку нас­тра­ива­емых шрифтов, цветовых схем, стилей кнопок, анимаций и пе­рехо­дов между раз­де­лами веб-сайта. Таким образом, Nolim могли пре­дос­тавлять клиентам пол­ностью пер­со­нали­зиро­ван­ные веб-страницы, со­от­ветс­тву­ющие их ин­ди­виду­аль­ным пот­ребнос­тям и ви­зу­аль­ным пред­почте­ни­ям.

Бизнес-ре­зуль­та­ты

Бла­года­ря сот­рудни­чес­тву с нами Nolim смогли удов­летво­рить тре­бова­ния своих клиентов, пред­ла­гая ин­ди­виду­аль­ные решения на основе Tilda, а также обес­пе­чить более высокий уровень фун­кци­ональ­нос­ти и про­из­во­дитель­нос­ти их сайтов. Это поз­во­лило за­каз­чи­ку укрепить свое при­сутс­твие на рынке и привлечь новых клиентов.

Инно­вации и качество

Мы гордимся тем, что смогли помочь команде Nolim за короткий про­межу­ток дать много ка­чес­твен­ных мо­дифи­каций для Tilda. Наш подход к работе был основан на высоком качестве кода, ис­поль­зо­вании сов­ре­мен­ных тех­но­логий и пос­то­ян­ной ин­но­ваци­он­ной мысли. Мы стре­мились создать гибкое и эф­фектив­ное решение, которое вы­деля­ет­ся среди раз­ра­боток кон­ку­рен­тов и спо­собс­тву­ет даль­ней­ше­му успеху бизнеса Nolim.

Зак­лю­чение

Сот­рудни­чес­тво с командой Nolim было зах­ва­тыва­ющим и успешным опытом. Наш вклад в ре­али­зацию мо­дифи­каций для Tilda дал Nolim кон­ку­рен­тное пре­иму­щес­тво и помог им привлечь больше клиентов. Мы гордимся тем, что наша работа спо­собс­тво­вала успеху за­каз­чи­ка. А работа поль­зо­вате­лей стала зна­читель­но проще и эф­фектив­нее, при ис­поль­зо­вании об­новлен­ных инс­тру­мен­тов.


  • Технологии:
  • JavaScript
  • jQuery
  • HTML
  • Three.js
  • TweenMax.js

Team-Finder: доработка и рефакторинг сервиса по подбору игроков и команд

Сервис team-finder.ru был запущен в 2019 году группой эн­ту­зи­ас­тов футбола, которые хотели об­легчить людям занятие любимым видом спорта. С помощью сервиса team-finder.ru игроки в футбол любого уровня могут искать команду, а команды — игроков.

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

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

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

По итогу все ошибки, воз­ни­ка­ющие при работе в личном кабинете сервиса, были ус­тра­нены. Также были внесены из­ме­нения в верстку, которые поз­во­лили более красиво отоб­ра­жать карточки игроков.

  • Технологии:
  • PHP
  • Laravel Framework

Приложение для умного дома

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

При­ложе­ние раз­ра­бота­но на основе открытой бес­плат­ной плат­формы openHAB, вклю­ча­ющей в себя также и сер­верную часть.

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

Наиболее зна­читель­ным и ин­те­рес­ным моментом было до­бав­ле­ние в при­ложе­ние воз­можнос­ти создания сце­нари­ев. Сценарий пред­став­ля­ет из себя ло­гичес­кую связку из условия и действий «если, то», что поз­во­ля­ет связать из­ме­нение сос­то­яния датчика с уп­равле­ни­ем ус­трой­ством, тем самым ав­то­мати­зиро­вав уп­равле­ние. К примеру, открыли дверь - сработал датчик двери - вклю­чил­ся свет; все ушли на работу - в 8:00 вклю­чил­ся сценарий «Никого нет дома» - свет и кон­ди­ци­оне­ры вык­лю­чились. Можно не только включать/вык­лю­чать ус­трой­ства или сценарии, но и от­прав­лять push-уве­дом­ле­ния или со­об­ще­ния в Телеграм.

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

 

  • Технологии:
  • Firebase
  • Kotlin
  • Swift
  • Mockito

  • Технологии:
  • Docker
  • Python
  • Selenium

Сервис поиска и выбора отелей и мест для отдыха Inntravel

К нам об­ра­тил­ся заказчик для до­работ­ки сервиса Inntravel.ru — сайта выгодных пу­тешес­твий по России. Задача на первый взгляд не­боль­шая — поп­ра­вить логику отоб­ра­жения и филь­тра­ции отелей.

Заказчик был уверен, что сайт почти готов.

С какими труд­ностя­ми мы стол­кну­лись

При изучении проекта мы стол­кну­лись с не­ожи­дан­ны­ми вызовами. Ока­залось, что термин «почти готов» в этом кон­тек­сте означал, что готов был только «каркас» проекта. В час­тнос­ти, об­на­ружи­ли, что база данных содержит только сырые SQL-запросы, а система backend'а не струк­ту­риро­вана. Даже при простой попытке раз­вернуть проект для ло­каль­ной раз­ра­бот­ки и анализа кода пришлось ис­пра­вить большое ко­личес­тво ошибок. Как ре­зуль­тат, проект на­ходил­ся в пол­ностью не­завер­шенном сос­то­янии и требовал зна­читель­ной работы для со­от­ветс­твия тре­бова­ни­ям стан­дар­тно­го пол­но­цен­но­го сайта.

Что мы делали

  1. Backend проекта был написан на Flask. Для вза­имо­дей­ствия с базой данных приняли решение ин­тегри­ровать биб­ли­оте­ки SQLAlchemy (ORM для вза­имо­дей­ствия с базой данных) и Alembic (для уп­равле­ния миг­ра­ци­ями базы данных) в уже су­щес­тву­ющий код.

Все ранее су­щес­тву­ющие SQL-запросы пе­репи­сали через новый ORM и создали со­от­ветс­тву­ющие модели, опи­сыва­ющие струк­ту­ру базы данных. Это было не­об­хо­димо как для ис­поль­зо­вания SQLAlchemy, так и для работы с Alembic. В ре­зуль­тате этих из­ме­нений зна­читель­ная часть пре­дыду­щего кода была пе­рера­бота­на, ис­пра­вили большое ко­личес­тво ошибок, добавили ди­нами­чес­кий контент в ста­тич­ные элементы сайта.

  1. Также были успешно ин­тегри­рова­ны пла­теж­ные системы: система быстрых платежей (СБП) и «Альфа-банк». Это решение поз­во­лило поль­зо­вате­лям сайта выбирать оп­ти­маль­ный способ оплаты и сделало процесс про­веде­ния тран­закций более удобным и гибким.



  2. Создали систему по указанию цен на кон­крет­ную комнату в отеле в пределах от одного дня и до всего года.



  3. Раз­ра­бота­ли новый личный кабинет для поль­зо­вате­лей, который поз­во­ля­ет им соз­да­вать и ре­дак­ти­ровать ин­форма­цию об отелях, а также осу­щест­влять покупку и прод­ле­ние подписок.



  4. Добавили парсер для сбора данных по сайту hochu-na-yuga и создания на основе этих данных отелей на сайте за­каз­чи­ка. Для его работы ин­тегри­рова­ли систему по запуску фоновых задач через Celery.



  5. Также провели большое ко­личес­тво работ с frontend-частью проекта. Несмотря на то что у за­каз­чи­ка уже были готовые шаблоны, во многих аспектах они не удов­летво­ряли пот­ребнос­тям.

 

Выводы

В конечном итоге можно сказать, что большая часть работ кос­ну­лась backend-части. Главной задачей было уйти от старой струк­ту­ры проекта, добавить больше воз­можнос­тей по нас­трой­ке контента через ад­минпа­нель, улучшить про­из­во­дитель­ность и «вылечить» все най­ден­ные ошибки. А также, конечно, вы­пол­нить все пос­тавлен­ные за­каз­чи­ком задачи.

 

  • Технологии:
  • Celery
  • Python
  • PostgreSQL
  • Jinja2
  • Redis
  • Flask
  • SQLAlchemy
  • Alembic

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • PHP
  • Joomla
  • Yandex SpeechKit

  • Технологии:
  • Celery
  • Docker
  • Vue.js
  • Python
  • FastAPI
  • Httpx Python
  • Isort
  • Pottery
  • Pydantic
  • Uvicorn
  • Uvloop
  • Drf-yasg
  • Psycopg2
  • Pillow
  • IP2Location
  • PySocks
  • Requests Python
  • Quasar
  • Black Python
  • Redis
  • Pinia

  • Технологии:
  • Typescript
  • CSS
  • Vue.js
  • HTML
  • Ant Design

  • Технологии:
  • C#
  • .Net
  • Docker
  • Angular
  • PostgreSQL

Юридический портал ILEGG.ru

Недавно к нам об­ра­тил­ся под­рядчик itway.ru и передал подряд на до­работ­ку портала юри­дичес­ких услуг - ILEGG.ru с задачей улучшить их сайт и рас­ши­рить су­щес­тву­ющий фун­кци­онал.

Плат­форма ILEGG.ru поз­во­ля­ет получить быстрые юри­дичес­кие кон­суль­та­ции фи­зичес­ким лицам и пред­ста­вите­лям раз­лично­го бизнеса. На сайте пред­став­ле­но более 250 юристов, ра­бота­ющих в разных областях права. Все кон­суль­та­ции пре­дос­тавля­ют­ся онлайн.

Задачи

На сайте ILEGG.ru много юристов и пос­то­ян­ных по­сети­телей. Команде аг­ре­гато­ра пот­ре­бова­лось мо­дер­ни­зиро­вать сайт, чтобы спе­ци­алис­ты смогли с ком­фортом вести ком­мерчес­кую де­ятель­ность, а клиенты – удаленно оп­ла­чивать услуги. С этими зап­ро­сами они об­ра­тились к нам, в Softorium.

Вот задачи, которые стояли перед нами:

  1. Раз­ра­ботать систему мо­нети­зации услуг.
  2. Дора­ботать личный кабинет поль­зо­вате­ля.
  3. Внедрить систему ре­комен­да­ций.
  4. Изменить главную страницу портала.

Что мы сделали

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

Система мо­нети­зации услуг

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

Главной задачей для наших спе­ци­алис­тов стало создание бе­зопас­но­го и на­деж­но­го сервиса, спо­соб­но­го быстро об­ра­баты­вать денежные тран­закции.

Форма создания платных заявок была встроена в уже име­ющу­юся струк­ту­ру юри­дичес­ко­го аг­ре­гато­ра с учетом су­щес­тву­ющей ар­хи­тек­ту­ры сайта.

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

Внед­ре­ние системы ре­комен­да­ций

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

Дора­бот­ка личного кабинета поль­зо­вате­ля

Мы создали 3 уни­каль­ные формы профиля поль­зо­вате­ля – для юристов, для клиентов и для юри­дичес­ких компаний. В ходе работы был про­из­ве­ден тща­тель­ный анализ по­сети­телей аг­ре­гато­ра и выделены главные осо­бен­ности каждой группы.

Профиль клиента

Ре­али­зован в виде стан­дар­тной поль­зо­ватель­ской анкеты. Эта группа по­сети­телей сайта не обладает рас­ши­рен­ны­ми правами и дос­ту­пами, так как единс­твен­ная цель клиента – по­луче­ние ка­чес­твен­ной юри­дичес­кой помощи.

Профиль частного юриста

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

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

Для ве­рифи­кации тре­бу­ет­ся заг­ру­зить скан паспорта. Нами также была ре­али­зова­на воз­можность привязки профиля спе­ци­алис­та к со­ци­аль­ным сетям.

Профиль юри­дичес­кой компании

Запол­не­ние профиля юри­дичес­кой компании осу­щест­вля­ет­ся по аналогии с профилем частного юриста. Мы добавили в анкету блок «Рек­ви­зиты». Инфор­ма­ция туда до­бав­ля­ет­ся ав­то­мати­чес­ки из открытых ис­точни­ков после ввода на­име­нова­ния ор­га­низа­ции.

Изме­нение главной страницы

Раз­мести­ли на главной странице ин­форма­цию о том, как работает аг­ре­гатор и как рас­счи­тыва­ет­ся сто­имость услуг юристов. Сущес­тву­ющие ин­форма­ци­он­ные блоки были от­ре­дак­ти­рова­ны.

Ход проекта

  1. Иссле­дова­ние ин­терфей­са и фун­кци­онала юри­дичес­ко­го аг­ре­гато­ра.
  2. Анализ основных тре­бова­ний поль­зо­вате­лей.
  3. Раз­ра­бот­ка не­об­хо­димых клиенту систем.
  4. Тес­ти­рова­ние и внед­ре­ние об­новлен­но­го фун­кци­онала.

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • CSS
  • Ajax
  • PHP
  • HTML
  • Laravel Framework

Программное обеспечение «Раскрои»

Компания «Тех­но­робот» за­нима­ет­ся ав­то­мати­заци­ей про­из­водс­твен­ных про­цес­сов на базе про­мыш­ленных роботов FANUC и KUKA.

Клиенты компании просили немного до­рабо­тать прог­рамму сос­тавле­ния раскроев для машины резки профиля. Прог­рам­мное обес­пе­чение «Раскрои» поз­во­ля­ет про­ек­ти­ровать детали и фор­ми­ру­ет файл с па­рамет­ра­ми деталей в раскроях, который от­прав­ля­ет­ся на машины линии резки профиля. Их прог­рам­мное обес­пе­чение берет из файла данные для резки.

Что мы сделали

Мы до­рабо­тали ин­терфейс и фун­кци­ональ­ность прог­раммы для удобства поль­зо­вате­лей. Теперь в прог­рамме можно делать мас­шта­биро­вание при ре­дак­ти­рова­нии 2D-отоб­ра­жения детали и от­прав­лять на станок нес­коль­ко раскроев од­новре­мен­но.

А еще

Провели отладку фун­кци­ональ­нос­ти ко­пиро­вания и удаления резов, также добавили до­пол­ни­тель­ные па­рамет­ры резов и до­рабо­тали редактор деталей.

  • Технологии:
  • C#
  • WPF

Доработка сервиса Wi-Fi аналитики HVALA

HVALA пре­дос­тавля­ет своим поль­зо­вате­лям услуги Wi-Fi, а также сервис ав­то­риза­ции с ана­лити­кой и мар­ке­тин­го­выми инс­тру­мен­та­ми.

Кли­ен­та­ми сервиса являются кафе, рес­то­раны, гос­ти­ницы, пре­дос­тавля­ющие своим гостям доступ к ин­терне­ту.

HVALA поз­во­ля­ет получить отчеты о по­сети­телях и пре­дос­тавля­ет мар­ке­тин­го­вые инс­тру­мен­ты: ин­форми­рова­ние об акциях, опросы, сбор отзывов, и другое. Отчеты о гостях содержат ин­форма­цию о поле, возрасте, MAC-адресе, ко­личес­тве по­сеще­ний, пос­леднем визите, дне рождения гостей и тд. С помощью личного кабинета можно нас­тро­ить тар­ге­тиро­ван­ную рекламу в рек­ламных сетях.

К сети HVALA под­клю­чено более 1000 за­веде­ний на тер­ри­тории России, Казах­ста­на и Узбе­кис­та­на.

Спе­ци­алис­ты Softorium вы­пол­ни­ли ин­тегра­цию с новым дизайном админки, до­рабо­тали способы ав­то­риза­ции, систему отчетов.

 

 

  • Технологии:
  • JavaScript
  • jQuery
  • CSS
  • PHP
  • HTML

Маркетплейс одежды

Перед нами стояла задача создания мар­кет­плей­са одежды за­рубеж­ных пос­тавщи­ков на базе решения от 1С‑Битрикс. В ходе работ была про­веде­на адап­та­ции ядра Битрикс под тре­бова­ния за­каз­чи­ка: до­рабо­тана корзина, карточка товара, создан ком­по­нент рас­про­дажи. Раз­ра­бота­ны модули для ин­тегра­ций с пла­теж­ной системой CONTACT PAY, сервисом доставки Почты России, RetailCRM, сервисом e‑mail мар­ке­тин­га Mailganer.

Кроме того, был раз­ра­ботан модуль син­хро­низа­ции каталога с сайтом пос­тавщи­ка, для ежед­невной ак­ту­али­зации каталога с 75 000+ позиций. Написан модуль перевода, ин­тегри­рован­ный с модулем импорта: на входе файл на языке пос­тавщи­ка, на выходе ─ каталог товаров на русском языке.

Был проведен аудит хостинга для выбора оп­ти­маль­но­го решения по со­от­но­шению про­из­во­дитель­нос­ти и сто­имос­ти.

  • Технологии:
  • jQuery
  • CSS
  • Bitrix
  • Ajax
  • RetailCRM
  • CONTACT PAY
  • JS
  • PHP
  • HTML

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Симулятор Генерального Директора

Интег­ра­ции пла­теж­ной системы в игру «Симу­лятор Гене­раль­но­го Дирек­то­ра» SGD Игра пред­став­ля­ет собой глубоко мо­дер­ни­зиро­ван­ный алгоритм - квест делового района Москвы у метро Бело­рус­ская, дающий полное пог­ру­жение в мир пред­при­нима­теля-эк­спор­те­ра. Игроку пред­сто­ит пройти путь от открытия валютных счетов до поставки своей про­дук­ции за­рубеж­ным по­купа­телям. Квест сос­тавлен мак­си­маль­но приб­ли­жен­ным к реалиям жизни. Все пер­со­нажи: та­можен­ный пред­ста­витель, юристы, сот­рудни­ки юри­дичес­ко­го отдела банка, иные «слу­чай­ные» люди - взяты из де­лоп­ро­из­водс­твен­ной жизни.

В ходе сов­мес­тной работы с раз­ра­бот­чи­ками игры была вы­пол­не­на ин­тегра­ция пла­теж­ной системы Робо­кас­са и про­из­ве­дены до­работ­ки ос­новно­го сайта с доступом в игру.

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Модернизация системы учёта рабочего времени сотрудников

Рост бизнеса сложно пред­ста­вить без развития систем ав­то­мати­зации. FORA – одна из ведущих компаний на рынке Казах­ста­на в сфере продаж цифровой техники. Ее история началась в 1997 с не­боль­шо­го офиса в городе Актобе. Сейчас компания работает в го­сударс­твен­ных закупках, а также в сфере оптовых и роз­ничных продаж, в том числе онлайн.

FORA ис­поль­зу­ет прог­рам­мный комплекс ав­то­мати­зации учёта рабочего времени сот­рудни­ков, вклю­ча­ющий мо­биль­ное и веб- при­ложе­ния. Регис­тра­ция рабочего времени осу­щест­вля­ет­ся путём ска­ниро­вания, сфор­ми­рован­но­го в системе QR-кода: открытие/закрытие дня. Система собирает ин­форма­цию по каждому сот­рудни­ку и пре­дос­тавля­ет ад­ми­нис­тра­тору воз­можность прос­мотра ста­тис­ти­ки и фор­ми­рова­ния отчетов.

Развитие сети ма­гази­нов FORA пот­ре­бова­ло мо­дер­ни­зации системы и до­работ­ки ее фун­кци­она­ла. Мобиль­ное при­ложе­ние, вы­пол­ненное на Qt, было пол­ностью пе­репи­сано на Kotlin Multiplatform для уп­ро­щения его соп­ро­вож­де­ния и об­слу­жива­ния. Это также помогло из­ба­вить­ся от старой ре­али­зации Qt QML и улучшить сов­мести­мость с новыми версиями NDK. Исполь­зо­вание муль­тип­латфор­менно­го решения сок­ра­тило время на на­писа­ние кода для мо­биль­ных при­ложе­ний Android и iOS. Большая часть логики вынесена в общий модуль, за ис­клю­чени­ем макетов экранов и фун­кци­она­ла рас­позна­вания QR-кода.

В ходе до­работ­ки системы была до­бав­ле­на функция по­луче­ния ге­оло­кации сот­рудни­ка при ре­гис­тра­ции. Это поз­во­лило на основе ге­одан­ных при­вязы­вать сот­рудни­ка к ор­га­низа­ции про­филь­но­го под­разде­ления объекта за­каз­чи­ка. Также был до­рабо­тан фун­кци­онал сервера, по­высив­ший бе­зопас­ность пе­реда­ва­емых данных и сок­ра­тив­ший трафик между сервером и клиентом.



  • Технологии:
  • C#
  • Entity Framework
  • Kotlin Multiplatform
  • ASP.NET
  • Qt
  • QML
  • Swift

Разработка desktop -приложения для интеграции онлайн ERP-системы с POS-терминалами

ERP-система ProSklad со­от­ветс­тву­ет тре­бова­ни­ям трех­компо­нен­тной ин­тегри­рован­ной системы (далее ТИС). ProSklad работает как веб-при­ложе­ние (SPA на Vue.js). Одним из тре­бова­ний к ТИС является ин­тегра­ция с POS-тер­ми­нала­ми раз­личных банков. Под ин­тегра­ци­ей под­ра­зуме­ва­ет­ся процесс, когда поль­зо­ватель ини­ци­иру­ет оплату в веб-при­ложе­нии, а терминал ав­то­мати­чес­ки под­хва­тыва­ет сумму и готов принять платеж.

Раз­ра­бот­ка desktop-при­ложе­ния зак­лю­чалась в про­ек­ти­рова­нии и раз­ра­бот­ке модуля, свя­зыва­юще­го POS-тер­ми­налы раз­личных банков и ERP-систему. Раз­ра­бот­чи­кам ProSklad больше не нужно знать об осо­бен­ностях работы раз­личных POS-тер­ми­налов, их раз­но­род­ных API и биб­ли­отек. Модуль позволят ис­поль­зо­вать единый ин­терфейс для работы с POS-тер­ми­нала­ми. Под­дер­жка каждого нового банка или тер­ми­нала осу­щест­вля­ет­ся в самом модуле без не­об­хо­димос­ти вносить из­ме­нения в ERP-систему ProSklad. Таким образом, раз­ра­бот­ка desktop-при­ложе­ния поз­во­лила привлечь новых пот­ре­бите­лей и рас­ши­рить список банков-эк­вай­еров, под­клю­чение которых ранее было зат­рудни­тель­но.

  • Технологии:
  • C#
  • .Net
  • С++/CLI
  • RS-232
  • Windows Forms
  • Websocket

CRM-система Relays для управления QR-кодами

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

Заказчик об­ра­тил­ся с не­завер­шенным проектом. Нами была за­кон­че­на раз­ра­бот­ка CRM-системы, под­клю­чен модуль перевода ин­форма­ции о товаре, до­рабо­тан личный кабинет поль­зо­вате­ля, раз­ра­ботан визард для об­легче­ния освоения прин­ци­пов работы поль­зо­вате­ля в системе, до­рабо­тана ад­ми­нис­тра­тив­ная панель сайта, про­веде­на отладка раз­личных частей системы.

  • Технологии:
  • Nuxt.js
  • MySQL
  • Symfony
  • Docker
  • Node.js
  • PM2
  • Vue.js

Разработка умного поиска с учетом морфологии в BigData решениях

Заказчик – пос­тавщик и арен­до­датель обо­рудо­вания для ат­трак­ци­онов. Перед нами была пос­тавле­на задача раз­ра­бот­ки умного поиска по сайту https://www.art-active.ru/. Также тре­бова­лось раз­ра­ботать парсинг с сайта по его фиду - потоку контента, который ав­то­мати­чес­ки под­гру­жа­ет­ся блоками на веб-странице или в при­ложе­нии.

Фид пред­став­ля­ет из себя XML-файл, со­дер­жа­щий всю ин­форма­цию, о товарах, отоб­ра­жа­ющу­юся на сайте: на­име­нова­ние, цена, ка­тего­рия и прочее. Эти данные оп­ре­деля­ют объекты, хранимые в базе данных.

Был ре­али­зован поиск с учетом мор­фо­логии, до­бав­ле­на не­об­хо­димая при­ори­тет­ность поиска, скор­ректи­рова­но раз­би­ение фразы на токены, пе­рера­ботан поиск по ключевым словам. Токены пред­став­ля­ют из себя массив слов из которых состоит запрос. Например, то­кени­затор пробелов, который ис­поль­зу­ет­ся по стан­дарту, разделит текст на токены, когда увидит пробел. Текст «Быстрая ко­рич­не­вая лиса!» Пре­об­ра­зу­ет­ся в [«Быстро», «ко­рич­не­вая», «лиса!»].

В работе ис­поль­зо­вана по­ис­ко­вая система Elasticsearch, которая работает с от­дель­ной базой данных. Elasticsearch пре­дос­тавля­ет сле­ду­ющие воз­можнос­ти:

  • Авто­мати­чес­кую ин­декса­цию новых JSON-объектов, которые заг­ру­жа­ют­ся в базу и сразу ста­новят­ся дос­тупны­ми для поиска, за счет от­сутс­твия схемы согласно типичной NoSQL-кон­цепции. Это поз­во­ля­ет ускорить про­тоти­пиро­вание по­ис­ко­вых Big Data решений;
  • Гибкость по­ис­ко­вых фильтров, включая нечеткий поиск и муль­ти­арен­дность, когда в рамках одного объекта ES можно ди­нами­чес­ки ор­га­низо­вать нес­коль­ко раз­личных по­ис­ко­вых систем;
  • Наличие встро­ен­ных ана­лиза­торов текста поз­во­ля­ет Elasticsearch ав­то­мати­чес­ки вы­пол­нять то­кени­зацию, лем­ма­тиза­цию - процесс при­веде­ния сло­вофор­мы к её нор­маль­ной (сло­вар­ной) форме, стемминг - это процесс на­хож­де­ния основы слова для за­дан­но­го ис­ходно­го слова и прочие пре­об­ра­зова­ния для решения NLP-задач, свя­зан­ных с поиском данных.

Поиск про­ис­хо­дит по сле­ду­юще­му ал­го­рит­му:

  1. Соз­да­ет­ся и нас­тра­ива­ет­ся запрос, со­дер­жа­щий сле­ду­ющие па­рамет­ры:
    a. type – тип запроса;
    b. fields – поля по которым про­ис­хо­дит поиск и их при­ори­тет­ность;
    c. query – сам запрос;
    d. minimum_should_match – ко­личес­тво знаков на сколько ре­зуль­тат может от­ли­чать­ся от запроса.
  2. Запрос подается на вход ана­лиза­тору.
  3. Ана­лиза­тор раз­би­ва­ет запрос на токены, ис­поль­зуя фильтры.
  4. Про­из­во­дит­ся поиск по заданным полям и сор­ти­ру­ет­ся в за­виси­мос­ти от заданных настроек запроса.
  5. Воз­вра­ща­ет­ся список ре­зуль­татов.

Поиск, по ключевым словам, ре­али­зован с помощью ана­лиза­тора «keyword», который под­ра­зуме­ва­ет полное вхож­де­ние запроса в ре­зуль­тат, учи­тыва­ющий регистр букв, пробелы и спе­ци­аль­ные знаки.

Учет мор­фо­логии под­ра­зуме­ва­ет раз­би­ение запроса по таким частям как предлоги, частицы и др. С помощью мор­фо­логии запрос раз­би­ва­ется на токены, пред­став­ля­ющие из себя основу слова, например, «отвертка» после работы ана­лиза­тора будет пред­став­лять из себя «отвертк».

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

Заказ­чи­ку были пре­дос­тавле­ны кон­суль­та­ции по тон­костям работы и нас­трой­ке поиска.

  • Технологии:
  • JavaScript
  • Elasticsearch
  • Python
  • Django

Разработка модификаций для Nolim

Проблема и решение

Nolim — команда, которая об­ра­тилась к нам для по­луче­ния помощи в ре­али­зации мо­дифи­каций для Tilda, по­пуляр­ной плат­формы для создания веб-сайтов без прог­рамми­рова­ния. «Нолим» за­нима­ет­ся раз­ра­бот­кой и ин­тегра­ци­ей кас­томных фун­кци­ональ­ных воз­можнос­тей для Tilda, чтобы удов­летво­рить спе­цифи­чес­кие тре­бова­ния и пот­ребнос­ти своих клиентов.

Улуч­ше­ние воз­можнос­тей Tilda

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

Мно­гоп­латфор­менная под­дер­жка

Для обес­пе­чения мак­си­маль­ной сов­мести­мос­ти и от­зывчи­вос­ти веб-сайтов, раз­ра­ботан­ных с помощью Tilda, мы уделяли особое внимание кросс-бра­узер­ной сов­мести­мос­ти и адап­тивно­му дизайну. Неза­виси­мо от ус­трой­ства или браузера, поль­зо­вате­ли могут получить оди­нако­во ка­чес­твен­ный опыт ис­поль­зо­вания сайта, бла­года­ря работе по оп­ти­миза­ции и тес­ти­рова­нию.

Воз­можнос­ти нас­тра­ива­емо­го дизайна

С помощью CSS, jQuery и JavaScript мы соз­да­вали нас­тра­ива­емые элементы дизайна для Nolim на основе их уни­каль­ных брен­до­вых иден­ти­фика­торов. Это включало раз­ра­бот­ку нас­тра­ива­емых шрифтов, цветовых схем, стилей кнопок, анимаций и пе­рехо­дов между раз­де­лами веб-сайта. Таким образом, Nolim могли пре­дос­тавлять клиентам пол­ностью пер­со­нали­зиро­ван­ные веб-страницы, со­от­ветс­тву­ющие их ин­ди­виду­аль­ным пот­ребнос­тям и ви­зу­аль­ным пред­почте­ни­ям.

Бизнес-ре­зуль­та­ты

Бла­года­ря сот­рудни­чес­тву с нами Nolim смогли удов­летво­рить тре­бова­ния своих клиентов, пред­ла­гая ин­ди­виду­аль­ные решения на основе Tilda, а также обес­пе­чить более высокий уровень фун­кци­ональ­нос­ти и про­из­во­дитель­нос­ти их сайтов. Это поз­во­лило за­каз­чи­ку укрепить свое при­сутс­твие на рынке и привлечь новых клиентов.

Инно­вации и качество

Мы гордимся тем, что смогли помочь команде Nolim за короткий про­межу­ток дать много ка­чес­твен­ных мо­дифи­каций для Tilda. Наш подход к работе был основан на высоком качестве кода, ис­поль­зо­вании сов­ре­мен­ных тех­но­логий и пос­то­ян­ной ин­но­ваци­он­ной мысли. Мы стре­мились создать гибкое и эф­фектив­ное решение, которое вы­деля­ет­ся среди раз­ра­боток кон­ку­рен­тов и спо­собс­тву­ет даль­ней­ше­му успеху бизнеса Nolim.

Зак­лю­чение

Сот­рудни­чес­тво с командой Nolim было зах­ва­тыва­ющим и успешным опытом. Наш вклад в ре­али­зацию мо­дифи­каций для Tilda дал Nolim кон­ку­рен­тное пре­иму­щес­тво и помог им привлечь больше клиентов. Мы гордимся тем, что наша работа спо­собс­тво­вала успеху за­каз­чи­ка. А работа поль­зо­вате­лей стала зна­читель­но проще и эф­фектив­нее, при ис­поль­зо­вании об­новлен­ных инс­тру­мен­тов.


  • Технологии:
  • JavaScript
  • jQuery
  • HTML
  • Three.js
  • TweenMax.js

Team-Finder: доработка и рефакторинг сервиса по подбору игроков и команд

Сервис team-finder.ru был запущен в 2019 году группой эн­ту­зи­ас­тов футбола, которые хотели об­легчить людям занятие любимым видом спорта. С помощью сервиса team-finder.ru игроки в футбол любого уровня могут искать команду, а команды — игроков.

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

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

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

По итогу все ошибки, воз­ни­ка­ющие при работе в личном кабинете сервиса, были ус­тра­нены. Также были внесены из­ме­нения в верстку, которые поз­во­лили более красиво отоб­ра­жать карточки игроков.

  • Технологии:
  • PHP
  • Laravel Framework

Приложение для умного дома

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

При­ложе­ние раз­ра­бота­но на основе открытой бес­плат­ной плат­формы openHAB, вклю­ча­ющей в себя также и сер­верную часть.

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

Наиболее зна­читель­ным и ин­те­рес­ным моментом было до­бав­ле­ние в при­ложе­ние воз­можнос­ти создания сце­нари­ев. Сценарий пред­став­ля­ет из себя ло­гичес­кую связку из условия и действий «если, то», что поз­во­ля­ет связать из­ме­нение сос­то­яния датчика с уп­равле­ни­ем ус­трой­ством, тем самым ав­то­мати­зиро­вав уп­равле­ние. К примеру, открыли дверь - сработал датчик двери - вклю­чил­ся свет; все ушли на работу - в 8:00 вклю­чил­ся сценарий «Никого нет дома» - свет и кон­ди­ци­оне­ры вык­лю­чились. Можно не только включать/вык­лю­чать ус­трой­ства или сценарии, но и от­прав­лять push-уве­дом­ле­ния или со­об­ще­ния в Телеграм.

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

 

  • Технологии:
  • Firebase
  • Kotlin
  • Swift
  • Mockito

  • Технологии:
  • Docker
  • Python
  • Selenium

Сервис поиска и выбора отелей и мест для отдыха Inntravel

К нам об­ра­тил­ся заказчик для до­работ­ки сервиса Inntravel.ru — сайта выгодных пу­тешес­твий по России. Задача на первый взгляд не­боль­шая — поп­ра­вить логику отоб­ра­жения и филь­тра­ции отелей.

Заказчик был уверен, что сайт почти готов.

С какими труд­ностя­ми мы стол­кну­лись

При изучении проекта мы стол­кну­лись с не­ожи­дан­ны­ми вызовами. Ока­залось, что термин «почти готов» в этом кон­тек­сте означал, что готов был только «каркас» проекта. В час­тнос­ти, об­на­ружи­ли, что база данных содержит только сырые SQL-запросы, а система backend'а не струк­ту­риро­вана. Даже при простой попытке раз­вернуть проект для ло­каль­ной раз­ра­бот­ки и анализа кода пришлось ис­пра­вить большое ко­личес­тво ошибок. Как ре­зуль­тат, проект на­ходил­ся в пол­ностью не­завер­шенном сос­то­янии и требовал зна­читель­ной работы для со­от­ветс­твия тре­бова­ни­ям стан­дар­тно­го пол­но­цен­но­го сайта.

Что мы делали

  1. Backend проекта был написан на Flask. Для вза­имо­дей­ствия с базой данных приняли решение ин­тегри­ровать биб­ли­оте­ки SQLAlchemy (ORM для вза­имо­дей­ствия с базой данных) и Alembic (для уп­равле­ния миг­ра­ци­ями базы данных) в уже су­щес­тву­ющий код.

Все ранее су­щес­тву­ющие SQL-запросы пе­репи­сали через новый ORM и создали со­от­ветс­тву­ющие модели, опи­сыва­ющие струк­ту­ру базы данных. Это было не­об­хо­димо как для ис­поль­зо­вания SQLAlchemy, так и для работы с Alembic. В ре­зуль­тате этих из­ме­нений зна­читель­ная часть пре­дыду­щего кода была пе­рера­бота­на, ис­пра­вили большое ко­личес­тво ошибок, добавили ди­нами­чес­кий контент в ста­тич­ные элементы сайта.

  1. Также были успешно ин­тегри­рова­ны пла­теж­ные системы: система быстрых платежей (СБП) и «Альфа-банк». Это решение поз­во­лило поль­зо­вате­лям сайта выбирать оп­ти­маль­ный способ оплаты и сделало процесс про­веде­ния тран­закций более удобным и гибким.



  2. Создали систему по указанию цен на кон­крет­ную комнату в отеле в пределах от одного дня и до всего года.



  3. Раз­ра­бота­ли новый личный кабинет для поль­зо­вате­лей, который поз­во­ля­ет им соз­да­вать и ре­дак­ти­ровать ин­форма­цию об отелях, а также осу­щест­влять покупку и прод­ле­ние подписок.



  4. Добавили парсер для сбора данных по сайту hochu-na-yuga и создания на основе этих данных отелей на сайте за­каз­чи­ка. Для его работы ин­тегри­рова­ли систему по запуску фоновых задач через Celery.



  5. Также провели большое ко­личес­тво работ с frontend-частью проекта. Несмотря на то что у за­каз­чи­ка уже были готовые шаблоны, во многих аспектах они не удов­летво­ряли пот­ребнос­тям.

 

Выводы

В конечном итоге можно сказать, что большая часть работ кос­ну­лась backend-части. Главной задачей было уйти от старой струк­ту­ры проекта, добавить больше воз­можнос­тей по нас­трой­ке контента через ад­минпа­нель, улучшить про­из­во­дитель­ность и «вылечить» все най­ден­ные ошибки. А также, конечно, вы­пол­нить все пос­тавлен­ные за­каз­чи­ком задачи.

 

  • Технологии:
  • Celery
  • Python
  • PostgreSQL
  • Jinja2
  • Redis
  • Flask
  • SQLAlchemy
  • Alembic

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • PHP
  • Joomla
  • Yandex SpeechKit

  • Технологии:
  • Celery
  • Docker
  • Vue.js
  • Python
  • FastAPI
  • Httpx Python
  • Isort
  • Pottery
  • Pydantic
  • Uvicorn
  • Uvloop
  • Drf-yasg
  • Psycopg2
  • Pillow
  • IP2Location
  • PySocks
  • Requests Python
  • Quasar
  • Black Python
  • Redis
  • Pinia

  • Технологии:
  • Typescript
  • CSS
  • Vue.js
  • HTML
  • Ant Design

  • Технологии:
  • C#
  • .Net
  • Docker
  • Angular
  • PostgreSQL

Юридический портал ILEGG.ru

Недавно к нам об­ра­тил­ся под­рядчик itway.ru и передал подряд на до­работ­ку портала юри­дичес­ких услуг - ILEGG.ru с задачей улучшить их сайт и рас­ши­рить су­щес­тву­ющий фун­кци­онал.

Плат­форма ILEGG.ru поз­во­ля­ет получить быстрые юри­дичес­кие кон­суль­та­ции фи­зичес­ким лицам и пред­ста­вите­лям раз­лично­го бизнеса. На сайте пред­став­ле­но более 250 юристов, ра­бота­ющих в разных областях права. Все кон­суль­та­ции пре­дос­тавля­ют­ся онлайн.

Задачи

На сайте ILEGG.ru много юристов и пос­то­ян­ных по­сети­телей. Команде аг­ре­гато­ра пот­ре­бова­лось мо­дер­ни­зиро­вать сайт, чтобы спе­ци­алис­ты смогли с ком­фортом вести ком­мерчес­кую де­ятель­ность, а клиенты – удаленно оп­ла­чивать услуги. С этими зап­ро­сами они об­ра­тились к нам, в Softorium.

Вот задачи, которые стояли перед нами:

  1. Раз­ра­ботать систему мо­нети­зации услуг.
  2. Дора­ботать личный кабинет поль­зо­вате­ля.
  3. Внедрить систему ре­комен­да­ций.
  4. Изменить главную страницу портала.

Что мы сделали

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

Система мо­нети­зации услуг

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

Главной задачей для наших спе­ци­алис­тов стало создание бе­зопас­но­го и на­деж­но­го сервиса, спо­соб­но­го быстро об­ра­баты­вать денежные тран­закции.

Форма создания платных заявок была встроена в уже име­ющу­юся струк­ту­ру юри­дичес­ко­го аг­ре­гато­ра с учетом су­щес­тву­ющей ар­хи­тек­ту­ры сайта.

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

Внед­ре­ние системы ре­комен­да­ций

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

Дора­бот­ка личного кабинета поль­зо­вате­ля

Мы создали 3 уни­каль­ные формы профиля поль­зо­вате­ля – для юристов, для клиентов и для юри­дичес­ких компаний. В ходе работы был про­из­ве­ден тща­тель­ный анализ по­сети­телей аг­ре­гато­ра и выделены главные осо­бен­ности каждой группы.

Профиль клиента

Ре­али­зован в виде стан­дар­тной поль­зо­ватель­ской анкеты. Эта группа по­сети­телей сайта не обладает рас­ши­рен­ны­ми правами и дос­ту­пами, так как единс­твен­ная цель клиента – по­луче­ние ка­чес­твен­ной юри­дичес­кой помощи.

Профиль частного юриста

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

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

Для ве­рифи­кации тре­бу­ет­ся заг­ру­зить скан паспорта. Нами также была ре­али­зова­на воз­можность привязки профиля спе­ци­алис­та к со­ци­аль­ным сетям.

Профиль юри­дичес­кой компании

Запол­не­ние профиля юри­дичес­кой компании осу­щест­вля­ет­ся по аналогии с профилем частного юриста. Мы добавили в анкету блок «Рек­ви­зиты». Инфор­ма­ция туда до­бав­ля­ет­ся ав­то­мати­чес­ки из открытых ис­точни­ков после ввода на­име­нова­ния ор­га­низа­ции.

Изме­нение главной страницы

Раз­мести­ли на главной странице ин­форма­цию о том, как работает аг­ре­гатор и как рас­счи­тыва­ет­ся сто­имость услуг юристов. Сущес­тву­ющие ин­форма­ци­он­ные блоки были от­ре­дак­ти­рова­ны.

Ход проекта

  1. Иссле­дова­ние ин­терфей­са и фун­кци­онала юри­дичес­ко­го аг­ре­гато­ра.
  2. Анализ основных тре­бова­ний поль­зо­вате­лей.
  3. Раз­ра­бот­ка не­об­хо­димых клиенту систем.
  4. Тес­ти­рова­ние и внед­ре­ние об­новлен­но­го фун­кци­онала.

  • Технологии:
  • MySQL
  • JavaScript
  • jQuery
  • CSS
  • Ajax
  • PHP
  • HTML
  • Laravel Framework

Программное обеспечение «Раскрои»

Компания «Тех­но­робот» за­нима­ет­ся ав­то­мати­заци­ей про­из­водс­твен­ных про­цес­сов на базе про­мыш­ленных роботов FANUC и KUKA.

Клиенты компании просили немного до­рабо­тать прог­рамму сос­тавле­ния раскроев для машины резки профиля. Прог­рам­мное обес­пе­чение «Раскрои» поз­во­ля­ет про­ек­ти­ровать детали и фор­ми­ру­ет файл с па­рамет­ра­ми деталей в раскроях, который от­прав­ля­ет­ся на машины линии резки профиля. Их прог­рам­мное обес­пе­чение берет из файла данные для резки.

Что мы сделали

Мы до­рабо­тали ин­терфейс и фун­кци­ональ­ность прог­раммы для удобства поль­зо­вате­лей. Теперь в прог­рамме можно делать мас­шта­биро­вание при ре­дак­ти­рова­нии 2D-отоб­ра­жения детали и от­прав­лять на станок нес­коль­ко раскроев од­новре­мен­но.

А еще

Провели отладку фун­кци­ональ­нос­ти ко­пиро­вания и удаления резов, также добавили до­пол­ни­тель­ные па­рамет­ры резов и до­рабо­тали редактор деталей.

  • Технологии:
  • C#
  • WPF

Доработка сервиса Wi-Fi аналитики HVALA

HVALA пре­дос­тавля­ет своим поль­зо­вате­лям услуги Wi-Fi, а также сервис ав­то­риза­ции с ана­лити­кой и мар­ке­тин­го­выми инс­тру­мен­та­ми.

Кли­ен­та­ми сервиса являются кафе, рес­то­раны, гос­ти­ницы, пре­дос­тавля­ющие своим гостям доступ к ин­терне­ту.

HVALA поз­во­ля­ет получить отчеты о по­сети­телях и пре­дос­тавля­ет мар­ке­тин­го­вые инс­тру­мен­ты: ин­форми­рова­ние об акциях, опросы, сбор отзывов, и другое. Отчеты о гостях содержат ин­форма­цию о поле, возрасте, MAC-адресе, ко­личес­тве по­сеще­ний, пос­леднем визите, дне рождения гостей и тд. С помощью личного кабинета можно нас­тро­ить тар­ге­тиро­ван­ную рекламу в рек­ламных сетях.

К сети HVALA под­клю­чено более 1000 за­веде­ний на тер­ри­тории России, Казах­ста­на и Узбе­кис­та­на.

Спе­ци­алис­ты Softorium вы­пол­ни­ли ин­тегра­цию с новым дизайном админки, до­рабо­тали способы ав­то­риза­ции, систему отчетов.

 

 

  • Технологии:
  • JavaScript
  • jQuery
  • CSS
  • PHP
  • HTML

Маркетплейс одежды

Перед нами стояла задача создания мар­кет­плей­са одежды за­рубеж­ных пос­тавщи­ков на базе решения от 1С‑Битрикс. В ходе работ была про­веде­на адап­та­ции ядра Битрикс под тре­бова­ния за­каз­чи­ка: до­рабо­тана корзина, карточка товара, создан ком­по­нент рас­про­дажи. Раз­ра­бота­ны модули для ин­тегра­ций с пла­теж­ной системой CONTACT PAY, сервисом доставки Почты России, RetailCRM, сервисом e‑mail мар­ке­тин­га Mailganer.

Кроме того, был раз­ра­ботан модуль син­хро­низа­ции каталога с сайтом пос­тавщи­ка, для ежед­невной ак­ту­али­зации каталога с 75 000+ позиций. Написан модуль перевода, ин­тегри­рован­ный с модулем импорта: на входе файл на языке пос­тавщи­ка, на выходе ─ каталог товаров на русском языке.

Был проведен аудит хостинга для выбора оп­ти­маль­но­го решения по со­от­но­шению про­из­во­дитель­нос­ти и сто­имос­ти.

  • Технологии:
  • jQuery
  • CSS
  • Bitrix
  • Ajax
  • RetailCRM
  • CONTACT PAY
  • JS
  • PHP
  • HTML

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Симулятор Генерального Директора

Интег­ра­ции пла­теж­ной системы в игру «Симу­лятор Гене­раль­но­го Дирек­то­ра» SGD Игра пред­став­ля­ет собой глубоко мо­дер­ни­зиро­ван­ный алгоритм - квест делового района Москвы у метро Бело­рус­ская, дающий полное пог­ру­жение в мир пред­при­нима­теля-эк­спор­те­ра. Игроку пред­сто­ит пройти путь от открытия валютных счетов до поставки своей про­дук­ции за­рубеж­ным по­купа­телям. Квест сос­тавлен мак­си­маль­но приб­ли­жен­ным к реалиям жизни. Все пер­со­нажи: та­можен­ный пред­ста­витель, юристы, сот­рудни­ки юри­дичес­ко­го отдела банка, иные «слу­чай­ные» люди - взяты из де­лоп­ро­из­водс­твен­ной жизни.

В ходе сов­мес­тной работы с раз­ра­бот­чи­ками игры была вы­пол­не­на ин­тегра­ция пла­теж­ной системы Робо­кас­са и про­из­ве­дены до­работ­ки ос­новно­го сайта с доступом в игру.

  • Технологии:
  • Python
  • PostgreSQL
  • FastAPI
  • ORM ormar
  • Jinja2
  • Сelery
  • Scrapy

Модернизация системы учёта рабочего времени сотрудников

Рост бизнеса сложно пред­ста­вить без развития систем ав­то­мати­зации. FORA – одна из ведущих компаний на рынке Казах­ста­на в сфере продаж цифровой техники. Ее история началась в 1997 с не­боль­шо­го офиса в городе Актобе. Сейчас компания работает в го­сударс­твен­ных закупках, а также в сфере оптовых и роз­ничных продаж, в том числе онлайн.

FORA ис­поль­зу­ет прог­рам­мный комплекс ав­то­мати­зации учёта рабочего времени сот­рудни­ков, вклю­ча­ющий мо­биль­ное и веб- при­ложе­ния. Регис­тра­ция рабочего времени осу­щест­вля­ет­ся путём ска­ниро­вания, сфор­ми­рован­но­го в системе QR-кода: открытие/закрытие дня. Система собирает ин­форма­цию по каждому сот­рудни­ку и пре­дос­тавля­ет ад­ми­нис­тра­тору воз­можность прос­мотра ста­тис­ти­ки и фор­ми­рова­ния отчетов.

Развитие сети ма­гази­нов FORA пот­ре­бова­ло мо­дер­ни­зации системы и до­работ­ки ее фун­кци­она­ла. Мобиль­ное при­ложе­ние, вы­пол­ненное на Qt, было пол­ностью пе­репи­сано на Kotlin Multiplatform для уп­ро­щения его соп­ро­вож­де­ния и об­слу­жива­ния. Это также помогло из­ба­вить­ся от старой ре­али­зации Qt QML и улучшить сов­мести­мость с новыми версиями NDK. Исполь­зо­вание муль­тип­латфор­менно­го решения сок­ра­тило время на на­писа­ние кода для мо­биль­ных при­ложе­ний Android и iOS. Большая часть логики вынесена в общий модуль, за ис­клю­чени­ем макетов экранов и фун­кци­она­ла рас­позна­вания QR-кода.

В ходе до­работ­ки системы была до­бав­ле­на функция по­луче­ния ге­оло­кации сот­рудни­ка при ре­гис­тра­ции. Это поз­во­лило на основе ге­одан­ных при­вязы­вать сот­рудни­ка к ор­га­низа­ции про­филь­но­го под­разде­ления объекта за­каз­чи­ка. Также был до­рабо­тан фун­кци­онал сервера, по­высив­ший бе­зопас­ность пе­реда­ва­емых данных и сок­ра­тив­ший трафик между сервером и клиентом.



  • Технологии:
  • C#
  • Entity Framework
  • Kotlin Multiplatform
  • ASP.NET
  • Qt
  • QML
  • Swift

Разработка desktop -приложения для интеграции онлайн ERP-системы с POS-терминалами

ERP-система ProSklad со­от­ветс­тву­ет тре­бова­ни­ям трех­компо­нен­тной ин­тегри­рован­ной системы (далее ТИС). ProSklad работает как веб-при­ложе­ние (SPA на Vue.js). Одним из тре­бова­ний к ТИС является ин­тегра­ция с POS-тер­ми­нала­ми раз­личных банков. Под ин­тегра­ци­ей под­ра­зуме­ва­ет­ся процесс, когда поль­зо­ватель ини­ци­иру­ет оплату в веб-при­ложе­нии, а терминал ав­то­мати­чес­ки под­хва­тыва­ет сумму и готов принять платеж.

Раз­ра­бот­ка desktop-при­ложе­ния зак­лю­чалась в про­ек­ти­рова­нии и раз­ра­бот­ке модуля, свя­зыва­юще­го POS-тер­ми­налы раз­личных банков и ERP-систему. Раз­ра­бот­чи­кам ProSklad больше не нужно знать об осо­бен­ностях работы раз­личных POS-тер­ми­налов, их раз­но­род­ных API и биб­ли­отек. Модуль позволят ис­поль­зо­вать единый ин­терфейс для работы с POS-тер­ми­нала­ми. Под­дер­жка каждого нового банка или тер­ми­нала осу­щест­вля­ет­ся в самом модуле без не­об­хо­димос­ти вносить из­ме­нения в ERP-систему ProSklad. Таким образом, раз­ра­бот­ка desktop-при­ложе­ния поз­во­лила привлечь новых пот­ре­бите­лей и рас­ши­рить список банков-эк­вай­еров, под­клю­чение которых ранее было зат­рудни­тель­но.

  • Технологии:
  • C#
  • .Net
  • С++/CLI
  • RS-232
  • Windows Forms
  • Websocket

CRM-система Relays для управления QR-кодами

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

Заказчик об­ра­тил­ся с не­завер­шенным проектом. Нами была за­кон­че­на раз­ра­бот­ка CRM-системы, под­клю­чен модуль перевода ин­форма­ции о товаре, до­рабо­тан личный кабинет поль­зо­вате­ля, раз­ра­ботан визард для об­легче­ния освоения прин­ци­пов работы поль­зо­вате­ля в системе, до­рабо­тана ад­ми­нис­тра­тив­ная панель сайта, про­веде­на отладка раз­личных частей системы.

  • Технологии:
  • Nuxt.js
  • MySQL
  • Symfony
  • Docker
  • Node.js
  • PM2
  • Vue.js

Разработка умного поиска с учетом морфологии в BigData решениях

Заказчик – пос­тавщик и арен­до­датель обо­рудо­вания для ат­трак­ци­онов. Перед нами была пос­тавле­на задача раз­ра­бот­ки умного поиска по сайту https://www.art-active.ru/. Также тре­бова­лось раз­ра­ботать парсинг с сайта по его фиду - потоку контента, который ав­то­мати­чес­ки под­гру­жа­ет­ся блоками на веб-странице или в при­ложе­нии.

Фид пред­став­ля­ет из себя XML-файл, со­дер­жа­щий всю ин­форма­цию, о товарах, отоб­ра­жа­ющу­юся на сайте: на­име­нова­ние, цена, ка­тего­рия и прочее. Эти данные оп­ре­деля­ют объекты, хранимые в базе данных.

Был ре­али­зован поиск с учетом мор­фо­логии, до­бав­ле­на не­об­хо­димая при­ори­тет­ность поиска, скор­ректи­рова­но раз­би­ение фразы на токены, пе­рера­ботан поиск по ключевым словам. Токены пред­став­ля­ют из себя массив слов из которых состоит запрос. Например, то­кени­затор пробелов, который ис­поль­зу­ет­ся по стан­дарту, разделит текст на токены, когда увидит пробел. Текст «Быстрая ко­рич­не­вая лиса!» Пре­об­ра­зу­ет­ся в [«Быстро», «ко­рич­не­вая», «лиса!»].

В работе ис­поль­зо­вана по­ис­ко­вая система Elasticsearch, которая работает с от­дель­ной базой данных. Elasticsearch пре­дос­тавля­ет сле­ду­ющие воз­можнос­ти:

  • Авто­мати­чес­кую ин­декса­цию новых JSON-объектов, которые заг­ру­жа­ют­ся в базу и сразу ста­новят­ся дос­тупны­ми для поиска, за счет от­сутс­твия схемы согласно типичной NoSQL-кон­цепции. Это поз­во­ля­ет ускорить про­тоти­пиро­вание по­ис­ко­вых Big Data решений;
  • Гибкость по­ис­ко­вых фильтров, включая нечеткий поиск и муль­ти­арен­дность, когда в рамках одного объекта ES можно ди­нами­чес­ки ор­га­низо­вать нес­коль­ко раз­личных по­ис­ко­вых систем;
  • Наличие встро­ен­ных ана­лиза­торов текста поз­во­ля­ет Elasticsearch ав­то­мати­чес­ки вы­пол­нять то­кени­зацию, лем­ма­тиза­цию - процесс при­веде­ния сло­вофор­мы к её нор­маль­ной (сло­вар­ной) форме, стемминг - это процесс на­хож­де­ния основы слова для за­дан­но­го ис­ходно­го слова и прочие пре­об­ра­зова­ния для решения NLP-задач, свя­зан­ных с поиском данных.

Поиск про­ис­хо­дит по сле­ду­юще­му ал­го­рит­му:

  1. Соз­да­ет­ся и нас­тра­ива­ет­ся запрос, со­дер­жа­щий сле­ду­ющие па­рамет­ры:
    a. type – тип запроса;
    b. fields – поля по которым про­ис­хо­дит поиск и их при­ори­тет­ность;
    c. query – сам запрос;
    d. minimum_should_match – ко­личес­тво знаков на сколько ре­зуль­тат может от­ли­чать­ся от запроса.
  2. Запрос подается на вход ана­лиза­тору.
  3. Ана­лиза­тор раз­би­ва­ет запрос на токены, ис­поль­зуя фильтры.
  4. Про­из­во­дит­ся поиск по заданным полям и сор­ти­ру­ет­ся в за­виси­мос­ти от заданных настроек запроса.
  5. Воз­вра­ща­ет­ся список ре­зуль­татов.

Поиск, по ключевым словам, ре­али­зован с помощью ана­лиза­тора «keyword», который под­ра­зуме­ва­ет полное вхож­де­ние запроса в ре­зуль­тат, учи­тыва­ющий регистр букв, пробелы и спе­ци­аль­ные знаки.

Учет мор­фо­логии под­ра­зуме­ва­ет раз­би­ение запроса по таким частям как предлоги, частицы и др. С помощью мор­фо­логии запрос раз­би­ва­ется на токены, пред­став­ля­ющие из себя основу слова, например, «отвертка» после работы ана­лиза­тора будет пред­став­лять из себя «отвертк».

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

Заказ­чи­ку были пре­дос­тавле­ны кон­суль­та­ции по тон­костям работы и нас­трой­ке поиска.

  • Технологии:
  • JavaScript
  • Elasticsearch
  • Python
  • Django

Нас рекомендуют

Что за­каз­чи­ки ценят в нас особенно:

  • Команда раз­ра­бот­чи­ков:

    У нас работают сильные раз­ра­бот­чи­ки с большим опытом. Стаж сот­рудни­ков сос­тавля­ет от трех до 20 и более лет в IT. Мы способны вы­пол­нять большие объемы задач с высокой ско­ростью. Все сот­рудни­ки компании офи­ци­аль­но тру­до­ус­тро­ены.

    Раз­ра­бот­чи­ки тактичны в общении, быстро понимают проблемы за­каз­чи­ка. Сот­рудни­ки могут сфор­му­лиро­вать задачи сами, если у клиента возникли труд­ности при сос­тавле­нии тех­ни­чес­ко­го задания, и сделать именно то, что нужно за­каз­чи­ку.

  • Проз­рачность про­цес­сов:

    Наша работа понятна и проз­рачна для клиента. Отчеты о работе доступны онлайн в любое время.Заказчик при не­об­хо­димос­ти сам может пос­та­вить задачи, пос­мотреть отчеты, баланс, пот­ра­чен­ное время.

    Ком­фор­тное от­сле­жива­ние задач онлайн (YouTrack). Вы видите в реальном времени, на каком этапе на­ходит­ся проект.

    Опе­ратив­ное вза­имо­дей­ствие с раз­ра­бот­чи­ком напрямую в чате или по e-mail, если вы этого захотите.

  • Допол­ни­тель­но:

    Пре­дос­тавля­ем доступ в ре­пози­торий (GitLab).

    Точный и удобный до­кумен­то­обо­рот.

    Если раз­ра­бот­чик на­ходит­ся в ожидании ответов или задач, то это время не оп­ла­чива­ет­ся за­каз­чи­ком.

    Берем проекты на до­работ­ку и под­дер­жку.

Новости

Разработка программного обеспечения

Карьера

Мы ищем frontend-, backend-раз­ра­бот­чи­ков, раз­ра­бот­чи­ков мо­биль­ных при­ложе­ний, ана­лити­ков, и других спе­ци­алис­тов, ув­ле­чён­ных раз­ра­бот­кой крутых решений и готовых принять участие в уни­каль­ных, значимых проектах.

У нас можно многому на­учить­ся, мы аб­со­лют­но открыты идеям любой степени слож­ности и нес­тандар­тнос­ти.

Ждем резюме на почту hr@softorium.pro