• «Автоматический детектор спама». Или «О чем предупреждали Хемингуэй, Хаксли и Постман?»



      У каждого человека внутри должен быть встроенный автоматический детектор дерьма (Эрнест Хемингуэй, 1954)
      В этот день почти пятьдесят лет назад в Национальную конвенцию учителей английского языка (Вашингтон D.C.) была доставлена необычная статья. Нейл Постман, американский писатель, педагог, теоретик медиа и критик культуры поднял тему о том, что главная задача учителей — это научить детей противостоять влиянию бесполезной и ложной информации.

      28 ноября 1969 года


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

      • Translation
      Частенько, читая статьи о Вселенной или о физике частиц, можно встретить фразу, упоминающую «материю и энергию» так, будто они – две противоположности, или два партнёра, или две стороны одной монеты, или два класса, из которых состоит всё остальное. Это всплывает во многих контекстах. Иногда можно увидеть, как поэтически описывают Большой взрыв в качестве момента возникновения всей «материи и энергии» Вселенной. Можно прочесть, что «материя и антиматерия аннигилируют в чистую энергию». И конечно, вспомним две величайших загадки астрономии – «тёмная материя» и «тёмная энергия».

      Как учёный и специалист, пишущий на научные темы, я испытываю раздражение от такой терминологии, не потому, что она абсолютно неправильная, а потому, что такие разговоры вводят в заблуждение людей, не занимающихся наукой. Для физиков она мало что означает. Эти поэтические эпитеты относятся к тому, что чётко определено в математике и экспериментах, и двусмысленные определения просто коротко выражают длинные точные фразы. Но тех, кто не является экспертом, это очень запутывает, поскольку в каждом из контекстов используется своё определение материи, и своё значение слова «энергия» – иногда даже архаичное или просто неправильное. И любой из способов подразумевает, что всё существующее может быть либо материей, либо энергией – а это не так. На самом деле материя и энергия вообще относятся к разным категориям – это как говорить в одном предложении о яблоках и орангутангах, или о небесах и червях, или о птицах и пляжных мячах.
      Читать дальше →
    • FP на Scala: Что такое функтор?

      • Tutorial
      Специалист, приступающий к изучению функционального программирования, сталкивается как с неоднозначностью и запутанностью терминологии, так и с постоянными ссылками на «серьезную математику».

      В этой статье, не используя теорию категорий с одной стороны и эзотерические языковые механизмы Scala с другой стороны, рассмотрены два важнейших понятия
      • ко-вариантный функтор
      • контра-вариантный функтор
      которые являются стартовой точкой для понимания всего множества категориальных конструкций, куда можно включить
      • Exponential (Invariant) Functor, BiFunctor, ProFunctor
      • Applicative Functor, Arrow, Monad / Co-Monad
      • Monad Transformers, Kleisli, Natural Transformations

      Объяснено происхождение категориальной терминологии, указана роль языковых механизмов в реализации категориальных абстракций и рассмотрено несколько ковариантных (Option, Try, Future, List, Parser) и контравариантных (Ordering, Equiv) функторов из стандартной библиотеки Scala.

      Первая статья в «категориальной серии»:
      1. FP на Scala: что такое функтор?
      2. FP на Scala: Invariant Functor

      Если Вы желаете сильнее погрузиться в мир Scala, математики и функционального программирования — попробуйте онлайн-курс «Scala for Java Developers» (видео + тесты, всего за 25% цены!).


      Читать дальше →
      • +23
      • 27.7k
      • 7
    • Повышаем производительность кода: сначала думаем о данных

      • Translation


      Занимаясь программированием рендеринга графики, мы живём в мире, в котором обязательны низкоуровневые оптимизации, чтобы добиться GPU-фреймов длиной 30 мс. Для этого мы используем различные методики и разработанные с нуля новые проходы рендеринга с повышенной производительностью (атрибуты геометрии, текстурный кеш, экспорт и так далее), GPR-сжатие, скрывание задержки (latency hiding), ROP…

      В сфере повышения производительности CPU в своё время применялись разные трюки, и примечательно то, что сегодня они используются для современных видеокарт ради ускорения вычислений ALU (Низкоуровневая оптимизация для AMD GCN, Быстрый обратный квадратный корень в Quake).


      Быстрый обратный квадратный корень в Quake

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

      Эта статья — не исчерпывающее хардкорное руководство по железу. Это всего лишь введение, напоминание, свод базовых принципов написания эффективного кода для CPU. Я хочу «показать, что низкоуровневое мышление сегодня всё ещё полезно», даже если речь пойдёт о процессорах, которые я мог бы добавить.

      В статье мы рассмотрим кеширование, векторное программирование, чтение и понимание ассемблерного кода, а также написание кода, удобного для компилятора.
      Читать дальше →
    • Образы и контейнеры Docker в картинках

      docker container

      Перевод поста Visualizing Docker Containers and Images, от новичка к новичкам, автор на простых примерах объясняет базовые сущности и процессы в использовании docker.

      Если вы не знаете, что такое Docker или не понимаете, как он соотносится с виртуальными машинами или с инструментами configuration management, то этот пост может показаться немного сложным.

      Пост предназначен для тех, кто пытается освоить docker cli, понять, чем отличается контейнер и образ. В частности, будет объяснена разница между просто контейнером и запущенным контейнером.
      Читать дальше →
      • +31
      • 135k
      • 6
    • Поняв Docker

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


        К вашему сведению! В этой статье мы рассматриваем само явление docker-контейнеров, а не составляем список микросервисов, которые гнездятся внутри. Этим мы займемся в следующей серии, во имя справедливости!


        UPDATE: пришлось заменить «докер» на «docker», иначе статья не ищется. Заранее прошу прощения за все «docker'ы» в тексте. Селяви.


        Что мы имеем сегодня


        • Зоопарк дубовых VPS-хостингов.
        • Дорогие IaaS и PaaS с гарантированным vendor lock in.
        • Уникальные сервера-снежинки.
        • Ворох устаревших зависимостей на неподдерживаемой операционке.
        • Скрытые связи частей приложения.
        • Незаменимый админ полубог на скейтборде.
        • Радуга окружений: development, testing, integration, staging, production.
        • Генерация конфигов для системы управления конфигами.
        • Feature flagging.
        docker run docker
      • Понимая Docker

        Уже несколько месяцев использую docker для структуризации процесса разработки/доставки веб-проектов. Предлагаю читателям «Хабрахабра» перевод вводной статьи о docker — «Understanding docker».

        Что такое докер?


        Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.
        Читать дальше →
      • Fork/Join Framework в Java 7

        • Tutorial
        Какое-то время назад я делал обзор нововведений в Java 7, и, среди прочего, грозился по некоторым из новшеств пройтись более конкретно. Прошло довольно много времени, в Java 7 успели даже найти серьёзный дефект, но наконец настал тот момент, когда уже пора выполнить своё обещание. Потому под катом вы можете найти описание и пример использования новой реализации ExecutorService под названием ForkJoinPool. Эта реализация разработана специально для упрощения распараллеливания рекурсивных задач и решает проблему с тем, что пока выполняется под-задача, поток, который её породил, не может быть использован.
        Читать дальше →
      • Полное практическое руководство по Docker: с нуля до кластера на AWS

        • Translation



        Содержание



        Вопросы и ответы


        Что такое Докер?


        Определение Докера в Википедии звучит так:


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



        Ого! Как много информации.

        Читать дальше →
      • На Code.org у детей не сохранилась домашняя работа: кончился 32-битный индекс


          Задание из вступительного курса «Введение в информатику» на платформе Code Studio

          Сайт для обучения программированию Code.org попал в неловкую ситуацию. Из-за «технических проблем» на платформе Code Studio утром 20 января с 9:19 до 10:33 PST работы школьников по программированию — весь написанный код и другие действия на сайте — не удалось сохранить.

          Технический директор образовательного сайта Джереми Стоун (Jeremy Stone) оперативно опубликовал объяснение произошедшего: «До нынешнего времени мы хранили работы по программированию учеников в таблице с 32-битным индексом, — написал он. — Эта база данных может хранить только 4 млрд строк информации об активности. Мы не осознавали, что приближаемся к этому лимиту, и таблица заполнилась».
          Читать дальше →
        • Segmentation Fault (распределение памяти компьютера)

          • Translation


          Когда я делаю ошибку в коде, то обычно это приводит к появлению сообщения “segmentation fault”, зачастую сокращённого до “segfault”. И тут же мои коллеги и руководство приходят ко мне: «Ха! У нас тут для тебя есть segfault для исправления!» — «Ну да, виноват», — обычно отвечаю я. Но многие ли из вас знают, что на самом деле означает ошибка “segmentation fault”?

          Чтобы ответить на этот вопрос, нам нужно вернуться в далёкие 1960-е. Я хочу объяснить, как работает компьютер, а точнее — как в современных компьютерах осуществляется доступ к памяти. Это поможет понять, откуда же берётся это странное сообщение об ошибке.

          Вся представленная ниже информация — основы компьютерной архитектуры. И без нужды я не буду сильно углубляться в эту область. Также я буду применять всем известную терминологию, так что мой пост будет понятен всем, кто не совсем на «вы» с вычислительной техникой. Если же вы захотите изучить вопрос работы с памятью подробнее, то можете обратиться к многочисленной доступной литературе. А заодно не забудьте покопаться в исходном коде ядра какой-нибудь ОС, например, Linux. Я не буду излагать здесь историю вычислительной техники, некоторые вещи не будут освещаться, а некоторые сильно упрощены.
          Читать дальше →
        • Как перебрать все перестановки и о факториальном разложении натуральных чисел

            Задачи о переборе всех возможных перестановок заданного множества сущностей возникают в программировании достаточно часто. Как известно из комбинаторики, число возможных перестановок n предметов равно попросту факториалу числа n

            n! = n * (n — 1) * (n – 2) * … * 3 * 2 * 1

            Факториал – достаточно быстро растущая функция, об этом говорит ее асимптотика (формула Стирлинга), хотя достаточно посмотреть на факториалы нескольких первых членов натурального ряда:

            1! 1
            2! 2
            3! 6
            4! 24
            5! 120
            6! 720
            7! 5 040
            8! 40 320
            9! 362 880
            10! 3 628 800
            11! 39 916 800
            12! 479 001 600
            13! 6 227 020 800
            14! 87 178 291 200
            15! 1 307 674 368 000

            Как видно, факториал 13-ти уже не умещается в тип данных long.

            Если задаться целью найти однозначное соответствие между номером перестановки — числом в диапазоне от 1 до n! – и ее реализацией, можно натолкнуться на один очень интересный математический факт.
            Читать дальше →
          • JavaScript-тренды, на которые стоит обратить внимание в 2017-м

            • Translation
            image

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


            Любители JS на вопрос откликнулись, под твитом собралась целая гора ответов. Каждый говорил о том, на что, по его мнению, стоит обратить внимание в 2017-м году. В результате получилась весьма занимательная подборка, из которой я выбрал всё лучшее и добавил пояснения.
            Читать дальше →
          • Как я потратил 1000 часов на изучение английского языка в 2016 году



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

              Учась в бакалавриате, я смог развить словарный запас до 10 000 и прорвать барьер чтения художественной литературы. Но понимание разговорной речи на слух — задача куда более трудная. Я долгое время считал её нерешаемой, не верил в успех.

              Эта статья — о том, как невозможное было сделано возможным, как в самом сердце магистратуры я проломил неприступную цитадель аудирования. Это бремя выпало на 2016 год. Я перепробовал множество различных учебных методик и расскажу вам о них во всех подробностях, по каким материалам я занимался и какие выводы делал. Эта статья — огромный склад опыта, и я надеюсь, что он будет вам полезен.
              Читать дальше →
            • Быстрые движения под высоким напряжением, или почти вся правда об управлении шаговым мотором



                Доброго вам времени суток, уважаемые гики и сочувствующие!

                В этой публикации я хочу поделиться своим опытом управления. Точнее – управления шагами. А уж если быть совсем точным, речь пойдёт об управлении замечательным устройством – шаговым электродвигателем.
                Осторожно, трафик!
              • Привычка Stack Overflow

                • Translation
                Stackoverlow уже стал незаменимым инструментом для множества разработчиков. Продвигаемая авторами модель использования – это “база знаний”. Набираем вопрос в гугле → попадаем на stackoverlow → читаем ответ → profit! Так сайт работает для большинства – за счет гораздо меньшей группы разработчиков, которая отвечает на вопросы. Зачем они это делают? Большинство – для повышения собственной квалификации и социальной реализации. И для карьеры полезно, и комплексы стороной обходят, и кризис среднего возраста не придет. Под катом – перевод статьи одного такого разработчика, который делится своими практическими наработками о том, как ему удалось отвечать на вопросы начинающих разработчиков каждый день.

                stackoverflow for fun and profit!
              • Четвертое поколение

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

                  image
                  Корпус исследовательского реактора на расплаве солей MSRE, 70е

                  Важен и тот факт, что все эти концепции возникли не сегодня, а на заре рождения атомной индустрии и проиграли в конкурентной борьбе за звание отраслевого стандарта реакторам с водой под давлением (PWR в западной терминологии или BBЭР в отечественной). Однако, как и в случае с электромобилями, постепенное накопление суммы технологий может вернуть на пьедестал забытых героев зари атомного века.

                  Четвертое поколение