Домашний марсоход

Еще позавчера он нарезал свои самые первые круги по моей комнате, а сегодня на него уже повесили хитровыдуманные датчики и показывают инвесторам. Как же быстро растут дети! 🙂

IMG_2596

Решение проблемы с неудаляемыми играми

Существует официальный баг в Game Center API, когда из списка не удаляется GKTurnBasedMatch. Баг достаточно распространенный, он происходит главным образом тогда, когда активный участник покидает игру (вызов participantQuitInTurnWithOutcome:…) и удаляет ее из своего списка матчей. Игра получает какое-то неверное состояние, после чего остальные игроки не могут ее удалить из списка. Причем не могут как из интерфейса матч-мэйкера, так и вызовом removeWithCompletionHandler:… Возвращается ошибка номер 17 (Error=17) о том, что какие-то параметры заданы неверно. При этом сам матч может иметь уже статус завершенного GKTurnBasedMatchStatusEnded!

Как я уже отметил, Apple призналась в баге, но не исправила до сих пор.

Баг замечен, например, в игре Ой Ё. Об этом было сказано в их блоге. Мы тоже достаточно быстро столкнулись с этой проблемой, и она висела нерешенной почти два месяца. Тут, наконец-то, изучая многочисленные форумы мне удалось найти решение.

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

Вот код:

- (void) removeGameFromGC
{

    [_match removeWithCompletionHandler:
     ^(NSError *error) {
         if(!error)
         {
             DLog(@"match removed!");
         }
         else
         {
             [self reportError:error];

             GKTurnBasedParticipant *nextParticipant = nil;
             for (GKTurnBasedParticipant *participant in _match.participants)
             {
                 participant.matchOutcome = GKTurnBasedMatchOutcomeTied;
                 if(![TurnBasedHelper isHeLocal:participant.playerID])
                     nextParticipant = participant;
             }

             [_match endTurnWithNextParticipants:@[nextParticipant]
                                     turnTimeout:GKTurnTimeoutDefault
                                       matchData:nil
                               completionHandler:
              ^(NSError *error)
              {
                  if (error)
                  {
                      [self reportError:error];
                  }

                  [_match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit
                                        withCompletionHandler:
                   ^(NSError *error)
                   {
                       if (error)
                       {
                           [self reportError:error];
                       }
                       [_match removeWithCompletionHandler:^(NSError *error)
                        {
                            if (error)
                            {
                                [self reportError:error];
                            }
                        }];
                   }];
              }];
         }

     }];
}

Игра Study Maths

ТЕМА НА GAMEDEV.RU

Мне лень писать что-то, так что копирую оттуда.

Всем привет.
Мне тут вздумалось погрузиться в дебри нейросетей и запилить быстренько приложение, которое позволяет распозновать рукописные (нарисованные на сенсорном экране пальцем или еще чем-то) цифры. Самая простая идея: игра – обучение/тренировка арифметике. Игроку предлагается некий простенький пример, он решает его и пишет ответ, система распознает и говорит «верно»/»неверно». Можно еще добавить очки или ограничить время. Тут недавно была похожая тема, но у меня акцент именно на рукописном способе ввода.

Название: Study Maths (рабочее, возможно, сменится)
Жанр: обучающая головоломка
Начало разработки: 19 февраля 2013 года
Текущий статус: есть демка с базовым функционалом
Язык, API: Obj-C, Cocos2D-iPhone

Пока поддерживаются операции сложения (от 0 до 19), вычитания (без отрицательных), умножения (до 10 * 10), деления (на ноль нельзя!).

