Обновить

Компания Skillfactory временно не ведёт блог на Хабре

Сначала показывать

Ученые телепортируют энергию при помощи квантовой механики

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели13K


Протокол телепортации квантовой энергии предложен в 2008 году и по большей части был проигнорирован. Но сегодня два независимых эксперимента показали, что он работает. 15 лет назад физик-теоретик из Университета Тохоку в Японии Масахиро Хотта предположил, что вакуум можно заставить что-то нам дать.

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

Исследование винтажной компьютерной техники: 4 бита драконов: игра-лабиринт Dungeons & Dragons от Mattel

Уровень сложностиСредний
Время на прочтение13 мин
Охват и читатели4.1K


Когда мои родители продали дом и перебрались на белоснежные просторы Великого севера, они вывезли несколько коробок моего барахла, которое долго пылилось в гараже. Мы сейчас разбираем вещи и роемся в этих коробках на случай, если в не столь далёком будущем нам самим понадобится переехать. В одной из коробок нашлась моя старая компьютерная игра-лабиринт DUNGEONS & DRAGONS™ от Mattel Electronics.


Это большая, «делюксовая» из двух игр D&D от Mattel (у Intellivision, конечно, был свой набор, а у нас был Tandyvision), вторая — DUNGEONS & DRAGONS™ компьютерная игра в жанре фэнтези. Это было портативное устройство с неожиданно привлекательной реинкарнацией игры Hunt the Wumpus, о которой мы поговорим в другой раз. Эта игра больше похожа на настолку, но в ней есть компьютерный антагонист и звуковое сопровождение.

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

Для обучения компьютерной математике исследователи объединяют подходы искусственного интеллекта

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели2.7K


«Они будут говорить о единорогах, но забудут, что у них один рог, или расскажут вам историю, а после изменят детали», — рассказывает о больших языковых моделях (LLM — Large Language Model) Джейсон Рут из IBM Research.

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

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

Как мы чуть не взломали шифровальщик Phobos с помощью CUDA

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели8.8K


Последние два года мы работали над доказательством концепции дешифратора для программ-вымогателей семейства Phobos. По причинам, которые мы объясним здесь, он непрактичен. До сих пор у нас не получилось использовать его, чтобы помочь реальной жертве. Но мы решили опубликовать результаты и инструменты в надежде, что кто-то найдёт их полезными, интересными или продолжит исследования.


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

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

Как при помощи Rust в 150 раз ускорить код на Python

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели38K

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


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


Обзор


Проблему решим в 6 шагов:


  1. Решим вопрос о том, почему функция медленная.
  2. Подготовим проект.
  3. Перепишем функцию в Rust.
  4. Скомпилируем код на Rust и разместим его в пакете Python.
  5. Импортируем пакет Python в проект.
  6. Выполним бенчмарк чистого Python и функции на Rust.

Пакет maturin скомпилирует Rust-код и преобразует его в готовый к работе пакет Python.


1. Решим вопрос о том, почему функция медленная


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

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

Градиентные тени на CSS

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели14K

Мне часто задают вопрос: Возможно ли создать тени из градиентов, а не из сплошных цветов? В СSS не существует конкретного свойства для этого (поверьте мне, я проверял), а в любом посте по этой теме содержится только множество хитростей для того, чтобы получить что-то похожее на градиент. В этой статье я расскажу вам о некоторых из них.


Но для начала… ещё одна статья о градиентных тенях? Серьёзно?

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

Как работает поиск по коду на Github

Уровень сложностиПростой
Время на прочтение11 мин
Охват и читатели22K


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


Нам часто задают вопрос о новом поиске по коду: «Как он работает?». В дополнение к моей лекции на GitHub Universe, я в общих чертах отвечу на этот вопрос, а также немного расскажу о системной архитектуре и технических основах данного продукта.


Так как же он работает? Мы создали собственный поисковый движок с нуля на Rust специально для поиска по коду. Наш поисковый движок называется «Blackbird», но прежде чем я стану описывать как он работает, думаю, что нужно понять наши предпосылки. На первый взгляд, создание поискового движка с нуля выглядит спорно. Зачем это делать? Разве уже нет большого количества существующих решений с открытым исходным кодом?

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

Квантовая теория поля открывает пути к решению математической головоломки

Время на прочтение5 мин
Охват и читатели8.9K

В январе Карен Фогтманн и Майкл Борински опубликовали доказательство того, что в до сих пор недоступном математическом мире, называемом пространством модулей, существует множество математических структур — графов, которые Фогтманн и ее коллеги впервые описали в середине 1980-х.


«Это сверхсложная задача. Удивительно, что у них получилось», — считает Дэн Маргалит, математик из Технологического института Джорджии.

Фогтманн и Борински начали с вопросов, которые Фогтманн, математик из Уорикского университета, задавала себе на протяжении десятилетий. Затем с помощью методов квантовой теории поля учёные перевели задачу на язык физики.

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

OpenAPI Comparator — детектор изменений, ломающих [большие] API

Уровень сложностиПростой
Время на прочтение5 мин
Охват и читатели4.5K

Защита от изменений API, которые могут повлиять на ваших клиентов, — одна из самых больших проблем при разработке HTTP API. Если вы вносите критические изменения, то создаете клиентам серьёзные проблемы. Стабильный API — ключ к удовлетворенности клиентов и, в конечном счете, к успеху в бизнесе.


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

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

Крупнейшие открытия ушедшего года в области Computer Science

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели8.4K

