• Наглядное объяснение чисел с плавающей запятой

    • Перевод
    image

    В начале 90-х создание трёхмерного игрового движка означало, что вы заставите машину выполнять почти не свойственные ей задачи. Персональные компьютеры того времени предназначались для запуска текстовых процессоров и электронных таблиц, а не для 3D-вычислений со частотой 70 кадров в секунду. Серьёзным препятствием стало то, что, несмотря на свою мощь, ЦП не имел аппаратного устройства для вычислений с плавающей запятой. У программистов было только АЛУ, перемалывающее целые числа.

    При написании книги Game Engine Black Book: Wolfenstein 3D я хотел наглядно показать, насколько был велики были проблемы при работе без плавающей запятой. Мои попытки разобраться в числах с плавающей запятой при помощи каноничных статей мозг воспринимал в штыки. Я начал искать другой способ. Что-нибудь, далёкое от $(-1)^S * 1.M * 2^{(E-127)}$ и их загадочных экспонент с мантиссами. Может быть, в виде рисунка, потому что их мой мозг воспринимает проще.

    В результате я написал эту статью и решил добавить её в книгу. Не буду утверждать, что это моё изобретение, но пока мне не приходилось видеть такого объяснения чисел с плавающей запятой. Надеюсь, статья поможет тем, у кого, как и меня, аллергия на математические обозначения.
    Читать дальше →
  • Используйте Stream API проще (или не используйте вообще)

      С появлением Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода. Однако оказалось, что многие даже с использованием Stream API пишут длиннее, чем надо. Причём это не только делает код длиннее и усложняет его понимание, но иногда приводит к существенному провалу производительности. Не всегда понятно, почему люди так пишут. Возможно, они прочитали только небольшой кусок документации, а про другие возможности не слышали. Или вообще документацию не читали, просто видели где-то пример и решили сделать похоже. Иногда это напоминает анекдот про «задача сведена к предыдущей».


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

      Читать дальше →
    • Бомба Сатоши

        Почему экономическая целесообразность может привести к краху Биткойн

        Автор статьи — Алексей Маланов, эксперт отдела развития антивирусных технологий «Лаборатории Касперского»

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



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

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

          Привет, %username%

          Пришло время для свежей пачки криптоновостей, пока они еще не перестали быть новостями. В этом выпуске:
          • Новый рекорд вычисления дискретного логарифма
          • VPN сервер и клиент, использующие Noise протокол
          • Постквантовая криптография в Chrome уже сегодня!
          • Чего вы не знаете о новом E2E шифровании в Facebook
          • RLWE избавляется от R и это идет ему на пользу
          • Comodo хотел поиметь Let`s Encrypt, но сфейлил. А Let`s Encrypt с завтрашнего дня будет поддерживать ddns
          • Появились минимальные требования к реализациям алгоритмов RSA, DSA, DH, устойчивым к side-channel атакам


          Предыдущий выпуск тут
          Поехали
          • +35
          • 19,5k
          • 5
        • Опасный target="_blank"

            Большинство создают внешние ссылки через target="_blank" и не знают одного интересного нюанса — страница, на которую мы попадем таким образом, получит частичный контроль над ссылающейся на нее страницей через js свойство window.opener.

            Через window.opener.location мы сможем сделать редирект на, к примеру, фишинговую страницу. Это своего рода tabnabbing, только более продвинутый. Так как жертва меньше всего ожидает подмены страницы, в открытой ранее, доверенной вкладке браузера.
            Читать дальше →
          • Как вы можете сделать Java лучше


              Многие люди жалуются, что в Java чего-то не хватает, что-то глючит или медленно работает. Хорошая новость: у вас есть возможность не жаловаться, а своими силами сделать Java лучше. Java практически полностью открыта в виде проекта OpenJDK. У этого проекта есть свои особенности, но в целом вам ничего не мешает самим сообщать о проблемах, исправлять их и даже разрабатывать новую функциональность. В этой статье я немного расскажу, как это делать новичку.

              Читать дальше →
            • Badoo перешли на PHP7 и сэкономили $1M

                Badoo перешли на PHP7 и сэкономили $1M

                Мы сделали это! Несколько сотен наших application-серверов переведены на PHP7 и прекрасно себя чувствуют. Насколько нам известно, это второй переход на PHP7 проекта такого масштаба (после Etsy). В процессе мы нашли несколько очень неприятных багов в системе кеширования байт-кода PHP7, но они исправлены. А теперь — ура! — благая весть для всего PHP-сообщества: PHP7 действительно готов к продакшену, стабилен, потребляет значительно меньше памяти и дает очень хороший прирост производительности. Ниже мы подробно расскажем, как мы перешли на PHP7, с какими трудностями столкнулись, как с ними боролись и какие результаты получили.
                Читать дальше →
              • Коллекции в Java: о чём многие забывают

                • Tutorial
                Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

                Содержание:


                1. List.subList
                2. PriorityQueue
                3. EnumSet и EnumMap
                4. Set.add(E) и Set.remove(E) возвращают булево значение
                5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
                6. Map.keySet() и Map.values()
                7. Arrays.asList может быть ключом
                8. Collections.max
                9. LinkedList, Stack, Vector, Hashtable
                Читать дальше →
              • Ekspozzer — создание панорамы из видео, усреднение видеопотока

                  Привет, Хабрахабр!


                  Сразу скажу: ничего феноменального в статье нет. Эта статья посвящена разработанной «на коленке» программе по созданию панорам из видео и временному усреднению видеопотока (кадров). Программа также может быть использована как виртуальная slit-камера. Статья будет интересна всем тем, кто увлекается обработкой видео и изображений, а так же гик-артом. Весьма простая программа — весьма интересный результат. В конце статьи ссылка на скачивание. Осторожно, трафик!
                  Читать дальше →
                • Чтобы распознавать картинки, не нужно распознавать картинки

                    Посмотрите на это фото.



                    Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

                    Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

                    Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:
                    Осторожно, тяжелые гифки