Pull to refresh
  • by relevance
  • by date
  • by rating

FreePBX и CallBack: видеть номера звонящих

Asterisk
Доброго дня!
Это очень маленькая заметка, но и вопрос прост. Прост, да не так прост, простите за X.
Во FreePBX есть отличный модуль Callback. Система сбрасывает звонок и перезванивает, соединяя с указанным номером. Но при этом теряется CallerID, и в софтофонах высвечивается замечательный «Unknown».

Сейчас я расскажу, как это пофиксить из вебморды за минуту.
Читать дальше →
Total votes 4: ↑3 and ↓1 +2
Views7.5K
Comments 9

5 способов заставить клиента говорить

Cashmyvisit corporate blogInternet marketingIncreasing Conversion Rate
Мы взяли 5 основных настроек виджета обратной связи и провели исследование, чтобы найти ключ к увеличению конверсии через фидбек. Представленные результаты исследования помогли лучше понять потребителя.


Кадр из фильма «Игра на понижение».

Надеемся, они также поспособствуют вашему подбору мотивации для посетителей сайта, тем самым помогут самостоятельно увеличить конверсию в обращения и количество лидов с сайта. Приятного прочтения!
Читать дальше →
Total votes 13: ↑9 and ↓4 +5
Views3.9K
Comments 0

Promises 101

JavaScript
Sandbox

Перевод первой части отличной статьи про промисы. Базовые приемы создания и управления промисами.


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


Читать дальше →
Total votes 29: ↑26 and ↓3 +23
Views24.2K
Comments 50

Трудные уроки: пять лет с Node.js

Website developmentJavaScriptDesigning and refactoringNode.JSWeb services testing
Translation
После пяти лет работы с Node.js я многое понял. Я уже делился некоторыми историями, но в этот раз хочу рассказать о том, какие знания дались труднее всего. Баги, проблемы, сюрпризы и уроки, которые вы можете использовать в собственных проектах!

Базовые концепции


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

Классы


Когда я только начал работать с Node.js, то написал скрапер. Очень быстро я понял, что если ничего не предпринять, то он будет осуществлять много запросов параллельно. Одно это стало важным открытием. Но поскольку я ещё не полностью усвоил мощь экосистемы, то сел и написал собственный ограничитель параллелизма. Он работал и проверял, что в каждый момент времени активны не более N запросов одновременно.
Читать дальше →
Total votes 33: ↑27 and ↓6 +21
Views33.8K
Comments 8

Вернуть клиента просто — не дай ему уйти

ZEON PBX corporate blogIncreasing Conversion Rate
Важная сторона современных коммуникационных платформ заключается в том, что они могут намного больше, чем просто связывать клиента с менеджером, когда он того хочет. Мы хотим сегодня рассказать об этой практике на примере бизнеса наших заказчиков.


Читать дальше →
Total votes 9: ↑3 and ↓6 -3
Views1.4K
Comments 1

JavaScript: методы асинхронного программирования

RUVDS.com corporate blogWebsite developmentJavaScript
Translation
Синхронный код на JavaScript, автор которого не стремился сбить с толку тех, кто этот код будет читать, обычно выглядит просто и понятно. Команды, из которых он состоит, выполняются в том порядке, в котором они следуют в тексте программы. Немного путаницы может внести поднятие объявлений переменных и функций, но чтобы превратить эту особенность JS в проблему, надо очень постараться. У синхронного кода на JavaScript есть лишь один серьёзный недостаток: на нём одном далеко не уехать.



Практически каждая полезная JS-программа написана с привлечением асинхронных методов разработки. Здесь в дело вступают функции обратного вызова, в просторечии — «коллбэки». Здесь в ходу «обещания», или Promise-объекты, называемые обычно промисами. Тут можно столкнуться с генераторами и с конструкциями async/await. Асинхронный код, в сравнении с синхронным, обычно сложнее писать, читать и поддерживать. Иногда он превращается в совершенно жуткие структуры вроде ада коллбэков. Однако, без него не обойтись.

