Pull to refresh
12
0
Борис Дражжов @NixGuy

User

Send message

Алгоритмы поиска пути: Алгоритм дейкстры и А*

Level of difficultyMedium
Reading time7 min
Views11K


Автор статьи: Артем Михайлов

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

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

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

В этой статье мы сосредоточимся на двух популярных алгоритмах поиска пути — алгоритме Дейкстры и алгоритме A*. Оба алгоритма имеют свои преимущества и недостатки, и выбор между ними часто зависит от конкретной задачи и условий ее выполнения.
Читать дальше →
Total votes 15: ↑9 and ↓6+3
Comments2

Какого провайдера VPS выбрать для собственного сервера в 2023 году. Платим за всё российской картой

Level of difficultyEasy
Reading time7 min
Views173K

Иметь свой VPS для VPN довольно выгодно. Нет ограничений по количеству клиентов, можно обеспечить VPN подключением всех своих родных, друзей и знакомых. При этом можно за это платить 160-300 рублей в месяц. И если общедоступные VPN вовсю банятся по DNS и IP, то личные VPN пока что избегают этой участи.

Минусы есть, это администрирование сервера и отсутствие разнообразия географии.

Для VPN нужен зарубежный сервер, а с зарубежными сервисами в России уже больше года есть проблемы с оплатой. Но есть российские компании, которые предоставляют зарубежные сервера и при этом им можно платить с помощью российской карточки.
Я зарегистрировался в дюжине провайдеров, до покупки VPS дошёл у пяти. А после тестов остались только трое.

Читать далее
Total votes 61: ↑61 and ↓0+61
Comments197

Имплементация маппера MMC1 ассемблер 6502 nes/famicom/dendy

Level of difficultyMedium
Reading time6 min
Views2.5K

Игры не использующие мапперы в NES ограничены, 16 кб PRG ROM (хранилище программного кода) и 8 кб CHR ROM (хранилище графики). С развитием разработки игр на NES, встал вопрос, а как увеличить данные ограничения и на помощь пришли микросхемы мапперы. Что же такое мапперы мы и разберем сегодня и как их использовать в своем коде.

Читать далее
Total votes 22: ↑22 and ↓0+22
Comments7

Книга «Непрерывное развитие API. Правильные решения в изменчивом технологическом ландшафте, 2-е изд.»

Reading time15 min
Views3.4K
image Привет, Хаброжители!

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

Как соблюсти баланс гибкости и производительности, сохранив надежность и простоту настройки? Четыре эксперта по API объясняют разработчикам, руководителям продуктов и проектов, как максимально увеличить ценность их API, управляя интерфейсами как продуктами с непрерывным жизненным циклом.
Читать дальше →
Total votes 11: ↑10 and ↓1+9
Comments0

Как подключить содержимое любых файлов для использования в коде C / C++

Reading time5 min
Views23K

Задача состояла в подключении файлов: HTML, JS, CSS; без специальной подготовки. Так же неудобно подключать бинарные файлы (например картинки) конвертируя их в HEX. Так как не хотелось конвертировать в HEX или разделять на строки, искал способ подключения файла в адресное пространство программы.

Читать дальше →
Total votes 84: ↑83 and ↓1+82
Comments33

Как оценить уровень владения английским языком

Reading time4 min
Views124K


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

В этой статье я собрал различные тесты, которые проходил сам. При этом я сверяю свою субъективную оценку владения языком с результатами тестов. А также сравниваю результаты между разными тестами.
Читать дальше →
Total votes 99: ↑95 and ↓4+91
Comments62

Приложение в строке меню для macOS

Reading time10 min
Views7.9K
Приложения, размещенные в строке меню, уже давно известны пользователям macOS. У некоторых из этих приложений есть «обычная» часть, другие размещены только в строке меню.
В этом руководстве вы напишете приложение, которое показывает во всплывающем окне несколько цитат известных людей. В процессе создания этого приложения вы научитесь:

  • назначать иконку приложения в строке меню
  • делать приложение размещенным только в строке меню
  • добавлять пользовательское меню
  • показывать всплывающее по запросу пользователя окно и прятать его, когда необходимо, используя Event Monitoring

Замечание: это руководство предполагает, что вы знакомы со Swift и macOS.
Поехали!
Total votes 22: ↑22 and ↓0+22
Comments2

Про LL-парсинг: Подход к синтаксическому анализу через концепцию нарезания строки

Reading time10 min
Views13K
Приветствую уважаемое сообщество!

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

Как пишет великий Д. Строгов, «понять — значит упростить». Поэтому, чтобы понять концепцию синтаксического разбора методом рекурсивного спуска (оно же LL-парсинг), упростим задачу насколько можно и вручную напишем синтаксический анализатор формата, похожего на JSON, но более простого (при желании можно будет потом его расширить до анализатора полноценного JSON, если захочется поупражняться). Напишем его, взяв за основу идею нарезания строки.
Читать дальше →
Total votes 14: ↑13 and ↓1+12
Comments6