В 2022 году учёные-компьютерщики узнали, как передавать совершенно секретные сведения, почему трансформеры хорошо справляются, кажется, с любыми задачами и как улучшить алгоритмы более чем десятилетней давности (с небольшой помощью искусственного интеллекта), работать с которым вы научитесь на наших курсах по Data Science.

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

О трёх существенных недостатках известных алгоритмов обучения с подкреплением (и о том, как их устранить)

Уровень сложностиПростой
Время на прочтение8 мин
Охват и читатели6.5K


Уже несколько десятилетий существуют такие алгоритмы машинного обучения с подкреплением, как Q-learning и REINFORCE. До сих пор часто применяется их классическая реализация. К сожалению, эти алгоритмы не лишены фундаментальных недостатков, значительно усложняющих обучение хорошей политике. Рассмотрим три основных недостатка классических алгоритмов обучения с подкреплением, а также решения, направленные на их преодоление.

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

В Ruby появилась поддержка WebAssemblу: что это значит?

Уровень сложностиПростой
Время на прочтение7 мин
Охват и читатели3.1K


С выпуском версии 3.2 Ruby пополнил список языков программирования, поддерживающих WebAssembly. Небольшое на первый взгляд обновление может стать самым значительным изменением языка со времён Rails, так как теперь разработчики смогут работать не только с бэкендом. После портирования кода на WebAssembly его можно будет запускать где и как угодно — на фронтенде, встроенных устройствах, как бессерверные функции, вместо контейнеров или в граничных вычислениях. WebAssembly может превратить Ruby в универсальный язык программирования. Подробности под катом, а практика в вебе — на нашем курсе по Fullstack-разработке на Python.

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

3D-сердце на Three.js

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели5K


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

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

Сказ о поддержке подсказок типов для функции сложения в Python, или Вот как непросто бывает идти в IT…

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели6K

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


Думаю, многие отнеслись к этому скептически, а потому посмотрим на одну полностью выдуманную ситуацию. Если явно не указано иное, всё в ней вымышлено. Редактируя текст, я понял, что в попытках 4–6 ошибок даже больше, чем предполагалось, но переписывать снова не буду.


Итак, именно вы поддерживаете популярную стороннюю библиотеку slowadd. В ней много вспомогательных функций, декораторов, классов и метаклассов, но вот главная функция:


def slow_add(a, b):
    time.sleep(0.1)
    return a + b
Читать дальше →

Ближайшие события

Реверс-инжиниринг искусного двоичного сложения в нейросети

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели5.1K


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

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

[Научпоп с кодом] Что такое «жидкая» нейросеть и как научить её играть в Atari?

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели11K


Алгоритмы в основе традиционных сетей настраиваются во время обучения, когда подается огромное количество данных для калибровки наилучших значений их весов, ликвидные («текучие») нейронные сети лучше адаптируются.


«Они способны изменять свои основные уравнения на основе входных данных, которые они наблюдают», в частности, изменяя скорость реакции нейронов, — рассказывает директор Лаборатории компьютерных наук и искусственного интеллекта Массачусетского технологического института Даниэла Рус.
Читать дальше →

CSS-селектор :has() и междустрочные интервалы в длинных текстах

Время на прочтение6 мин
Охват и читатели4.7K


Если вы работали с сайтами, содержащими много длинных текстов, особенно с сайтами на CMS, где пользователи работают в WYSIWYG-редакторе, то вы наверняка писали CSS для управления междустрочными интервалами между различными элементами типографики — заголовками, параграфами, списками и т. д.

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

Как я написала веб-плеер с искусственным интеллектом

Время на прочтение10 мин
Охват и читатели6.3K


Идея создать собственный веб-плеер с музыкой лоу-фай пришла мне в голову однажды воскресным днём во время изучения глубоких генеративных моделей. Я занялась этим проектом и закончила его за время каникул. Веб-плеер имеет две опции: пользователи могут выбрать трек лоу-фай на основе реальной песни, преобразованной с помощью библиотеки Tone.js, или трек, сгенерированный искусственным интеллектом. В обоих случаях поверх накладываются барабанные ритмы, атмосферные звуки и цитаты, которые пользователь сам выбрал на предыдущем шаге. В этом посте речь пойдёт в основном о том, как использовать нейросети LSTM для генерации midi-треков, а в конце я кратко расскажу о том, как с помощью Tone.js создаются песни.

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

Представление, кластеризация и подобие в примерах, иллюстрациях и таблицах

Время на прочтение13 мин
Охват и читатели10K

Ключевые элементы машинного обучения и скрытых пространств



Эта статья послужит введением в представление (embedding), подобие (similarity) и кластеризацию (clustering).


Знать эти ключевые понятия машинного обучения нужно, чтобы понять, что такое скрытое пространство.


  • Под представлением понимается представление реального мира в виде данных. Только после представления мы сможем анализировать и использовать в приложениях объекты и явления реального мира.
  • Подобие определяет степень сходства между представлениями реального мира и позволяет, например, рекомендовать тот или иной товар.
  • Кластеризация позволяет объединить представления реального мира в группы, например, чтобы найти книги по заданной тематике.

За подробностями приглашаем под кат.

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

Логистическая регрессия: подробный обзор

Время на прочтение5 мин
Охват и читатели52K


Рисунок 1. Модель логистической регрессии. Источник.


Логистическая регрессия использовалась в области биологических исследований ещё в начале двадцатого века. Затем её стали применять во многих общественных науках. Логистическая регрессия применима, когда зависимая переменная (целевое значение) является категориальной. Подробности в иллюстрациях — в материале, а практика — на нашем курсе, посвящённом Data Science.

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