• Наш облачный JS теперь ES2017, и это сокращает код в разы


      Вопреки распространенному мнению, облако Voximplant не использует Node.js, чтобы выполнять JavaScript код клиентов параллельно с голосовыми и видеозвонками. Каждый наш сервер одновременно управляет сотнями звонков: переключение голосовых и видеопотоков между звонками, запись, распознавание голоса, синтез, HTTP-запросы к внешним серверам, — вся вот эта история. А Node.js создана, чтобы работать в одиночку. Несколько сотен изолированных инстансов — это не про нее. Передерутся за память, ресурсы и все закончится очень печально. Поэтому у нас сильно изолированная и ограниченная по ресурсам песочница, которая не дает клиентскому JavaScript-коду в одной маленькой сессии нарушать работу целых серверов. Asterisk у нас тоже не используется по похожим причинам.

      До недавнего времени мы поддерживали синтаксис ES5. Типовой сценарий работы с коммуникациями — это несколько сотен, максимум, тысяч строк кода. Сложные штуки клиенты все равно выносят на собственный backend, а если нужен современный синтаксис, всегда можно воспользоваться транспайлером и автоматически отгрузить собранный JavaScript с помощью Continuous Integration.

      Но 2017 год обязывает, да и Web-редактор и отладчик клиенты любят и используют для быстрого создания нужных решений. Поэтому мы запилили поддержку ES2017 (не с нуля, естественно, а готовыми компонентами) и переделали обучающие материалы на современный лад. Под катом я хочу показать, насколько короче и понятнее становится код, если пользоваться современной нотацией JavaScript. Разница впечатляет.
      Читать дальше →
    • Смена пола и расы на селфи с помощью нейросетей


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

        Читать дальше →
      • Распределенные структуры данных [часть 1, обзорная]

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


          Современные же приложения стремятся использовать все имеющиеся ресурсы, в частности, все доступные CPU.


          К сожалению, использовать стандартные структуры данных при многопоточной обработке не представляется возможным, поэтому в Java 5 появились потокобезопасные структуры данных,
          т.е. функционирующие исправно, при использовании из нескольких потоков одновременно, и расположились они в пакете java.util.concurrent.


          Про Vector...

          На самом деле, потокобезопасные, но неэффективные, структуры данных, как, например, Vector и Hashtable, появились еще в Java 1.0.
          В настоящий момент, они не рекомендуются к использованию.


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


          А что если нужно, в реальном времени, обрабатывать информацию о 100 миллионах клиентов,
          когда датасет занимает 100Тб, а каждую секунду нужно совершить 100+ тысяч операций?
          Вряд ли это возможно, даже на самом крутом современном железе, а если и возможно — только представьте себе его стоимость!


          Намного дешевле добиться такой же вычислительной мощности объединив множество обычных компьютеров в кластер.



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


          Читать дальше →
        • На шаг ближе к С++20. Итоги встречи в Торонто

            Несколько недель назад состоялась встреча международного комитета по стандартизации C++. На ней люди (в основном) не разменивались на мелочи и совершили несколько больших шагов на пути к С++20.

            image

            Главные новости:

            • Расширению Concepts быть в C++20!
            • Ranges, Networking и Coroutines/сопрограммы: выпущены в эксперимент в виде TS.
            • Модули: черновик TS готов.

            Что всё это значит, как это упростит написание кода и что было ещё — читайте под катом.
            Читать дальше →
          • Развертывание кода ES2015+ в продакшн сегодня

            • Перевод
            Большинство веб-разработчиков, с которыми я общаюсь сейчас, любят писать JavaScript со всеми новейшими функциями языка — async/await, классами, стрелочными функциями и т.д. Однако, несмотря на то, что все современные браузеры могут исполнять код ES2015+ и изначально поддерживают упомянутый мной функционал, большинство разработчиков по-прежнему транспилируют свой код на ES5 и связывают его с полифиллами, чтобы удовлетворить небольшой процент пользователей, все еще работающих в старых браузерах.

            Это отвратительно. В идеальном мире мы не будем развертывать ненужный код.
            Читать дальше →
          • Go: 10 лет и растём дальше

            • Перевод

            На этой неделе мы отмечаем 10-летнюю годовщину создания Go.


            Всё началось с обсуждения вечером в четверг, 20 сентября 2007. Оно привело к организованной встрече между Робертом Грисмайером, Робом Пайком и Кеном Томпсоном в 2 часа дня на следующий день в конференс-руме Yaounde в Здании 43 главного кампуса Google Mountain View. Название для языка появилось 25-го числа, несколько сообщений спустя после начала переписки о дизайне:


            Тема: Re: обсуждение языка программирования 
            От: Роб 'Коммандер' Пайк 
            Дата: Вт, Сен 25, 2007 в 3:12 PM
            Кому: Роберт Грисмайер, Кен Томпсон    
            
            у меня появилась пара мыслей по этому поводу на пути домой.
            
            1. имя
            
            'go'. можно найти оправдания для такого имени, но у него очень хорошие свойства.
            оно короткое, легко печатать, например: goc, gol, goa. если будет интерактивный 
            дебаггер/интерпретатор, он может быть просто назван 'go'. расширение файла .go
            ...
            Читать дальше →
          • Кто, как и зачем собирается регулировать Big Data в России?

            Сегодня утром получил очередное PR-письмо с таким очередным предложением:

            Готовы предоставить комментарий с анализом и прогнозом по законопроекту о регулировании Big Data будет, который будет готов к концу 2017 года.

            Тема («регулирование Big Data») меня сразу заинтересовала (я был у ее истоков ), и я спросил в ответ: «О каком именно законопроекте спич?»

            «Вот об этом, ria.ru/technology/20170919/1505085765.html», — оперативно ответила мой контрагент по переписке:
            Читать дальше →
          • 5 правил работы с суммами

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


              Читать дальше →
            • «Паттерны» функционального программирования

              • Перевод
              • Tutorial

              Многие люди представляют функциональное программирование как нечто очень сложное и «наукоемкое», а представителей ФП-сообщества – эстетствующими философами, живущими в башне из слоновой кости.

              До недавнего времени такой взгляд на вещи действительно был недалек от истины: говорим ФП, подразумеваем Хаскель и теорию категорий. В последнее время ситуация изменилась и функциональная парадигма набирает обороты в web-разработке, не без помощи F#, Scala и React. Попробуем взглянуть на «паттерны» функционального программирования, полезные для решения повседневных задач с точки зрения ООП – парадигмы.

              ООП широко распространено в разработке прикладного ПО не одно десятилетие. Все мы знакомы с SOLID и GOF. Что будет их функциональным эквивалентом?.. Функции! Функциональное программирование просто «другое» и предлагает другие решения.


              Читать дальше →
            • Прототип проекта стоимостью $86 миллионов в 57 строках кода

              • Перевод


              Сегодня очень много хороших конкурентных систем создается отдельными разработчиками, а не только большими компаниями. Как правило, это копирование на базе эталонного решения (продукт корпорации) с последующей оптимизацией. В таком случае выигрывают все: компании – от здоровой конкуренции, разработчики – от развития технических навыков и получения опыта, потребители – от новых возможностей и решений.


              Представлюсь: меня зовут Иван Греков, я из фронтенд-команды Badoo. Мне очень понравился этот пост, я просто не смог пройти мимо и не перевести его. Этот пост – отличный источник вдохновения для любителей прототипирования устройств и open-source-решений. Перевод публикуется с сохранением авторской точки зрения и, надеюсь, будет интересен вам.

              Читать дальше →