Как стать автором
Обновить
0
Искандер @blankfaceread⁠-⁠only

Backend

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

HTTP 1, 2 и 3 — просто

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

Просто о том, чем отличаются HTTP1, HTTP2 и HTTP3, а также почему HTTP3 ещё и QUIC. Статья для junior'ов, интересующихся и готовящихся к собеседованиям.

Я http-любознательный
Всего голосов 22: ↑19 и ↓3+16
Комментарии19

Как учиться учиться и для чего интровертам телеграм-канал

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

«Лучший способ в чём-то разобраться до конца — это попробовать научить этому компьютер». Дональд Кнут (как минимум викицитатник говорит, что он так сказал).

Год назад я осознал, что моё развитие как инженера застопорилось. Не то, чтобы я перестал изучать что-то новое, скорее, страдал от отсутствия системности. Не было понятно, что изучать дальше, что уже получилось изучить и что из изученного я смог для себя извлечь. Поэтому я решил как-то осмыслить процесс самообучения и за год привёл его к системе, которая мне довольно сильно помогает.

Для тех, кто, как и я, испытывал похожие проблемы, я решил поделиться своим методом.

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

Повышение точности решения плохо обусловленных СЛАУ методом Гаусса

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

Большинство задач вычислительной математики в конечном итоге сводятся к решению систем линейных уравнений. На данный момент существует огромное количество алгоритмов для решения таких систем. Их разделяют на две большие группы: итерационные и прямые. Прямые методы позволяют получить точные значения неизвестных, если вычисления проводятся точно. Далее будем рассматривать метод Гаусса.

Читать далее
Всего голосов 19: ↑15 и ↓4+11
Комментарии12

Как на самом деле работает Async/Await в C# (Часть 1)

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

Несколько недель назад в блоге «.NET Blog» появилась статья «Что такое .NET, и почему вы должны выбрать его?». В нем был представлен высокоуровневый обзор платформы, кратко описаны различные компоненты и архитектурные решения, а также обещаны более подробные посты по затронутым темам. Этот пост является первым таким продолжением, в котором подробно рассматривается история создания, архитектурные решения и детали реализации async/await в C# и .NET.

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

Представляю универсальный responsive header для React.js

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

Вы когда-нибудь думали о том, чтобы создать свой стартап? Почти каждому стартапу (да и +/- любой компании) нужен лендинг/сайт. А у каждого сайта вверху есть хедер с меню навигации. При чем в наше время он обязательно должно быть адаптивным, чтобы одинаково хорошо работать как на компьютерах, так и на мобильных телефонах и планшетах.

Зачем каждый раз тысячи фронтендеров разрабатывают этот хедер тратя множество часов опять и опять, когда почти все хедеры имеют один и тот же функционал и вид? Почему для этого до сих порт нет вменяемой библиотеки, позволяющей решить проблему подключением одного лишь компонента не тратя уйму времени? Подумала я и создала npm-пакет для React.js, представляющий собой универсальный хедер. Я реализовала большинство фич, которые вам могут потребоваться.

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

Когда и как следует инвалидировать кэш

Время на прочтение11 мин
Количество просмотров10K
image

В этой статье я опишу один способ, помогающий определить, когда инвалидировать записи кэша. В качестве примера я приведу специфическую конфигурацию, которая, тем не менее, должна получиться достаточно универсальной, а в заключении поста расскажу, как обобщить ее еще сильнее.
Читать дальше →
Всего голосов 7: ↑7 и ↓0+7
Комментарии2

Под капотом Redis: Хеш таблица (часть 2) и Список

Время на прочтение10 мин
Количество просмотров16K
В первой части я сказал, что хеш таблица это немного LIST, SET и SORTED SET. Судите сами — LIST состоит из ziplist/linkedlist, SET состоит из dict/intset, а SORTED SET это ziplist/skiplist. Мы уже рассмотрели словарь (dict), а во второй части статьи будем рассматривать структуру ziplist — вторую наиболее часто применимую структуру под капотом Redis. Посмотрим на LIST — вторая часть его «кухни» это простая реализация связного списка. Это пригодится нам, чтобы внимательно рассмотреть часто упоминаемый совет об оптимизацию хеш таблиц через их замену на списки. Посчитаем сколько памяти требуется на накладные расходы при использовании этих структур, какую цену вы платите за экономию памяти. Подведём итоги при работе с хеш таблицами, при использовании кодировки в ziplist.

В прошлый раз мы закончили на том, что сохранённые с использованием ziplist 1,000,000 ключей заняли 16 мб оперативной памяти, тогда как в dict эти же данные потребовали 104 мб (ziplist в 6 раз меньше!). Давайте разбираться какой ценой:

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

