Как стать автором
Обновить
0

Пользователь

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

Hashmap(map) по версии Golang вместе с реализацией на дженериках

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

Привет. Сегодня рассмотрим такую интересную структуру данных как hashmap, а именно ее реализацию в Go. Вкратце разберем что такое hashmap, как это выглядит под капотом Go 1.19. Посмотрим отличия реализации с Java и Python. Реализуем hashmap из под капота с помощью дженериков.

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

Игровой программный рендеринг в 2022-м году

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


Программный рендеринг был широко распространён в играх на ПК до повсеместного распространения т. н. 3d-ускорителей (видеокарт). Каждая игра содержала свой собственный код рендеринга, каждая игра имела свои уникальные особенности в нём. Но с распространением видеокарт программный рендеринг в играх умер.


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

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

Собеседование Golang разработчика (теоретические вопросы), Часть II. Что там с конкурентностью?

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

Что спрашивают на собеседовании Golang разработчика? Асинхронщина? Контексты? Вторая часть статьи с вопросами и ответами, собранными на собеседованиях.

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

Собеседование Golang разработчика (теоретические вопросы), Часть I

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

Как сейчас проходят собеседования на golang разработчика? Что спрашивают?

Читать далее
Всего голосов 47: ↑46 и ↓1 +45
Комментарии 22

Мега-Учебник Flask, Часть 3: Формы

Время на прочтение 10 мин
Количество просмотров 137K
Это третья статья в серии, где я описываю свой опыт написания веб-приложения на Python с использованием микрофреймворка Flask.

Цель данного руководства — разработать довольно функциональное приложение-микроблог, которое я за полным отсутствием оригинальности решил назвать microblog.



Краткое повторение


В предыдущей части мы определили простой шаблон для домашней страницы и использовали мнимые объекты в качестве прототипов вещей, которых у нас еще нет. К примеру пользователи или записи.

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

Формы являются одними из самых основных блоков в любом веб-приложении. Использование форм позволит пользователям оставлять записи в блоге, а также логиниться в приложение.

Чтобы следовать этой части, ваше приложение микроблога должно быть таким, каким мы оставили его в конце предыдущей. Пожалуйста, убедитесь, что прилолжение установлено и работает.
Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 7

Антарктида в лицах

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

Автор: Александра Гордиенко, редактор проекта “Антропогеос. География людей”.

Фото: Дина Караваева

Кто все эти люди, приехавшие в Антарктиду на пару месяцев или даже дольше? Как они туда попали и что думают о континенте? Рассказываем об обитателях Антарктиды, которые команда проекта “Антропогеос” встретила во время своей экспедиции в сезоне 2019-2022. Они поделились с нами впечатлениями о континенте, советами и опытом при подготовке экспедиций.

Экспедиция проекта “Антропогеос” длилась 21 день и прошла по маршруту Пунта-Аренас — ледник Юнион — Южный полюс — Полюс недоступности — «Новолазаревская» — Кейптаун, из Южной Америки в Южную Африку. Такая связка на машинах была выполнена впервые.

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

Software renderer — 1: матчасть

Время на прочтение 29 мин
Количество просмотров 83K
Программный рендеринг (software rendering) — это процесс построения изображения без помощи GPU. Этот процесс может идти в одном из двух режимов: в реальном времени (вычисление большого числа кадров в секунду — необходимо для интерактивных приложений, например, игр) и в «оффлайн» режиме (при котором время, которое может быть потрачено на вычисление одного кадра, не ограничено настолько строго — вычисления могут длиться часы или даже дни). Я буду рассматривать только режим рендеринга в реальном времени.

У этого подхода существуют как недостатки так и достоинства. Очевидным недостатком является производительность — CPU не в состоянии конкурировать с современными видеокартами в этой области. К достоинствам стоит причислить независимость от видеокарты — именно поэтому он используется как замена аппаратного рендеринга в случаях, когда видеокарта не поддерживает ту или иную возможность (так называемый software fallback). Существуют и проекты, цель которых — полностью заменить аппаратный рендеринг программным, например, WARP, входящий в состав Direct3D 11.

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

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

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

В конце статьи будет ссылка на гитхаб проекта, который можно рассматривать как пример реализации.
Читать дальше →
Всего голосов 95: ↑90 и ↓5 +85
Комментарии 51

Беспилотники — уже часть нашей жизни. Вы это заметили? Часть 2

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

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

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

