Рубрика «Программирование» - 825

Постановка задачи

Цель этого цикла статей — показать, как работает OpenGL, написав его (сильно упрощённый!) клон самостоятельно. На удивление часто сталкиваюсь с людьми, которые не могут преодолеть первоначальный барьер обучения OpenGL/DirectX. Таким образом, я подготовил краткий цикл из шести лекций, после которого мои студенты выдают неплохие рендеры.

Итак, задача ставится следующим образом: не используя никаких сторонних библиотек (особенно графических) получить примерно такие картинки:

Краткий курс компьютерной графики: пишем упрощённый OpenGL своими руками, статья 1 из 6 - 1
Читать полностью »

Такой движок JS, как V8 (Chrome, Node) от Google, заточен для быстрого исполнения больших приложений. Если вы во время разработки заботитесь об эффективном использовании памяти и быстродействии, вам необходимо знать кое-что о процессах, проходящих в движке JS браузера.

Что бы там ни было — V8, SpiderMonkey (Firefox), Carakan (Opera), Chakra (IE) или что-то ещё, знание внутренних процессов поможет вам оптимизировать работу ваших приложений. Но не призываю вас оптимизировать движок для одного браузера или движка – не делайте так.

Задайте себе вопрос:
— можно ли что-то в моём коде сделать более эффективным?
— какую оптимизацию проводят популярные движки JS?
— что движок не может компенсировать, и может ли сборка мусора подчистить всё так, как я от неё ожидаю?

Пишем быстрый и экономный код на JavaScript - 1

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

Время от времени вдруг начинает хотеться именованных параметров в C++. Не так давно была статья, да и сам какое-то время назад писал на эту тему. И вот что удивительно — со времен той своей статьи я участвую в новом проекте без необходимости тащить за собой старый код, и как-то удивительным образом всего этого описанного собой же не использую. Т.е. в вопросе разобрался, восхитился перспективами… и продолжил работать по-старинке! Как же так? Лень? Инерция? Ответ постараюсь дать под катом.
Читать полностью »

Предисловие

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

Общая концепция текущей реализации

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

Стратегия расстановки кораблей следующая: 2-3-4 палубные размещаются по краям карты (2 клетки), 1-палубный в центре (квадрат 6х6).

image
Читать полностью »

Предисловие

Данная заметка не будет слишком уж объемной, а скорее даже наоборот, небольшой.

Достаточно продолжительное время я слежу за серией статей о языке D, публикуемой на Хабре. Ознакомившись с рядом источников, начиная от Википедии и заканчивая официальными руководствами по данному языку, пришел к выводу о целесообразности использования оного в своих научных проектах. Главный проект по докторской диссертации зашел в состояние тупика, требовал переработки (всплыл ряд механических вопросов). Переработку проекта и изучение нового для меня языка было решено совместить.

Сказано сделано — большая часть кода довольно быстро была перенесена с C/C++ на D. Не смотря на различные мнения по поводу D бытующие в среде разработчиков ПО, язык пришелся мне по вкусу.

Одна беда — в старом варианте проекта для задания параметров модели поезда и изменения логики работы без перекомпиляции использовался Lua-скриптинг. Те кто сталкивается с ним по роду деятельности знают, что существует хорошо разработанный и достаточно документированный API для разработки на C/C++.

Что касается Lua-скриптинга в D, то существует ряд проектов, например LuaD, привносящий в программы на D возможность работы с Lua. Однако LuaD рассчитан на предыдущую версию 5.1. Попадался мне проект и для 5.2 — DerelictLua, однако навскидку с «легкого пинка» завести его не удалось. При наличии времени можно разобраться, но времени как всегда нет. Пришлось напрячь мыслительные мощности и придумать более быстрое и простое решение. Если читателю интересно, что из этого вышло, добро пожаловать под кат.

Читать полностью »

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

Как я делал игру под KolibriOS - 1
Читать полностью »

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

Итак, в этой публикации вы не найдете ответы на следующие вопросы:
1. Что такое монада?
2. Где и как использовать монады?
3. Почему монады лучше, чем их отсутствие?
Читать полностью »


Вам тоже, как и актеру Джиму Парсонсу, хочется узнать, что делается за дверями секретных RealSense лабораторий Intel? Буквально через неделю вы сможете изучить эти технологии на собственном опыте.
Компания Intel приглашает на практический однодневный семинар Intel RealSense Hands-On Lab, который состоится 23 января в МосквеЧитать полностью »

С середины ноября по 31 декабря 2014 года мы в проекте KolibriOS проводили конкурс разработчиков игр. За полтора месяца нужно было написать новую игру для Колибри (или портировать свою собственную существующую). «Исходники» игры (включая все «ресурсы» — картинки, спрайты, звуки, музыку, если таковые имеются) должны были быть выложены на SVN проекта под одной из open-source лицензий. Игра должна была компилироваться из исходников с помощью системы авто-сборки Tup на сервере КолибриОС.

Всего на наш призыв откликнулись 7 человек, которые создали для конкурса в сумме 10 игр (один участник написал целых 3 игры, ещё один — 2 игры; остальные участники написали по одной игре каждый). Сегодня мы выносим эти игры на суд читателей Хабра, и просим вас проголосовать за наиболее понравившиеся. Чтобы поиграть в конкурсные игры, нужно скачать с сайта KolibriOS последнюю ночную сборку дистрибутива («Универсальный образ Flash/HDD» либо «Загрузочный компакт-диск LiveCD»). Игры находятся в папке /KolibriOS/games. Качать нужно русскую сборку, так как некоторые игры (имеющие исключительно русскоязычный интерфейс) присутствуют только в ней.

TL;DR: Если нет времени, возможности или желания читать все описания игр и играть в них самим, но всё равно очень хочется проголосовать, то можно посмотреть ролик с обзором игр от независимого блоггера Кирилла Лейфера, и оценить игры на основании ролика:

Читать полностью »

Короткое предисловие

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

Пример

// Сочетания по 3 из 52
for (int i1 = 0; i1 < 50; ++i1)
  for (int i2 = i1+1; i2 < 51; ++i2)
    for (int i3 = i2+1; i3 < 52; ++i3)
      // ...

Индекс сочетания

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

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


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js