Как стать автором
Обновить
14
0
Николай Рябов @pyatyispyatil

Frontend Developer

Отправить сообщение

Создание процессора с нуля для чайников

Время на прочтение18 мин
Количество просмотров34K

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

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

В данной статьей мы пройдем путь создания процессора от единичного транзистора до работающего 8-битного процессора, и напишем свой ассемблер для него.

Читать далее
Всего голосов 110: ↑110 и ↓0+135
Комментарии68

Подборка игр с низкоуровневым программированием

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

TL;DR

Игры от Zachtronics:

TIS-100, EXAPUNKS, SHENZHEN I/O

Про создание процессора от логических элементов и до написания кода на ассемблере: браузерная бесплатная nandgame.com, более продвинутая Turing complete.

Если Вам нравится какая-то игра из перечисленных - наверно, и остальные тоже подойдут. В каждую из них я наиграл по 30+ часов, получил кучу удовольствия и научился чему-то новому.

Подробности
Всего голосов 65: ↑64 и ↓1+77
Комментарии26

Чиним замедление YouTube на уровне роутера

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

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

Что случилось?

Хорошо описано произошедшее здесь, на Хабре. Если совсем кратко, своими словами - во время установки SSL соединения в открытом виде домен передается к которому мы подключаемся(так называемое SNI). И если это googlevideo.com то начинают твориться "интересные вещи". Можно проверить это локально коммандами из статьи.

$ curl https://speedtest.selectel.ru/100MB -o/dev/null

Читать далее
Всего голосов 336: ↑334 и ↓2+387
Комментарии851

Насколько быстр Javascript? Симулируем 20 миллионов частиц

Уровень сложностиПростой
Время на прочтение23 мин
Количество просмотров21K

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее
Всего голосов 109: ↑108 и ↓1+133
Комментарии34

Успех тимлида — это успех команды: три ошибки тимлидов в начале пути

Время на прочтение5 мин
Количество просмотров9.8K

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

Читать далее
Всего голосов 13: ↑12 и ↓1+11
Комментарии3

Цивилизация Пружин, 1/5

Время на прочтение14 мин
Количество просмотров107K
### Часть 1. Золотое «Ку»

Лет в шесть мне попался в руки дедовский справочник[50] по грузовым автомобилям середины 20-го века. Добротный, напечатанный на гладкой плотной бумаге раритет. Единственное, что вообще осталось на память от деда после распада страны, войн и переездов.



В справочнике содержалось множество интересных ТТХ, так что слово «грузоподъёмность» стало мне знакомо с раннего детства. И когда отец на прогулке упомянул, что любой грузовик весит столько же, сколько увозит сам, я это запомнил. Запомнил и, много позже, заинтересовался.

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

Читать дальше →
Всего голосов 237: ↑230 и ↓7+223
Комментарии266

Реализация циклической генерации подземелий «изнутри»: да что тут сложного?

Уровень сложностиПростой
Время на прочтение14 мин
Количество просмотров10K

Вам нравятся старые Legend of Zelda времён SNES и GBA? Может быть, вам пришлась по вкусу Dark Souls? А, возможно, вы ещё и фанат Quake? Но что объединяет все эти игры? Для меня это в первую очередь дизайн уровней. Головоломки, удобные шорткаты и нелинейность исследования - вот то, что делает карту игры частью общего игрового процесса и вдыхает жизнь в процесс исследования мира.

В наше время расцвета жанра rogue-lite вопрос генерации игровых уровней актуален как никогда. Однако по-настоящему интересные уровни в жанре - большая редкость, я бы даже сказал, феноменальная. Чаще всего уровни представляют собой просто наборы заранее заготовленных комнат-коробок, случайным образом приставленных друг к другу, без какой-либо логичной высокоуровневой картины. Но, всё же, я знаю одну игру, которая взяла принципиально другой подход: Unexplored. На мой взгляд, она пересмотрела устоявшийся стереотип об ограничениях левелдизайна в рогаликах. Всё, что для этого понадобилось - циклическая генерация подземелий (Cyclic dungeon generation).

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

Каких же?
Всего голосов 28: ↑28 и ↓0+34
Комментарии15

Привычка быть SOLIDным разработчиком

Уровень сложностиСредний
Время на прочтение20 мин
Количество просмотров15K

Привет, Хабр! Меня зовут Грант, я уже 5 лет занимаюсь backend-разработкой в SimbirSoft, а с 2021 года возглавляю Backend-отдел компании в Краснодаре. В последние несколько лет неоднократно замечаю, что на входном интервью соискатели часто путают принципы разработки. Поэтому в этой статье решил разобрать, как проще их понимать, какие связи между ними прослеживаются, стоит ли учить все или что-то можно пропустить. А еще попробую раскрыть некоторые особенности, какие секреты скрывают популярные принципы разработки.

Погрузиться 👀
Всего голосов 15: ↑12 и ↓3+11
Комментарии5

Обобщенные фабрики тайпгардов в TypeScript

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

Привет, Хабр! Меня зовут Сергей Соловьев, я разрабатываю интерфейсы международных платежей в Тинькофф Бизнесе. Уверен, многие хотят писать надежный, поддерживаемый, но при этом лаконичный код. Как найти баланс?

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

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

Читать далее
Всего голосов 40: ↑40 и ↓0+42
Комментарии6

Структура объекта в JavaScript движках

Время на прочтение23 мин
Количество просмотров8.5K