Под капотом Redis: Хеш таблица (часть 1)

Время на прочтение9 мин
Количество просмотров39K
Если вы знаете, почему после выполнения `hset mySey foo bar` мы потратим не менее 296 байт оперативной памяти, почему инженеры instagram не используют строковые ключи, зачем всегда стоит менять hash-max-ziplist-entries/hash-max-ziplist-val и почему тип данных, лежащий в основе hash это и часть list, sorted set, set — не читайте. Для остальных я попробую об этом рассказать. Понимание устройства и работы хеш таблиц в Redis критически важно при написания систем, где важна экономия памяти.

О чём эта статья — какие расходы несёт Redis на хранения самого ключа, что такое ziplist и dict, когда и для чего они используются, сколько занимают в памяти. Когда hash хранится в ziplist, когда в dicth и что нам это даёт. Какие советы из модных статей об оптимизации Redis не стоит воспринимать всерьёз и почему.
Читать дальше →
Всего голосов 38: ↑37 и ↓1+36
Комментарии2

Git scraping: методика бесплатного хостинга не совсем статических сайтов

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

Ни для кого не секрет, что, используя GitHub Pages, вы можете бесплатно разместить свой статический веб-сайт в сети Интернет. 1 Гбайт доступного пространства, SSL-сертификат, возможность привязать собственный домен — разве не сказка? Но что делать, если вам необходимо, чтобы содержимое вашего статического ресурса периодически обновлялось? Допустим, несколько раз в час.

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

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

Как программисту снизить когнитивную нагрузку: три способа

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

Предотвращение когнитивной перегрузки программиста — это ключ к недопущению ошибок и ускорению разработки.

Среди подкастов, которые я обычно слушаю, один называется «Никаких дурацких вопросов». В минувший понедельник я с большим интересом прослушал выпуск «Когда простота становится избыточной?». В нем авторы бросили вызов пресловутой «бритве Оккама» и продемонстрировали предвзятое отношение людей к простейшему объяснению по сравнению с более сложным. Несмотря на то, что в физике зачастую самое простое объяснение оказывается единственно верным, в других науках, таких как экономика или психология, ситуация может измениться. Почему пала Римская империя, или отчего преступность в последние десятилетия пошла на спад — причин тому не одна, а несколько. Авторы подкаста ясно показали, что, несмотря на любые факты, люди предпочитают иметь дело только с одним, а не с несколькими объяснениями случившегося. Это поразило меня.

Читать далее
Всего голосов 30: ↑27 и ↓3+24
Комментарии10

«Помоги мне стать дизайнером»

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

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

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

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

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

План алгоритмического собеседования: как впечатлить интервьюера и получить работу мечты

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

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

Я за свою карьеру имел возможность быть по обе стороны баррикад. С одной стороны я провёл сотни алгоритмических интервью в компаниях, где работал. С другой стороны сам успешно проходил такие интервью и получал оффер в Google, Facebook, Amazon, Uber, Yandex и Mail.Ru.

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

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

Wave Function Collapse для процедурной генерации в Unity

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

Wave Function Collapse – это алгоритм, c помощью которого можно реализовать генерацию чего угодно, что можно было бы описать с помощью правил или конкретным примером. В этой статье мы рассмотрим, как использовать WFC для генерации карты в Unity.

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

TCP и UDP, или Два столпа Интернета

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

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

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

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

Но и рассказывать про то, как браузер загружает страницы, тоже не будем. HTTP-запросы, сжатие, языки программирования, рендеринг страниц – всё мимо.

Что нам интересно, так это то, как данные находят путь от одного компьютера до другого.

И как же?
Всего голосов 21: ↑20 и ↓1+19
Комментарии3

Дробное броуновское движение

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

Введение


fBM расшифровывается как Fractional Brownian Motion (дробное броуновское движение). Но прежде чем начать говорить о природе, фракталах и процедурных рельефах, давайте на минуту углубимся в теорию.

Броуновское движение (Brownian Motion, BM), просто, без «дробности» — это движение, при котором положение объекта с течением времени меняется со случайными инкрементами (представьте последовательность position+=white_noise();). С формальной точки зрения BM является интегралом белого шума. Эти движения задают пути, которые являются случайными, но (статистически) самоподобными, т.е. приближенное изображение пути напоминает весь путь. Fractional Brownian Motion — это схожий процесс, в котором инкременты не полностью независимы друг от друга, а в этом процессе существует некая память. Если память имеет положительную корреляцию, то изменения в заданном направлении будут иметь тенденцию к будущим изменениям в том же направлении, и путь при этом будет плавнее, чем при обычном BM. Если память имеет отрицательную корреляцию, то за изменением в положительную сторону с большой вероятностью последует изменение в отрицательную, и путь окажется гораздо более случайным. Параметр, управляющий поведением памяти или интегрированием, а значит и самоподобием, её размерностью фрактала и спектром мощности, называется показателем Хёрста и обычно сокращается до H. С математической точки зрения H позволяет нам интегрировать белый шум только частично (допустим, выполнить только 1/3 интегрирования, отсюда и «дробность» в названии) для создания fBM под любые нужные нам характеристики памяти и внешний вид. H принимает значения в интервале от 0 до 1, которые описывают, соответственно, грубое и плавное fBM, а обычное BM получается при H=1/2.


