Метка «c++» - 56

Представьте на минутку обычного программиста. Допустим, его зовут Вася и ему нужно сделать анимированную менюшку на сайт/десктоп приложение/мобильный апп. Знаете, которые выезжают сверху вниз, как меню у окна Windows или меню с яблочком у OS X. Вот такое.

Начинает он с одного выпадающего окошка, тестирует анимацию, выставляет ease out 100% и наслаждается полученным результатом. Но вскоре он понимает, что для того, чтобы управлять менюшкой, хорошо бы знать закрыто оно сейчас или нет. Мы-то с вами тут программисты опытные, все понимаем, что нужно добавить флаг. Не вопрос, флаг есть.

var opened = false;

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

var opened = false;
var animating = false;

function onClick(event) {
  if (animating) return;
  if (opened) close();
  else open();
}

Через какое-то время Васе говорят, что меню может быть полностью выключено и неактивно. Не вопрос! Мы-то с вами тут программисты опытные, все понимаем, что… нужно добавить ЕЩЕ ОДИН ФЛАГ! И, всего-то через пару дней разработки, код меню уже пестрит двустрочными IF-ами типа вот такого:

if (enabled && opened && !animating && !selected && finishedTransition && !endOfTheWorld && ...) { ... }

Вася начинает задаваться вопросами: как вообще может быть, что animating == true и enabled == false; почему у него время от времени все глючит; как тут вообще поймешь в каком состоянии находится меню. Ага! Состояния... О них дальше и пойдет речь.

Знакомьтесь, это Вася.

Простые стейт машины на службе у разработчика
Читать полностью »

ASP.NET — машина времени в помощь разработчику

Если вам приходится разрабатывать систему подписок, биллинга или что-то другое оперирующее временными отрезками, то вам довольно скоро придёт в голову идея, что неплохо было бы иметь возможность менять текущее время для разрабатываемой системы. Ведь это значительно облегчит вам её тестирование (интеграционное как минимум). Менять системное время буквально — муторное занятие. Так давайте подумаем о том, как лучше реализовать «машину времени» для вашего сайта.Читать полностью »

Писать на C++ расширения для PHP приходится не так чтобы очень часто, но когда приходится — обнаруживается, что публикаций и документации на эту тему не так уж и много. Особенно, если копнуть поглубже. Опишу несколько интересных моментов, которые мне пришлось выяснять «на своей шкуре».

Неожиданные сложности подстерегают нас при вызове из кода расширения (которое, напомню, мы пишем на C++) PHP-функций. Для этого предусмотрена функция call_user_function_ex, пример использования которой найти не так уж сложно; проблемы возникают, если вынести ее вызов из C++'ной функции, которая вызывается из PHP. Объявляются такие функции следующим образом:

ZEND_FUNCTION(MyFunction) { … }

После вынесения вызова call_user_function_ex за ее пределы, наше расширение перестает компилироваться.
Разгадка (и решение проблемы) кроются, конечно же, в определении макроса ZEND_FUNCTION, который добавляет к определению функции пару параметров. Нам ничего не остается, кроме как передать их той функции, откуда мы хотим обратиться к PHP. Выглядеть это будет так:
Читать полностью »

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

Полный взвешенный граф из 500 вершин задан матрицей смежности.
Необходимо найти гамильтонов цикл в этом графе как можно меньшей суммарной стоимости.
Читать полностью »

IIS — изменяем размер картинок на лету Почти в каждом веб-проекте мы сталкиваемся с задачей показывать те или иные изображения в разных размерах. Всё просто — изображение должно показываться в размере, требуемом контекстом. Если вы разрабатываете каталог с разными представлениями, то таких контекстов может быть много. А возможно, что потребуется сделать размер картинки адаптивным по отношению к размеру окна браузера (например, так делают Picasa Web Albums).

Я расскажу о способе решить эту проблему раз и навсегда.Читать полностью »

Игру для Kinect, от нечего делать

В далёком уже 2010 году, появился на свет Kinect от Microsoft. Но, к счастью или нет, новость о чудо-сенсоре меня не «зацепила». Вспомнил, а точнее напомнили мне о нём спустя год, когда появилась мысль о приобретении, как оказалось, стильного пыле сборника – Xbox 360 Slim. Хоть и включается консоль только во время пьяных вечеринок, положительных эмоций и весёлых видео оставляет после себя не мало. Но наигравшись в стандартные Adventures и Joy Ride, в голову взбрела идея о создании собственной игры для Kinect-а, как оказалось, всё довольно просто…
Читать полностью »

в 21:26, , рубрики: c++, Программирование, метки:

Предистория

Советы по C++
За 2 года, я прочитал очень много книг по C++. Лучшим вариантом запоминания информации считаю ведение конспектов.
Несколько дней назад я остался без компьютера и интернета. Чтобы не тратить время впустую решил пересмотреть все свои записи. В тот момент ко мне и пришла идея сервиса, о котором я расскажу ниже.
Читать полностью »

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

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

image
Так как это мой первый пост, то расскажу что уже довольно долго занимаюсь программированием игр на C++. Иной раз, окинув взглядом мое творение, я ужасаюсь. Виной тому шаблонное программирование — настолько запутанное и уродливое. Но, может существует более правильный и красивый путь? Многие пытаются ответить на этот вопрос и ищут альтернативу C++ в области «generic programming»… Я к примеру, перепробовала C#, Java, Python, JavaScript. Уже было решила писать на Lisp'е с его CLOS моделью, но тут я наткнулась на язык D, о нем и пойдет речь под катом.
Читать полностью »

Как известно, в программном интерфейсе приложений для магазина Windows (Windows Store apps) отсутствуют многие функции работы с потоками, начиная с CreateThread() и заканчивая работой с TLS ключами. И это отличный повод перейти от параллелизма, основанного на системно-зависимых потоках к параллелизму, основанному на задачах. Данный пост излагает пошаговую инструкцию о том, как написать простейший многопоточный пример, который проходит аттестацию для магазина Windows (Windows App Certification Kit validation) и, гипотетически, может быть масштабирован до игрушек космического масштаба. А поскольку используется кроссплатформенная библиотека Intel® Threading Building Blocks (Intel® TBB, TBB, threadingbuildingblocks.org), то вычислительная часть может быть легко перенесена на другие платформы, и задача будет заключаться только в том, чтобы нарисовать новый красивый графический интерфейс.
Читать полностью »


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