Сегодня предлагаем поговорить об особенностях коллбэков, промисов, генераторов и конструкций async/await, и подумать о том, как писать простой, понятный и эффективный асинхронный код.
Читать дальше →
Total votes 27: ↑22 and ↓5 +17
Views65.4K
Comments 17

20 лет эволюции сети Интернет в Украине, а какой вы помните сеть 20 или 10 лет назад?

ua-hosting.company corporate blogHistory of IT
Recovery mode
К написанию этой публикации меня сподвигла публикация на Хабре довольно объемной статьи: «Ностальгии пост. Тайны цен Интернета: почему мегабит может стоить от $0 до $200 или как получить 100 Гбит / с за копейки?», которая, увы, получалась слишком перегруженной из-за объема рассматриваемого материала и была бы совершенно неполноценной без этого раздела. Тем более я родом из Украины, помню и знаю тему из собственного опыта, потому хотелось бы отдельно остановиться на истории развития Интернет в нашем регионе и поделиться памятными моментами.



Тем более, что в этом году исполняется 20 лет с момента, когда «Укртелеком» получил первый в Украине зарубежный канал огромной на то время ёмкости — 2 Мбит / с в Лондон. Да, да, 2 Мбит / с в 1997 году на всю страну! А каким помните Интернет Вы? В комментариях к этой публикации предлагаю поделиться Вашим опытом, когда Вы впервые вышли в сеть и как это было. Нужно это для формирования общей картины того, насколько подешевела передача данных и какие уникальные возможности мы имеем с Вами сегодня в сравнении с эпохой зарождения интернет-провайдеров. Начнём!
Читать дальше →
Total votes 32: ↑29 and ↓3 +26
Views20.5K
Comments 156

Три парадигмы асинхронного программирования в Vertx

ProgrammingJavaKotlin
Я хочу показать три парадигмы асинхронного программирования — callbacks, futures, coroutines на примере простого веб приложения на фрейморке Vertx. Код будем писать на Котлине.

Допустим у нас есть приложение, которое получает некую строку в HTTP запросе, по ней ищет URL в базе данных, идет по этому URL и его содержимое отправляет обратно клиенту.
Vertx задуман как асинхронный фрейворк для высоконагруженных приложений, использует netty, new IO, event bus

Читать дальше →
Total votes 9: ↑9 and ↓0 +9
Views4.3K
Comments 4

Генерация кода для бекенда. Что генерировать, как и зачем?

ProgrammingJavaKotlin
Я хочу показать в этой статье как у нас в фирме генерируется бекенд (и немного фронтенд) код, зачем вообще это нужно и как это лучше делать.

Что именно будем генерировать — не так важно.
Важно что мы опишем 3 вида объектов на основе которых сгенерируем взаимодействие фронтенда с бекендом, а кое где и полностью реализацию бекенда

Эти типы объектов:
1. Messages — объекты, которые будучи сериализoванными в JSON участвуют в обмене информации между фронтендом и бекендом
2. Endpoints — URI, который вызывает фронтенд вместе с описанием HTTP метода, параметров запроса, типа Request Body и типа респонса
3. Entities — Это такие messages, для которых них есть стандартные endpoints для Create/Update/List/Delete (может быть не все), они хранятся в базе данных и для них есть Data Access Object, или Spring JPA repository — вообщем зависит от технологии, но какой то доступ к базе данных

Фронтендом я не занимаюсь вообще, но
1) Знаю, что он пишется на Typescript, поэтому мы генерируем и классы тайпскрипта
2) Большая часть требований к бекенду приходит от разработчиков фронтенда.

Требования к коду



Читать дальше →
Total votes 14: ↑13 and ↓1 +12
Views5.6K
Comments 8

Асинхронное программирование (полный курс)

Website developmentJavaScriptProgrammingNode.JSStudying in IT
Tutorial

Методы асинхронного программирования


Асинхронное программирование за последнее время стало не менее развитым направлением, чем классическое параллельное программирование, а в мире JavaScript, как в браузерах, так и в Node.js, понимание его приемов заняло одно из центральных мест в формировании мировоззрения разработчиков. Предлагаю вашему вниманию целостный и наиболее полный курс с объяснением всех широко распространенных методов асинхронного программирования, адаптеров между ними и вспомогательных проемов. Сейчас он состоит из 23 лекций, 3 докладов и 28 репозиториев с множеством примеров кода на github. Всего около 17 часов видео: ссылка на плейлист.

