• Ричард Хэмминг: Глава 12. Коды с коррекцией ошибок

    • Перевод
    «Цель этого курса — подготовить вас к вашему техническому будущему.»

    imageПривет, Хабр. Помните офигенную статью «Вы и ваша работа» (+219, 2442 в закладки, 394k прочтений)?

    Так вот у Хэмминга (да, да, самоконтролирующиеся и самокорректирующиеся коды Хэмминга) есть целая книга, написанная по мотивам его лекций. Мы ее переводим, ведь мужик дело говорит.

    Это книга не просто про ИТ, это книга про стиль мышления невероятно крутых людей. «Это не просто заряд положительного мышления; в ней описаны условия, которые увеличивают шансы сделать великую работу.»

    Мы уже перевели 26 (из 30) глав. И ведем работу над изданием «в бумаге».

    Глава 12. Коды с коррекцией ошибок


    (За перевод спасибо Mikhail Sheblaev, который откликнулся на мой призыв в «предыдущей главе».) Кто хочет помочь с переводом — пишите в личку или на почту magisterludi2016@yandex.ru

    В этой главе затронуты две темы: первая, очевидно, коды с коррекцией ошибок, а вторая — то, как иногда происходит процесс открытия. Как Вы все знаете, я официальный первооткрыватель кодов Хэмминга с коррекцией ошибок. Таким образом я, по-видимому, имею возможность описать, как они были найдены. Но вам необходимо остерегаться любых рассказов подобного типа. По правде говоря, в то время я уже очень интересовался процессом открытия, полагая во многих случаях, что метод открытия более важен, чем то, что открыто. Я знал достаточно, чтобы не думать о процессе во время исследований, так же, как спортсмены не думают о технике, когда выступают на соревнованиях, но отрабатывают её до автоматизма. Я также выработал привычку возвращаться назад после больших или малых открытий и пытаться отследить шаги, которые к ним привели. Но не обманывайтесь; в лучшем случае я могу описать сознательную часть и малую верхушку подсознательной части, но мы просто не знаем магии работы подсознания.
    Читать дальше →
  • Могут ли PWA (Progressive Web Apps) образца 2018 года составить достойную конкуренцию нативным приложениям?


      Когда изменения происходят постепенно, шаг за шагом, порой бывает трудно заметить насколько они драматичны и всеобъемлющи. Казалось бы всего несколько лет назад web платформа проигрывала нативным приложением практически по всем фронтам, и пропасть между тем, что можно было сделать в браузере, и тем, что было доступно приложениями, загружаемым из магазинов, таких как Apple App Store или Google Play Store, была ужасающе огромной. Одним из свидетельств этой пропасти является то, что в 2007 году web по факту был основной платформой разработки приложений для первого iPhone, но эта платформа явно не взлетела. App Store же появился только год спустя со второй версии операционной системы, и сразу же случился бум нативных приложений, который и сформировал рыночный ландшафт таким, каким мы его знаем теперь.


      Многое изменилось с тех пор, и web технологии на месте не стояли. Они шли по пути снятия ограничений, и то, что раньше было принципиально невозможно — работа оффлайн, фоновая синхронизация данных, push-нотификации, поддержка входа в один клик и оплаты с помощью кредитных карт, Apple Pay, Google Pay и других методов, встроенная в браузер — теперь реальность. Эти функции органично дополняют основную часть платформы — HTML/CSS и JavaScript, которая в последние годы развивалась более чем активными темпами. Например новый проект Houdini, который ещё находится на достаточно ранней стадии, снимает почти все ограничения на то, что можно сделать с помощью CSS, давая возможность среди прочего создавать свои лэйауты и использовать их наравне с Grid и Flexbox, и открывая программный доступ к внутренностям CSS движка. Но даже и без Houdini уже сейчас можно создавать CSS анимации, работающие со скоростью 60 FPS (frames per second).

      Читать дальше →
    • Регулярные выражения для самых маленьких

        Привет, Хабр.

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

        Некоторые из них для наглядности будут показаны на примере языков программирования PHP или JavaScript, но в целом они работают независимо от ЯП.

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

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

        Поехали!


        Читать дальше →
      • Использование SVG в качестве Placeholder’a

        • Перевод
        image

        Генерация SVG из изображений может использоваться для Placeholder’ов.

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

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

        В этом посте мы рассмотрим следующие темы:

        • Обзор различных типов Placeholder’ов
        • Placeholder на основе SVG (контуры, фигуры и силуэты)
        • Автоматизация процесса.

        Читать дальше →
      • Идиоматичный Redux: Дао Redux'а, Часть 1 — Реализация и Замысел

        • Перевод

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


        Введение


        Я потратил много времени, обсуждая онлайн паттерны использования Redux, была ли это помощь тем, кто изучает Redux в Reactiflux каналах, дискуссии о возможных изменениях в API библиотеки Redux на Github'е, или обсуждение различных аспектов Redux'а в комментариях к тредам на Reddit'е или HN (HackerNews). С течением времени, я выработал свое собственное мнение о том, что представляет собой хороший, идиоматичный Redux код, и я хотел бы поделиться некоторыми из этих мыслей. Несмотря на мой статус мейнтейнера Redux'а, это всего лишь мнения, но я предпочитаю думать, что они являются достаточно хорошими подходами.


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


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


        В то же время, продолжаются жалобы на то, как Redux «заставляет» вас делать вещи определенными способами. Многие из этих жалоб на самом деле включают концепции связанные с тем, как Redux обычно используется, а не фактическими ограничениями наложенными самой библиотекой Redux. (Например, только в одном недавнем HN треде я видел жалобы: «слишком много шаблонного кода», «константы action'ов и action creator'ы не нужны», «я вынужден редактировать слишком много файлов чтобы добавить одну фичу», «почему я должен переключаться между файлами чтобы добраться до своей логики?», «термины и названия слишком сложны для изучения или запутанны», и слишком много других.)

        Читать дальше →
      • Ненормальный GraphQL в Electron или как я писал десктопный клиент для Tinder

        Предыстория


        фрустрация и решение


        Привет, Хабр. В начале зимы 2016 года я снова стал одинок. Спустя какое-то время я решил завести себе профиль в Tinder. Всё бы ничего, но постепенно стала накапливаться усталость из-за невозможности нормально печатать на физической клавиатуре. Мне виделось несколько решений этой проблемы:


        • Смириться и продолжать использовать официальное приложение для смартфона
        • Использовать BlueStacks с официальным приложением на Android
        • Использовать существующие клиенты для десктопа (Tinder++)
        • Написать свой

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

        Что из этого вышло
      • Фабрика виджетов для MPA

        image

        Фабрика виджетов — способ организации клиентского кода, который отлично вписывается в архитектуру multi-page application (MPA).

        В статье будет рассмотрено архитектурное решение, которое позволит оптимизировать загрузку скриптов, разделить код на виджеты и упростит передачу данных на клиент со страницы (при серверном рендеринге).
        Виджетами будут называться компоненты (или контейнеры компонентов), точкой инициализации которых будет DOM. И в которые можно будет передать данные из шаблона.
        А сейчас обо всем последовательно.
        Читать дальше →
      • Знай сложности алгоритмов

        • Перевод
        Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
        Читать дальше →
      • Собеседование для фронтенд-разработчика на JavaScript: самые лучшие вопросы

        • Перевод
        Недавно мне довелось побывать на встрече участников проекта FreeCodeCamp в Сан-Франциско. Если кто не знает, Free Code Camp — это сообщество, нацеленное на изучение JavaScript и веб-программирования. Там один человек, который готовился к собеседованиям на позицию фронтенд-разработчика, попросил меня подсказать, какие вопросы по JavaScript стоит проработать. Я немного погуглил, но не смог найти подходящего списка вопросов, на который я бы мог дать ссылку и сказать: «Разбери эти вопросы и работа твоя». Некоторые списки были близки к тому, что мне хотелось найти, некоторые выглядели очень уж простыми, но все они были либо неполными, либо содержали вопросы, которые вряд ли кто станет задавать на реальном собеседовании.

        image
        Читать дальше →
      • Как рассказывать о себе на собеседовании

        • Перевод

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

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

        Переведено в Alconost

        Подготовка к беседе направлена не на то, чтобы заполнить время, а на то, чтобы определить, что именно следует о себе рассказывать. Взгляните на проблему с другой стороны и представьте, что это вы принимаете кого-то на работу; что бы вы хотели узнать о собеседнике? Вот мой список:
        Читать дальше →
      • Производительность старта JavaScript

        • Перевод


        Веб-разработчики знают, как легко разрастаются размеры веб-страниц. Но загрузка страницы — это не просто передача байтов по проводу. Когда браузер загрузил скрипты, ему нужно их отпарсить, интерпретировать и запустить. В статье мы внимательно рассмотрим эту фазу и узнаем, почему она может стать причиной замедления запуска вашего приложения и как это исправить.
        Читать дальше →
        • +55
        • 23,1k
        • 3
      • А если без JavaScript?

        В нашем мире без JavaScript никуда! Куча фреймворков, библиотек и прочей радости! jQuery плотно вошел в нашу жизнь. React с Angular пробивают дорогу к светлому будущему. Да и не за горами поддержка браузерами ES6 без Babel.

        Но если тема заходит об обычном сайте со стандартным функционалом, не редки случаи, когда JavaScript начинают “злоупотрелять”. И все, в принципе, нормально… Но порой задаешься вопросом: «А если без JavaScript?».
        Читать дальше →
      • 33 способа ускорить ваш фронтенд в 2017 году

        • Перевод

        enter image description here


        Вы уже используете прогрессивную загрузку? А как насчёт технологий Tree Shaking и разбиения кода в React и Angular? Вы настроили сжатие Brotli или Zopfli, OCSP stapling и HPACK-сжатие? А как у вас обстоят дела с оптимизацией ресурсов и клиентской части, со вложенностью CSS? Не говоря уже о IPv6, HTTP/2 и сервис-воркерах.

        Читать дальше →
      • Правда о традиционных JavaScript-бенчмарках

        • Перевод
        image

        Пожалуй, будет достаточно справедливо сказать, что JavaScript — самая важная современная технология в разработке программного обеспечения. Для многих из тех, кто изучал языки программирования, компиляторы и виртуальные машины, всё ещё удивителен тот факт, что при всей своей элегантности с точки зрения структуры языка JavaScript не слишком хорошо оптимизируем с точки зрения компилирования и не может похвастаться замечательной стандартной библиотекой. В зависимости от того, кто ваш собеседник, вы можете неделями перечислять недоработки в JavaScript и всё равно обнаружите какую-то странность, о которой ещё не слышали. Но несмотря на очевидные недостатки, сегодня JavaScript является ключевой технологией в вебе, идет к доминированию в серверной/облачной сфере (благодаря Node.js), а также проникает в интернет вещей.
        Читать дальше →
      • Убийцы оптимизации JS уже не такие страшные

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


        И вот новый оптимизатор в v8, называемый TurboFan, за последний год научился оптимизировать этот самый практически весь es6, es5 и даже try-catch больше не является проблемой.

        class TestClass {
            megaFunc() {
                try {
                    let sum = 0;
                    for (let val of [1, 2, 3]) {
                        sum += val;
                    }
                    throw new Error(`sync error, sum = ${sum}`);
                }
                catch(err) {
                    return err;
                }
            }
        }
        let test = new TestClass();
        checkOptimizationStatus(test.megaFunc);

        Function is optimized by TurboFan

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

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

        Большинство из нас, впервые столкнувшись с данной проблемой, начинают забивать в поисковых системах что-то типа: «regexp online generator» и к своему великому сожалению осознают что гугл сломался все результаты в поиске являются сервисами для проверки корректности уже составленного регулярного выражения (или я плохо гуглил).

        А как же составить это самое регулярное выражение?


        image

        До недавнего времени существовало 2 ответа на этот вопрос:

        1. Изучить документацию по регулярным выражениям и составить регулярку самому
        2. Попросить кого-то более опытного сделать это за вас

        Теперь, после нескольких месяцев разработки, рад представить и 3-й ответ:

        » Генератор регулярных выражений

        История


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

        Всем привет. Меня зовут Борис, уже несколько лет я увлекаюсь теорией обучения и запоминания — тем, как работает мозг с новой информацией. Сегодня я поделюсь своим способом читать книги.


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


        Алгоритм для обычных книг


        Всё очень просто:


        1. Читаем автора и название;
        2. Задаем вопросы, ответы на которые мы хотим найти в книге;
        3. Пролистываем: разглядываем картинки, цитаты;
        4. Читаем содержание, оглавление, аннотации;
        5. Читаем книгу (чем быстрее, тем лучше);
        6. Выделяем основную тему;
        7. Выделяем факты и новизну;
        8. Пролистываем книгу;
        9. Опционально: записываем в табличку в экселе, о чем книга, кто ее посоветовал, стоит ли перечитывать и почему.

        Если через полгода нужно будет вспомнить, что было в той книге, ее можно будет просто пролистать — этого будет достаточно. Работает отлично с книгами по психологии, переговорам, маркетингу, etc.


        Увы, читать таким способом книгу Дэвида Флэнэгэна «JavaScript. Подробное руководство, 6-е издание» или ng-book бессмысленно и бесполезно. В голове не останется ничего, а время потеряется. И вообще, техника скорочтения для подобных книг скорее вредна, чем полезна.

        Читать дальше →
      • Книга «Изучаем Arduino. 65 проектов своими руками»

          image Приходилось ли вам, разглядывая какое-нибудь устройство, задумываться над тем, как оно работает в действительности? Возможно, это был катер с дистанционным управлением, лифт, автомат по продаже напитков или электронная игрушка? А может быть, вам хотелось самому создать робота, придумать электронное управление для модели железной дороги? Или у вас вдруг возникало желание организовать получение и анализ долгосрочного прогноза погоды? Как и с чего вы могли бы начать собственный проект?

          Плата Arduino поможет на практике раскрыть некоторые секреты электроники. Cозданная Массимо Банци и Дэвидом Куартиллье, система Arduino предлагает бюджетный способ создания интерактивных проектов и объектов, таких как дистанционно управляемые роботы, системы записи пройденного маршрута на основе GPS и электронные игры.

          В этой книге обзор 65 проектов. Пример одного проекта под катом.
          Читать дальше →
          • +11
          • 23,3k
          • 6
        • Будущее безопасности мобильных приложений, или чему нас могут научить покемоны

            С момента появления Pokemon Go, я с большим любопытством отслеживаю всё, касающееся этой игрушки. Как ни странно, она даёт безумное количество интересной информации — в первую очередь относительно разработки мобильных приложений. Казалось бы, занимаетесь вы разработкой банковских приложений — в чём тут может быть связь? А нет, вам тоже найдётся, чему научиться у покемонов.
            Читать дальше →