С точки зрения разработчика, объекты в JavaScript довольно гибкие и понятные. Мы можем добавлять, удалять и изменять свойства объекта по своему усмотрению. Однако мало кто задумывается о том, как объекты хранятся в памяти и обрабатываются JS-движками. Могут ли действия разработчика, прямо или косвенно, оказать влияние на производительность и потребление памяти? Попробуем разобраться во всем этом в этой статье.

Читать далее
Всего голосов 32: ↑32 и ↓0+33
Комментарии1

Сборка мусора в V8

Время на прочтение19 мин
Количество просмотров6.2K

В этой статье мы детально разберем процесс сборки мусора движком V8. Познакомимся с понятиями поколений, Minor и Major Garbage Collection, посмотрим, как аллоцируются, трассируются и маркируются объекты в памяти. Что происходит с пустыми областями после очистки, и как выполняется сборка мусора в фоновом режиме. 

Читать далее
Всего голосов 15: ↑15 и ↓0+15
Комментарии3

Нейронная сеть, имеющая способность к самообучению

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

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

Читать далее
Всего голосов 11: ↑10 и ↓1+11
Комментарии31

Event Loop. Мифы и реальность

Время на прочтение19 мин
Количество просмотров18K

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

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

Читать далее
Всего голосов 26: ↑26 и ↓0+26
Комментарии2

Детальный React. Реконсиляция, рендеры, Fiber, виртуальное дерево

Уровень сложностиСложный
Время на прочтение19 мин
Количество просмотров20K

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

На момент написания статьи, последняя стабильная версия React 18.2.0. За 10 лет разработчики Facebook проделали колосальный объем работы, было реализовано много фич и сделано не мало оптимизаций. За эти годы, так же, происходили и кардинальные архитектурные изменения. Очевидно, одной статьи мало, чтобы покрыть всю механику React, поэтому, данная публикация станет первой в серии статей о внутреннем устройстве React. Здесь мы познакомимся с основными сущностями и архитектурными решениями.

Читать далее
Всего голосов 15: ↑13 и ↓2+14
Комментарии10

Создание веб-приложения с использованием микрофронтендов и Module Federation

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

Привет! В данной статье мы разберём процесс разработки веб-приложения на основе подхода микрофронтендов с использованием технологии Module Federation

Читать далее
Всего голосов 6: ↑4 и ↓2+2
Комментарии2

Чистая архитектура на примере

Уровень сложностиПростой
Время на прочтение27 мин
Количество просмотров44K

Познакомил друга с понятием "Чистая архитектура" и он стал часто спрашивать меня как лучше сделать то или другое. Хотел дать ему к какому-нибудь туториал, но, к удивлению (плохому), не нашел подходящего.

Поэтому выкладываю небольшой обзор:

1.. Что такое чистая архитектура;
2.. Как можно реализовать;
3.. Мои мысли.

Читать далее
Всего голосов 13: ↑11 и ↓2+11
Комментарии23

Кодогенерация и парсинг TypeScript с помощью typescript

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

Одной из интересных возможностей пакета typescript является то, что он содержит API для генерации TypeScript-кода, а также парсер для работы с написанным на TypeScript кодом. Кодогенерация часто используется для автоматического создания типов для работы с http api (типизация тела запроса, ответа, query параметров и тд.). В npm есть модули, генерирующие сервисы для работы с api на основе openapi, graphQl схем и тому подобное, и обычно возможностей существующих модулей хватает для решения большей части задач.

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

Читать далее
Всего голосов 14: ↑14 и ↓0+14
Комментарии6

Сборка мусора в JavaScript

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

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

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

Погнали собирать мусор!

Собрать мусор
Всего голосов 15: ↑14 и ↓1+15
Комментарии5

Наводим порядок в конфигах Webpack

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров5.4K

Всем привет. Меня зовут Евгений Чернышев, и я возглавляю фронтенд-разработку в одном из направлений деятельности Домклик. Хочу поделиться своими мыслями о том, как управлять сложными конфигурациями Webpack. Сразу «проведу черту», чтобы предотвратить возможные холивары: сравнение Webpack с другими бандлерами (Rollup, Vite и прочими) выходит за рамки статьи.

Де-факто, Webpack является основным сборщиком фронтенд-проектов. Это зрелый продукт, который до сих пор развивается и повсеместно используется. Но, как и любой инструмент, он имеет свои слабые стороны. Я считаю что основной недостаток Webpack — это сложность его конфигурации. На крупных долгоживущих проектах конфигурационные файлы становятся слишком большими и нечитаемыми, превращаясь в мешанину вложенных объектов и spread-операторов. Чтобы показать, что я имею в виду, рассмотрим стадии развития проекта.

Читать далее
Всего голосов 18: ↑17 и ↓1+18
Комментарии5

Глубокий JS. В память о типах и данных

Уровень сложностиСложный
Время на прочтение10 мин
Количество просмотров28K

Всех нас учили, что в JavaScript есть примитивные и ссылочные типы данных. Исчерпывающая информация есть в официальной документации, а на просторах интернета полно статей на этот счет.

Теория теорией, однако, JS-код исполняется не в теории, а на практике. Точнее, его компилирует и исполняет движок JS. Таких движков существует несколько, разрабатывались они разными людьми и для разных целей. Было бы наивно предполагать, что все они полностью идентичны друг другу. А значит, время разобраться, как же на самом деле хранятся вполне конкретные данные на вполне конкретном движке JS V8.

Читать далее
Всего голосов 42: ↑40 и ↓2+51
Комментарии27

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Frontend Developer
Lead