• Шпаргалки по безопасности: REST



      REST — чрезвычайно популярная архитектура веб-приложений. Для вызова функций на сервере используются обычные HTTP-запросы с задаваемыми параметрами (для структуризации параметров обычно используют JSON или XML), при этом, строгого стандарта для REST-архитектуры не существует, что добавляет ей гибкости (и, конечно, немного хаоса).
      Читать дальше →
      • +19
      • 12.1k
      • 9
    • CSS Subgrid новости

      • Translation
      Несколько недель назад, я выступала на Frontend NE в Ньюкасле и большую часть выступления объясняла, что за особенности будут в CSS Grid Subgrid из Grid Level 2. Не имея реализации данного свойства(в браузерах), я смоделировала кучу демок, используя DevTools, для того выступления.

      По пути в San Francisco на Smashing Conf, где я проводила семинар по CSS Layout, мне дали доступ к пробной сборке Firefox Nightly, которая имела раннюю реализацию этого свойства.
      Это значит, что мне нужно переделать некоторые слайды для моих выступлений в мае, там будут использованы реальные скриншоты.
      Читать дальше →
      • +13
      • 4.1k
      • 3
    • Buildroot — часть 2. Создание конфигурации своей платы; применение external tree, rootfs-overlay, post-build скриптов

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

        Читать дальше →
      • Введение в программирование: простой 3D-шутер с нуля за выходные, часть 1

        • Tutorial
        Этот текст предназначен для тех, кто только осваивает программирование. Основная идея в том, чтобы показать этап за этапом, как можно самостоятельно сделать игру à la Wolfenstein 3D. Внимание, я совершенно не собираюсь соревноваться с Кармаком, он гений и его код прекрасен. Я же целюсь совсем в другое место: я использую огромную вычислительную мощность современных компьютеров для того, чтобы студенты могли создавать забавные проекты за несколько дней, не погрязая в дебрях оптимизации. Я специально пишу медленный код, так как он существенно короче и просто понятнее. Кармак пишет 0x5f3759df, я же пишу 1/sqrt(x). Мы преследуем разные цели.

        Я убеждён, что хороший программист получается только из того, кто кодит дома в своё удовольствие, а не только просиживает штаны на парах в университете. В нашем университете программистов учат на бесконечной череде всяких библиотечных каталогов и прочей скукоте. Брр. Моя цель — показать примеры проектов, которые интересно программировать. Это замкнутый круг: если интересно делать проект, то человек проводит над ним немало времени, набирается опыта, и видит вокруг ещё больше интересного (оно же стало доступнее!), и снова погружается в новый проект. Это называется проектное обучение, вокруг сплошной профит.

        Простыня получилась длинная, поэтому я разбил текст на две части:


        Выполнение кода из моего репозитория выглядит вот так:


        Это не законченная игра, но только заготовка для студентов. Пример законченной игры, написанной двумя первокурсниками, смотрите во второй части.
        Читать дальше →
      • Рисуем мультяшный взрыв за 180 строчек голого C++

        • Tutorial
        Неделю назад я опубликовал очередную главу из моего курса лекций по компьютерной графике; сегодня опять возвращаемся к трассировке лучей, но на сей раз пойдём самую чуточку дальше отрисовки тривиальных сфер. Фотореалистичность мне не нужна, для мультяшных целей подобный взрыв, как мне кажется, сойдёт.

        Как всегда, в нашем распоряжении только голый компилятор, никаких сторонних библитек использовать нельзя. Я не хочу заморачиваться с оконными менеджерами, обработкой мыши/клавиатуры и тому подобным. Результатом работы нашей программы будет простая картинка, сохранённая на диск. Я совершенно не гонюсь за скоростью/оптимизацией, моя цель — показать основные принципы.

        Итого, как в таких условиях нарисовать вот такую картинку за 180 строчек кода?


        Читать дальше →
      • 42 оператора расширенного поиска Google (полный список)

        • Translation
        • Tutorial
        Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

        Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

        В этой статье я поделюсь советами, которые помогут освоить поисковые операторы для 15 конкретных задач.
        Читать дальше →
      • Нечёткий поиск в тексте и словаре

          Введение


          Алгоритмы нечеткого поиска (также известного как поиск по сходству или fuzzy string search) являются основой систем проверки орфографии и полноценных поисковых систем вроде Google или Yandex. Например, такие алгоритмы используются для функций наподобие «Возможно вы имели в виду …» в тех же поисковых системах.

          В этой обзорной статье я рассмотрю следующие понятия, методы и алгоритмы:
          • Расстояние Левенштейна
          • Расстояние Дамерау-Левенштейна
          • Алгоритм Bitap с модификациями от Wu и Manber
          • Алгоритм расширения выборки
          • Метод N-грамм
          • Хеширование по сигнатуре
          • BK-деревья
          А также проведу сравнительное тестирование качества и производительности алгоритмов.
          Читать дальше →
        • Как мы две недели охотились на баг NFS в ядре Linux

          • Translation

          Подробное описание поисков бага из задачи GitLab, которые привели к патчу для ядра Linux


          14 сентября служба поддержки GitLab сообщила о критической проблеме, которая возникла у одного из наших клиентов: сначала GitLab работает нормально, а потом у пользователей возникает ошибка. Они пытались клонировать некоторые репозитории через Git, и вдруг появлялось непонятное сообщение об устаревшем файле: Stale file error. Ошибка сохранялась надолго и не давала работать, пока системный администратор вручную не запускал ls в самом каталоге.


          Пришлось изучать внутренние механизмы Git и сетевой файловой системы NFS. В итоге мы нашли баг в клиенте Linux v4.0 NFS, Тронд Мюклебуст (Trond Myklebust) написал патч для ядра, и с 26 октября этот патч входит в основное ядро Linux.


          В этом посте я расскажу, как мы изучали проблему, в каком направлении думали и какие инструменты использовали, чтобы отследить баг. Мы вдохновлялись отличной детективной работой Олега Дашевского, описанной в посте «Как я две недели охотился за утечкой памяти в Ruby».


          Читать дальше →
          • +35
          • 12.2k
          • 9
        • Angular 6+ полное руководство по внедрению зависимостей.  providedIn vs providers:[]

          • Translation
          image

          В Angular 6 появился новый улучшенный синтаксис для внедрения зависимостей сервисов в приложение (provideIn). Несмотря на то, что уже вышел Angular 7, эта тема до сих пор остается актуальной. Существует много путаницы в комментариях GitHub, Slack и Stack Overflow, так что давайте подробно разберем эту тему.

          В данной статье мы рассмотрим:


          1. Внедрение зависимостей (dependency injection);
          2. Старый способ внедрения зависимостей в Angular (providers: []);
          3. Новый способ внедрения зависимостей в Angular (providedIn: 'root' | SomeModule);
          4. Сценарии использования provideIn;
          5. Рекомендации по использованию нового синтаксиса в приложениях;
          6. Подведем итоги.
          Читать дальше →
        • Данные высокого рода

            Да-да, вам не привиделось и вы не ослышались — именно высокого рода. Род (kind) — это термин теории типов, означающий по сути тип типа [данных].

            Но вначале немного лирики.

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

            Эта статься — мои пять копеек в этот хайп. Мы рассмотрим валидацию данных в Хаскеле.

            Валидация типом


            Ранее было рассмотрен пример методики валидации при помощи валидации типом:

            type EmailContactInfo  = String
            type PostalContactInfo = String
            
            data ContactInfo = EmailOnly EmailContactInfo | 
                               PostOnly PostalContactInfo | 
                               EmailAndPost (EmailContactInfo, PostalContactInfo)
            
            data Person = Person 
              { pName :: String,
              , pContactInfo :: ContactInfo,
              }

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

            Валидация данными высокого рода




            В этой статье мы посмотрим иной метод валидации — при помощи данных высокого рода.

            Пусть у нас есть тип данных:

            data Person = Person
              { pName :: String
              , pAge  :: Int
              }

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

            Тут можно и поэтому данный метод широко используется среди авторов библиотек на Хаскеле.
            Читать дальше →
            • +16
            • 3.4k
            • 7
          • История одной игры или 4х стратегия, которая началась 20 лет назад и жива до сих пор

            В этой статье хочу рассказать об игре которая была создана в 1998 году и через 16 лет получила своё развитие, была издана и успешно продавалась. Примечательно тут то, что игра была написана одним человеком. Речь о Remember Tomorrow (Polaris Sector).
            Читать дальше →
          • Балансировка HTTP(S) трафика

              Добрый день, %username%. Меня зовут Антон Резников, я работаю над проектом Облако Mail.Ru Сегодня я хочу рассказать о технологиях балансировки трафика, проиллюстрировав историей о развитии социальной сети. Все персонажи выдуманы, а совпадения почти случайны. Статья обзорная, составлена по следам доклада на Highload Junior 2017. Некоторые вещи могут показаться элементарными, но опыт проведения собеседований показывает, что это не совсем так. Кое-что будет спорным, не без этого.

              Если интересно, добро пожаловать под кат.
              Читать дальше →
            • Школа магии TypeScript: дженерики и расширение типов

              • Translation
              • Tutorial
              Автор статьи, перевод которой мы сегодня публикуем, говорит, что TypeScript — это просто потрясающе. Когда он только начал пользоваться TS, ему страшно нравилась та свобода, которая присуща этому языку. Чем больше сил программист вкладывает в свою работу со специфичными для TS механизмами — тем значительнее получаемые им выгоды. Тогда он использовал аннотации типов лишь периодически. Иногда он пользовался возможностями по автодополнению кода и подсказками компилятора, но, в основном, полагался лишь на собственное видение решаемых им задач.

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



              В итоге он пришёл к выводу о том, что лучше так не делать. Он подружился с компилятором, начал обращать внимание на его подсказки. Компилятор находит проблемы в коде и сообщает о них задолго до того, как они могут нанести реальный вред. Автор статьи, глядя на себя как на разработчика, понял, что компилятор — это его лучший друг, так как защищает его от него самого. Как тут не вспомнить слова Альбуса Дамблдора: «Требуется большая храбрость, чтобы выступить против своих врагов, но не меньше ее требуется и чтобы выступить против своих друзей».

              Каким бы хорошим другом ни был компилятор, ему не всегда легко угодить. Иногда избежать использования типа any очень непросто. А порой кажется, что any — это единственное разумное решение некоей проблемы.

              Этот материал посвящён двум ситуациям. Избежав использования в них типа any можно обеспечить типобезопасность кода, открыть возможности по его повторному использованию и сделать его интуитивно понятным.
              Читать дальше →
            • Как защититься от переполнения стека (на Cortex M)?

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

                image

                Но вот если вы программируете микроконтроллеры, то проблема выглядит немного иначе. Для начала нужно заметить, что стек переполняется.

                В этой статье я расскажу о собственных изысканиях на эту тему. Поскольку я программирую в основном под STM32 и под Миландр 1986 — на них я и фокусировался.
                Читать дальше →
              • Подключаем оригинальные геймпады к ПК

                  Привет, Geektimes! Сегодня, конечно, не пятница, но тема самая что ни на есть пятничная. Всем мы любим отдыхать, каждый делает это по-своему, и, разумеется, среди аудитории IT-ресурса есть как фанаты видеоигр, так и фанаты PC как игровой платформы. Спору нет, в шутеры и RPG/RTS играть на мышке с клавиатурой удобно, но есть целые жанры, где аналоговое управление с геймпада/джойстика/руля предпочтительней.



                  Сегодня мы разберёмся, как у нас обстоят дела с подключением самых популярных контроллеров к ПК: оригинальных геймпадов XBox 360, XBox One и PS3/PS4.
                  Lock and load
                • Хотел красивую железку. Получилось

                    Часть 1 >> Часть 2 >> Вы находитесь здесь


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


                    Прошёл год с начала моего фанового проекта. Получилось! Та самая красивая железка выглядит вот так:
                    Моя прелесссть


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

                    Варим!
                  • Руководство по промисам для тех, кто хочет в них разобраться

                    • Translation
                    Лес чуден, тёмен — глянь в глубину.
                    Но прежде я все долги верну…
                    И много миль, пока я усну,
                    Так много миль, пока я усну...

                    Роберт Фрост

                    image

                    Промисы — это одно из самых замечательных новшеств ES6. JavaScript поддерживает асинхронное программирование посредством функций обратного вызова и с помощью других механизмов. Однако при использовании функций обратного вызова мы сталкиваемся с некоторыми проблемами. Среди них — «ад коллбэков» и «пирамида ужаса». Промисы — это паттерн, который значительно упрощает асинхронное программирование на JS. Асинхронный код, написанный с использованием промисов, выглядит как синхронный и лишён проблем, связанных с коллбэками.

                    Материал, перевод которого мы сегодня публикуем, посвящён промисам и их практическому использованию. Он рассчитан на начинающих разработчиков, которым хочется разобраться с промисами.
                    Читать дальше →
                  • Датчики Холла для бесколлекторного двигателя: возвращение квадратурных энкодеров

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


                    Задача: есть обычный китайский бесколлекторник, нужно его подключить к контроллеру Copley Controls 503. В отличие от копеечных коптерных контроллеров, 503й хочет сигнал с датчиков холла, которых на движке нет. Давайте разбираться, для чего нужны датчики и как их ставить.

                    Ликбез: принцип работы бесколлекторного двигателя


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


                    Читать дальше →
                  • Еще не бот, но уже что-то ― получаем уведомления от Zabbix в мессенджеры


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


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

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