• Быстрые TCP сокеты на Erlang

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

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

      Статья адресована как Erlang программистам, так и всем, кто просто интересуется Erlang. Глубокие знания языка не требуются.
      Читать дальше →
    • Rust в деталях: пишем масштабируемый чат с нуля, часть 1

      • Перевод

      Часть 1: Реализуем WebSocket. Введение.


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

      В первой части мы рассмотрим начальную настройку окружения и реализацию простейшего WebSocket-сервера. Чтобы понять технические детали статьи вам не потребуется опыта работы с языком Rust, хотя знание основ системных API (POSIX) и C/C++ лишним не будет. Прежде чем начинать чтение, заготовьте немного времени (и кофе) — статья описывает все максимально подробно и поэтому довольно длинная.

      Читать дальше →
    • Как я, в итоге, написал новую RTOS, протестированную и стабильную

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

        image


        Процессоры, используемые в наших продуктах — это, в основном, 16- и 32-битные микроконтроллеры Microchip, имеющие RAM от 8 до 32 кБ, и ROM от 128 до 512 кБ, без MMU. Иногда, для самых простых устройств, используются еще более скромные 8-битные чипы.

        Очевидно, что у нас нет (разумных) шансов использовать ядро Linux. Так что нам нужна какая-нибудь RTOS (Real-Time Operating System). Находятся даже люди, которые не используют никаких ОС в микроконтроллерах, но я не считаю это хорошей практикой: если железо позволяет мне использовать ОС, я ее использую.

        Несколько лет назад, когда мы переходили с 8-битников на более мощные 16-битные микроконтроллеры, мои коллеги, которые были гораздо более опытными, чем я, рекомендовали вытесняющюю RTOS TNKernel. Так что это — та ОС, которую я использовал в разных проектах в течение пары лет.

        Не то, чтобы я был очень доволен ею: например, в ней нет таймеров. И она не позволяет потоку ждать сообщения сразу из нескольких очередей. И в ней нет программного контроля переполнения стека (это действительно напрягало). Но она работала, так что я продолжал ее использовать.
        Читать дальше →
      • Return oriented programming. Собираем exploit по кусочкам

        • Tutorial
        Введение
        В этой статье мы попробуем разобраться как работает Return Oriented эксплоит. Тема, в принципе, так себе заезженная, и в инете валяется немало публикаций, но я постараюсь писать так, чтобы эта статья не была их простой компиляцией. По ходу нам придется разбираться с некоторыми системными особенностями Linux и архитектуры x86-64 (все нижеописанные эксперименты были проведены на Ubuntu 14.04). Основной целью будет эксплуатирование тривиальной уязвимости gets с помощью ROP (Return oriented programming).
        Читать дальше →
        • +37
        • 21,3k
        • 4
      • USB killer

          Было обычное хмурое зимнее утро, мы с коллегами по обыкновению пили утренний кофе, делились новостями, ничто не предвещало беды. Но тут приятель рассказал… далее цитата из скайп чата:

          Как-то читал статейку как парень в метро вытянул у чавака из сетчатого кармана сумки флеху, на которой 128 было написано. Пришел домой, вставил в ноут -> спалил пол компа… Написал на флехе 129 и теперь носит в наружном кармане своей сумки...

          Картинка для привлечения внимания:



          Так как я работаю на предприятии, которое занимается разработкой и производством электроники, то мы с коллегами принялись активно обсуждать варианты реализации такой флешки, — которая “спаливала бы полкомпа.” Было множество хардкорных, фантастических, а также вполне реальных вариантов. И всё бы так и закончилось этим весёлым обсуждением, если бы я не собирался заказывать изготовление печатных плат для других своих проектов.
          Читать дальше →
        • Лекции Технопарка. Программирование в управлении. История одного студента Бауманки

            Сегодня мы продолжаем цикл публикаций лекций Технопарка (кстати, недавно проекту исполнилось 3 года). В этой лекции Кирилл Маркин, студент МГТУ им. Баумана, поделится своим опытом по созданию небольшой компании «Диафентис», которая занимается внедрением различных программных комплексов. Конспект лекции смотрите под катом.



            Подписывайтесь на наш youtube-канал, там будет еще много интересного!
            Читать дальше →
            • +34
            • 23,8k
            • 8
          • Несколько интересных особенностей MySQL

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

              Начнем с такого интересного типа, как ENUM.

              mysql> CREATE TABLE enums(a ENUM('c', 'a', 'b'), b INT, KEY(a));
              Query OK, 0 rows affected (0.36 sec)
              
              mysql> INSERT INTO enums VALUES('a', 1), ('b', 1), ('c', 1);
              Query OK, 3 rows affected (0.05 sec)
              Records: 3  Duplicates: 0  Warnings: 0
              


              Итак, у нас есть таблица, в ней есть два столбца. У первого, a, тип ENUM, у второго, b, INT. В таблице три строки, у всех трех значение b равно 1. Интересно, чему равны минимальный и максимальный элементы в столбце a?

              mysql> SELECT MIN(a), MAX(a) FROM enums;
              +--------+--------+
              | MIN(a) | MAX(a) |
              +--------+--------+
              | c      | b      |
              +--------+--------+
              1 row in set (0.00 sec)
              


              Кажется странным, было бы разумно, если бы самым маленьким был 'a', а самым большим — 'c'.
              А что если выбрать минимум и максимум только среди тех строк, где b = 1? То есть, среди всех строк?

              mysql> SELECT MIN(a), MAX(a) FROM enums WHERE b = 1;
              +--------+--------+
              | MIN(a) | MAX(a) |
              +--------+--------+
              | a      | c      |
              +--------+--------+
              1 row in set (0.00 sec)
              


              Вот так мы заставили MySQL поменять свое мнение о том, как сравнивать поля в ENUM, просто добавив предикат.
              Разгадка такого поведения заключается в том, что в первом случае MySQL использует индекс, а во втором нет. Это, конечно, не объясняет, почему MySQL сравнивает ENUMы по разному для сортировки в индексе, и при обычном сравнении.

              Второй пример проще и лаконичнее:

              mysql> (SELECT * FROM moo LIMIT 1) LIMIT 2;
              +------+
              | a    |
              +------+
              |    1 |
              |    2 |
              +------+
              2 rows in set (0.00 sec)
              


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

              Интересно, что далеко не любой SELECT в скобках сработает, в частности, UNION в скобках — это синтаксическая ошибка:

              mysql> (SELECT * FROM moo UNION ALL SELECT * FROM hru) LIMIT 2;
              ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION ALL SELECT * FROM hru) LIMIT 2' at line 1
              


              Еще несколько интересных примеров под катом
              Читать дальше →
            • Я боюсь совершить ошибку

                Каждый раз, задумывая что-то грандиозное, я испытываю страх. Он призывает мой мозг даже не начинать: «Это долго, это сложно, это невозможно». Когда я начинал делать свой проект, эти мысли посещали и меня. Кажется, я не один такой.

                У меня есть приятель, с которым я знаком три года. Мы познакомились, когда я работал сценаристом компьютерных игр. Три года назад он хотел делать свою игру. Что изменилось с тех пор? Ничего. Он все так же хочет, но максимум что он сделал за это время — несколько раз запустил Unity.

                Готовясь писать эту статью, я набрался храбрости и спросил его, что ему мешает начать. Он назвал множество причин — нет денег, нет времени, нет команды, нет ресурсов… Но в итоге, я все-таки вынудил его признаться, что это все отговорки. На самом деле — он боится.


                Так почему же мы боимся?
              • Паранойя по поводу юридической безопасности или с чего начать защиту своего бизнеса

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

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

                    Сколько себя помню, был помешан на компьютерах. И программирование так прочно вошло в мою жизнь, что несколько лет я и думать не мог о том, чтобы зарабатывать чем-то, кроме кодинга. Казалось, брось я программирование, деньги кончатся.
                    Последние лет пять я кодил. Кодил ночами, кодил круглосуточно. Устал. Надежды на отдых не было совсем. Каждый новый день начинался с того, что я представлял себе: что нужно сделать, что я должен сделать. Озверение пришло неожиданно и пришло в тот момент, когда я все-таки смог вырваться в отпуск.
                    Я сидел в беседке в одном из поселков близ Джубги и страдал бессонницей. Горы смыкались над головой, в голове бродила усталость. В ту ночь я в полной мере ощутил, что так дальше жить нельзя, что моя любовь — путешествия.
                    И именно в ту ночь внезапно пришло озарение: надо открыть интернет-магазин.
                    Но как открыть магазин, когда за душой нет ни гроша?
                    Читать дальше →