AsyncIO для практикующего python-разработчика

Время на прочтение 16 мин
Количество просмотров 379K
Я помню тот момент, когда подумал «Как же медленно всё работает, что если я распараллелю вызовы?», а спустя 3 дня, взглянув на код, ничего не мог понять в жуткой каше из потоков, синхронизаторов и функций обратного вызова.

Тогда я познакомился с asyncio, и всё изменилось.
Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 12

Go: конкурентность и привязки к потокам в планировщике

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

Переключение горутины с одного потока ОС на другой довольно затратно и может значительно замедлить работу приложения, если это происходит слишком часто. Однако со временем эту проблему решил планировщик Go путем обеспечения привязки горутин к потоку (scheduler affinity) в условиях конкурентной работы (concurrently). А чтобы нам лучше понять всю прелесть этой доработки, давайте вернемся назад в прошлое и посмотрим, как было до.

Читать далее
Всего голосов 17: ↑14 и ↓3 +11
Комментарии 4

Публикация Vue.js-приложения в GitHub Packages с помощью GitHub Actions для самых маленьких

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

В этой серии вы узнаете как собрать докер-образ приложения на Vue.js и как опубликовать его в GitHub Packages. Вот так. Вот в общем-то и... не всё... Одним GitHub Action, как это было для Spring Boot приложения, о котором я рассказывал тут, в этот раз обойтись не получится. Нужно ещё проделать некоторые манипуляции, о которых я и расскажу в данной статье.

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

Меши с Python & Blender: двумерная сетка

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

Привет! Понадобилось процедурно генерировать сложную 3D модель, и пока я копал, как это делается, нашёл несколько статей от Diego Gangl, cg артиста и разработчика Блендера. Они славные для новичка, понимающего в моделировании, но не умеющего (почти) в код. Это перевод одной из них. Неточности и ошибки автора я поместил под спойлеры.

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

Начнём?
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 11

Капля здравого смысла для Windows-разработки на C и C++

Время на прочтение 8 мин
Количество просмотров 22K
Суровая действительность разработки на C и C++ для Windows такова: для этой платформы никогда не существовало качественной, нативной реализации стандартной библиотеки этих языков. Стандартная библиотека должна абстрагировать механизмы базовой системы ради упрощения разработки переносимого программного обеспечения. С и C++ на Windows очень плохо состыкованы с интерфейсами операционной системы. В результате большая часть переносимых, или, так сказать, «почти всегда переносимых» программ, которые отлично работают практически везде, в Windows оказываются едва заметно «поломанными», в особенности — за пределами англоговорящего мира. Причины этого почти наверняка связаны с политикой тех или иных компаний, с искусственными ограничениями, а не с техническими особенностями систем, что лишь усугубляет положение. Эта статья посвящена рассказу о проблемах Windows-разработки на C и C++ и о том, как они выражаются. Здесь же будут представлены некоторые простые методы борьбы с этими проблемами при разработке переносимого ПО.


Читать дальше →
Всего голосов 55: ↑49 и ↓6 +43
Комментарии 81

Делаем асинхронность асинхронной, разбираемся в планировщике Go, ругаем Linux

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

В айтишном мире есть две весьма обсуждаемые темы:

1. Что является главным недостатком в Go;

2. Linux vs <что угодно>;

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

Читать далее
Всего голосов 69: ↑65 и ↓4 +61
Комментарии 51

Чистый C++

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

Давайте знакомиться.
Я — Серега. (На фото — не я). Работаю в Intel. Вместе с коллегами пишу GPA. Программирую вот уже скоро 20 лет как. Ну, это если считать со школы. Последнее время накопилось много разных мыслей, которыми хочется с кем-то поделиться. Рассказать кому-то о том, что такое хорошо, а что такое плохо. Рассказывать можно и пустоте (так даже спокойней, никто не отвлекает и не суется со Своим Самым Правильным мнением), но это не очень эффективно. Поэтому буду сливать свои мысли сюда. Вдруг кому-нибудь пригодится…