Читать дальше →
Total votes 48: ↑48 and ↓0 +48
Views71.4K
Comments 17

Асинхронное программирование в JavaScript (Callback, Promise, RxJs )

JavaScriptIT InfrastructureNode.JSAngularStudying in IT

Всем привет. На связи Омельницкий Сергей. Не так давно я вел стрим по реактивному программированию, где рассказывал про асинхронность в JavaScript. Сегодня я бы хотел законспектировать этот материал.



Но перед тем как начать основной материал нам нужно сделать вводную. Итак, давайте начнем с определений: что такое стек и очередь?


Стек — это коллекция, элементы которой получают по принципу «последний вошел, первый вышел» LIFO


Очередь — это коллекция, элементы которой получают по принципу («первый вошел, первый вышел» FIFO


Окей, продолжим.



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

Читать дальше →
Total votes 29: ↑24 and ↓5 +19
Views34K
Comments 50

Callback или «Повышаем лояльность клиентов»

Asterisk
Sandbox
Имеется asterisk, группа операторов (3-5 человек) с большой нагрузкой (среднее время ожидания > 2 минут)

Задача — для абонентов с определенной географией дать возможность не ждать пока оператор освободится, а нажав 0 услышать «Спасибо за звонок. Мы Вам обязательно перезвоним», отключиться и спокойно ждать звонка от оператора ну или в простонародье по умному Callback
Читать дальше →
Total votes 15: ↑12 and ↓3 +9
Views2.6K
Comments 1

Делегаты и колбэки в Swift простым языком. Что же такое этот delegate, и как работает callback

ProgrammingDevelopment for iOSDevelopment of mobile applicationsSwiftLearning languages
Sandbox
Tutorial

В Swift при изучении UI (User Interface) каждый рано или поздно приходит к необходимости использования делегата. Все гайды о них пишут, и вроде бы делаешь, как там написано, и вроде бы работает, но почему и как это работает, не у каждого в голове укладывается до конца. Лично у меня даже какое-то время складывалось ощущение, что delegate – это какое-то волшебное слово, и что оно прям встроено в язык программирования (вот, насколько запутаны были мои мысли от этих гайдов). Давайте попытаемся объяснить простым языком, что же это такое. А разобравшись с делегатом, уже гораздо легче будет понять, что такое колбэк (callback), и как работает он.


Официант и повар


Итак, перед тем как перейти к коду давайте представим себе некоего официанта и какого-нибудь повара. Официант получил заказ от клиента за столиком, но сам он готовить не умеет, и ему нужно попросить об этом повара. Он может пойти на кухню и сказать повару: «Приготовь курицу». У повара есть соответствующие инструменты (сковорода, масло, огонь…) и навык приготовления. Повар готовит и отдает блюдо официанту. Официант берет то, что сделано поваром и несет к клиенту.


А теперь представим себе ситуацию, что официант не может прибежать на кухню и сказать повару напрямую, какое блюдо у него заказали. Не пускают его на кухню (допустим, такие правила) или кухня находится на другом этаже (устанешь бегать). И единственный способ общения – это окошко мини-лифта. Официант кладет туда записку, нажимает кнопку, лифт уехал на кухню. Приезжает обратно с готовым блюдом. Запомнили? Теперь зафиксируем ситуацию в голове, попробуем воссоздать через код и понять, как это связано с нашей темой.

Читать дальше →
Total votes 5: ↑4 and ↓1 +3
Views11.3K
Comments 11

12 примеров улучшения кода с помощью @dataclass

OTUS corporate blogPythonProgrammingMachine learning
Translation

Мы добавляем алгоритмы кластеризации с помощью пакетов scikit-learn, Keras и других в пакет Photonai. На 12 примерах мы покажем, как @dataclass улучшает код на Python. Для этого мы используем код из пакета Photonai для Machine Learning.

Читать далее
Total votes 11: ↑9 and ↓2 +7
Views3.1K
Comments 3