Здесь функция fBM() использована для генерации рельефа, облаков, распределения деревьев, вариаций их цветов и деталей крон. «Rainforest», 2016: https://www.shadertoy.com/view/4ttSWf
Читать дальше →
Всего голосов 34: ↑34 и ↓0+34
Комментарии8

Модульная архитектура в Unity

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

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

Такие фреймворки зачастую имеют излишний функционал для конкретно взятых задач. Документации становится все больше и больше, да просто тонны документации! Не смотря на это, порог вхождения для вновь прибывшего на проект разраба неуклонно растет. А также есть те кто сразу же отказывается от работы на таких фреймворках, со словами “А зачем мне лезть в это абстрактное болото!?”. И я их прекрасно понимаю. 

И что же получается, пытаясь избежать проблем с хард кодом мы обрели другие проблемы, так особо и не повысив скорость разработки!? Проблемы, для устранения которых, необходимо ооочень много времени. Т.е. мы прошли путь от крайности к крайности от “хард кода” к фреймворку.

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

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

21 бесплатный учебный ресурс для разработчиков игр

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


Читать дальше →
Всего голосов 32: ↑31 и ↓1+30
Комментарии7

Станут ли воксели новой прорывной технологией?

Время на прочтение10 мин
Количество просмотров72K
Мы пообщались с потрясающими разработчиками Atomontage, пытаясь разобраться, смогут ли воксели вернуться и победить пиксели.


Воксельная разработка


Бранислав: в 2000-2002 годах я участвовал в соревнованиях европейской демосцены. Я написал несколько 256-байтных демо (также называемых intro) под ником Silique/Bizzare Devs (см. «Njufnjuf», «Oxlpka», «I like ya, Tweety» и «Comatose»). Каждое из интро генерировало в реальном времени воксели или графику из облака точек. И воксели, и облака точек являются примерами сэмплированной геометрии.

Интро выполняли свою задачу всего в 100 инструкциях процессора, таких как ADD, MUL, STOSB, PUSH и им подобных. Однако из-за самой природы такого типа программ на самом деле десятки инструкций использовались просто для правильной настройки, а не для генерации самой графики. Тем не менее этих 50 с лишним инструкций, которые по сути являлись элементарными математическими операциями или операциями с памятью, оказалось достаточно для генерации довольно красивой подвижной 3D-графики в реальном времени. Все эти 256-байтные интро выигрывали с первого по третье места. Это заставило меня осознать, что если такую 3D-графику возможно создавать без полигонов, то в играх и других приложениях можно достичь гораздо большего с помощью того же принципа: использования сэмплированной геометрии вместо полигональных мешей. Решение заключается в простоте. Я понял, что доминировавшая тогда парадигма, основанная на сложных и фундаментально ограниченном (необъёмном) представлении данных, уже готова была упереться в потолок возможностей. То есть настало подходящее время испробовать эту «новую», более простую парадигму: объёмную сэмплируемую геометрию.

image

Всего голосов 101: ↑98 и ↓3+95
Комментарии75

Функции шума и генерирование карт

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


Когда я изучал обработку аудиосигналов, мой мозг начал проводить аналогии с процедурным генерированием карт. В статье излагаются принципы, связывающие обработку сигналов с генерированием карт. Не думаю, что открыл что-то новое, но некоторые выводы были для меня в новинку, поэтому я решил записать их и поделиться с читателями. Я рассматриваю только простые темы (частоту, амплитуду, цвета шума, использование шума) и не затрагиваю другие темы (дискретные и непрерывные функции, фильтры FIR/IIR, быстрое преобразование Фурье, комплексные числа). Математика статьи в основном связана с синусоидами.

Эта статья посвящена концепциям, начиная с самых простейших и заканчивая более сложными. Если вы хотите перейти сразу к генерированию рельефа с помощью функций шума, то изучите другую мою статью.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии6

Симуляция 4,5 миллиардов лет эволюции планеты на GPU

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

Введение

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

Всего голосов 62: ↑60 и ↓2+58
Комментарии18

Информация

В рейтинге
Не участвует
Откуда
Казань, Татарстан, Россия
Зарегистрирован
Активность