• Ещё один велосипед: храним юникодные строки на 30-60% компактнее, чем UTF-8



      Если вы разработчик и перед вами стоит задача выбора кодировки, то почти всегда правильным решением будет Юникод. Конкретный способ представления зависит от контекста, но чаще всего тут тоже есть универсальный ответ — UTF-8. Он хорош тем, что позволяет использовать все символы Юникода, не тратя слишком много байт в большинстве случаев. Правда, для языков, использующих не только латиницу, «не слишком много» — это как минимум два байта на символ. Можно ли лучше, не возвращаясь к доисторическим кодировкам, ограничивающим нас всего 256 доступными символами?

      Ниже предлагаю ознакомиться с моей попыткой дать ответ на этот вопрос и реализацию относительно простого алгоритма, позволяющего хранить строчки на большинстве языков мира, не добавляя той избыточности, которая есть в UTF-8.
      Читать дальше →
    • Как скрестить Excel c интерактивным веб-приложением

      Не секрет, что Excel довольно мощный инструмент для работы с числовыми табличными данными. Однако средства, которые предоставляет Microsoft для интеграции с ним, далеки от идеала. В частности, сложно интегрировать в Excel современные пользовательские интерфейсы. Нам нужно было дать пользователям Excel возможность работать с довольно насыщенным и функциональным интерфейсом. Мы пошли несколько другим путем, который в итоге показал хороший результат. В этой статье я расскажу, как можно организовать интерактивное взаимодействие Excel c веб-приложением на Angular и расшить Excel практически любым функционалом, который реализуем в современном веб-приложении.


      Читать дальше →
    • Меня перевезли в другую страну и через две недели выставили на мороз — потому что передумали нанимать

        tp


        Почти год назад я переехал жить в Беларусь. Как вы уже догадались, если релокейт проходит без проблем, то такие истории на Хабр не пишутся. Однако, у меня есть что рассказать. Моя история будет не о славном граде Минске, белорусской идентичности, летних протестах и прочих, несомненно, важных вещах. Я расскажу вам об одной белорусской компании, в которой меня угораздило недолго поработать. История эта совершенно феерическая — что-то подобное могли бы снять режиссёры Silicon Valley. Всю свою карьеру я думал что так просто не бывает. Ну даже если и бывает — то я в это точно не вляпаюсь. Однако, я ошибался. Мне не повезло — переезд вышел мне боком и я влетел в целый водоворот событий. Они довольно поучительны и, как мне кажется, мой опыт будет интересен всем, кто планирует переезжать в ближайшем будущем. Меня зовут Павел и вот моя история.

        Читать дальше →
      • Самые важные архитектурные шаблоны, которые нужно знать

        • Перевод

        Рассказываем о самых распространенных шаблонах в архитектуре ПО. Разбираемся с контекстом и решаемыми задачами, обсуждаем достоинства и недостатки.

        - Многоуровневая архитектура

        - Каналы и фильтры

        - Клиент — сервер

        - Модель — представление — контроллер

        - Управляемая событиями архитектура

        - Архитектура на основе микросервисов

        Читать далее
        • +18
        • 10,2k
        • 5
      • На себя или на «дядю»? Открытие своего бизнеса

          image

          Вот и пятница подкралась незаметно. Самое время для уютной беседы на злободневные темы. Сегодня поговорим про варианты трудоустройства. Как люди приходят к выбору, влияние пандемии 2020 года на взгляды трудящихся. Плюсы, минусы, подводные камни.
          Весь рассказ основан на реальных событиях и персоналиях.
          Читать дальше →
          • +29
          • 11,3k
          • 7
        • Оптимизация 3D-графики под WebGL (опыт PLANT-SIM)

            В этой статье речь пойдет об оптимизации Unity-сцены проекта Plantsim 1.0.: о визуальной части цифровой копии предприятия Tennessee Eastman Process, реализованного на Unity 2017.1.1f1.


            image


            Заметка от партнера IT-центра МАИ и организатора магистерской программы “VR/AR & AI” — компании PHYGITALISM.

            Читать дальше →
          • Почему мы выбрали MobX, а не Redux, и как его использовать эффективнее

            Меня зовут Назим Гафаров, я разработчик интерфейсов в Mail.ru Cloud Solutions. На дворе 2020 год, а мы продолжаем обсуждать «нововведения» ES6-синтаксиса и преимущества MobX над Redux. Существует много причин использовать Redux в своем проекте, но так как я не знаю ни одной, расскажу о том, почему мы выбрали MobX.

            Почему?
          • Кривые Безье. Немного о пересечениях и как можно проще

            Вы сталкивались когда-нибудь с построением (непрерывного) пути обхода кривой на плоскости, заданной отрезками и кривыми Безье?


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


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


            Вооружившись знанием о величине максимально допустимого отклонения, я приступил к исследованию, результатами которого хочу поделиться.

            Читать дальше →
          • Вы не знаете как должны работать модальные окна

              Уверен, многие хоть раз создавали всплывающее модальное окно. Но задумывались ли вы об определении этого компонента? Как он должен работать?


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


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


              Этот список сформирован на основе спецификаций WAI-ARIA, HTML Living Standard и моего личного опыта. И хотя я буду говорить про веб, большинство правил и рекомендаций применимы для модальных окон где угодно.

              Читать дальше →
            • C++20. Coroutines

              В этой статье мы подробно разберем понятие сопрограмм (coroutines), их классификацию, детально рассмотрим реализацию, допущения и компромиссы, предлагаемые новым стандартом C++20.


              image

              Читать дальше →
            • Реализация технологии SSO на базе Node.js

              • Перевод
              Веб-приложения создают с использованием клиент-серверной архитектуры, применяя в качестве коммуникационного протокола HTTP. HTTP — это протокол без сохранения состояния. Каждый раз, когда браузер отправляет серверу запрос, сервер обрабатывает этот запрос независимо от других запросов и не связывает его с предыдущими или последующими запросами того же самого браузера. Это, кроме прочего, означает, что получить доступ к серверным ресурсам, которые никак не защищены, может кто угодно. Если нужно защитить от посторонних некие серверные ресурсы, это значит, что нужно как-то ограничить то, что может запрашивать у сервера браузер. То есть — нужно аутентифицировать запросы и отвечать только на те из них, которые прошли проверку, игнорируя те, которые проверку не прошли. Для аутентификации запросов нужно владеть некими сведениями о запросах, хранящимися на стороне браузера. Так как протокол HTTP не хранит состояние запросов, нам для этого нужны некие дополнительные механизмы, которые позволяют серверу и браузеру совместно управлять состоянием соединений. Среди таких механизмов можно отметить использование куки-файлов, сессий, JWT.



              Если речь идёт о каком-то одном веб-проекте, то сведения о состоянии конкретного сеанса взаимодействия клиента и сервера легко поддерживать с применением аутентификации пользователя при его входе в систему. Но если такая вот самостоятельная система эволюционирует, превращаясь в несколько систем, перед разработчиком встаёт вопрос о поддержании сведений о состоянии каждой из этих отдельных систем. На практике этот вопрос выглядит так: «Придётся ли пользователю этих систем входить в каждую из них по-отдельности и так же из них выходить?».
              Читать дальше →
              • +23
              • 5,1k
              • 5
            • Обучение технологии ray-casting. Часть 2

              • Перевод

              Приветствую тебя, читатель. Это вторая часть серии переводов работы "Ray-Casting Tutorial For Game Development And Other Purposes". Второй части предшествует первая, которую так же можно просмотреть.

              Начнем! Продолжим!

              Читать далее
            • RED: Улучшение качества звука с помощью резервирования

              • Перевод

              Еще в апреле 2020 года Citizenlab сообщил о довольно слабом шифровании Zoom и заявил, что Zoom использует аудиокодек SILK. К сожалению, статья не содержала исходных данных, чтобы это подтвердить и дать мне возможность обращаться к ней в дальнейшем. Однако благодаря Натали Сильванович из Google Project Zero и инструменту трассировки Frida я смог получить дамп некоторых необработанных кадров SILK. Их анализ вдохновил меня взглянуть на то, как WebRTC обрабатывает звук. Что касается восприятия качества вызова в целом, больше всего на него влияет качество звука, поскольку мы склонны замечать даже небольшие сбои. Всего десяти секунд анализа было достаточно, чтобы отправиться в настоящее приключение – на поиски вариантов улучшения качества звука, обеспечиваемых WebRTC.
              Читать дальше →
            • Создание 1k/4k intro для Linux, часть 4

              • Tutorial
              Доброго всего, мои избыточно терпеливые друзья!
              Как очень немногие из вас помнят, во второй части мы остановились на том, что получили прямоугольник на весь экран в сколько-то там сотен байт, и теперь вот уже полтора года стоим перед проблемой заполнения пустоты в наших кодах и сердцах творчеством.

              Что же всё-таки можно нарисовать с помощью всего двух треугольников? Квадрат? Фрактал? Полёт сквозь мегатонной мощности взрыв в центре города? Есть ли предел безумию, где заканчивается реальность и начинается явь? Как правильно ухаживать за лучами, чем их кормить и обо что отражать вы узнаете во внезапном продолжении цикла статей про демомейкинг!


              Читать дальше →
            • Равномерное перемещение объекта вдоль кривой



              В процессе разработки игры в совершенно различных жанровых категориях может возникнуть потребность «запустить» какой-либо игровой объект вдоль гладкой кривой с постоянной или контролируемой скоростью, будь то грузовик, следующий из города А в город Б, выпущенная по хитрой траектории ракета, или самолет противника, выполняющий заложенный манёвр.

              Наверное, каждый имеющий отношение к теме знает или, по крайней мере, слышал, про кривые Безье, B-сплайны, сплайны Эрмита и прочие интерполяционные и сглаживающие сплайны и совершенно правильно предложил бы использовать в описанной ситуации один из них, но не всё так просто, как хотелось бы.
              Читать дальше →
            • В одной лодке с «ублюдком»: 11 продвинутых советов по использованию Git

              *"ублюдок" — вольный перевод слова "git" — "an unpleasant or contemptible person", "неприятный или презренный человек".



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


              Давайте посмотрим, что можно использовать, чтобы улучшить себе жизнь. Статья предполагает, что читатель умеет пользоваться основными возможностями git и понимает что делает, когда, скажем, вводит в консоль git rebase --merge --autostash.

              Читать дальше →
            • Обзор архитектуры и сервисов Тинькофф-журнала

                cover

                Привет!

                Тинькофф-журнал выпускает статьи уже 5 лет. За это время из блога на Вордпрессе он вырос в большую самодельную систему из десятков проектов и инструментов. Я в Т—Ж управляю разработкой и сегодня в общих чертах расскажу об архитектуре журнала и сервисах, на которых тот работает.
                Читать дальше →
                • +32
                • 7,2k
                • 7
              • Профилирование. Отслеживаем состояние боевого окружения с помощью Redis, ClickHouse и Grafana


                прим. latency/time.

                Наверное перед каждым возникает задача профилирования кода в продакшене. С этой задачей хорошо справляется xhprof от Facebook. Вы профилируете, к примеру, 1/1000 запросов и видите картину на текущий момент. После каждого релиза прибегает продакт и говорит «до релиза было лучше и быстрее». Исторических данных у вас нет и доказать вы ничего не можете. А что если бы могли?
                Читать дальше →
              • 10 идей из Human Interface Design Guidelines от Apple

                • Перевод
                Заслуживающие внимания рекомендации из гайдлайнов по iOS

                image

                Последние несколько месяцев я разрабатывал приложение для IOS и постоянно обращался к Human Interface Design Guidelines от Apple. Я считаю это руководство обязательным для прочтения любым начинающим или нынешним дизайнером UI/UX.

                Это руководство удивительно доступно и понятно. Оно не написано на излишне техническом жаргоне и сразу переходит к сути проектирования интерфейсов для IOS.

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

                Я знаю, что большинство людей просто прокручивают эти статьи и на самом деле не читают их, так что изображения здесь только шутки ради – наслаждайтесь.

                1. Протестируйте цветовую гамму вашего приложения в различных условиях освещения


                «Освещение значительно варьируется как в помещении, так и на улице, в зависимости от обстановки в помещении, времени суток, погоды и многого другого. Цвета, которые вы видите на вашем компьютере, не всегда будут выглядеть точно так же, ведь ваше приложение используется в реальном мире. Всегда смотрите как ваше приложение выглядит в различных условиях освещения, в том числе на открытом воздухе в солнечный день, только так можно увидеть как могут меняться цвета. При необходимости отрегулируйте цветовую гамму, чтобы обеспечить наилучшее качество отображения в большинстве случаев использования».
                Руководство по использованию цветов от Apple

                Читать дальше →
                • +13
                • 5,7k
                • 1
              • 10 идей из книги «Как управлять интеллектуалами»

                  Жизнеспособна ли ваша команда? Должен ли руководитель кодить? Всегда ли инженеры ненавидят процессы? Какими должны быть регламенты? Как оценивать производительность инженеров? Почему так важны тет-а-теты? Как побыстрее «свалить» с совещания? Почему в Кремниевой долине так любят плоские организационные структуры? Если эти вопросы для вас актуальны, то вам стоит почитать книгу «Как управлять интеллектуалами. Я, нерды и гики» Майкла Лоппа. Книга будет полезна тем, кто хочет более осознанно заниматься управлением инженерными командами. Предлагаю подборку важных идей книги.

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