Ликбез по типизации в языках программирования

Reading time12 min
Views499K
image

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

В полной версии находится подробное описание всех видов типизации, приправленное примерами кода, ссылками на популярные языки программирования и показательными картинками.
Читать дальше →
Total votes 239: ↑232 and ↓7+225
Comments180

Создание 3D-шахмат в Unity

Reading time16 min
Views32K
image

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

В этом туториале мы создадим 3D-игру в шахматы на Unity. В процессе вы узнаете. как реализовать следующее:

  • Как выбирать перемещаемую фигуру
  • Как определять разрешённые ходы
  • Как менять игроков
  • Как распознавать состояние победы

К конце этого туториала мы создадим многофункциональную игру в шахматы, которую можно будет использовать как основу для разработки других настольных игр.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments5

Создаём файтинг в Unity: реализация Hitbox и Hurtbox

Reading time13 min
Views27K
image

Объяснение


Что же такое hitbox и hurtbox? Разве это не одно и то же?

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

Hitbox — это невидимый прямоугольник (или сфера), определяющий, куда попадает атака.

Hurtbox — это тоже невидимый прямоугольник (или сфера), но определяющий место, в которое игрок или объект может ударить с помощью Hitbox.


На этом изображении из Street Fighter IV красный прямоугольник — это hitbox, а зелёный — hurtbox
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments1

Операционные системы с нуля; Уровень 1 (младшая половина)

Reading time17 min
Views43K

Эта часть посвящена улучшению навыков работы с Rust и написанию парочки полезных утилиток и библиотек. Напишем драйверы для GPIO, UART и встроенного таймера. Реализуем протокол XMODEM. Используя это всё, напишем простенький шелл и загрузчик. Перед прочтением настоятельно рекомендуется убедиться в прочтении Книги. По крайней мере от начала и до конца. Для ленивых, но чуть более опытных можно рекомендовать это. На русском можно поковырять вот тут.


Ну и разумеется обходить стороной нулевой уровень совершенно не стоит. Алсо где-то половина этой части не требует малинки.

Читать дальше →
Total votes 41: ↑37 and ↓4+33
Comments5

Операционные системы с нуля; Уровень 0

Reading time11 min
Views132K

Добрый день/вечер/ночь/утро! Есть один экспериментальный курс по операционным системам. Есть он в Стэнфордском университете. Но часть материалов доступно всем желающим. Помимо слайдов доступны полные описания практических занятий.


Чем этот курс отличается от прочих других? Большая часть кода пишется самостоятельно и выполняется на вполне реальном современном железе. В качестве целевой платформы выбран Raspberry Pi 3 model B. Т.е. достаточно актуальная архитектура AArch64. ARMv8 Cortex-A53, четыре ядра, 64-бита и вот это всё. В качестве основного языка программирования выбран Rust. Который безопасный, быстрый, без GC и так далее. Его, Rust, предполагается изучать во время курса.


Тут есть про диски, файловые системы, операции ввода-вывода, потоки /процессы, планирование, виртуальную память, защиту и безопасность, прерывания, параллелизм и синхронизацию. Как и в любом другом, уважающем себя курсе. Разница в актуальности материала и в количестве практики. Коддить придётся много.

Читать дальше →
Total votes 80: ↑78 and ↓2+76
Comments55

Как быть* компилятором — создание компилятора на JavaScript

Reading time8 min
Views12K
Привет, Хабр! Представляю вашему вниманию перевод статьи "How to be* a compiler — make a compiler with JavaScript" автора Mariko Kosaka.

*Все верно! Быть компилятором — это здорово!

Дело было одним замечательным воскресеным днем в Бушвике, Бруклин. В моем местном книжном магазине я наткнулась на книгу Джона Маэда “Design by Numbers”. Это была пошаговая инструкция по изучению DBN — языка программирования, созданного в конце 90-х в MIT Media Lab для визуального представления концепций компьютерного программирования.
Читать дальше →
Total votes 32: ↑29 and ↓3+26
Comments19

Недокументированные приемы CSS

Reading time8 min
Views54K
Всем привет! Зовут меня Дмитрий Григоров. Работаю фронтедером в Райффайзенбанке в команде RBO PRO. Я расскажу и покажу вам, как можно творчески применять данные возможности CSS. В статье мы рассмотрим следующие темы:

  • Фоны и рамки;
  • Фигуры;
  • Визуальные эффекты.

Total votes 116: ↑114 and ↓2+112
Comments30

Обобщённый поиск путей для ИИ в платформерах

Reading time10 min
Views11K

Предисловие


Если вы создаёте игру-платформер в стиле «беги и прыгай», то, возможно, уже задумывались о добавлении в неё ИИ. Он может управлять противниками, объектами, которые игрок должен преследовать, и так далее… И слишком часто ради простоты программист реализации отказывается от умного ИИ, что в результате приводит к тому, что ИИ не может справиться с хитрыми прыжками, особо умным игроком или движущимися объектами уровня.

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

