• Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

    • Translation
    Продолжение: Рассказ о том, как не дать мне украсть номера кредиток и пароли у посетителей ваших сайтов
    Представляем вам перевод статьи человека, который несколько лет воровал имена пользователей, пароли и номера кредитных карт с различных сайтов.


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

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

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

    • Translation
    Статические методы Atomics.wait() и Atomics.notify() представляют собой низкоуровневые примитивы синхронизации, которые можно применять для реализации мьютексов и других подобных механизмов. Но, так как метод Atomics.wait() является блокирующим, его нельзя вызывать в главном потоке (если попытаться это сделать — будет выдана ошибка TypeError).

    Движок V8, начиная с версии 8.7, поддерживает неблокирующий вариант Atomics.wait(), называемый Atomics.waitAsync(). Этим новым методом можно пользоваться в главном потоке.



    Сегодня мы расскажем о том, как применить эти низкоуровневые API для создания мьютекса, который может работать и в синхронном режиме (в потоках воркеров) и асинхронно (в потоках воркеров или в главном потоке).
    Читать дальше →
    • +34
    • 6.2k
    • 1
  • Как включить 3D-звук в играх в Windows 7/8/10

    • Tutorial

    Наверное практически всем известно, что с выходом Windows Vista ещё в 2007 году, а в след за ней и во всех последующих версиях Windows звуковой API DirectSound3D был удален из Windows, вместо DirectSound и DirectSound3D стали использоваться новые API XAudio2 и X3DAudio. Вследствие чего в старых играх стали недоступны звуковые спецэффекты ЕАХ(звуковые эффекты окружающей среды). В этой статье я расскажу, как вернуть тот самый DirectSound3D/EAX во все старые игры, которые поддерживают данные технологии играя на Windows 7/8/10. Конечно, опытные геймеры всё это знают, но возможно кому-то статья будет полезна.

    Старые игры не ушли на свалку истории, наоборот они пользуются огромным спросом, как у пользователей старшего поколения, так и у младшего. Старые игры лучше смотрятся на современных мониторах с высоким разрешением, для многих игр выходят моды улучшающие текстуры и шейдеры, но вот со звуком поначалу не повезло. С выходом следующего поколения Windows Vista, вслед за Windows ХР, разработчики Microsoft сочли, что DirectSound3D морально устарел — он имел ограничение в 6-канальный звук, не поддерживал сжатие звука, был процессорно зависимым и поэтому ему пришел на смену XAudio2/X3DAudio. А так как технология ЕАХ компании Creative была не самостоятельным API, как был в своё время A3D от компании Aureal, а всего лишь расширением DirectSound3D — звуковые карты компании Creative оказались за бортом. Если не использовать специальные программные врапперы, то играя на Windows 7/8/10 в старых играх пункты меню включающие EAX будут не активны. А без EAX звук в играх будет не таким сочным, объемным, позиционируемым.
    Читать дальше →
  • 6 рекомендаций по разработке масштабируемых React-проектов

    • Translation
    В начале работы над новым React-проектом рекомендуется сформулировать инструкции, следуя которым можно будет создать приложение, хорошо поддающееся масштабированию.



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

    • Translation
    Когда я, изучив основы HTML и CSS в 2014 году, занялся разработкой сайтов, сложнее и страшнее всего для меня было создание их заголовочных частей. Тогда технология Flexbox была ещё достаточно новой, поэтому мы вынуждены были использовать старые методы — вроде float-позиционирования и техники clearfix. Сегодня мир фронтенд разработки стал совсем другим. А именно, технология Flexbox получила широкую браузерную поддержку, что открывает нам множество новых возможностей.



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

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

    Здесь я исхожу из предположения о том, что вы владеете основами Flexbox-вёрстки. Вот, на всякий случая, моя статья, написанная для тех, кто хочет узнать больше о CSS-свойстве flex.
    Читать дальше →
    • +29
    • 11.1k
    • 8
  • Готовимся к собеседованию по фронтенду: 15 вопросов

    • Translation
    Автор статьи, перевод которой мы сегодня публикуем, приводит 15 вопросов, которые задавали на собеседованиях ему, и которые он задавал соискателям на должности фронтенд-разработчиков сам.


    Читать дальше →
  • Программист 2020: Терминатор отдыхает

      Программист сегодня не то что прежде — одного знания языка (или языков) программирования мало, чтобы быть действительно конкурентным на рынке труда. Ты можешь сколько угодно прописывать в коде на С++ указатель на указатель на указатель, но какой в этом толк, если твой работодатель плачет (менее ванильные ребята орут, лишают премии, угрожают и стоят на стороне клиента — в смысле живого клиента и пользователя вашей программы, а не того, что обменивается информацией с сервером)? Какое-то время назад что гаджеты, что концепции управления, что тенденции подбора персонала тяготели к одному и тому же: модульности, дискретности, а то и даже примитивизации и узкой специализации сотрудников, софта, инструментов. Но эволюция повернула не туда и теперь мир требует умные устройства, которые умеют всё, многофункциональные программы и приложения (привет, Яндекс Go) и, конечно, универсальных специалистов. Концепция «человека-оркестра» вернулась в тренд, не успев уйти из него. 


      Итак, что вам нужно для полного программистского счастья соответствия набора в конце 2020?
      Читать дальше →
    • 11 инструментов для разработки микрофронтендов, о которых стоит знать

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



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

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

      Существует много подходов к разработке микрофронтендов: от интеллектуальной интеграции компонентов во время сборки проекта до организации совместной работы разных частей приложения во время выполнения кода путём использования особых подходов к маршрутизации. В этом материале я собрал самые заметные инструменты, направленные на разработку микрофронтендов.
      Читать дальше →
    • JavaScript и TypeScript: 11 компактных конструкций, о которых стоит знать

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

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



      В этом материале я собираюсь разобрать некоторые весьма полезные (и иногда выглядящие достаточно таинственными) компактные конструкции, которые могут попасться вам в JavaScript и TypeScript. Изучив их, вы сможете пользоваться ими сами или, как минимум, сможете понять код тех программистов, которые их применяют.
      Читать дальше →
    • Как убрать из Git-репозитория файлы с конфиденциальной информацией

      • Translation
      Файлы проиндексированы, написано сообщение коммита, данные отправлены на сервер… И вдруг хочется повернуть время вспять. В коммит попал файл, которого там быть не должно. Когда такое случается, приходит время обращаться к поисковику.

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

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


      Удаление файлов с конфиденциальной информацией из Git-репозитория (изображение большого размера)
      Читать дальше →
    • Программисту. 10 ценных GitHub-репозиториев

      • Translation
      GitHub — это платформа, дающая программистам отличные инструменты для организации работы над кодом. Но в GitHub-репозиториях, помимо кода, можно найти массу ценных учебных материалов. Я, например, занимаюсь разработкой ПО и постоянно ищу репозитории, которые могут чем-то мне пригодиться. Вот 10 моих любимых GitHub-проектов.


      Читать дальше →
      • +37
      • 35k
      • 9
    • Секреты JavaScript-функций

      • Translation
      Каждый программист знаком с функциями. В JavaScript функции отличаются множеством возможностей, что позволяет называть их «функциями высшего порядка». Но, даже если вы постоянно пользуетесь JavaScript-функциями, возможно, им есть чем вас удивить.



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

      • Translation
      React — это самая популярная в мире JavaScript-библиотека. Но эта библиотека не потому хороша, что популярна, а потому популярна, что хороша. Большинство существующих вводных руководств по React начинается с примеров того, как пользоваться этой библиотекой. Но эти руководства ничего не говорят о том, почему стоит выбрать именно React.

      У такого подхода есть свои сильные стороны. Если кто-то стремится к тому, чтобы, осваивая React, тут же приступить к практике, ему достаточно заглянуть в официальную документацию и взяться за дело.



      Этот материал (вот, если интересно, его видеоверсия) написан для тех, кто хочет найти ответ на следующие вопросы: «Почему React? Почему React работает именно так? С какой целью API React устроены так, как устроены?».
      Читать дальше →
    • Обрабатываем данные на стороне клиента с помощью WebAssembly



        WebAssembly (сокр. WASM) — технология запуска предварительно скомпилированного бинарного кода в браузере на стороне клиента. Впервые была представлена в 2015 году и на текущий момент поддерживается большинством современных браузеров.

        Один из распространенный сценариев использования — предварительная обработка данных на стороне клиента перед отправкой файлов на сервер. В этой статье разберемся как это делается.
        Читать дальше →
        • +33
        • 7.3k
        • 6
      • Мы поступили в универ и сами показали преподам, как учить студентов. Теперь собираем самые большие аудитории



          Замечали, скажешь человеку слово “универ”, как он сразу погружается в душные воспоминания? Там он тратил свою молодость на бесполезные предметы. Там он получал устаревшие знания, и там обитали преподы, давно слившиеся с учебниками, но ничего не понимающие в современной IT-индустрии.

          К чёрту всё: дипломы не важны, а ВУЗы не нужны. Так ведь вы все говорите? Я думаю об этом каждый свой день, и, знаете, я с этим не согласен! В универ стоит поступить. Там есть такие же парни и девчонки с горящими глазами, как и ты, там есть сообщество. И вместе вы сможете сделать много нового. К примеру, альтернативу образовательной программе ВУЗа в своём городе.
          Читать дальше →
        • Почему я выбрал Next.js, а не Gatsby, Gridsome или Nuxt?

          • Translation
          Мы, выбирая фреймворк для нового веб-проекта, обычно склонны останавливаться на инструментах, с которыми знакомы, не обращая внимания на то, насколько хорошо они подходят для этого проекта. Я же пробую поступать с точностью до наоборот. Всякий раз, когда у меня возникает такая возможность, я испытываю новые технологии. Что я узнал после таких экспериментов? Почему я, в итоге, считаю своим стандартным инструментом для создания статических сайтов (static site generator, SSG) Next.js?



          В этом материале я расскажу о том, как я экспериментировал с разными веб-технологиями. Речь пойдёт о поиске подходящего инструмента в рамках Jamstack, о том, как выбирать именно то, что подойдёт разработчику и хорошо интегрируется в его проект, о том, почему я выбрал Next.js.
          Читать дальше →
        • Сыграем в DOOM на серверах

          • Tutorial


          У меня возникла безумная идея – это сыграть в классический DOOM по сети установленный на VPS под управлением Windows. В целом, это задумывалось как тестирование новых фич, которые мы внедряем: клонирование серверов и разворачивание локальной сети. Да, и на самом деле, это круто сыграть в DOOM прямо на серверах, особенно после просмотра баек от Джона Ромеро было невозможно не поиграть в легенду компьютерных игр.
          Давайте посмотрим, что же из этого получилось, с какими проблемами столкнулся и как их решили.
          Читать дальше →
        • Организация разработки крупномасштабных React-приложений

          • Translation
          Эта публикация основана на серии материалов о модернизации jQuery-фронтенда с использованием React. Для того чтобы лучше разобраться в причинах, по которым написан этот материал, рекомендуется взглянуть на первый материал этой серии.



          В наши дни очень легко организовать разработку маленького React-приложения, или начать работу над ним с нуля. В особенности — при использовании create-react-app. Некоторым проектам, скорее всего, понадобится лишь несколько зависимостей (например — для управления состоянием приложения и для интернационализации проекта) и папка src, в которой, как минимум, имеется директория components. Я полагаю, что именно с такой структуры начинается работа над большинством React-проектов. Обычно, правда, по мере того, как растёт количество зависимостей проекта, программисты сталкиваются с ростом количества компонентов, редьюсеров и других входящих в его состав механизмов, предназначенных для многократного использования. Иногда всем этим становится очень неудобно и сложно управлять. Что делать, например, если больше неясно то, почему нужны некоторые зависимости, и то, как они сочетаются друг с другом? Или, как быть, если в проекте накопилось так много компонентов, что становится сложно найти среди них именно тот, который нужен? Как поступить в том случае, если программисту нужно найти некий компонент, имя которого забыто?
          Читать дальше →
          • +23
          • 12.1k
          • 8
        • В TypeScript 4.0 наконец появилось то, чего я очень ждал

          • Translation
          6 августа сего года Microsoft объявила о выходе релиз-кандидата TypeScript 4.0. Там появилась поддержка кортежей с маркированными элементами (Labeled Tuple Elements). А это — именно то, появления чего я ждал в TypeScript.


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

          Почему я этого ждал? Объясню это на примере разработки функции.
          Читать дальше →
        • 23 полезнейших Node.js-библиотеки, о которых стоит знать в 2020 году

          • Translation
          Профессиональному Node.js-разработчику нужно быть в курсе того, что происходит в сфере пакетов, предназначенных для этой платформы. Ему нужно знать о том, что вышло свежего, и о том, какие пакеты, используемые для решения различных задач, пользуются популярностью. Дело тут в том, что разработка ПО в наши дни зависит от библиотек. Знание хороших библиотек способствует повышению производительности труда программиста и помогает ему разрабатывать качественные приложения. Сегодня мы поговорим о 23 полезных пакетах для Node.js.


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