Алгоритми пошуку шляху — невід'ємна частина розробки ігор. А також різних систем навігації, орієнтації і багато чого ще. Але ми зосередимося саме ігрової індустрії і алгоритмах, які в ній застосовуються.

Кожен ігровий розробник стикається із завданням, в якій потрібно змусити персонажа(або бота) пройти з однієї точки в іншу, при цьому не зібравши всі стіни. А розробникам стратегій ще потрібно враховувати прохідність клітин(дороги, болота, ліси і так далі). Ось тут на допомогу приходять на допомогу алгоритми пошуку шляху.

image

Читати далі →


Поки у всьому світі обговорюють 89-ту церемонію вручення нагород премії «Оскар» і складають різні рейтинги акторів і їх костюмів, ми вирішили підготувати оглядову статтю в IT-сфері. Мова піде про найбільш цікавих помилках, допущених у проектах з відкритим вихідним кодом в 2016 році. Цей рік був примітний тим, що наш аналізатор PVS-Studio став доступний і в операційних системах, заснованих на Linux. Представлені помилки напевно вже виправлені, і кожен читач може переконатися в серйозності помилок, які допускають розробники.

Читати далі →

Вступ
Нещодавно при роботі над проектом навчальної практики виникла потреба з свого коду породжувати довільний процес і одночасно читати його stdout і stderr. Так як додаток пишеться виключно для linux, я вирішив заодно розібратися з epoll. Для запуску процесу на просторах інтернету була знайдена маленька бібліотека, робить саме те, що потрібно, та ще й обертаюча введення-виведення в звичні потоки із стандартної бібліотеки (мова про <iostream>).

Озброївшись кількома статтями про epoll, я вже було збирався писати код, якщо б не одне «але» — для epoll потрібний доступ до «сирим» файловим дескрипторам, а автор бібліотеки не надає public-доступу до них. Методи класу, повертають дескриптори, приховані під грифом «protected».

Що робити?
Найпростішим було б виправити код бібліотеки і перемістити потрібні методи public-секцію, ще краще було б форкнуть бібліотеку і реалізувати необхідний функціонал самому. Але перше було б негарно і обіцяло б конфліктами при оновленні бібліотеки, а друге зайняло б занадто багато часу на розбір коду бібліотеки і подальше тестування під кількома різними *nix-системами.

Тому в голову прийшла божевільна третя думка: чому б не спробувати як-то гарно «зламати» ООП і «легально» отримати доступ до protected-методом без втручання у вихідний код бібліотеки? Про те, які виникли перепони на цьому шляху і як допоміг C++14 в їх подоланні, і піде розповідь у даній публікації.

Читати далі →

Здравствуйте, дорогі мешканці Хабра! У цій публікації (а, швидше за все, і циклі) я розповім про мою реалізації одного з алгоритмів шифрування. Чому про реалізацію? Тому що ідея не нова, і стверджувати те, що задумка належить саме мені, не можна. Але спосіб досить цікавий, тому дізнатися про нього варто.

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

Читати далі →

image
зрештою, я повинен був до цього прийти. Коли я опублікував статтю «Я написав швидку хеш-таблицю», а потім ще одну — «Я написав ще більш швидку хеш-таблицю». Тепер я завершив роботу над самою швидкою хеш-таблицею. І під цим я розумію, що реалізував самий швидкий пошук порівняно з усіма хеш-таблиць, які мені вдалося знайти. При цьому операції вставки та видалення також працюють дуже швидко (хоча і не швидше конкурентів).
Я використовував хешування за алгоритмом Robin Hood з обмеженням максимальної кількості наборів. Якщо елемент повинен бути на відстані більше Х позицій від своєї ідеальної позиції, то збільшуємо таблицю і сподіваємося, що в цьому випадку кожен елемент зможе бути ближче до своєї бажаної позиції. Схоже, такий підхід дійсно добре працює. Величина Х може бути відносно невелика, що дозволяє реалізувати деякі оптимізації внутрішнього циклу пошуку по хеш-таблиці.
Якщо ви хочете тільки спробувати її в роботі, то можете завантажити звідси. Або прокрутіть вниз до розділу «Вихідний код і використання». Хочете подробиць — читайте далі.
Читати далі →

Вже більше року, як у мене є свій хобі-проект, в якому я розробляю движок бази даних для зберігання тимчасових рядів — dariadb. Завдання досить цікава — тут є і складні алгоритми та й область для мене зовсім нова. За рік було зроблено сам движок, невеликий сервер для нього і клієнт. Написано все це на С++. І якщо клієнт-сервер знаходиться поки що на сирому стані, то движок вже знайшов деяку стабільність.Завдання зберігання тимчасових рядів досить поширена там, де є хоч якісь вимірювання (від SCADA-систем до моніторингу стану серверів).
Читати далі →

У минулій публікації я згадав, що мій SBC для експериментів поліг смертю хоробрих. Само собою, постала проблема нового піддослідного.

Простий одноплатник мені якось не хотілося купувати, тому вибір мій упав на SoC'в. Вибирав я між Zynq і Cyclone V. По назві теми, думаю, здогадалися, що ж я вирішив вибрати.



Дана публікація буде складатися з невеликого огляду хустки з великої картинки і того, як «програмувати» і «конфігурувати» подібне залізо. Кому це цікаво прошу під кат.

Читати далі →

Доброго часу доби! Сьогодні я поділюся досвідом розробки програми для контролера ROBO TX від німецької фірми Fischertechnik. Можливо, на даний момент він не є топовою моделлю, однак базові принципи, які я збираюся описати далі, можуть бути корисні юним розробникам, які зіткнуться з контролерами цього виробника.

Контролер ROBO TXimage

Даний контролер в основному призначений для конструювання простих роботів з метою навчання. У комплекті йде графічна середовище програмування, яка допомагає закласти в нього прості алгоритми. Також хлопці з російського представництва Fischertechnik підказали, що є динамічна бібліотека c API від творців, яка надає повний контроль і дозволяє вирішувати необхідні завдання більш гнучко вже шляхом розробки власного софта, що як раз і сталося в моєму випадку.

Читати далі →