На алгоритм распознавания потратил очень много времени: почти неделю. Но пока он далек от совершенства. Я использую 5 слойную сверточную нейросеть, наученную на базе рукописных цифр (MNIST, 600000 цифр). Отсюда вытекает главная проблема: в базе цифры написаны ручкой на бумаге, потом отсканированы. У меня же они пишутся пальцем на экране, рендерятся в текстуру и идут на нейросеть. После нейросети есть еще пара хаков: например, моя рукописная 6 всегда почти распознается, как 5. Пришлось использовать некоторые свойства кривых, чтобы различать их. И то, не всегда успешно. Также алгоритм разделения кривых на цифры, который я придумал сегодня утром, иногда сбоит и нуждается в явной доработке. Хочу добавить еще знаки «+» и «-«, позже «.».

Еще есть концептуальная идея прикрутить к этому делу CMU Sphinx и какой-нить text-to-speech, получим, таким образом, и чисто голосовой вариант. Игра читает игроку пример, игрок отвечает голосом, получает одобрение или наоборот. Обязательно попробую в скором времени, если пойдет гладко (справлюсь менее, чем за неделю), то 100% включу в проект.

Дневник разработки:
19.02.2013 Начало

26.02.2013 Добавлена озвука примеров и результата на аглийском Flite text-to-speech

27.02.2013 Добавлена поддержка распознования голоса (см. видео со звуком):

К сожалению, результат меня сильно не устраивает. Слишком мала точность, требуется тишина, трудно сделать русский язык, приложение очень сильно разбухает в объеме. Так что в первом релизе скорее всего распознования голоса не будет. Я пока не знаю, как улучшить распознования голоса, т.к. использую сторонний API.

Распознование рукописных цифр на iPhone

Фуф! Наконец-то, я добился того, чтобы оно работало более менее нормально. Итак, распознавание рукописных цифр на iPhone. Используется 5-слойная сверточная нейронная сеть.  Сеть натренерована на базе MNIST, которая содержит 60000 образцов рукописных цифр (на каждую, вроде бы, итого 600000). Вдохновлялся этой статьей. Сеть написал сам, но тренеровал ее программой из статьи. Пришлось поднять виртуальную WinXp, поставить на ней VC++ 6, собрать проект, дописать нормальный экспортер данных (по умолчанию был на MFC – CArchive, который вообще некорректно работал и не загружал тестовые данные). Очень долго шло обучение, понадобилось несколько часов. И оно все еще идет… Я периодически скидываю дамп нейросети себе в проект.

Конечно, результат далек от совершенства. Например, эта сеть отказывается воспринимать мою цифру 6, всегда говорит 5. Пришлось писать специальный твик (по-русски – костыль), которые анализирует кривую и по некоторым статистическим данным различает шестерку и пятерку. У программы много параметров, и мне предстоит с ними еще поиграться, чтобы достичь максимальной точности. Планирую скрестить несколько алгоритмов и заставить их работать, как суд присяжных.

Свидетельство на Resonator Studio

 

СвидКольцов2 Еще одно свидетельсво прислали, на этот раз на Resonator Studio (это такая программа для расчета открытых лазерных резонаторов, я написал ее в рамках своего диплома в ННГУ). Теперь у меня два оффициальных документа, что я умею хэллоувердить 😎

Картинка кликабельная, можно посмотреть в полном формате.

 

Свидетельство о регистрации Rays

СвидКольцов  Вот, наконец, сделали одно из двух свидетельств.

Вышла моя первая статья на Хабрахабре

Грац мну. Вышла моя первая статья на ресурсе Хабрахабр.

Она называется:

Изменение кода программы во время ее выполнения на примере Common Lisp

Посвящена она программированию на Common Lisp, в ней рассказывется, как написать полностью программируемый в рантайме командный процессор.

UPD: оппа, он даже побывал на главной.

Лаптичка: к взлету готов

А как вам такое? ) Ми щаслив, правда!

Промокоды лучшим друзяшкам будут.

А вот и ссылки:

Laptichka (iTunes)

Сайта Лаптички (на англ.)

Twitter Лаптички

[singlepic id=785]

Отправил первую программу на ревью

Ну, ребятки, понеслась!

[singlepic id=778]

Нужно игре еще страничку запилить за неделю.