Мы рассмотрим основную идею и создадим полную реализацию. Более сложные случаи, в том числе подвижные платформы/разрушаемые стены, мы рассмотрим в другой статье.

Эта техника использована в игре Nomera, см. на www.dotstarmoney.com или в Twitter.

e3iKSJ7.png


Прежде чем начать, проверьте, возможно, вы удастся реализовать более простой алгоритм, соответствующий упрощённой геометрии карты. Например, если коллизии в уровнях распознаются по сетке квадратов (как в большинстве 2D-игр). В таких случаях можно реализовать надёжный поиск путей ИИ с помощью более простых техник. Мой метод в основном подойдёт тем, кто хочет более «человечного» поведения ИИ.
Читать дальше →
Total votes 27: ↑26 and ↓1+25
Comments3

Мой опыт восстановления зрения

Reading time9 min
Views277K
   Этим летом я был на некоторое время предоставлен сам себе – всех своих я отправил подальше от дыма, а сам, недолго думая, решил немного подтянуть здоровье. Не просто записаться в тренажерный зал и накачать «квадратиков» для пляжа, а именно обследоваться у некоторых врачей, чтобы выработать для себя вектор дальнейших действий, дабы совсем не превратиться в «овоща».

image

   Расскажу лишь про свой опыт восстановления зрения – именно оно больше всего подвержено риску у любого «компьютерного» человека.
Читать дальше →
Total votes 494: ↑397 and ↓97+300
Comments208

Получение визы США

Reading time3 min
Views1.4K
USA visaНе так давно, в июле, компания Intel прислала мне приглашение на мероприятие AppUp Elements. На момент получения приглашения у меня не было ни паспорта ни, разумеется, визы США. Но я успел получить и то и другое и прибыл на мероприятие точно в срок. О том как это мне удалось я и хочу рассказать в этой статье.

Данная статья может быть полезна тем, кто хочет в будущем или уже готов получить визу для поездки в США.
Читать дальше →
Total votes 40: ↑38 and ↓2+36
Comments25

mod_rewrite и пользовательские переменные окружения

Reading time1 min
Views1.6K
Есть в сервере Apache модуль mod_env, с его помощью можно задавать пользовательские переменные окружения:

SetEnv foo bar

Мне нужно было использовать такую пользовательскую переменную окружения в директиве RewriteCond модуля mod_rewrite. Оказалось, однако, что переменные, заданные с помощью SetEnv — в mod_rewrite недоступны :(. Увы!

Что же делать? Решение очень просто. С помощью вот такого нехитрого правила можно задать переменную окружения, которой mod_rewrite сможет потом воспользоваться:

RewriteRule .* - [E=foo:bar]

Перенаправления не происходит, мы просто задаем переменную окружения foo со значением bar (A dash indicates that no substitution should be performed (the existing path is passed through untouched) — httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewriterule).

Далее этой переменной можно воспользоваться:

RewriteCond %{ENV:foo} bar # следующее правило будет применено только если переменная foo имеет значение bar.

(обратите внимание на префикс ENV: насколько я понимаю, он обязателен для использования своих переменных окружения, тогда как стандартные, типа QUERY_STRING можно использовать и без него)

Вот и все. Надеюсь, тем, кому (как и мне) нечасто приходится настраивать апач, эта информация окажется полезной
Total votes 8: ↑7 and ↓1+6
Comments4

Эффективная обработка фотографий в Photoshop

Reading time6 min
Views146K
Эффективная обработка фотографий в Photoshop

Читая статьи о Photoshop, я часто удивляюсь тому, насколько многие авторы усложняют решение по сути простых задач по обработке. Этим страдают и многие «монументальные» писатели, например Дэн Маргулис. Но ему это простительно – его задача написать о всех тонкостях и нюансах процесса обработки, рассмотреть его со всех ракурсов и сторон. Хотя именно эта особенность подачи материала в его книгах отталкивает многих читателей.

На самом деле, корни подобных способов «увеличить резкость в 40 действий» растут из очень простой вещи – люди, которые пишут эти уроки, никогда не работали с большим объемом фотографий. То есть, как правило, у них есть пара фотографий и они готовы в процессе их обработки убить вечер-другой. Но когда у тебя идут постоянные заказы, и с каждой фотосессии тебе надо серьезно обработать несколько десятков кадров – начинаешь задумываться о более простых и удобных способах обработки.

О них мы сегодня и поговорим. Я расскажу вам о пяти простых, но очень эффективных инструментах Photoshop, которые я постоянно использую в своей работе.

Читать дальше →
Total votes 288: ↑244 and ↓44+200
Comments117

Information

Rating
Does not participate
Location
Таганрог, Ростовская обл., Россия
Date of birth
Registered
Activity

Specialization

Backend Developer