Worker'ы — внятная реализация многопоточности в JavaScript. На момент сейчас они имеют достаточное количество ограничений. Для ознакомления с ними (как worker'ами, так и ограничениями) можно прочитать эту статью от хабраюзера Antelle. Там же есть и ссылки на первоисточники информации для интересующихся.
Сегодня же мне довелось столкнуться другой задачей. А именно: с проблемой создания worker'а из js-файла с другого домена, что на данный момент запрещено его спецификацией.
Современные JavaScript фреймворки, и ReactJS не исключение, обычно требуют эксклюзивного доступа к DOM и им очень не нравится, когда кто-то без их ведома этот DOM меняет. Проблема в том, что существует огромное количество сторонних библиотек (например, плагины jQuery), которым необходимо в их подконтрольном поддереве что-нибудь да вропнуть, анвропнуть, перенести в другое место и т.д. Обычно в таких случаях мы видим в консольке нечто подобное:
К счастью, эта проблема довольно легко и быстро решается. В этом посте я попробую изложить решение пошагово, но, если вам неинтересно, или вы спешите, просто поскрольте вниз к ссылке на гист с готовым решением. Итак, начнем.
Несколько дней назад я открыл для себя замечательный ЯП Clojure — один из современных диалектов Lisp, особенностью которого является хорошая реализация средств многопоточности, компиляция в байткод jvm, соответственно возможность использования java — библиотек, jit-компиляция и т.д. Про Clojure можно почитать например тут. Но в этой статье речь пойдёт о метапрограммировании. Lisp устроен таким образом, что данные и код в нём — одно и то же. Объявления функций, макросов, вызовы функций, развёртывание макросов — в Lisp это всё просто списки, возможно вложенные друг в друга.
Такое единство кода и данных предоставляет мощные возможности для метапрограммирования — код который пишет код, который пишет код, который пишет код и т.д. — это самое обычное дело для программирования на Lisp. В compile-time нам полностью доступен весь функционал языка, мы можем вызывать функции, развёртывать макросы, возможно рекурсивно. Например, если мы определим вот такой макрос:
Последние несколько дней на главной странице «Пиратской бухты» вместо их собственного лого висит промо нового бесплатного VPN — FrootVPN. На странице проекта написано, что сервис базируется в Швеции и находится под защитой шведских законов, предоставляет свои услуги бесплатно, используя несколько 10-гигабитных каналов и не ведёт никаких логов.
Что мы знаем о тех, кто разместил эту ссылку, кроме удивительной толерантности к jpg-артефактам на логотипах?
Читать молча мы научились относительно недавно. Раньше не было иного логичного способа читать, кроме как строго вслух. Фактический процесс чтения напоминает слушание двух голосов: один проговаривает слова текста, второй переводит их для нас на понятный нам язык.
Когда вы пишете текст, вы — социнжинер, старающийся передать свою точку зрения максимально точно и детально. Вы решаете задачу передачи данных без искажений. Наиболее простой способ сделать это — избежать трансляции через внутренний перевод читателя.
Это имеет прямое отношение к коммерческим текстами и к техническим. Минимальные искажения при передаче информации означают большую конверсию. Больший охват. Большую силу призыва. Большую практическую понятность.
Поэтому сейчас я расскажу базовые вещи, которые можно делать прямо здесь и сейчас у вас на сайтах.
Строго говоря, Docker не был создан для подобного рода вещей, а именно запуска графических приложений. Однако, время от времени в темах про Docker звучат вопросы о том, нельзя ли запустить GUI-приложение в контейнере. Причины могут быть разные, но чаще всего, это желание сменить излишне громоздкую виртуальную машину на что-то полегче, не потеряв в удобстве и сохранив при этом достаточный уровень изоляции.
Это небольшой обзор способов запуска графических приложений в контейнерах Docker.
Три недели назад мы писали о том, каким образом пользователи и владельцы жилья могут эффективнее использовать поиск на нашем сайте. Сегодня мы хотим рассказать об алгоритмах, на которых базируется наша поисковая система.
Пост подготовлен по материалам выступления Максима Чаркова:
Поиск — это сила паросочетаний. Говоря по существу, здесь мы и пытаемся стыковать запросы наших пользователей с тем, что доступно на рынке.
Сперва хотелось бы сказать пару слов о себе и своих коллегах. Я работаю в поисковой команде. Начал работать в компании я два года назад. До этого был сотрудником Google, где я провел несколько лет, занимаясь всем подряд, от функций поиска до веб-браузеров. Конечно, все то, что я собираюсь представить здесь, не было бы возможным без людей из нашей команды. Search Airbnb — постоянно действующая команда. Наши инженеры работают над проблемами поиска и потока бронирования, включая инфраструктуру, пользовательский интерфейс и т.д. Сфера нашей деятельности также включает в себя разработку оборудования, дизайн, пользовательские исследования, обработку и анализ данных.
Сперва хочу представить проблему поиска на Airbnb и как мы помогаем нашим гостям найти наилучшие позиции. Затем я расскажу о проблеме конверсии бронирования. Вы увидите, что на Airbnb не всегда достаточно позиций, удовлетворяющих всем запросам пользователей. А это представляет собой интересную задачу. Также я скажу пару слов об оценке модификаций. Работая над новыми поисковыми продуктам, очень важно учредить оценочные инструменты и факторы, которые бы давали уверенность в том, что каждое сделанное изменение будет иметь положительные эффект для пользователя.
В прошлой статье мы рассмотрели технологию монтажа накруткой. Но практика — критерий истины. К тому же DIHALT задал конкретный вопрос о том, как же быть с деталями? Ясно, что детали ставятся на плату с одной стороны, а все соединения происходят с другой стороны (вроде бы логично, но как?). Для монтажа накруткой есть готовые платы, но они очень дорогие.
В этой статье я покажу свое решение, как макетировать накруткой, на плате, которую я сделал сам буквально за пару часов.