Марь-Ярское небо августа

 

Словами не передать. Небо августа в далеке от мегаполисов, без засветки просто прекрасно. Бесчисленные звезды: большие и маленькие, Млечный Путь, прямо видишь себя в космосе, чувствуешь, как вращается галактика!

К сожалению, фотограф из меня не очень, откровенно говоря совсем криворукий. А, может быть, оборудование у меня не очень. Например, без пульта BULB никак не получается, только если держать вручную кнопку, как результат – смазывание.

Stars

Jaguar Land Rover Road Show 2013

Гоняли в субботу на Ягуарах и Лэнд Роверах по Нижегородскому кольцу! Масса эмоций! Сначала на Дискавери 4 по крутым препятствиям: камням, горке 35º и спуск в бассейн. Потом нас прокатил профессионал по гоночной трассе на Ягуаре. Это была жесть! Американские горки отдыхают! Визг шин и адские перегрузки! Еще ездили на Эвоке.
А еще куча бесплатной хавки =) День удался 🙂

[nggallery id=22]

Трололо от Blackmore’s Night

Концерт был как всегда потрсающий!

Если в прошлый раз их клавишник исполнил пародию на Леди Гагу, то в этот раз на Эдуарда Хиля «Я очень рад, ведь я наконец возвращаюсь домой» (она же Трололо).

Я умудрился протащить на концерт зеркалку и отснять кучу роликов пока у меня не кончилась карта памяти!

А еще пожал руку их загадочному басисту 🙂

Тириноксовы новости на серидину лета

Времени как всегда мало, действовать будем быстро!

Краткая сводка новостей:

  • Тиринокс вставил зубы! Было больно, но сейчас ничего вроде. Даже прикольно!
  • Тиринокс сдал документы на военный билет и на загранпаспорт. Все прошло на удивление гладко!
  • Тиринокс постригся (впрочем ничего концептуально нового)
  • Тиринокс купил iPad 4 и Дремель
  • Тиринокс купался 1 раз
  • Тиринокс ездил в Москву 1 раз

IMG_1698

  • Тиринокс посетил концерт Blackmore’s Night 1 раз

IMG_1766

  • Тиринокс выпил мохито 4409453731 раз (цифры не проверены)

А еще мы поменяли машину на Land Rover Freelander 2.

IMG_2298

2

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

Существует официальный баг в 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];
                            }
                        }];
                   }];
              }];
         }

     }];
}