• 2R2L кеширование

      Кеширование – широко освещенная и известная тема. Но и в ней могут появляться новые решения. В частности – в области высокоуровневых продуктов (например, в веб-разработке). Столкнувшись с недостатками классического подхода, я попробовал вывести идеальную схему кеширования для случая, когда актуальность данных не является критической. Потом я попробовал найти описание подобной схемы, а лучше – готовые решения. Не нашел. Поэтому назвал ее сам – 2R2L (2 Range 2 Location) – двух-диапазонное двух-«пространственное» кеширование. Хотя наверняка оно уже где-то применяется.
      Читать дальше →
    • Мой восьмилетний квест по оцифровке 45 видеокассет. Часть 2

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

      Шаг 3. Публикация


      ClipBucket, опенсорсный клон YouTube, который можно установить на собственном сервере


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



      Удивительно, но у ClipBucket нет никаких инструкций по установке. Благодаря стороннему руководству я автоматизировал процесс установки с помощью Ansible, инструмента управления конфигурацией серверов.
      Читать дальше →
      • +17
      • 4.7k
      • 3
    • Пишем движок полнотекстового поиска на Go

      • Translation
      Полнотекстовый поиск — один из тех инструментов, которые мы используем практически каждый день, когда ищем какую-то информацию в интернете. Full-Text Search (FTS) — это метод поиска текста в коллекции документов. Документ может ссылаться на веб-страницу, газетную статью, сообщение электронной почты или любой структурированный текст.

      Сегодня мы собираемся написать собственный движок FTS. К концу этой статьи он сможет выполнять поиск по миллионам документов менее чем за миллисекунду. Начнём с простых поисковых запросов, таких как «Выдать все документы со словом cat», а потом расширим движок для поддержки более сложных логических запросов.

      Примечание: самым известным движком полнотекстового поиска является Lucene (а также Elasticsearch и Solr, построенные на его основе).
      Читать дальше →
    • Как создать шаблон описания системы и начать его использовать

        Когда в IT-компании работают 6 человек, которые пилят одну систему и обсуждают её в кулуарах, описание системы и документация кажутся ненужными. Но когда систем уже более 100, без описания не обойтись. Ведь непродуманное изменение UI может остановить создание заказов. Мы создали единый шаблон описания системы, чтобы документация стала максимально полезной.

        Меня зовут Александра Камзеева, я работаю системным аналитиком уже 9 лет, из них 3.5 года в Lamoda. Я много читаю, анализирую текущую документацию и создаю новую. В работе я всегда структурирую информацию и делаю её максимально удобной.

        image
        Читать дальше →
        • +10
        • 4.3k
        • 7
      • Нельзя так просто взять и написать SELECT, если вендор не разрешает… но мы таки напишем

        • Tutorial

        TL;DR: GitHub://PastorGL/AQLSelectEx.


        Aerospike AQL SELECT


        Однажды, ещё не в студёную, но уже зимнюю пору, а конкретно пару месяцев назад, для проекта, над которым я работаю (нечто Geospatial на основе Big Data), потребовалось быстрое NoSQL / Key-Value хранилище.


        Терабайты исходников мы вполне успешно прожёвываем при помощи Apache Spark, но схлопнутый до смешного объёма (всего лишь миллионы записей) конечный результат расчётов надо где-то хранить. И очень желательно хранить таким образом, чтобы его можно было по ассоциированным с каждой строкой результата (это одна цифра) метаданным (а вот их довольно много) быстро найти и отдать наружу.

        И вот какая вышла история...
      • Склеиваем несколько фотографий в одну длинную с помощью компьютерного зрения

          В предыдущих статьях был описан шеститочечный метод разворачивания этикеток и как мы тренировали нейронную сеть. В этой статье описано, как склеить фрагменты, сделанные из разных ракурсов, в одну длинную картинку.
          Читать дальше →
        • Компиляция. 3: бизон

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

            Далее в посте:

            1. Компиляция грамматики
            2. Двухступенчатый парсер
            3. Что у него внутри?
            4. Конфликты в грамматике
            5. Как это работает?
            Читать дальше →
          • Способ написания синтаксических анализаторов на c++

            В этой статье рассказывается, как писать синтаксические анализаторы с помощью этой небольшой библиотеки на с++.

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

            Например, элемент xml состоит из открывающего тега, содержимого и закрывающего тега. —> Открывающий тег состоит из '<', имени тега, возможно пустого списка атрибутов и '>'. —> Закрывающий тег состоит из '</', имени тега и '>'. —> Атрибут состоит из имени, знаков '=', '"', строки символов и снова '"'. —> Содержимое в свою очередь тоже может содержать элементы. —> И т.д. Таким образом, после разбора получается синтаксическое дерево.

            Такие языки удобно описывать формой Бэкуса-Наура (БНФ), где каждый нетерминал соответствует некоторому предложению языка. Когда мы пишем программы, мы обычно разбиваем их на функции и подфункции, и раз мы собрались писать синтаксический анализатор, пусть каждому нетерминалу БНФ соответствует одна функция нашего анализатора, и пусть каждая такая функция:

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

            Например для БНФ вида expr ::= expr1 expr2 expr3 будем писать такую функцию:
            Читать дальше →
          • Разработка под WebAssembly: реальные грабли и примеры



              Анонс WebAssembly состоялся в 2015-м — но сейчас, спустя годы, всё ещё немногие могут похвастаться им в продакшне. Тем ценнее материалы о подобном опыте: информация из первых рук о том, каково с этим жить на практике, пока что в дефиците.

              На конференции HolyJS доклад об опыте использования WebAssembly получил высокие оценки зрителей, и теперь специально для Хабра подготовлена текстовая версия этого доклада (видеозапись также приложена).
              Читать дальше →
            • Точечная сварка под микроскопом

              • Tutorial
              Хомяки приветствуют вас, друзья!

              Сегодняшний пост будет посвящен аппарату для точечной контактной сварки аккумуляторов типа 18650 и прочих. В ходе соберем такое устройство, разберем основные принципы его работы и детально изучим сваренные места под микроскопом. Аккумуляторам сегодня придётся нелегко. Казалось бы сварочный аппарат, который в буквальном смысле состоит из одного трансформатора и контроллера, что тут может пойти не так?!



              Представьте себе, что одним прекрасным утром у вас сдох шуруповёрт. Крутить шурупы отверткой не царское дело, потому нужно решать проблему. Виновниками этого происшествия стали никелевые аккумуляторы, которые преждевременно отправились в Вальхаллу пить вино и сражаться на мечах. На смену им пришли компактные, высокотоковые литий-ионные аккумуляторы, которые по характеристикам в разы превосходят своих предшественников.
              Читать дальше →
            • «Конституция» для разработчиков: как страничка на GitHub помогает нам не ругаться уже год

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



                Обычно для сплочения команд мы практикуем выезды: ребята, в остальное время работающие на удаленке из своих городов, собираются в одной точке мира. Днем вместе проходят часть спринта, вечером вместе развлекаются. Но сроки поджимали, поэтому мы пошли другим путем. Вот что мы придумали — и кажется, такой подход может использовать любая команда, в которой нет авторитарного управления.
                Читать дальше →
              • Прокладываем L2 туннели в OpenVPN

                • Tutorial

                Недавно меня попросили разобраться в настройке L2 туннеля для моста между двумя удалёнными локальными сетями, и я был поражён, насколько мало удобных решений мне удалось найти. Раньше я не интересовался этой темой и наивно полагал, что любой адекватный VPN-протокол умеет ловить широковещательные пакеты и пересылать их по обычному L3 туннелю. К сожалению, доступных «из коробки» универсальных решений нет. Есть несколько протоколов и инструментов для них, большинство из которых работает в очень ограниченных условиях или вовсе объявлено deprecated. Самым приятным вариантом я поделюсь дальше.
                Читать дальше →
              • Сколько софта нужно купить для компании

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

                  В этой статье хотелось бы поделиться мыслями, какой софт и когда имеет смысл покупать для IT компании.

                  image
                  Читать дальше →
                • Защищённые прокси — практичная альтернатива VPN


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

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

                  В этой статье расказано о преимуществах защищённого прокси перед VPN и предложены различные реализации, готовые к использованию.
                  Читать дальше →
                • Почему функциональное программирование такое сложное

                  • Tutorial

                  Я несколько раз начинал читать статьи из серии «Введение в функциональное программирование», «Введение в Теорию Категорий» и даже «Введение в Лямбда Исчисление». Причем и на русском, и на английском. Каждый раз впечатление было очень сходным: во-первых, много новых непонятных слов; во-вторых, много новых определений, которые возникают из ниоткуда; в-третьих, совершенно непонятно, как это использовать.


                  Самым непонятным и зубодробительным оказалось, наверное, Теория Категорий. Я освоился в ней только с третьего подхода. В первые два раза я честно все прочитал, кажется понял, но т.к. никакой связки с реальной жизнью она не имела, то спустя неделю она благополучно полностью выветривалась.


                  Попытки использовать как-то в работе изученные концепции разбивались о полное непонимание, как применить полученное глубокое знание. Ведь, напомню, что парадигму ФП (где-то удобнее, где-то не очень, но) можно использовать практически в любом ЯП, совсем необязательно для этого изучать условный Хаскель.

                  Читать дальше →
                • 10 советов схемотехнику

                    Недавно один мой знакомый, начавший интересоваться электроникой и схемотехникой, обратился ко мне с просьбой дать ему какие-то практические советы по разработке электронных устройств. Поначалу этот вопрос немного озадачил меня: как-то так получилось, что для себя я никогда не выделял какие-то перечни обязательных правил проектирования, всё это было у меня где-то на уровне подсознания. Но этот вопрос послужил хорошим толчком для того, чтобы сесть и сформулировать хотя бы небольшой список таких рекомендаций. Когда все было готово, я подумал, что, возможно, это будет интересно почитать кому-то еще, таким образом и получилась данная статья.


                    Читать дальше →
                  • BLE под микроскопом (ATTы GATTы...)

                    image

                    BLE под микроскопом (ATTы GATTы...)

                    Часть 1, обзорная

                    Уже прошло довольно большое время, с тех пор, когда вышла первая спецификация на Bluetooth 4.0. И, хотя тема BLE очень интересна, она до сих пор отталкивает многих разработчиков, из-за своей сложности. В своих предыдущих статьях я рассматривал в основном самый нижний уровень Link Layer и Physical Layer. Это позволяло не обращаться к таким сложным и запутанным понятиям как протокол атрибутов(ATT) и общий профиль атрибутов (GATT). Однако деваться некуда, не понимая их, невозможно разрабатывать совместимые устройства. Сегодня я хотел бы поделиться с вами этими знаниями. В своей статье я буду опираться на учебник для начинающих с сайта Nordic-а. Итак, давайте приступим.
                    Читать дальше →
                  • Артикли в английском: безжалостная война правил и исключений



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

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

                      Нет смысла писать ещё одну статью о базовых правилах употребления артиклей в английском. Сегодня я расскажу о правилах и о способах их нарушить.
                      Читать дальше →
                    • Измеряем температуру без АЦП

                        Стояла как-то задача оснастить одну систему кучей термодатчиков. Причём оснастить максимально недорого.


                        Результаты изысканий (которые, по-моему, получились довольно изящными) предлагаю к рассмотрению в этой статье.



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

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