В качестве введения
Многие считают, что есть два родственных языка — C и C++. При этом C++ — это якобы тот же C, только с двумя плюсами, т.е. ООП. Это очень распространенное заблуждение. «На самом деле все не так». C и С++ — это совершенно разные языки, не имеющие между собой практически ничего общего. Однако исторически так сложилось, что C++ синтаксически совместим с C, т.е. может компилировать программы, написанные на C. Из-за этой особенности четкая грань между языками отсутствует и существует множество кода, написанного на жуткой смеси этих языков. Причем пропорция этой смеси может меняться даже в рамках одной программы у одного автора.
Читать дальше →
Всего голосов 217: ↑108 и ↓109 -1
Комментарии 174

Ссылки и ссылочные типы в C++

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

Продолжаем серию «C++, копаем вглубь». Цель этой серии — рассказать максимально подробно о разных особенностях языка, возможно довольно специальных. Это пятая статья из серии, список предыдущих статей приведен в конце в разделе 6. Серия ориентирована на программистов, имеющих определенный опыт работы на C++. Эта статья посвящена ссылкам и ссылочным типам в C++.


Термин «ссылка» широко используется и в обыденной жизни, в компьютерных и других науках и поэтому его смысл сильно зависит от контекста использования. В языках программирования под ссылкой понимают небольшой объект, главная задача которого обеспечить доступ к другому объекту, расположенному в другом месте, имеющему другой размер и т.д. Объекты ссылки удобно использовать на стеке, они легко копируются, что позволяет получить доступ к объекту, на который эта ссылка ссылается, из разных точек кода. В той или иной форме ссылки поддерживаются во всех языках программирования. В ряде языков программирования, таких как C#, Java, Pyton и многих других, ссылки, по существу, являются концептуальным ядром.



В C роль ссылок играют указатели, но работать с ними не очень удобно и в C++ появилась отдельная сущность — ссылка (reference). В C++11 ссылки получили дальнейшее развитие, появились rvalue-ссылки, универсальные (передаваемые) ссылки, которые играют ключевую роль в реализации семантики перемещения — одном из самых значительных нововведений C++11.



Итак, попробуем рассказать о ссылках в C++ максимально подробно.


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

О шаблонах в С++, чуть сложнее

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

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

Потрогать здесь
Всего голосов 50: ↑50 и ↓0 +50
Комментарии 30

Как принять участие в работе Open Source проектов на GitHub. Краткое руководство для начинающих

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

На GitHub размещены миллионы Open Source проектов, но для начинающих разработчиков бывает достаточно сложно поначалу разобраться в принципах их работы, а также в интерфейсе сайта. Это краткое руководство поможет участвовать в проектах с открытым кодом, которые размещаются на GitHub.

Адаптированный перевод статьи The beginner's guide to contributing to a GitHub project. Здесь приведены только общие рекомендации по работе с Open Source из визуального интерфейса GitHub. Обязательно ознакомьтесь с README выбранного вами проекта для уточнения деталей.

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

Пишем 3D-рендерер в стиле первой PlayStation

Время на прочтение 14 мин
Количество просмотров 14K
Я занялся новым хобби-проектом, который мне очень нравится. Я создаю вымышленную консоль, источником вдохновения для которой стали технологии эпохи PS1. Проект довольно масштабный, но сегодня я хочу поговорить о рендеринге, который стал моим первым шагом к его реализации. В этой статье я подробно расскажу о том, что узнал в процессе исследования PS1 и других ретроконсолей. И, разумеется, о том, как я реализовал рендеринг в вымышленной консоли, которую назвал Polybox. Я не буду объяснять рендеринг 2D-спрайтов, потому что это довольно просто, а статья и так вышла достаточно длинной.

Вот конечный результат, который я получил в консоли Polybox:


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

Простое объяснение симуляции жидкости в реальном времени

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

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

Код проекта можно найти на моём Github.


Ресурсы, посвящённые симуляции жидкостей, могут быть очень пугающими. Помню, что когда я впервые прочитал статью о ней и увидел уравнения Навье-Стокса, то был в ужасе. Со временем я понял, что сама тема совершенно не сложна. На самом деле, если бы вам дали задачу написать собственный симулятор жидкостей, то вы, вероятно, написали бы что-то подобное на основании интуитивного понимания работы жидкостей. Если, посмотрев на уравнения Навье-Стокса, вы подумали «ага, понятно», то вы, возможно, быстрее бы реализовали симуляцию жидкости, прочитав работы, перечисленные в конце этой статьи. Я же попытаюсь не использовать сжатое выражение и объяснять всё как можно медленнее.
Читать дальше →
Всего голосов 45: ↑45 и ↓0 +45
Комментарии 8

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность