Pull to refresh
0
0
Дмитрий @ProgrammerBY

User

Send message

Как создавать, собирать, устанавливать и использовать пакеты с программами и библиотеками для UNIX-подобных систем

Reading time13 min
Views47K
Речь пойдёт о программах и библиотеках для UNIX-подобных систем, распространяемых в виде исходного кода (в том числе в виде тарболлов), написанных обычно на C и C++ (хотя этот же порядок работы может применяться к софту на любом языке). Многие вещи в этой статье написаны применительно конкретно к GNU/Linux, хотя многое из статьи может быть обобщено и на другие UNIX-подобные ОС.

Под словом «пакет» я понимаю в этой статье пакет с исходными текстами, причём не пакет конкретного дистрибутива GNU/Linux, а просто пакет, исходящий от оригинальных авторов софта (UPD от 2017-02-09: кроме тех случаев, где из контекста ясно, что слово «пакет» употреблено в другом смысле).

В этой статье я разберу следующие вопросы:

  • Вот скачал программу или библиотеку. Как её собрать и установить? Как воспользоваться библиотекой?
  • Что такое префикс (prefix) установки? В чём разница между сборкой и установкой? Куда обычно устанавливают программы?

Я разберу только совсем базовые вещи. Те, которые типичные участники сообщества свободного ПО, программирующие на C и C++ под UNIX-подобные системы, обычно уже знают. Как создавать тарболлы (на примере «голого» make) и как устанавливать чужие тарболлы. Advanced советы по созданию «хороших» пакетов я не дам. «Продвинутые» вещи читайте в документации систем сборки, в замечательной статье «Upstream guide» от Debian (в её конце есть ещё куча ссылок о создании «хороших» пакетов). Многое в этой статье можно было сделать по-другому, моя цель: дать хотя бы один способ, не пытаться объять необъятное.
Читать дальше →

Встраиваемый компактный веб-сервер Mongoose

Reading time5 min
Views23K
В процессе разработки различных проектов на C/C++ часто возникает необходимость общаться с внешними системами или отдавать данные клиентам по HTTP. Примером может служить любой веб-сервис, а также любое устройство с веб-интерфейсом типа роутера, системы видеонаблюдения, и т.д.

Что в таком случае обычно делают? Правильно, идут протоптанной дорожкой — Apache/nginx + PHP. А дальше начинается ад, потому что:

1. Все это нужно устанавливать и настраивать.
2. Все это жрет приличное количество ресурсов.
3. Из PHP как-то надо получать данные от разрабатываемой системы. Повезет если для этого достаточно просто залезть в СУБД.

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

1. Меньше внешних зависимостей, а значит проще установка и настройка.
2. Теоретически меньшее потребление ресурсов.
3. Можно отдавать данные прямо из вашего продукта, без посредников.
Но при этом мы не желаем заморачиваться всякими тонкостями обработки HTTP-соединений, парсинга и т.п.

Такие решения есть. И в этой статье я хотел бы поверхностно познакомить вас с одним из них – встраиваемый сервер Mongoose (не путать с MongoDB).
Читать дальше →

2D магия в деталях. Часть четвёртая. Вода

Reading time13 min
Views35K

— Я тут воду для проекта запилил.
— О, круто! А почему она плоская? Даёшь волны!

— Слушай, ты тогда про волны говорил, помнишь? Зацени!
— Да, хорошие волны, а преломление и каустику ещё не делал?

— Привет, я тут игрался с Unity всю ночь, смотри какие отражения и каустику закодил!
— Дарова, и правда, хорошо! А когда у тебя вода кипит, отражения не глючат?

— Хай, реализовал наконец, кипение, вроде ничего?
— О, прямо как нужно! Слушай, прикинь как круто, если кипящую волну заморозить?

— Лови картинку, лёд вроде ничего придумал?
— Норм, слушай, а у тебя лёд замерзает, он в объёме увеличивается? И кстати, ты когда геймлей то делать начнёшь?
Вариации на тему лога с другом.

Да, вы уже поняли, наконец-то расскажу про реализацию воды в проекте. Приступим?

Ремастеринг текстур для BioShock: The Collection

Reading time7 min
Views21K
image

[Все картинки кликабельны, потому что Хабр сжимает изображения разрешением больше 1920]

Введение


Меня зовут Ана Родригес (Ana M. Rodriguez), я занимаюсь компьютерной графикой и специализируюсь на текстурах и шейдерах, В настоящее время я работаю фрилансером компании Blind Squirrel Games, последним моим проектом был сборник игр Bioshock: The Collection. До него я работала над Castlevania: Lords of Shadows 1 и 2. Также мне удалось поучаствовать в проекте Castlevania: Mirror of Fate для Nintendo 3DS.
Читать дальше →

Алгоритм «diamond-square» для построения фрактальных ландшафтов

Reading time12 min
Views119K
Карта игры Minecraft, созданная с помощью приложения CartographДумаю, многие знакомы с весьма необычной игрой Minecraft (справа — пример сгенерированной в ней карты), в которой игрок находится на (практически) бесконечной поверхности Земли и может исследовать окружающий мир с минимальными ограничениями.

Как же автору игры, Notch'у, удалось добиться подобного сходства его случайных «миров» с земными просторами? В этом топике я как раз и рассмотрю один из способов построить искусственный ландшафт такого рода (и вскользь упомяну пару других способов), а также расскажу о моем небольшом усовершенствовании этого алгоритма, позволяющем значительно увеличивать размеры ландшафта без заметных потерь в производительности.

Внутри вас ждет несколько схем и красивых картинок, довольно много букв и ссылка на пример реализации алгоритма.

Читать дальше →

Эффективный расчёт области видимости и линии взгляда в играх

Reading time16 min
Views38K
image

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

image

Имея параметры видимости наблюдателя (направление взгляда, расстояние видимости и угол поля зрения), нам нужно найти видимую для него область, т.е. определить область видимости (field of view, FoV). Если препятствия отсутствуют, это будет сектор круга, состоящий из двух граней (радиусов) и соединяющей их дуги (см. Рис. 1). Кроме того, имея заданную точку мира, мы должны быстро определить, видима ли она для наблюдателя, т.е. необходимо обрабатывать запросы линии взгляда (line of sight, LOS) для заданной точки. Обе эти операции можно выполнить достаточно эффективно для использования при рендеринге в реальном времени.
Читать дальше →

learnopengl. Урок 1.7 — Трансформации

Reading time17 min
Views134K

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

Брутальное аниме для бородатых программистов

Reading time4 min
Views84K

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

О строковом форматировании в современном C++

Reading time9 min
Views156K

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

Читать дальше →

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

Reading time21 min
Views176K


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

Учась в бакалавриате, я смог развить словарный запас до 10 000 и прорвать барьер чтения художественной литературы. Но понимание разговорной речи на слух — задача куда более трудная. Я долгое время считал её нерешаемой, не верил в успех.

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

Создание атмосферы в видеоиграх при помощи архитектуры

Reading time15 min
Views21K


Я — основательница дизайн-студии FOURM и один из архитекторов игры The Witness. Эта статья вдохновлена моим опытом работы с ландшафтными дизайнерами и разработчиками этого проекта. Возможно, это первый случай такого тесного сотрудничества представителей этих трёх профессий.

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

Выразительный JavaScript: Обработка событий

Reading time19 min
Views272K

Содержание




Вы властны над своим разумом, но не над внешними событиями. Когда вы поймёте это, вы обретёте силу.
Марк Аврелий, «Медитации».


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

Обработчики событий


Представьте интерфейс, в котором единственным способом узнать, нажали ли на кнопку клавиатуры, было бы считывание текущего состояния кнопки. Чтобы реагировать на нажатия, вам пришлось бы постоянно считывать состояния кнопок, чтобы вы могли поймать это состояние, пока кнопка не отжалась. Было бы опасно проводить другие подсчёты, отнимающие процессорное время, так как можно было бы пропустить момент нажатия.
Читать дальше →

Метаклассы в Python

Reading time10 min
Views204K
Как сказал один из пользователей StackOverflow, «using SO is like doing lookups with a hashtable instead of a linked list». Мы снова обращаемся к этому замечательному ресурсу, на котором попадаются чрезвычайно подробные и понятные ответы на самые различные вопросы.

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

Читать дальше →

Лекции Техносферы. Подготовительный курс «Алгоритмы и структуры данных» (весна 2016)

Reading time3 min
Views39K


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

Курс ведет Сергей Бабичев, доцент кафедр информатики и вычислительной математики, а также теоретической и прикладной информатики в МФТИ. Под катом вас ждет восемь лекций:

  • Лекция 1. «Введение. Исполнители. Абстракции интерфейсов. Рекурсия»
  • Лекция 2. «Жадные алгоритмы»
  • Лекция 3. «Сортировки»
  • Лекция 4. «Поиск. Списки»
  • Лекция 5. «Деревья»
  • Лекция 6. «Хеш-таблицы»
  • Лекция 7. «Динамическое программирование»
  • Лекция 8. «Алгоритмы на графах»

Разделяемые указатели и многопоточность. И снова о них, в который раз

Reading time9 min
Views27K

Глава из книги "Современное программирование на C++" называется "В сто первый раз об интеллектуальных указателях". Все бы ничего, но книга была издана в 2001 году, так стоит ли в очередной раз возвращаться к этой теме? Мне кажется что как раз сейчас и стоит. За эти пятнадцать лет поменялась сама точка зрения, тот угол под которым мы смотрим на проблему. В те далекие времена только-только вышла первая де-факто стандартная реализация — boost::shared_ptr<>, до этого каждый писал себе реализацию по потребности и как минимум представлял себе детали, сильные и слабые стороны своего кода. Все книги по C++ в то время обязательно описывали одну из вариаций умных указателей в мельчайших деталях.


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


А еще на stackoverflow например снова и снова задается вопрос — "потокобезопасны ли умные указатели из стандартной библиотеки?". Ответы даются обычно категоричные, но какие-то мало информативные. Если бы я например не знал о чем идет речь, то наверное бы не понял. И кстати, все сравнительно новые книги описывающие новый стандарт C++ этому вопросу тоже уделяют мало внимания.


Так давайте же попробуем сорвать покровы и разберемся с деталями.

Читать дальше →

Не твоя проблема

Reading time6 min
Views31K
image

Ты — целеустремлённый разработчик игр. Ты хочешь создать и выпустить потрясающую игру, чтобы о ней узнал мир. Это сложно, намного сложнее чем, скажем, написать книгу. Игра — это алхимическая смесь искусства, личного вкуса, строгой математики, логистики и проектирования. Очень немногие могут создать игру в одиночку, при этом легко отвлечься, слишком легко. Или ещё хуже — заняться тем, что тебе не нужно. Ты доволен, многому учишься, что-то делаешь, но игра не становится ближе к завершению, которое и является целью. Не забывай о цели…
Читать дальше →

Процедурная растительность на OpenGL и GLSL

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



Повествование будет вестись на примере небольшой демки, которая генерирует сцену как на картинке выше. Мы пройдём увлекательное путешествие от подготовки данных на CPU до записи значений цвета на выход фрагментного шейдера.
Читать дальше →

2D магия в деталях. Часть вторая. Структура

Reading time19 min
Views31K


Помните небезызвестный мем про "корованы"? Наверное, каждый, кто разрабатывает игры (или хотел бы этим заняться) раздумывает о неком "проекте мечты", где можно будет "грабить корованы" и "набигать". А ещё, чтобы погода менялась динамически, и на грязи следы от сапог оставались, и деревья росли в реальном времени. И ещё, чтобы ...


Понятно, что в реальном игровом проекте такая погоня за хотелками — смерти подобна. А вот в техно-демке — самое то.

Открываем доступ к инструменту для составления списков английских слов из фильмов, книг и статей

Reading time6 min
Views26K


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

Мы в школе Skyeng убеждены, что чем быстрее ученик получает ощутимый эффект от занятия или тренировки, тем выше его мотивация и эффективнее само обучение. Традиционная методика изучения языков обещает конкретный результат лишь через длительное время — год, два, т.е. требует вложения значительных сил, времени и средств без немедленного эффекта. Мы считаем, что вполне реально получить “возврат инвестиций” быстро, если ставить перед собой небольшие конкретные задачи и решать их. Сегодня мы расскажем про один из наших служебных инструментов, предназначенный как раз для этого, и дадим читателям возможность попробовать его в деле, составить собственные списки слов, самые интересные из которых будут предложены всем пользователями Aword!
Читать дальше →

learnopengl. Урок 1.5 — Shaders

Reading time14 min
Views144K

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


В предыдущем уроке мы кратко коснулись темы “поверхностных шейдеров” и того, как их использовать. В данном уроке мы рассмотрим шейдеры подробнее и в частности шейдерный язык OpenGL (OpenGL Shading Language).

Information

Rating
Does not participate
Location
Брест, Брестская обл., Беларусь
Date of birth
Registered
Activity