Анализ сайта mytopdozen.com
Основное Готовность: 100%
Домен
mytopdozen.com
Состояние доменного имени
?
Проверяем корректность доменного имени и наличие технических проблем на уровне домена.
Домен второго уровня идеален для продвижения.
Отличный запоминающийся домен.
Ответ сервера
200 Успешный ответ
HTTP-код ответа и цепочка редиректов
?
Код 200 — страница доступна. Коды 3xx — редиректы (цепочки замедляют загрузку и размывают ссылочный вес). Коды 4xx/5xx — ошибки, поисковик не сможет проиндексировать страницу.
Сервер настроен корректно.
Цепочка редиректов:
http://mytopdozen.com
301 MovedPermanently
https://www.thelmbook.com/
200 OK
Безопасность
Сайт безопасен
Использование HTTPS и SSL-сертификат
?
HTTPS — обязательный стандарт. Google и Яндекс отдают предпочтение защищённым сайтам. Отсутствие SSL или просроченный сертификат ведут к предупреждениям в браузере и снижению позиций.
Не настроен HSTS (Strict-Transport-Security) — рекомендуется включить.
На сайте работает защищенный протокол ssl и сайт открывается по https.
Ssl-сертификат действителен до 09.01.2027 2:59:59.
HTTP автоматически перенаправляется на HTTPS.
Поздравляем! Сайт не содержится в реестре РКН.
Кодировка
UTF-8
Кодировка символов страницы
?
Стандарт — UTF-8. Неправильная кодировка вызывает нечитаемые символы и мешает поисковику корректно распознать текст страницы.
Указана кодировка на странице UTF-8.
Язык
en
Атрибут lang в HTML-теге
?
Атрибут lang (<html lang="ru">) сообщает поисковикам и браузерам, на каком языке написана страница. Помогает при ранжировании в региональном поиске.
Язык документа указан явно: en.
Скорость загрузки
~1,52сек
Время отклика сервера (TTFB)
?
Time To First Byte — время до получения первого байта от сервера. Норма до 200 мс. Медленный отклик ухудшает пользовательский опыт и ранжирование: Яндекс и Google учитывают скорость страниц.
Скорость загрузки сайта 1,52сек превышает 1 секунду. Желательно улучшить работу сайта!
Объем документа
76Кб
Размер HTML-кода страницы
?
Слишком большой HTML замедляет парсинг браузером и сканирование поисковым роботом. Рекомендуется не более 200 Кб.
Объем html-документа 76Кб оптимален.
Структура html-документа корректна.
Ресурсы
Ресурсы: 1
Внешние ресурсы страницы (CSS, JS, изображения)
?
Количество и тип подключённых ресурсов влияют на скорость загрузки. Большое число запросов увеличивает время рендеринга страницы.
Кол-во файлов ресурсов 1 достаточно.
Показать полный список ресурсов
| Тип | Название | Значение |
|---|---|---|
| js | https://www.googletagmanager.com/gtag/js?id=G-6GPRT162E6 |
Серверные заголовки
Кол-во: 5
HTTP-заголовки ответа сервера
?
Заголовки сервера передают браузеру и поисковику служебную информацию: кеширование, безопасность (CSP, HSTS), сжатие (gzip). Правильная настройка ускоряет загрузку и повышает защищённость.
Найдены серверные заголовки 5шт. Подробнее про серверные заголовки.
Показать полный список серверных заголовков
| Ключ | Значение |
|---|---|
| ETag | "15618ca-132d2-65661ac4f2973" |
| Accept-Ranges | bytes |
| Vary | Accept-Encoding |
| Date | Sat, 22 Aug 2026 22:49:18 GMT |
| Server | Apache |
CMS
Не определена
Система управления сайтом (движок)
?
CMS — это движок, на котором работает сайт (WordPress, 1C-Bitrix, Tilda и др.). Знание CMS помогает понять возможности SEO-оптимизации и подобрать подходящие инструменты. «Не определена» — вероятно, самописный сайт или нестандартная сборка.
CMS не определена. Вероятно, сайт самописный либо движок надёжно скрыт. Это не ошибка.
Веб-сервер
Программное обеспечение сервера
?
Веб-сервер — это ПО, которое отдаёт страницы посетителям (nginx, Apache, IIS, LiteSpeed и др.). Определяется по серверным заголовкам ответа (Server, X-Powered-By и т.п.). «Не определён» — сервер намеренно скрывает эти заголовки, это нормальная практика безопасности.
Сайт работает на веб-сервере Apache.
Мета-теги Готовность: 48%
Title
The Hundred-Page Language Models Book by Andriy Burkov
Заголовок страницы в браузере и поисковой выдаче
?
Title — главный SEO-заголовок страницы. Влияет на CTR в поиске и ранжирование. Оптимальная длина: 50–70 символов. Ключевые слова — ближе к началу.
Необходимо уменьшить число символов в title (текущее значение: 54, оптимально: от 40 до 45)
Дублей словоформ в title не найдено.
Description
Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications
Описание страницы в поисковой выдаче (сниппет)
?
Meta Description — текст под заголовком в выдаче. Напрямую на позиции не влияет, но влияет на CTR. Оптимальная длина: 120–160 символов.
Необходимо уменьшить число символов в description (текущее значение: 373, оптимально: от 120 до 130)
Keywords
Список ключевых слов страницы (устаревший тег)
?
Meta Keywords не учитывается Яндексом и Google для ранжирования с 2009–2012 годов. Заполнение не обязательно, но не вредит. Конкурент может использовать содержимое для анализа.
Установите мета-тег keywords!
Канонический Url
Указывает поисковику основную версию страницы
?
Canonical (rel=canonical) предотвращает проблему дублей страниц. Должен точно совпадать с URL проверяемой страницы. Неправильный canonical может передать ссылочный вес на другую страницу.
Рекомендуем прописать канонический Url.
Robots
Ошибок нет
Директивы для поисковых роботов на уровне страницы
?
Meta Robots управляет индексацией конкретной страницы: index/noindex — индексировать ли, follow/nofollow — следовать ли по ссылкам. Noindex полностью исключает страницу из поиска.
Meta-тег robots не указан. Страница свободна для индексации.
Адаптивность
width=device-width, initial-scale=1.0
Настройка масштабирования на мобильных устройствах
?
Тег viewport (<meta name="viewport">) сообщает браузеру, как масштабировать страницу на мобильных. Стандарт: width=device-width, initial-scale=1. Отсутствие — признак отсутствия мобильной версии.
Meta-тег viewport со значением-константой width=device-width задаёт ширину страницы в соответствии с размером экрана.
Meta-тег viewport со значением initial-scale=1.0 определяет масштаб 1:1, т.е. «не масштабировать».
Разметка OpenGraph
Кол-во: 7
Мета-теги для красивых превью в соцсетях
?
OpenGraph (og:title, og:description, og:image) управляет тем, как страница выглядит при репосте в социальных сетях и мессенджерах. Отсутствие OG-тегов — невзрачный превью при шеринге.
Разметка OpenGraph задана. Страница оптимизирована под социальные сети.
Показать полный список og мета-тегов
| Тип | Значение |
|---|---|
| og:title | The Hundred-Page Language Models Book |
| og:description | Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications |
| og:image | img/social-banner.png |
| og:image:width | 1200 |
| og:image:height | 630 |
| og:type | website |
| og:url | http://www.thelmbook.com |
Все мета-теги
Кол-во: 13
Полный список мета-тегов страницы
?
Таблица всех meta-тегов, включая нестандартные. Позволяет найти опечатки, дубли и лишние теги.
Найдены мета-теги 13шт. Мета-теги не видимы для человека и предназначены для обмена информацией между веб-страницей и поисковыми системами, браузерами и другими веб-службами. С ними роботы 🤖 и устройства ведут себя более ожидаемо.
Показать полный список мета-тегов
| Тип | Название | Значение |
|---|---|---|
| name | viewport | width=device-width, initial-scale=1.0 |
| name | description | Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications |
| name | twitter:card | summary_large_image |
| name | twitter:title | The Hundred-Page Language Models Book |
| name | twitter:description | Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications. |
| name | twitter:image | img/social-banner.png |
| property | og:title | The Hundred-Page Language Models Book |
| property | og:description | Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications |
| property | og:image | img/social-banner.png |
| property | og:image:width | 1200 |
| property | og:image:height | 630 |
| property | og:type | website |
| property | og:url | http://www.thelmbook.com |
Оптимизация Готовность: 60%
Структура
Ошибок нет
Семантические HTML-элементы страницы
?
Проверяет наличие основных структурных элементов: nav, header, footer, main. Корректная семантическая структура помогает поисковику понять архитектуру страницы.
Структура документа корректна (теги <html> и <body> присутствуют в единственном экземпляре).
Контент
Есть ошибки
Объём и качество текстового содержимого
?
Анализирует объём полезного текста на странице. Слишком мало — страница может считаться малополезной. Слишком много — ухудшается читаемость и восприятие.
Кол-во слов 601 не очень много. Добавьте побольше текста (хотя бы 800 слов)!
Слова из title 8 встречаются в тексте достаточно.
Абзацев с текстом 13 достаточно.
Среднее число слов в абзаце 52 достаточно.
Кол-во знаков контента 3882 на странице оптимально.
Заголовки
Ошибок нет
Иерархия заголовков H1–H6
?
H1 должен быть один и содержать ключевой запрос. H2–H6 описывают подразделы. Пропуск уровней (H1 → H3) и несколько H1 — типичные ошибки, снижающие понятность страницы для поисковика.
На странице присутствуют заголовки <h2> 5. Это хорошо.
На странице присутствуют заголовки <h3> 1.
Тошнота
3,16
Насколько одно слово доминирует в тексте
?
Классическая тошнота = √(частота самого повторяющегося слова). Норма до 7–8: текст воспринимается естественно. Выше — поисковик может счесть страницу переспамленной.
Тошнота превышает норму 3. Измените текст страницы!
Академич. тошнота
26,46%
Насколько текст перенасыщен ключевыми словами
?
Академическая тошнота = (частота слова / общее количество слов) × 100%. Показывает долю конкретного слова в тексте. Норма 5–15%.
Академическая тошнота превышает норму 5-15%. Измените текст страницы!
Семантическое ядро
20
Наиболее часто встречающиеся слова на странице
?
Топ слов по частоте использования. Показывает, какие слова доминируют в тексте с точки зрения поисковика.
Контент страницы содержит осмысленный текст и слова.
Показать список слов
| Слово | Кол-во | Частота |
|---|---|---|
| language | 10 | 1,66% |
| models | 10 | 1,66% |
| machine | 8 | 1,33% |
| learning | 8 | 1,33% |
| chapter | 8 | 1,33% |
| andriy | 4 | 0,67% |
| notebooks | 4 | 0,67% |
| credits | 4 | 0,67% |
| author | 3 | 0,50% |
| chapters | 3 | 0,50% |
| mathematical | 3 | 0,50% |
| foundations | 3 | 0,50% |
| through | 3 | 0,50% |
| engineering | 3 | 0,50% |
| burkov | 2 | 0,33% |
| hundred-page | 2 | 0,33% |
| foreword | 2 | 0,33% |
| mikolov | 2 | 0,33% |
| understanding | 2 | 0,33% |
| transformers | 2 | 0,33% |
Индексация Готовность: 30%
Индексирование
Ошибок нет
Разрешено ли индексирование страницы
?
Проверяет, не закрыта ли страница от индексации через robots.txt, meta robots или X-Robots-Tag. Страница, закрытая от индексации, не появится в поисковой выдаче.
Анкоров на странице 47 оптимально. Поисковые роботы обязательно проиндексируют сайт.
Robots.txt
Найден корректный robots.txt
Файл управления сканированием сайта роботами
?
Robots.txt указывает поисковым роботам, какие страницы сканировать, а какие — нет. Ошибки в файле могут случайно закрыть важные разделы от индексации.
Robots.txt настроен корректно. Размер файла: 78510 байт. Загружен за: 2сек.
Проверяемая страница не запрещена в robots.txt.
Robots.txt доступен по постоянному адресу
Цепочка редиректов для файла robots.txt:
http://mytopdozen.com/robots.txt
301 MovedPermanently
https://www.thelmbook.com/
200 OK
Показать содержимое robots.txt
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-6GPRT162E6"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-6GPRT162E6');
</script>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications">
<meta property="og:title" content="The Hundred-Page Language Models Book">
<meta property="og:description" content="Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications">
<meta property="og:image" content="img/social-banner.png">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:type" content="website">
<meta property="og:url" content="http://www.thelmbook.com">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="The Hundred-Page Language Models Book">
<meta name="twitter:description" content="Andriy Burkov's third book is a hands-on guide that covers everything from machine learning basics to advanced transformer architectures and large language models (LLM). It explains AI fundamentals, text representation, count-based models, recurrent neural networks, and transformers. This book is ideal for ML practitioners and engineers focused on text-based applications.">
<meta name="twitter:image" content="img/social-banner.png">
<title>The Hundred-Page Language Models Book by Andriy Burkov</title>
<link rel="icon" type="image/svg+xml" href="icon.svg">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: system-ui, -apple-system, sans-serif;
}
html {
scroll-padding-top: 80px;
}
body {
background: #343334;
color: #fff;
line-height: 1.6;
max-width: 100vw;
overflow-x: hidden;
position: relative;
}
nav {
position: fixed;
top: 0;
width: 100%;
background: rgba(51, 50, 51, 0.9);
padding: 0 1rem; /* Remove vertical padding */
height: auto; /* Remove fixed height */
min-height: 60px; /* Maintain minimum height */
z-index: 1000;
backdrop-filter: blur(5px);
display: flex; /* Add flex display */
align-items: center; /* Center items vertically */
}
.menu {
max-width: 1200px;
margin: 0 auto;
display: flex;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
width: 100%;
padding: 0.75rem 0; /* Add even padding top and bottom */
}
.menu a {
color: #fff;
text-decoration: none;
padding: 0.5rem 1rem;
cursor: default;
}
.background-shapes {
position: absolute;
top: 0;
left: 0;
width: 100%;
min-height: 400vh;
pointer-events: none;
z-index: 0;
overflow: visible; /* Changed from hidden to visible */
}
.big-shape {
position: absolute;
opacity: 0.1;
transform-origin: center;
z-index: -1; /* Added to ensure shapes stay behind all content */
}
.big-shape:nth-child(1) {
width: 100vw;
height: 100vw;
background-color: #5B9FE3;
top: -25vw;
left: -50vw;
transform: rotate(15deg);
border-radius: 50%;
}
.big-shape:nth-child(2) {
width: 100vw;
height: 100vw;
background-color: #FFE066;
top: 800px;
right: -75vw;
transform: rotate(-10deg);
border-radius: 0;
}
.big-shape:nth-child(3) {
width: 100vw;
height: 100vw;
background-color: #FF6B6B;
top: 1600px;
left: -60vw; /* Changed from -75vw to -60vw to move it right */
transform: rotate(20deg);
clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
border-radius: 0;
}
.big-shape:nth-child(4) {
width: 100vw;
height: 100vw;
background-color: #5B9FE3;
top: 2400px;
right: -75vw;
transform: rotate(-15deg);
border-radius: 50%;
}
.big-shape:nth-child(5) {
width: 100vw;
height: 100vw;
background-color: #FFE066;
top: 3200px;
left: -65vw;
transform: rotate(12deg);
border-radius: 50%;
}
.big-shape:nth-child(6) {
width: 100vw;
height: 100vw;
background-color: #FF6B6B;
top: 4000px;
right: -70vw;
transform: rotate(-18deg);
clip-path: polygon(50% 0%, 100% 100%, 0% 100%);
border-radius: 0;
}
.big-shape:nth-child(7) {
width: 100vw;
height: 100vw;
background-color: #5B9FE3;
top: 4800px;
left: -55vw;
transform: rotate(25deg);
border-radius: 0;
}
/* Prevent horizontal scroll */
html, body {
max-width: 100%;
overflow-x: hidden;
}
/* Ensure menu toggle is always visible */
.menu-toggle {
z-index: 1051;
}
#sidebar-wrapper {
z-index: 1050;
}
.section,
.testimonials-section,
.content,
#about-book,
#testimonials,
#chapters,
#buythebook {
background: transparent !important;
position: relative;
z-index: 1;
}
.menu {
max-width: 1200px;
margin: 0 auto;
display: flex;
justify-content: space-around;
align-items: center;
flex-wrap: wrap;
gap: 1rem;
}
.menu a {
color: #fff;
text-decoration: none;
padding: 0.5rem 1rem;
cursor: default;
}
.menu a.clickable {
cursor: pointer;
transition: color 0.3s;
font-weight: bold;
}
.menu a.clickable:hover {
color: #5B9FE3;
}
.title-section {
text-align: center;
padding: 2rem 1rem;
margin-top: 60px;
display: flex;
flex-direction: column;
align-items: center;
position: relative;
z-index: 2;
background: transparent;
}
.title-wrapper {
width: 100%;
max-width: 800px;
display: flex;
flex-direction: column;
align-items: flex-start;
}
#about {
border: 6px solid #fff; /* Thick white border */
padding: 2rem; /* Extra padding so the border doesn't hug the text too tightly */
border-radius: 8px; /* Optional rounded corners */
}
.section.about-book {
border: none;
}
.about-book h2 {
padding: 0 calc(4rem + 140px);
margin-bottom: 1.5rem;
}
.about-book p {
color: #fff;
line-height: 1.6;
padding-bottom: 0.7em;
padding-top: 0.7em;
}
.about-book .highlight-box p.highlight-text {
padding-top: 0; /* Remove top padding */
margin-top: 0; /* Remove top margin */
margin-bottom: 0; /* Remove bottom margin */
padding-bottom: 0; /* Remove bottom padding */
text-align: center; /* Center the text (optional) */
}
.features-box {
background: rgba(91, 159, 227, 0.1);
padding: 1.5rem;
border-radius: 8px;
margin: 2rem 0;
}
.features-list {
list-style: none;
color: #fff;
line-height: 1.8;
margin-left: 2rem;
}
.features-list li {
margin-bottom: 1rem;
display: block;
padding-left: 1.5rem;
text-indent: -1.5rem;
}
.features-list li:before {
content: "•";
color: #fff;
font-size: 24px;
line-height: 1;
margin-right: 0.25rem;
}
.features-list li:last-child {
margin-bottom: 0;
}
.features-list li a {
color: inherit;
text-decoration: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.3);
transition: border-color 0.3s ease, opacity 0.3s ease;
}
.features-list li a:hover {
border-bottom-color: rgba(255, 255, 255, 0.8);
opacity: 1;
}
/* Existing styles for .highlight-box */
.highlight-box {
background: rgba(255, 224, 102, 0.1);
padding: 1.5rem;
border-radius: 8px;
display: flex;
align-items: center;
gap: 1rem;
}
.highlight-box img {
height: 24px;
width: auto;
object-fit: contain;
}
/* Updated styles for .highlight-text */
.highlight-text {
color: #FFE066;
margin: 0;
padding: 0;
line-height: 1.5;
display: block;
}
.author-name {
font-size: 2.5rem;
color: #ffe065;
font-weight: 900;
margin-bottom: 0.5rem;
text-align: left;
}
.about-wrapper {
display: flex;
gap: 2rem;
align-items: start;
flex-wrap: wrap;
}
.about-wrapper img {
width: 200px;
height: 200px;
border-radius: 8px;
object-fit: cover;
}
.about-content p {
margin-bottom: 1rem;
}
.about-content p:last-child {
margin-bottom: 0;
}
.about-content a {
color: #5B9FE3;
text-decoration: none;
}
.book-title-main {
font-size: 5rem;
color: #5B9FE3;
font-weight: 900;
line-height: 1.2;
margin: 0.5rem 0;
text-align: left;
white-space: nowrap;
}
.book-title-sub {
font-size: 5.15rem;
font-weight: 900;
line-height: 1.2;
text-align: left;
white-space: nowrap;
background: linear-gradient(45deg, #FF6B6B, #ffe065);
-webkit-background-clip: text;
background-clip: text;
color: transparent;
}
.book-title-end {
font-size: 5rem;
color: #5B9FE3;
font-weight: 900;
line-height: 1.2;
margin-top: 0.5rem;
text-align: center;
align-self: center;
width: 100%;
}
.scroll-arrow {
position: relative;
width: 40px;
height: 40px;
margin: 3rem auto 0;
animation: bounce 2s infinite;
cursor: pointer;
transition: transform 0.3s ease;
left: -20px;
z-index: 100;
}
.scroll-arrow:hover {
transform: scale(1.2);
}
.featured-authors {
text-align: center;
color: #fff;
font-size: 1.2rem;
margin-top: 1.7cm;
width: 100%;
padding: 0 1rem;
}
.featured-authors strong {
color: #fff;
}
.featured-authors strong a {
color: inherit;
text-decoration: none;
cursor: pointer;
}
.scroll-arrow::before {
content: '';
position: absolute;
width: 100%;
height: 100%;
border-left: 4px solid #5B9FE3;
border-bottom: 4px solid #5B9FE3;
transform: rotate(-45deg);
}
@keyframes bounce {
0%, 100% { transform: translateY(0); }
50% { transform: translateY(20px); }
}
.hero {
display: flex;
justify-content: center;
position: relative;
padding: 0;
margin: 0;
z-index: 2;
width: 100%;
}
.container {
width: min(100vw, 1200px);
aspect-ratio: 750/925;
position: relative;
margin: 0 auto;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
z-index: 2;
}
.shape {
position: absolute;
width: calc(min(100vw, 1200px) * 80/750);
height: calc(min(100vw, 1200px) * 80/750);
transform-origin: center;
transition: transform 1s linear;
}
.circle {
border-radius: 50%;
}
.triangle-container {
position: absolute;
width: calc(min(100vw, 1200px) * 80/750);
height: calc(min(100vw, 1200px) * 80/750);
transform-origin: 50% 57.735%;
transition: transform 1s linear;
}
.triangle {
position: absolute;
width: 100%;
height: 100%;
clip-path: polygon(50% 0%, 100% 86.6%, 0% 86.6%);
}
@media screen and (max-width: 768px) and (orientation: portrait) {
.shape,
.triangle-container {
width: 10.67%;
padding-bottom: 10.67%;
height: 0;
max-width: none;
max-height: none;
}
.triangle {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
clip-path: polygon(50% 0%, 100% 86.6%, 0% 86.6%);
}
}
.content {
padding: 0;
margin-top: -130px;
position: relative;
z-index: 2;
background: transparent;
width: 100%;
overflow-x: hidden;
}
.section {
max-width: 800px;
margin: 0 auto 2rem auto;
padding: 2rem;
border-radius: 8px;
width: 100%;
}
/* Override the .section class for the About Book section */
.about-book {
width: 100vw;
max-width: none;
padding: 2rem 0; /* Remove horizontal padding */
margin: 0 0 2rem 0;
position: relative;
left: 50%;
transform: translateX(-50%);
box-sizing: border-box;
background: transparent;
}
.about-book-container {
max-width: 1400px;
margin: 0 auto;
padding: 0 4rem; /* Keep original padding */
display: flex;
align-items: flex-start;
gap: 2rem;
}
/* 3D Book Image Styling */
.book-3d-image {
flex: 0 0 45%;
max-width: 600px;
width: 100%;
height: auto;
border-radius: 8px;
object-fit: contain;
}
/* About Book Content Styling */
.about-book-content {
flex: 1; /* Allows the content to take the remaining space */
color: #fff;
font-size: 1rem;
line-height: 1.6;
}
/* Adjust Features Box within About Book */
.about-book .features-box {
margin-top: 1rem;
}
/* Responsive Adjustments */
/* Medium Screens (Desktops and Tablets) */
@media screen and (max-width: 1200px) {
.about-book {
max-width: 1000px; /* Slightly reduce max-width on smaller screens */
padding: 2rem 3rem;
}
}
/* Media query updates */
@media screen and (max-width: 1024px) {
.about-book-container {
padding: 0 3rem;
}
.about-book h2 {
padding: 0 3rem;
}
}
/* Large Tablets and Small Desktops */
@media screen and (max-width: 1024px) {
.about-book-container {
flex-direction: column;
align-items: center;
padding: 0 3rem;
}
.about-book h2 {
padding: 0 3rem;
}
.book-3d-image {
flex: 0 0 60%;
max-width: 300px;
}
.about-book-content {
flex: 1;
text-align: left;
}
}
/* Tablets and Mobile Devices */
@media screen and (max-width: 768px) {
.about-book-container {
flex-direction: column;
align-items: center;
}
.book-3d-image {
flex: 0 0 70%;
max-width: 250px;
margin-bottom: 1.5rem;
}
.about-book-content {
text-align: left;
}
}
/* Small Mobile Devices */
@media (max-width: 480px) {
.about-book-container {
flex-direction: column;
align-items: left;
padding: 0 1rem;
}
.book-3d-image {
flex: 0 0 80%;
max-width: 200px;
}
.about-book-content {
font-size: 0.95rem;
}
.about-book h2 {
padding: 0 1rem;
}
.about-book {
padding: 1.5rem 1rem; /* Reduce padding on very small screens */
}
}
/* ============================
Testimonials Section Styles
============================ */
/* Testimonials Section Base Structure */
.testimonials-section {
max-width: 1200px;
margin: 0 auto 2rem auto;
padding: 2rem 1rem;
background: transparent;
}
.testimonials-container {
display: flex;
flex-direction: column;
gap: 1.5rem;
width: 100%;
position: relative;
transition: all 0.5s ease-out;
}
/* Testimonial Rows */
.testimonial-row {
display: flex;
gap: 1.5rem;
width: 100%;
box-sizing: border-box;
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Individual Testimonial Cards */
.testimonial-card {
flex: 0 1 auto;
display: flex;
flex-direction: row;
padding: 1.5rem;
gap: 1.5rem;
height: auto;
opacity: 0;
transform: translateY(20px);
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
border: 4px solid #fff;
border-radius: 8px;
position: relative;
z-index: 2;
}
/* Card Color Variations */
.testimonial-row:nth-child(3n+1) .testimonial-card {
background-color: #2b5c8a; /* Dark blue */
}
.testimonial-row:nth-child(3n+2) .testimonial-card {
background-color: #cc8b3a; /* Dark gold */
}
.testimonial-row:nth-child(3n+3) .testimonial-card {
background-color: #1a663a; /* Dark green */
}
/* Second Card in Row Color Variations */
.testimonial-row:nth-child(3n+1) .testimonial-card:nth-child(2) {
background-color: #cc8b3a; /* Dark gold */
}
.testimonial-row:nth-child(3n+2) .testimonial-card:nth-child(2) {
background-color: #1a663a; /* Dark green */
}
.testimonial-row:nth-child(3n+3) .testimonial-card:nth-child(2) {
background-color: #2b5c8a; /* Dark blue */
}
/* Card States */
.testimonial-card.visible {
opacity: 1;
transform: translateY(0);
}
.testimonial-card.exit {
opacity: 0;
transform: translateY(-20px);
}
/* Testimonial Content */
.testimonial-image {
width: 80px;
height: 80px;
border-radius: 50%;
object-fit: cover;
flex-shrink: 0;
border: 2px solid rgba(255, 255, 255, 0.2);
}
.testimonial-content {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
min-width: 0;
}
.testimonial-text {
color: #fff;
font-size: 1rem;
line-height: 1.6;
margin-bottom: 1rem;
font-style: italic;
word-wrap: break-word;
}
.testimonial-author {
color: #fff;
font-size: 0.9rem;
margin-top: auto;
font-weight: 600;
opacity: 0.9;
}
.testimonial-author a {
color: inherit;
text-decoration: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.3);
transition: border-color 0.3s ease, opacity 0.3s ease;
}
.testimonial-author a:hover {
border-bottom-color: rgba(255, 255, 255, 0.8);
opacity: 1;
}
/* View All Link */
.view-all-container {
text-align: center;
margin-top: 2rem;
opacity: 0;
transform: translateY(20px);
animation: fadeIn 0.5s ease-out forwards;
animation-delay: 0.5s;
}
.view-all-link {
color: #5B9FE3;
text-decoration: none;
font-weight: bold;
cursor: pointer;
transition: color 0.3s ease, transform 0.3s ease;
display: inline-block;
padding: 0.5rem 1rem;
}
.view-all-link:hover {
color: #FFE066;
transform: translateY(-2px);
}
.view-all-link:active {
transform: translateY(0);
}
.testimonial-author {
color: #fff;
font-size: 0.9rem;
margin-top: auto;
font-weight: 600;
opacity: 0.9;
}
.testimonial-author a {
color: inherit;
text-decoration: none;
border-bottom: 1px solid rgba(255, 255, 255, 0.3);
transition: border-color 0.3s ease, opacity 0.3s ease;
}
.testimonial-author a:hover {
border-bottom-color: rgba(255, 255, 255, 0.8);
opacity: 1;
}
/* Animations */
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Responsive Design */
@media screen and (max-width: 768px) {
.testimonial-row {
flex-direction: column;
}
.testimonial-card {
flex-grow: 1 !important;
}
.testimonials-container {
gap: 1rem;
}
.testimonial-image {
width: 60px;
height: 60px;
}
.testimonial-text {
font-size: 0.95rem;
}
}
@media (max-width: 480px) {
.testimonials-section {
padding: 1rem 0.5rem;
}
.testimonial-card {
padding: 1rem;
gap: 1rem;
}
.testimonial-text {
font-size: 0.9rem;
margin-bottom: 0.5rem;
}
.testimonial-author {
font-size: 0.8rem;
}
}
/* Print Styles */
@media print {
.testimonials-section {
break-inside: avoid;
page-break-inside: avoid;
}
.testimonial-card {
border: 1px solid #000;
break-inside: avoid;
page-break-inside: avoid;
}
.view-all-link {
display: none;
}
}
/* High Contrast Mode */
@media (prefers-contrast: high) {
.testimonial-card {
border: 4px solid #000;
}
.testimonial-text,
.testimonial-author {
color: #000;
}
}
/* Reduced Motion */
@media (prefers-reduced-motion: reduce) {
.testimonial-card {
transition: none;
}
.view-all-link {
transition: none;
}
.testimonial-card.exit {
transition: none;
}
}
/* ==========================
The #chapters Section
========================== */
#chapters {
/* Basic layout, centered content, with some padding */
width: 100%;
max-width: 1200px;
margin: 0 auto;
padding: 2rem 4rem;
background: transparent; /* Or your preferred background */
}
/* Section title styling */
#chapters h2 {
margin-bottom: 1.5rem;
color: #fff;
font-size: 2rem;
}
/* The container that holds both the image and the chapters text in two columns */
#chapters .chapters-content {
display: flex;
align-items: center; /* Vertically center the image relative to the text */
gap: 2rem;
}
/* The open book image styling */
#chapters .chapters-image {
flex: 0 0 50%; /* Occupies half the width on large screens */
max-width: 50%;
height: auto;
border-radius: 8px; /* Optional rounding of corners */
object-fit: cover; /* or 'contain', depending on your preferred fit */
}
/* The text column for chapters links */
#chapters .chapters-text {
flex: 1; /* Takes remaining width; or use 50% for exact split */
color: #fff; /* Ensure text is visible against your background */
}
/* Example styling for paragraphs within .chapters-text */
#chapters .chapters-text p {
margin-bottom: 1rem;
line-height: 1.6;
}
/* Styling for the list of chapters/links */
#chapters .chapters-list {
list-style: none;
padding: 0; /* Remove default list padding if desired */
margin: 1rem 0;
}
/* Each chapter bullet + item */
#chapters .chapters-list li {
margin-bottom: 1rem;
display: flex;
align-items: baseline;
gap: 0.25rem;
flex-wrap: wrap; /* Let items wrap if needed on small screens */
margin-left: 2rem; /* Indent list items */
}
/* Bullet points (•) before each list item */
#chapters .chapters-list li:before {
content: "•";
color: #fff;
font-size: 24px;
line-height: 1;
margin-right: 0.25rem;
flex: 0 0 auto; /* Keep the bullet fixed in place */
}
/* =========================================
NO WORD WRAP FOR LINKS ON DESKTOP
========================================= */
@media (min-width: 768px) {
/* Prevent chapter/notebook links from wrapping on larger screens */
.chapters-list a {
white-space: nowrap;
}
}
/* Styling for the “read-first, buy-later” note below both columns */
#chapters .buy-later-note {
text-align: center;
margin-top: 2rem;
color: #fff; /* or another color to match your design */
}
/* ======================================
RESPONSIVE ADJUSTMENTS (MOBILE)
====================================== */
/* Hide the image on mobile (below 768px),
whether in portrait or landscape mode.
Let the chapters text take full width. */
@media screen and (max-width: 768px) {
#chapters .chapters-image {
display: none;
}
#chapters .chapters-text {
flex: 0 0 100%;
max-width: 100%;
}
}
.section:has(.newsletter-container) {
background: transparent;
border: none;
color: #fff;
}
.section:has(.newsletter-container) h2 {
color: #fff;
}
.section:has(.newsletter-container) p {
color: #fff;
}
.section:has(.newsletter-container) .announcement {
color: #5B9FE3;
font-weight: bold;
}
.section h2 {
margin-bottom: 1.5rem;
color: #fff;
font-size: 2rem;
}
.chapters-list li {
margin-bottom: 1rem;
display: flex;
align-items: baseline;
gap: 0.25rem;
flex-wrap: wrap; /* Allow wrapping within the list item */
margin-left: 2rem; /* Add back the left margin */
}
.chapters-list li:before {
content: "•";
color: #fff;
font-size: 24px;
line-height: 1;
margin-right: 0.25rem;
flex: 0 0 auto; /* Prevent bullet point from being pushed around */
}
.chapters-list a {
color: #5B9FE3;
text-decoration: none;
word-break: break-word; /* Allow breaking long words */
}
.newsletter-container {
margin: 2rem 0;
display: flex;
justify-content: center;
}
.announcement {
margin-top: 1.5rem;
color: #FFE066;
font-weight: bold;
text-align: center;
}
.hamburger {
display: none;
flex-direction: column;
justify-content: space-around;
width: 30px;
height: 25px;
background: transparent;
border: none;
cursor: pointer;
padding: 0;
z-index: 1001;
}
.hamburger span {
width: 30px;
height: 3px;
background: #fff;
border-radius: 10px;
transition: all 0.3s linear;
position: relative;
transform-origin: 1px;
}
.hamburger.active span:first-child {
transform: rotate(45deg);
}
.hamburger.active span:nth-child(2) {
opacity: 0;
}
.hamburger.active span:nth-child(3) {
transform: rotate(-45deg);
}
.footer {
background: transparent;
padding: 1rem;
text-align: center;
position: relative;
z-index: 2;
margin-top: 0;
}
.copyright {
color: #fff;
opacity: 0.7;
font-size: 0.9rem;
}
@media screen and (max-width: 768px) {
.menu {
justify-content: center;
}
.title-wrapper {
width: 100%;
padding: 0;
align-items: center;
overflow: hidden;
}
.author-name {
color: #ffe065;
font-size: 2rem;
text-align: center;
}
.book-title-main,
.book-title-sub,
.book-title-end {
font-size: 2.5rem;
text-align: center;
white-space: nowrap;
overflow: visible;
padding: 0;
max-width: 100%;
display: block;
}
.scroll-arrow {
width: 30px;
height: 30px;
margin: 2rem auto 0;
left: 0;
transform: translateX(-15px);
}
.scroll-arrow:hover {
transform: scale(1.2) translateX(-15px);
}
.newsletter-container iframe {
width: 100%;
}
.section {
padding: 1.5rem;
}
}
@media screen and (max-width: 768px) and (orientation: portrait) {
.scroll-arrow {
display: none;
}
.hamburger {
display: flex;
position: fixed;
top: 15px;
right: 20px;
}
.menu {
position: fixed;
top: 0;
right: -100%;
height: 100vh;
width: 100%;
background: rgba(51, 50, 51, 0.98);
flex-direction: column;
justify-content: center;
gap: 2rem;
transition: right 0.3s ease-in-out;
backdrop-filter: blur(5px);
}
.menu.active {
right: 0;
}
}
@media (max-width: 375px) {
.book-title-main,
.book-title-sub,
.book-title-end {
font-size: 2rem;
}
}
@media screen and (max-width: 768px) and (orientation: portrait) {
.rope-text {
font-size: 12px;
}
.rope-text:not(:empty) {
content: "RoPE rotation";
}
}
</style>
<style>
#buythebook {
position: relative;
z-index: 1;
padding-top: 50px;
padding-bottom: 50px;
text-align: center;
width: 100vw;
left: 50%;
transform: translateX(-50%);
margin-left: 0;
margin-right: 0;
}
#buythebook::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #f4f6f7;
z-index: -1;
}
#buythebook h2 {
color: #343434;
font-size: 2rem;
margin-bottom: 2rem;
}
/* Exact container width from ML book */
#buythebook .cards-container {
width: 1300px;
margin: 0 auto;
padding: 10px;
display: flex;
justify-content: space-between;
}
/* Card styling exactly matching ML book */
#buythebook .card {
float: left;
border-radius: 6px;
border: 1px solid #dcdcdc;
background-color: #f4f6f7;
width: 300px;
max-width: 100%;
padding: 30px;
margin-bottom: 20px;
}
/* Image sizes matching ML book */
#buythebook .card img {
height: 200px;
width: auto;
margin: 0 auto;
display: block;
}
/* Title styling */
#buythebook .card .card-title {
font-size: 120%;
padding-top: 30px;
color: #212529;
}
/* Button styling matching ML book */
#buythebook .card a {
display: inline-block;
background-color: #f9680e;
border-color: #ff914c;
color: #fff;
padding: 16px 30px;
text-decoration: none;
border-radius: 5px;
margin-top: 20px;
font-weight: 600;
font-size: 1.25rem;
}
/* Remove margin from middle card to match ML book spacing */
#buythebook .card:not(:first-child):not(:last-child) {
margin-left: 20px;
margin-right: 20px;
}
.pdf-offer {
text-align: center;
margin-top: 2rem;
color: #212529;
font-size: 1rem;
line-height: 1.6;
font-weight: bold;
}
.pdf-offer a {
color: inherit;
text-decoration: none;
border-bottom: 1px solid rgba(0, 0, 0, 0.3);
transition: border-color 0.3s ease, opacity 0.3s ease;
}
.pdf-offer a:hover {
border-bottom-color: rgba(0, 0, 0, 0.8);
opacity: 0.8;
}
@media screen and (max-width: 1320px) {
#buythebook .cards-container {
width: 100%;
padding: 10px 20px;
flex-wrap: wrap;
justify-content: center;
}
#buythebook .card {
margin: 10px;
}
}
@media screen and (max-width: 1000px) {
#buythebook .cards-container {
flex-direction: column;
align-items: center;
}
#buythebook .card {
margin: 0 0 20px 0;
}
#buythebook .card:not(:first-child):not(:last-child) {
margin: 0 0 20px 0;
}
}
</style>
</head>
<body>
<div class="background-shapes">
<div class="big-shape"></div>
<div class="big-shape"></div>
<div class="big-shape"></div>
<div class="big-shape"></div>
<div class="big-shape"></div>
<div class="big-shape"></div>
<div class="big-shape"></div>
</div>
<nav>
<button class="hamburger" aria-label="Menu">
<span></span>
<span></span>
<span></span>
</button>
<div class="menu">
<a href="#about-book" class="clickable">About the Book</a>
<a href="#about" class="clickable">About the Author</a>
<a href="#testimonials" class="clickable">Endorsements</a>
<a href="#buythebook" class="clickable">Buy the Book</a>
<a href="#chapters" class="clickable">Chapters</a>
</div>
</nav>
<div class="title-section">
<div class="title-wrapper">
<div class="author-name">Andriy Burkov</div>
<div class="book-title-main">THE HUNDRED-PAGE</div>
<div class="book-title-sub">LANGUAGE MODELS</div>
<div class="book-title-end">BOOK</div>
<div class="scroll-arrow" role="button" aria-label="Scroll to chapters"></div>
<div class="featured-authors">
Featuring a foreword by <strong><a href="https://en.wikipedia.org/wiki/Tom%C3%A1%C5%A1_Mikolov" target="_blank" rel="noopener noreferrer">Tomáš Mikolov</a></strong> and back cover text by <strong><a href="https://en.wikipedia.org/wiki/Vint_Cerf" target="_blank" rel="noopener noreferrer">Vint Cerf</a></strong>
</div>
</div>
</div>
<section class="hero">
<div class="container">
<!-- Shapes will be inserted here by JavaScript -->
</div>
</section>
<section class="content">
<div id="about-book" class="section about-book">
<h2>About the Book</h2>
<div class="about-book-container">
<img src="https://thelmbook.com/img/3D_hardcover_transparent_new.png" alt="The Hundred-Page Language Models Book" class="book-3d-image" loading="lazy">
<div class="about-book-content">
<p><b>Large language models</b> (<b>LLMs</b>) have fundamentally transformed how machines process and generate information. They are reshaping white-collar jobs at a pace comparable only to the revolutionary impact of personal computers. Understanding the mathematical foundations and inner workings of language models has become crucial for maintaining relevance and competitiveness in an increasingly automated workforce.</p>
<p>This book guides you through the evolution of language models, starting from <b>machine
learning</b> fundamentals. Rather than presenting <b>transformers</b> right away, which can feel
overwhelming,
we build understanding of language models step by step—from simple <b>count-based methods</b> through <b>recurrent neural networks</b> to modern architectures. Each concept is grounded in clear <b>mathematical foundations</b> and illustrated with working <b>Python</b> code.</p>
<p>In the largest chapter on large language models, you'll learn both effective <b>prompt engineering</b> techniques and how to <b>finetune</b> these models to follow arbitrary instructions. Through hands-on experience, you'll master proven strategies for getting consistent outputs and adapting models to your needs.</p>
<p><b>What's inside?</b></p>
<div class="features-box">
<ul class="features-list">
<li>Mathematical foundations with intuitive explanations</li>
<li>Complete Python implementations with PyTorch on <a href="https://github.com/aburkov/theLMbook" target="_blank" rel="noopener noreferrer" class="testimonial-style-link">GitHub</a></li>
<li>Natural progression from simple models to transformers</li>
<li>Practical <b>Jupyter notebooks</b> for each topic</li>
<li>Theory, illustrations, and code combined in each chapter</li>
<li>$150 in free GPU credits on <a href="https://lambdalabs.com/" target="_blank" rel="noopener noreferrer" class="testimonial-style-link">Lambda</a> <span class="code-text"><a href="#gpu-credits" class="code-link how-scroll">How?😲</a></span></li>
</ul>
</div>
<p><b>Is the book for you?</b></p>
<p>Whether you're a technical leader, engineering manager, software developer, data scientist, or machine learning engineer, this book provides both the theoretical depth and practical implementation skills essential for working with language models.</p>
<br>
<!-- <div class="highlight-box">
<img src="img/colab.png" alt="Google Colab Logo">
<p class="highlight-text"><b>Run and experiment</b> with complete code examples using <b>Colab notebooks</b></p>
</div> -->
</div>
</div>
</div>
<div id="testimonials" class="section testimonials-section">
<h2>What AI Leaders Say</h2>
<div class="testimonials-container">
<!-- Cards will be created dynamically by JavaScript -->
</div>
</div>
<div id="gpu-credits" class="gpu-credits-section">
<div class="credits-container">
<div class="steel-background"></div>
<!-- Shine effect container -->
<div class="shine-container">
<div class="shine-effect primary"></div>
<div class="shine-effect secondary"></div>
</div>
<!-- Content -->
<div class="content-wrapper">
<!-- Lambda Logo -->
<div class="logo-container">
<img src="img/lambda_logo_stacked_white-2000px.png" alt="Lambda Logo">
</div>
<!-- Text Content -->
<div class="text-content">
<h3>Get $150 in Free GPU Credits</h3>
<p>
Purchase the book and receive $150 in free GPU credits on
<a href="https://lambdalabs.com" target="_blank" rel="noopener noreferrer">Lambda</a>.
Simply email your proof of purchase to
<span class="code-text"><a href="mailto:author@thelmbook.com" class="code-link">author@thelmbook.com</a></span> to claim your credits.
</p>
</div>
</div>
</div>
</div>
<style>
.how-link {
color: #5B9FE3;
font-size: 0.9em;
text-decoration: none;
margin-left: 4px;
opacity: 0.8;
}
.how-link:hover {
opacity: 1;
text-decoration: underline;
}
.code-text {
font-family: monospace;
background: rgba(255, 255, 255, 0.8);
padding: 4px 8px;
border-radius: 4px;
}
.code-link {
color: #333 !important;
text-decoration: none !important;
font-weight: normal !important;
background: none;
padding: 0;
border-bottom: none !important; /* Remove any bottom border */
}
.code-link:hover {
opacity: 0.9;
text-decoration: none !important;
border-bottom: none !important; /* Remove bottom border on hover */
}
.gpu-credits-section {
width: 100%;
max-width: 1200px;
margin: 48px auto;
padding: 0 24px;
}
.credits-container {
position: relative;
border-radius: 8px;
padding: 32px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
overflow: hidden;
min-height: 200px;
}
.steel-background {
position: absolute;
inset: 0;
background: linear-gradient(to bottom right, #C0C0C0, #E8E8E8, #B0B0B0);
}
.shine-container {
position: absolute;
inset: 0;
overflow: hidden;
}
.shine-effect {
position: absolute;
background: linear-gradient(to right, transparent, white, transparent);
width: 30%;
height: 200%;
top: 50%;
opacity: 0.7;
transform: translateX(-100%) rotate(-15deg) translateY(-50%);
animation: shineMove 6s infinite;
}
.shine-effect.primary {
filter: blur(3px);
}
.shine-effect.secondary {
width: 15%;
opacity: 0.9;
filter: blur(1px);
animation: shineMoveSecondary 6s infinite;
}
.content-wrapper {
position: relative;
z-index: 10;
display: flex;
align-items: center;
gap: 32px;
flex-wrap: wrap;
}
.logo-container {
flex-shrink: 0;
width: 192px;
height: 192px;
background: rgba(255, 255, 255, 0.1);
border-radius: 8px;
padding: 16px;
display: flex;
align-items: center;
justify-content: center;
}
.logo-container img {
width: 100%;
height: 100%;
object-fit: contain;
}
.text-content {
flex: 1;
min-width: 300px;
}
.text-content h3 {
font-size: 30px;
font-weight: 700;
margin-bottom: 16px;
color: #1a1a1a;
}
.text-content p {
font-size: 20px;
line-height: 1.6;
color: #333;
}
.text-content a {
color: #2563eb;
text-decoration: none;
font-weight: 600;
}
.text-content a:hover {
color: #1d4ed8;
}
@keyframes shineMove {
0% {
transform: translateX(-100%) rotate(-15deg) translateY(-50%);
}
45% {
transform: translateX(1000%) rotate(-15deg) translateY(-50%);
}
45.0001%, 100% {
transform: translateX(-100%) rotate(-15deg) translateY(-50%);
}
}
@keyframes shineMoveSecondary {
0% {
transform: translateX(-100%) rotate(-15deg) translateY(-50%);
}
40% {
transform: translateX(600%) rotate(-15deg) translateY(-50%);
}
50%, 65% {
transform: translateX(600%) rotate(-15deg) translateY(-50%);
}
85% {
transform: translateX(1000%) rotate(-15deg) translateY(-50%);
}
85.0001%, 100% {
transform: translateX(-100%) rotate(-15deg) translateY(-50%);
}
}
@media (max-width: 768px) {
.credits-container {
padding: 24px;
}
.content-wrapper {
flex-direction: column;
text-align: center;
}
.logo-container {
margin: 0 auto;
}
.text-content h3 {
font-size: 24px;
}
.text-content p {
font-size: 18px;
}
}
</style>
<!-- Buy the Book Section -->
<section id="buythebook">
<h2>Buy the Book</h2>
<div class="cards-container">
<!-- E-Book Card -->
<div class="card">
<img
src="https://thelmbook.com/img/ipad.png"
alt="E-Book"
/>
<div class="card-title">E-Book</div>
<a href="https://leanpub.com/theLMbook">Set your price</a>
</div>
<!-- Hardcover Card -->
<div class="card">
<img
src="https://thelmbook.com/img/book.png"
alt="Hardcover"
/>
<div class="card-title">Hardcover</div>
<a href="https://www.amazon.com/dp/1778042732">Buy for $65</a>
</div>
<!-- Paperback Card -->
<div class="card">
<img
src="https://thelmbook.com/img/paperback.png"
alt="Paperback"
/>
<div class="card-title">Paperback</div>
<a href="https://www.amazon.com/dp/1778042724">Buy for $47</a>
</div>
<!-- Dark Edition Card -->
<div class="card">
<img
src="https://thelmbook.com/img/dark_paperback.png"
alt="Dark Edition"
/>
<div class="card-title">Dark Edition</div>
<a href="https://www.amazon.com/dp/1778042775/">Buy for $55</a>
</div>
</div>
<div class="pdf-offer">When you buy a hard copy, you can <a href="mailto:author@thelmbook.com">request</a> a free PDF copy.</div>
</section>
<div id="chapters" class="section">
<h2>Chapters</h2>
<div class="chapters-content">
<img
src="https://thelmbook.com/img/open_book.png"
alt="Open Book"
class="chapters-image"
loading="lazy"
/>
<div class="chapters-text">
<ul class="chapters-list">
<li>
<a
href="https://www.dropbox.com/scl/fi/6wexe2jr8kl00g7jrqqzb/foreword.pdf?rlkey=jiyji044zk0x88d7kj4z2o7zu&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Foreword by Tomáš Mikolov
</a>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/hlllhzeau4qa0wot4dx4s/preface.pdf?rlkey=re54bw3s6gck82kgi64swdpgp&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Preface
</a>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/0evpjr3gp1eywia9ixoo6/chapter_1.pdf?rlkey=4tlmda7njy2ukypard84zp5mr&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 1. Machine Learning Basics
</a>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/wgglrcw01mzfcd77igi4w/chapter_2.pdf?rlkey=7pojwc3ae9nizlvkulujf0gbu&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 2. Language Modeling Basics
</a>
<span style="white-space: nowrap;">(notebooks
<a
href="https://www.thelmbook.com/nb/2.1"
target="_blank"
rel="noopener noreferrer"
>1</a>,
<a
href="https://www.thelmbook.com/nb/2.2"
target="_blank"
rel="noopener noreferrer"
>2</a>)</span>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/57h0ffosbcda6sweduayb/chapter_3.pdf?rlkey=9mbbsoaor5c8ti76wcnk79yuq&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 3. Recurrent Neural Network
</a>
<span style="white-space: nowrap;">(<a
href="https://www.thelmbook.com/nb/3.1"
target="_blank"
rel="noopener noreferrer"
>notebook</a>)</span>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/zx7c6rh4l481qvfrbc8ml/chapter_4.pdf?rlkey=l3c153z82yxhoqxogr1zovpzt&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 4. Transformer
</a>
<span style="white-space: nowrap;">(<a
href="https://www.thelmbook.com/nb/4.1"
target="_blank"
rel="noopener noreferrer"
>notebook</a>)</span>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/psuvs0h2vyfyxt23gepj5/chapter_5.pdf?rlkey=o0ry5im5e1l0k1vgkiwwsof14&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 5. Large Language Model
</a>
<span style="white-space: nowrap;">
(notebooks
<a
href="https://www.thelmbook.com/nb/5.1"
target="_blank"
rel="noopener noreferrer"
>1</a>,
<a
href="https://www.thelmbook.com/nb/5.2"
target="_blank"
rel="noopener noreferrer"
>2</a>,
<a
href="https://www.thelmbook.com/nb/5.3"
target="_blank"
rel="noopener noreferrer"
>3</a>,
<a
href="https://www.thelmbook.com/nb/5.4"
target="_blank"
rel="noopener noreferrer"
>4</a>,
<a
href="https://www.thelmbook.com/nb/5.5"
target="_blank"
rel="noopener noreferrer"
>5</a>, <a
href="https://www.thelmbook.com/nb/5.6"
target="_blank"
rel="noopener noreferrer"
>6</a>)
</span>
</li>
<li>
<a
href="https://www.dropbox.com/scl/fi/4fj0n44x99bd37u4v8ng8/chapter_6.pdf?rlkey=8kjkepe3mlcidk151nj2kjyum&dl=0"
target="_blank"
rel="noopener noreferrer"
>
Chapter 6. Further Reading
</a>
</li>
<li>
<a
href="/wiki"
>
Wiki
</a>
</li>
</ul>
</div>
</div> <!-- .chapters-content -->
<!-- Add the text below both columns in a separate container -->
<p class="buy-later-note">
This book is published on the <b>read-first, buy-later principle</b>.
All chapters will always remain available on this website.
</p>
</div>
<div id="about" class="section">
<h2>About the Author</h2>
<div class="about-wrapper">
<img src="https://thelmbook.com/img/burkov.png" alt="Andriy Burkov">
<div class="about-content">
<p>
<b>Andriy Burkov</b> is the author of "<a href="https://www.themlbook.com" target="_blank" rel="noopener noreferrer">The Hundred-Page Machine Learning Book</a>" and "<a href="https://www.mlebook.com" target="_blank" rel="noopener noreferrer">Machine Learning Engineering,</a>" both of which became #1 Best Sellers on Amazon. He holds a Ph.D. in Artificial Intelligence and is a recognized expert in machine learning and natural language processing.
</p>
<p>
As a machine learning expert and leader, Andriy has successfully led dozens of production-grade AI projects in different business domains at <b>Fujitsu</b>, <b>Gartner</b>, and <b>TalentNeuron</b>. His books have been translated into more than a dozen languages and are used as textbooks in many universities worldwide. His work has impacted millions of machine learning practitioners and researchers worldwide.
</p>
<p>
Andriy's apps: <a class="regularlink" href=https://www.chapterpal.com>ChapterPal</a> - an AI reading tutor for learners, <a class="regularlink" href=https://www.llambada.com>Llambada</a> - a vibe coding platform.
</p>
<p>
Stay in touch: <a class="regularlink" href=https://www.linkedin.com/in/andriyburkov/>LinkedIn</a>, <a class="regularlink" href=https://www.x.com/burkov>X</a>, <a class="regularlink" href=mailto:author@thelmbook.com>email</a>, <a class="regularlink" href=https://aiweekly.substack.com>newsletter</a>
</p>
<p>
Support Andriy by becoming a patron on: <a class="regularlink" href=https://patreon.com/burkov>Patreon</a>, <a class="regularlink" href=https://aiweekly.substack.com>Substack</a>, or <a class="regularlink" href=https://buymeacoffee.com/burkov>Buy him a Coffee</a>
</p>
<br>
</div>
</div>
</div>
</section>
<script>
// Testimonials Animation
class TestimonialsManager {
constructor() {
this.container = document.querySelector('.testimonials-container');
this.allTestimonials = [
{
img: "img/Luke_Kim.png",
text: "Burkov delivers a concise, clear guide to language models, building from high-school math to the depths of transformers - all in 100 pages. As every company becomes an AI company, this book should be part of the onboarding material for every software, data, and AI/ML engineer, so they have the base knowledge to build in an AI-driven future.",
author: `Luke Kim, Founder and CEO of <a href="https://spice.ai" target="_blank" rel="noopener noreferrer">Spice AI</a>`
},
{
img: "img/Michael_Heinrich.png",
text: "I appreciate the no nonsense way of digging into the mathematical and theoretical foundations of artificial Intelligence / neural networks. Easy to follow examples and descriptions make me recommend this book highly for anyone beginning to look into the exciting world of AI. If you've heard your friends use words like Large Language Models, gradient descend, transformers, decoders, etc. you will now easily be able to understand what they are talking about.",
author: `Michael Heinrich, Co-Founder and CEO at <a href="https://0g.ai" target="_blank" rel="noopener noreferrer">0G Labs</a>`
},
{
img: "img/Ori_Goshen.png",
text: "Andriy Burkov distills the essence of language models-from n-grams to transformers-in just 100 pages. Precise, practical, and packed with insights, this book is the fastest way to grasp the core mechanics of modern LLMs. A must-read for any serious AI practitioner!",
author: `Ori Goshen, Co-Founder and Co-CEO at <a href="https://www.ai21.com" target="_blank" rel="noopener noreferrer">AI21 Labs</a>`
},
{
img: "img/Stepan_Pushkarev.png",
text: "This is a must-read book not only for LLM practitioners but also for business executives looking to transform enterprises with AI. Understanding how things work from first principles, beyond the noise of social media, is the fastest path to realizing value. Embracing this common foundation broadens your imagination of possible use cases while setting the right expectations about the technology's fundamental limitations.",
author: `Stepan Pushkarev, Co-founder, CTO/CEO at <a href="https://provectus.com" target="_blank" rel="noopener noreferrer">Provectus</a>`
},
{
img: "img/Bob_van_Luijt.png",
text: "Andriy's long-awaited sequel in his \"The Hundred-Page\" series of machine learning textbooks is a masterpiece of concision. In just a hundred pages, he delivers the complete spectrum of language models (from count-based to LLMs), math, illustrations, and even code, all without sacrificing clarity–it's a success!",
author: `Bob van Luijt, CEO and Co-Founder of <a href="https://weaviate.io" target="_blank" rel="noopener noreferrer">Weaviate</a>`
},
{
img: "img/Harel_Boren.png",
text: "IMHO, this book is a masterpiece: it's much more difficult to convey complicated ideas concisely than the other way round, and this is a task it excels in. The book manages to go all the way from the very basic concepts in ML to LLMs, in a hundred pages, and is an excellent jump start for anyone aspiring to get a quick – yet comprehensive and truly practical – understanding of the field. I would recommend it to many-a-friend.",
author: `Harel Boren, CEO and Executive Chairman at <a href="https://swarmone.ai" target="_blank" rel="noopener noreferrer">SwarmOne</a>`
},
{
img: "img/Florian_Douetteau.png",
text: "Andriy paints for us, in 100 marvelous strokes, the journey from linear algebra basics to the implementation of transformers, complete with their practical considerations for real-world applications.",
author: `Florian Douetteau, Co-founder and CEO at <a href="https://www.dataiku.com" target="_blank" rel="noopener noreferrer">Dataiku</a>`
},
{
img: "img/Krishna_Gade.png",
text: "Large Language Models are a big rage in the tech industry but if you want to understand the inner depth of this modern technology, look no further. The 100-page Language Models Book by Andriy Burkov is an excellent resource for practitioners curious about LLM fundamentals. Highly recommend!",
author: `Krishna Gade, Founder and CEO at <a href="https://www.fiddler.ai" target="_blank" rel="noopener noreferrer">Fiddler</a>`
},
{
img: "img/Paul_McBride.png",
text: "Andriy Burkov's third book on Machine Learning is a technical tour de force that brings the the reader right up to date on what really matters in ML science as we weave AI into the fabric of our everyday lives.",
author: `Paul McBride, Co-founder and Managing Director at <a href="https://www.peroptyx.com/" target="_blank" rel="noopener noreferrer">Peroptyx</a>`
},
{
img: "img/Matt_Salmanzadeh.png",
text: "As a previous reader and fan of the 100 page machine learning book when I found out Andriy was writing another book on large language models, I had to get my hands on it and it doesn't disappoint. This is an epic follow up to that book which shows why Andriy is the master of this domain. It's for everyone who follows and works in this space from business leaders trying to understand the tech to technologists who want to take their learning to the next level. 100% recommmend.",
author: `Matt Salmanzadeh, Cofounder and Director at <a href="https://www.nexwave.com.au/" target="_blank" rel="noopener noreferrer">nexwave</a>`
},
{
img: "img/Alessya_Visnjic.png",
text: "This is a rare example of a book that I will keep in my office and keep coming back to. Andriy was able to distill all the essential concepts that compose Language Models into a little over 100 pages, without skimping on mathematical foundations and technical details. Since it is accessible to anyone with a little patience and basic math knowledge, it should be required reading for anyone who works with LLMs or uses LLMs in their daily life.",
author: `Alessya Visnjic, CEO and Co-founder of <a href="https://whylabs.ai" target="_blank" rel="noopener noreferrer">WhyLabs</a>`
},
{
img: "img/Andre_Zayarni.png",
text: "Andriy's book is an incredibly concise, clear, and accessible introduction to machine learning. He distills complex concepts into easily digestible insights, making it an ideal resource for both beginners and professionals looking to strengthen their foundational ML knowledge including language models in a minimal amount of time.",
author: `Andre Zayarni, Co-founder and CEO at <a href="https://qdrant.tech/" target="_blank" rel="noopener noreferrer">Qdrant</a>`
},
{
img: "img/Gavin_Uberti.png",
text: "Andriy has done it again, de-mystifying how modern LLMs work without cutting corners on rigor.",
author: `Gavin Uberti, CEO at <a href="https://etched.ai" target="_blank" rel="noopener noreferrer">Etched</a>`
},
{
img: "img/Gideon_Mendels.png",
text: "Andriy Burkov's \"The Hundred-Page Language Models Book\" is a breath of fresh air in such a noisy field. By focusing on foundational knowledge and practical implementation, the book equips readers with the tools to understand and work with language models effectively. I highly recommend reading it if you're interested in LLMs and GenAI.",
author: `Gideon Mendels, Co-Founder and CEO at <a href="https://www.comet.com" target="_blank" rel="noopener noreferrer">Comet</a>`
},
{
img: "img/Shalini_Kurapati.png",
text: "Andriy has crafted a compact yet powerful treasure trove of knowledge in this book, demystifying the magic of AI with clear and concise explanations, coupled with practical code snippets to bring your learning to life. Even the mathematical expressions are explained so well that beginners can follow along with ease. His expertise shines through every sentence, making it an essential read for anyone serious about mastering AI and LLMs!",
author: `Shalini Kurapati, PhD, Co-Founder and CEO at <a href="https://clearbox.ai" target="_blank" rel="noopener noreferrer">Clearbox AI Solutions</a>`
},
{
img: "img/Kevin_Schawinski.png",
text: "Finally, a book about language models that will take you from start to finish without skipping the important steps. From the basics of machine learning to the intricacies of transformers, Burkov manages to explain complex concepts clearly so that by the end you know how these models are built and how they work. Whether you're finetuning models or just trying to understand why your chatbot keeps suggesting blockchain solutions to grocery lists, this book is your new best friend. Warning: May cause sudden urges to code and implement transformers.",
author: `Kevin Schawinski, Co-Founder and CEO at <a href="https://www.modulos.ai" target="_blank" rel="noopener noreferrer">Modulos</a>`
},
{
img: "img/Jorge_Torres.png",
text: "Andriy has this almost supernatural talent for shrinking epic AI concepts down to bite-sized, \"Ah, now I get it!\" moments. He nails the building blocks powering today's AI revolution, and honestly, I picked up more from his book than I have from all my frantic \"How does this work again?\" confessions to an increasingly annoyed LLMs in attempts of explaining foundational papers.",
author: `Jorge Torres, CEO at <a href="https://mindsdb.com" target="_blank" rel="noopener noreferrer">MindsDB</a>`
},
{
img: "img/Ketan_Umare.png",
text: "Andriy's previous book was a gem, and this one continues the tradition—brilliant, concise, and undeniably useful. In just under 150 pages, it fearlessly dives into the math and PyTorch code, taking you from zero (starting weights, quite literally) to confidently understanding and engaging with some of the most transformative AI architectures of our time.",
author: `Ketan Umare, Co-Founder and CEO at <a href="https://www.union.ai/" target="_blank" rel="noopener noreferrer">Union.ai</a>`
},
{
img: "img/Tyler_Lambe.png",
text: "Andriy's tour through language models is nothing short of incredible in its efficiency, clarity, and practicality. He elegantly stacks from the mathematical foundations through to fine-tuning a GPT-2 model, providing code samples and links to extra resources throughout. A great primer for seasoned practitioners and curious beginners alike, leaving few stones unturned despite its ambitious length.",
author: `Tyler Lambe, Founder of <a href="https://www.deepatlas.ai/" target="_blank" rel="noopener noreferrer">Deep Atlas</a>`
},
{
img: "img/Jerry_Liu.png",
text: "I wish I had this handbook when I was in college… this is one of the most comprehensive yet concise handbooks out there for truly understanding how LLMs work under the hood. It's not afraid to go into math (which you really do need if you want to understand the fundamentals), but it's approachable enough for the technical reader without having to spend hours poring through proofs.",
author: `Jerry Liu, Co-founder and CEO at <a href="https://www.llamaindex.ai" target="_blank" rel="noopener noreferrer">LlamaIndex</a>`
}
];
this.testimonials = this.getRandomTestimonials(8);
this.container.innerHTML = '';
this.currentIndex = 0;
this.isTransitioning = false;
this.isHovered = false;
this.isExpanded = false;
this.isVisible = false;
this.groupTestimonialsIntoRows();
this.updateVisibleCards();
this.addViewAllLink();
this.setupEventListeners();
this.setupVisibilityObserver();
}
setupVisibilityObserver() {
// Create an intersection observer to watch the testimonials section
const options = {
root: null,
rootMargin: '0px',
threshold: 0.2 // Section is considered visible when 20% is in view
};
this.observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
this.isVisible = entry.isIntersecting;
// If section becomes visible and we don't have an interval running
if (this.isVisible && !this.rotationInterval) {
this.startRotation();
}
// If section becomes hidden and we have an interval running
else if (!this.isVisible && this.rotationInterval) {
this.stopRotation();
}
});
}, options);
// Start observing the testimonials section
const testimonialsSection = document.querySelector('.testimonials-section');
if (testimonialsSection) {
this.observer.observe(testimonialsSection);
}
}
startRotation() {
if (!this.rotationInterval) {
this.rotationInterval = setInterval(() => {
if (!this.isHovered && !this.isTransitioning && !this.isExpanded) {
this.rotateCards();
}
}, 4000);
}
}
stopRotation() {
if (this.rotationInterval) {
clearInterval(this.rotationInterval);
this.rotationInterval = null;
}
}
setupEventListeners() {
this.container.addEventListener('mouseenter', () => {
this.isHovered = true;
});
this.container.addEventListener('mouseleave', () => {
this.isHovered = false;
});
}
// New method to get random testimonials
getRandomTestimonials(count) {
let shuffled = [...this.allTestimonials];
for (let i = shuffled.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[shuffled[i], shuffled[j]] = [shuffled[j], shuffled[i]];
}
return shuffled.slice(0, count).map(testimonial => ({
...testimonial,
length: testimonial.text.length
}));
}
setupEventListeners() {
this.container.addEventListener('mouseenter', () => this.isHovered = true);
this.container.addEventListener('mouseleave', () => this.isHovered = false);
this.rotationInterval = setInterval(() => {
if (!this.isHovered && !this.isTransitioning && !this.isExpanded) {
this.rotateCards();
}
}, 4000);
}
groupTestimonialsIntoRows() {
const longThreshold = 300;
this.testimonials = this.testimonials.map(testimonial => ({
...testimonial,
length: testimonial.text.length
}));
this.rows = [];
let i = 0;
while (i < this.testimonials.length) {
const current = this.testimonials[i];
if (current.length > longThreshold) {
this.rows.push([current]);
i++;
} else {
if (i + 1 < this.testimonials.length) {
const next = this.testimonials[i + 1];
if (next.length <= longThreshold) {
this.rows.push([current, next]);
i += 2;
continue;
}
}
this.rows.push([current]);
i++;
}
}
// If we have less than 4 rows and not in expanded mode, pad with empty rows
if (!this.isExpanded) {
while (this.rows.length < 4) {
this.rows.push([]);
}
}
}
createCard(testimonial) {
const card = document.createElement('div');
card.classList.add('testimonial-card');
card.innerHTML = `
<img src="${testimonial.img}"
alt="Author"
class="testimonial-image"
loading="lazy">
<div class="testimonial-content">
<p class="testimonial-text">"${testimonial.text}"</p>
<p class="testimonial-author">—${testimonial.author}</p>
</div>
`;
card.dataset.length = testimonial.length;
return card;
}
async rotateCards() {
if (this.isTransitioning || this.isExpanded) return;
this.isTransitioning = true;
const currentCards = this.container.querySelectorAll('.testimonial-card');
currentCards.forEach(card => {
card.classList.add('exit');
});
await new Promise(resolve => setTimeout(resolve, 500));
// Instead of shifting rows, get new random testimonials
this.testimonials = this.getRandomTestimonials(8);
this.groupTestimonialsIntoRows();
this.updateVisibleCards();
setTimeout(() => {
this.isTransitioning = false;
}, 500);
}
toggleExpanded() {
this.isExpanded = !this.isExpanded;
const viewAllLink = document.querySelector('.view-all-link');
if (this.isExpanded) {
// Show all testimonials
viewAllLink.textContent = 'Show less';
this.testimonials = this.allTestimonials;
clearInterval(this.rotationInterval);
} else {
// Show new random selection
viewAllLink.textContent = 'View all testimonials';
this.testimonials = this.getRandomTestimonials(8);
this.setupEventListeners();
}
this.groupTestimonialsIntoRows();
this.updateVisibleCards();
if (!this.isExpanded) {
const testimonialsSection = document.getElementById('testimonials');
testimonialsSection.scrollIntoView({ behavior: 'smooth' });
}
}
updateVisibleCards() {
this.container.innerHTML = '';
this.rows.forEach((rowTestimonials, rowIndex) => {
const row = document.createElement('div');
row.classList.add('testimonial-row');
rowTestimonials.forEach(testimonial => {
const card = this.createCard(testimonial);
card.style.flexGrow = this.isExpanded ? '1' : `${testimonial.length}`;
row.appendChild(card);
});
this.container.appendChild(row);
const cards = row.querySelectorAll('.testimonial-card');
cards.forEach((card, index) => {
setTimeout(() => {
card.classList.add('visible');
}, 50 * (rowIndex * rowTestimonials.length + index));
});
});
}
addViewAllLink() {
const linkContainer = document.createElement('div');
linkContainer.classList.add('view-all-container');
const viewAllLink = document.createElement('a');
viewAllLink.href = '#';
viewAllLink.classList.add('view-all-link');
viewAllLink.textContent = 'View all testimonials';
viewAllLink.addEventListener('click', (e) => {
e.preventDefault();
this.toggleExpanded();
});
linkContainer.appendChild(viewAllLink);
this.container.parentNode.appendChild(linkContainer);
}
}
// Initialize TestimonialsManager when DOM is ready
document.addEventListener('DOMContentLoaded', () => new TestimonialsManager());
const shapes = [
{type: 'rect', color: '#FFE066', x: 150, y: 150},
{type: 'circle', color: '#5B9FE3', x: 300, y: 150},
{type: 'triangle', color: '#FF6B6B', x: 450, y: 150},
{type: 'circle', color: '#FFE066', x: 600, y: 150},
{type: 'circle', color: '#FF6B6B', x: 150, y: 300},
{type: 'rect', color: '#FFE066', x: 300, y: 300},
{type: 'circle', color: '#5B9FE3', x: 450, y: 300},
{type: 'rect', color: '#FF6B6B', x: 600, y: 300},
{type: 'triangle', color: '#5B9FE3', x: 150, y: 450},
{type: 'circle', color: '#FF6B6B', x: 300, y: 450},
{type: 'rect', color: '#FFE066', x: 450, y: 450},
{type: 'triangle', color: '#5B9FE3', x: 600, y: 450},
{type: 'rect', color: '#FFE066', x: 150, y: 600},
{type: 'triangle', color: '#FF6B6B', x: 300, y: 600},
{type: 'circle', color: '#FFE066', x: 450, y: 600},
{type: 'rect', color: '#5B9FE3', x: 600, y: 600}
];
function calcX(x) {
const container = document.querySelector('.container');
const containerWidth = container.offsetWidth;
return ((x - 40) / 750 * containerWidth) + 'px';
}
function calcY(y) {
const container = document.querySelector('.container');
const containerHeight = container.offsetHeight;
return (y / 925 * containerHeight) + 'px';
}
function updateLayout() {
const container = document.querySelector('.container');
if (window.innerWidth <= 768) {
if (window.orientation === 90 || window.orientation === -90) {
const height = window.innerHeight;
container.style.width = (height * 0.8) + 'px';
container.style.height = (height * 0.8 * 925 / 750) + 'px';
} else {
const width = window.innerWidth;
container.style.width = width + 'px';
container.style.height = (width * 925 / 750) + 'px';
container.style.maxWidth = '100vw';
container.style.overflow = 'hidden';
}
} else {
const maxWidth = Math.min(window.innerWidth, 1200);
container.style.width = maxWidth + 'px';
container.style.height = (maxWidth * 925 / 750) + 'px';
}
shapeElements.forEach((shape, index) => {
const originalShape = shapes[index];
const containerWidth = container.offsetWidth;
const containerHeight = container.offsetHeight;
const xPosition = ((originalShape.x - 40) / 750) * containerWidth;
const yPosition = (originalShape.y / 925) * containerHeight;
shape.style.left = xPosition + 'px';
shape.style.top = yPosition + 'px';
const shapeSize = (containerWidth * 80) / 750;
shape.style.width = shapeSize + 'px';
shape.style.height = shapeSize + 'px';
});
}
window.addEventListener('resize', updateLayout);
window.addEventListener('orientationchange', () => {
setTimeout(updateLayout, 100);
});
const container = document.querySelector('.container');
const shapeElements = [];
shapes.forEach(shape => {
if (shape.type === 'triangle') {
const container = document.createElement('div');
container.className = 'triangle-container';
container.style.left = calcX(shape.x);
container.style.top = calcY(shape.y);
const triangle = document.createElement('div');
triangle.className = 'triangle';
triangle.style.backgroundColor = shape.color;
container.appendChild(triangle);
document.querySelector('.container').appendChild(container);
shapeElements.push(container);
} else {
const div = document.createElement('div');
div.className = `shape ${shape.type}`;
div.style.backgroundColor = shape.color;
div.style.left = calcX(shape.x);
div.style.top = calcY(shape.y);
container.appendChild(div);
shapeElements.push(div);
}
});
function computeRoPERotations(seqLen, embDim = 4, thetaBase = 100.0) {
const rotations = [];
for (let pos = 0; pos < seqLen; pos++) {
const rowRotations = [];
for (let p = 1; p <= embDim / 2; p++) {
const thetaP = 1.0 / (thetaBase ** ((2 * (p - 1)) / embDim));
const theta = pos * thetaP;
rowRotations.push({
sin: Math.sin(theta),
cos: Math.cos(theta)
});
}
rotations.push(rowRotations);
}
return rotations;
}
function applyRotationAnimation(element, finalAngle) {
if (element.classList.contains('circle')) return;
const animate = () => {
// Reset to starting position
element.style.transition = 'transform 0s';
element.style.transform = 'rotate(0deg)';
// Step 1: Original RoPE rotation (2s)
setTimeout(() => {
element.style.transition = 'transform 2s ease-out';
element.style.transform = `rotate(${finalAngle}deg)`;
}, 100);
// Step 2: Hold for 2s, then spinning reset in same direction
setTimeout(() => {
element.style.transition = 'transform 2s cubic-bezier(0.3, 0, 0.2, 1)';
element.style.transform = 'rotate(1080deg)';
}, 4100);
};
animate();
return setInterval(animate, 6500);
}
function applyRoPERotations() {
const rotations = computeRoPERotations(4);
const intervals = [];
for (let row = 0; row < 4; row++) {
const baseIdx = row * 4;
const sin1 = rotations[row][0].sin;
const cos1 = rotations[row][0].cos;
const sin2 = rotations[row][1].sin;
const cos2 = rotations[row][1].cos;
const angle1 = -Math.atan2(sin1, cos1) * (180 / Math.PI);
const angle2 = -Math.atan2(sin2, cos2) * (180 / Math.PI);
setTimeout(() => {
intervals.push(applyRotationAnimation(shapeElements[baseIdx], angle1));
intervals.push(applyRotationAnimation(shapeElements[baseIdx + 1], angle1));
intervals.push(applyRotationAnimation(shapeElements[baseIdx + 2], angle2));
intervals.push(applyRotationAnimation(shapeElements[baseIdx + 3], angle2));
}, row * 250);
}
return intervals;
}
updateLayout();
const rotationIntervals = applyRoPERotations();
function smoothScroll(target) {
const element = document.querySelector(target);
if (element) {
element.scrollIntoView({
behavior: "smooth",
block: "start",
});
}
}
// Handle all clickable menu items
document.querySelectorAll(".menu a.clickable").forEach((link) => {
link.addEventListener("click", (e) => {
e.preventDefault();
const target = link.getAttribute("href");
smoothScroll(target);
// Close mobile menu if open
hamburger.classList.remove("active");
menu.classList.remove("active");
});
});
// Handle scroll arrow
document.querySelector(".scroll-arrow").addEventListener("click", () => {
smoothScroll("#about-book");
});
document
.querySelector('a[href="#chapters"]')
.addEventListener("click", function (e) {
e.preventDefault();
smoothScroll("#chapters");
});
const hamburger = document.querySelector(".hamburger");
const menu = document.querySelector(".menu");
hamburger.addEventListener("click", () => {
hamburger.classList.toggle("active");
menu.classList.toggle("active");
});
document.querySelectorAll(".menu a").forEach((link) => {
link.addEventListener("click", () => {
hamburger.classList.remove("active");
menu.classList.remove("active");
});
});
document
.querySelector('a[href="#testimonials"]')
.addEventListener("click", function (e) {
e.preventDefault();
smoothScroll("#testimonials");
});
</script>
<!-- Arrow container -->
<div id="rope-arrow"
style="
position: absolute;
pointer-events: none;
z-index: 9999;
width: 240px;
height: 100px;
overflow: visible;
"
>
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 240 100"
width="240"
height="100"
style="overflow: visible;"
>
<!-- 1) A <g> that ONLY contains the arrow paths, rotated 15° around (20,50). -->
<g transform="rotate(15, 20, 50)">
<!-- 2) Flip the arrow horizontally so it points left,
with the left endpoint at (20,50). -->
<g transform="translate(240, 0) scale(-1,1)">
<!-- Curvy, dashed arrow path -->
<path
d="M 20,50
C 35,48 50,52 65,45
C 80,38 90,35 95,42
C 100,48 95,65 85,70
C 75,75 65,65 70,55
C 75,45 85,40 100,45
C 120,52 135,48 150,40
C 158,35 162,32 165,35"
fill="none"
stroke="white"
stroke-width="2"
stroke-dasharray="5,5"
stroke-linecap="round"
/>
<!-- Solid arrow pointer -->
<path
d="M 158,28 L 165,35 L 158,42"
fill="none"
stroke="white"
stroke-width="2"
stroke-linecap="round"
stroke-linejoin="round"
/>
</g>
</g>
<!-- 3) The text is outside the rotating group,
so it will NOT be rotated.
Adjust x,y to place it below or beside the arrow tip. -->
<text
x="220"
y="110"
fill="white"
font-size="14"
text-anchor="start"
alignment-baseline="middle"
style="font-family: sans-serif;"
class="rope-text"
>
Rotated by the RoPE algorithm
</text>
</svg>
</div>
<script>
// 3) Pin the arrow’s LEFT tip (~ x=35,y=35 in the flipped coords)
// to shapeElements[7] (the red rotating square).
const anchorElement = shapeElements[5];
function positionArrow() {
if (!anchorElement) return;
const arrowDiv = document.getElementById('rope-arrow');
if (!arrowDiv) return;
// Get the anchor element's center in the page coordinates:
const rect = anchorElement.getBoundingClientRect();
const centerX = window.scrollX + rect.left + (rect.width / 2);
const centerY = window.scrollY + rect.top + (rect.height / 2);
/*
We want local coordinate (20,50) of the arrow's SVG
to align with the anchor shape’s center.
So place the arrow container so that
container's left = centerX - 20
container's top = centerY - 50
*/
arrowDiv.style.left = (centerX - 20) + 'px';
arrowDiv.style.top = (centerY - 50) + 'px';
}
window.addEventListener('scroll', positionArrow);
window.addEventListener('resize', positionArrow);
positionArrow(); // Position on page load
function updateRopeText() {
const textElement = document.querySelector('.rope-text');
if (!textElement) return;
if (window.innerWidth <= 768 && window.matchMedia("(orientation: portrait)").matches) {
textElement.textContent = "RoPE rotation";
} else {
textElement.textContent = "Rotated by the RoPE algorithm";
}
}
// Call on page load
updateRopeText();
// Update when screen resizes or device orientation changes
window.addEventListener('resize', updateRopeText);
window.addEventListener('orientationchange', updateRopeText);
// Add this with your other event listeners
document.querySelector('.how-scroll').addEventListener('click', (e) => {
e.preventDefault();
const gpuSection = document.querySelector('#gpu-credits');
if (gpuSection) {
gpuSection.scrollIntoView({
behavior: "smooth",
block: "start",
});
}
});
</script>
<footer class="footer">
<div class="copyright">
© 2024-2025 True Positive Inc. All rights reserved.
</div>
</footer>
</body>
</html>
Sitemap
Кол-во: 0
XML-карта сайта для поисковиков
?
Sitemap.xml помогает поисковику быстрее находить и индексировать страницы. Особенно важен для крупных сайтов и новых страниц, на которые ещё нет входящих ссылок.
Robots.txt не содержит ссылку на карту сайта. Рекомендуется добавить карту сайта и указать ссылку на нее в robots.txt.
Внутренние ссылки
Кол-во: 1
Ссылки на другие страницы своего сайта
?
Внутренние ссылки распределяют ссылочный вес между страницами и помогают поисковику обходить сайт. Пустые анкоры и ссылки на запрещённые robots.txt страницы — типичные ошибки.
Внутренних ссылок на странице 1 оптимально.
Внутренние ссылки не запрещены к индексации в robots.txt.
Показать внутренние ссылки
| Url | Анкор | Состояние | Анализировать |
|---|---|---|---|
| /wiki |
Wiki
|
|
Внешние ссылки
Кол-во: 37
Ссылки на сторонние сайты
?
Исходящие внешние ссылки передают часть ссылочного веса на чужие сайты. Ссылки на авторитетные ресурсы безопасны; ссылки на мусорные сайты могут навредить репутации страницы.
Внешних ссылок на странице 37 слишком много. Спрячьте лишние ссылки в тег noindex или атрибут rel='nofollow'!
Показать внешние ссылки
| Url | Анкор | Анализировать |
|---|---|---|
| en.wikipedia.org |
Tomáš Mikolov
|
Анализировать url |
| en.wikipedia.org |
Vint Cerf
|
Анализировать url |
| github.com |
GitHub
|
Анализировать url |
| lambdalabs.com |
Lambda
|
Анализировать url |
| lambdalabs.com |
Lambda
|
Анализировать url |
| leanpub.com |
Set your price
|
Анализировать url |
| amazon.com |
Buy for $65
|
Анализировать url |
| amazon.com |
Buy for $47
|
Анализировать url |
| amazon.com |
Buy for $55
|
Анализировать url |
| dropbox.com |
Foreword by Tomáš Mikolov
|
Анализировать url |
| dropbox.com |
Preface
|
Анализировать url |
| dropbox.com |
Chapter 1. Machine Learning Basics
|
Анализировать url |
| dropbox.com |
Chapter 2. Language Modeling Basics
|
Анализировать url |
| thelmbook.com |
1
|
|
| thelmbook.com |
2
|
|
| dropbox.com |
Chapter 3. Recurrent Neural Network
|
Анализировать url |
| thelmbook.com |
notebook
|
|
| dropbox.com |
Chapter 4. Transformer
|
Анализировать url |
| thelmbook.com |
notebook
|
|
| dropbox.com |
Chapter 5. Large Language Model
|
Анализировать url |
| thelmbook.com |
1
|
|
| thelmbook.com |
2
|
|
| thelmbook.com |
3
|
|
| thelmbook.com |
4
|
|
| thelmbook.com |
5
|
|
| thelmbook.com |
6
|
|
| dropbox.com |
Chapter 6. Further Reading
|
Анализировать url |
| themlbook.com |
The Hundred-Page Machine Learning Book
|
|
| mlebook.com |
Machine Learning Engineering,
|
|
| chapterpal.com |
ChapterPal
|
Анализировать url |
| llambada.com |
Llambada
|
Анализировать url |
| linkedin.com |
LinkedIn
|
Анализировать url |
| x.com |
X
|
Анализировать url |
| aiweekly.substack.com |
newsletter
|
Анализировать url |
| patreon.com |
Patreon
|
Анализировать url |
| aiweekly.substack.com |
Substack
|
Анализировать url |
| buymeacoffee.com |
Buy him a Coffee
|
Анализировать url |
Конкуренты Готовность: 0%
Конкуренты в Яндексе
Кол-во: 0
Топ сайтов-конкурентов в Яндексе
?
Сайты, чаще всего появляющиеся в ТОПе Яндекса по запросам из семантического ядра этой страницы.
Мы не нашли у вас конкурентов в Яндексе. Сайт или очень молодой или плохо продвигается.
Конкурентов в ТОП-10 Яндекса не нашлось.
Конкуренты в Google
Кол-во: 0
Топ сайтов-конкурентов в Google
?
Сайты, чаще всего появляющиеся в ТОПе Google по запросам из семантического ядра этой страницы.
Конкуренты в Google тоже не найдены. Займитесь продвижением сайта!
Конкурентов в ТОП-10 Google не нашлось.
ЗоЗПП: права потребителей Готовность: 100%
Нарушения
Не выявлены
Признаков дистанционной продажи товаров (интернет-магазина) не обнаружено — требования ЗоЗПП о раскрытии информации продавца к сайту не применяются. Нарушений нет.
ФЗ-149: рекомендательные технологии Готовность: 100%
Нарушения
Не выявлены
Рекомендательные блоки («с этим покупают», «похожие товары» и т.п.) на сайте не обнаружены — требования ст. 10.7 ФЗ-149 к сайту не применяются. Нарушений нет.
ФЗ-38: реклама Готовность: 100%
Нарушения
Не выявлены
Рекламных тематик с обязательными оговорками (медицина, БАД, кредиты и займы, новостройки) на сайте не обнаружено. Нарушений нет.
ФЗ-436: защита детей Готовность: 100%
Нарушения
Не выявлены
Признаков информационной продукции (новости, видео, книги, игры, курсы) не обнаружено — обязательная возрастная маркировка по ФЗ-436 сайту не требуется. Нарушений нет.
Вердикт
Оптимизация сайта mytopdozen.com выполнена всего на 60%. Чтобы исправить ситуацию и попасть в ТОП необходимо:
Исправьте ошибки в мета-тегах.
Исправьте ошибки оптимизации.
Исправьте ошибки индексации.
Поделитесь с друзьями: