Saturday, November 27, 2010

“Navigation is already in progress” exception on Windows Phone 7.

It is a common situation when you need to navigate to a page in Windows Phone 7 application. Usual approach is to have a button with Click event handler attached to it. In the event handler we need to use NavigationService.Navigate() method and pass a URI of the page we want navigate to:

private void btnPage1_Click(object sender, EventArgs e)
{
   NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
} 
Most of the time it works perfectly but sometimes, if we managed to click the button several times, most likely we will get “Navigation is already in progress” exception. Especially this is a case if the page which we are navigation to is performing some long-time operations in the UI thread.
To resolve the problem we need:
  1. Move all long-time operations (calculations, data layer access etc.) away from the UI thread and run them in a separate thread.
  2. Ensure that NavigationService.Navigate() can be called only once.
While 1) is very specific 2) is quite common and one of the possible solutions is described below.
What you need to do is just to introduce new local variable and to handle Navigating and Navigated events of NavigationService:

private bool _navigationInProgress;

private void btnPage1_Click(object sender, EventArgs e)
{
   NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
}

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
   if (_navigationInProgress)
      e.Cancel = true;
   _navigationInProgress = true;
   base.OnNavigatingFrom(e);
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   base.OnNavigatedFrom(e);
   _navigationInProgress = false;
}

UPD: Thanks to Ilya Troitsky, who suggested to handle this issue in UI thread without even calling Navigate method if previous navigation hasn't finished yet:

private bool _navigationInProgress;

private void btnPage1_Click(object sender, EventArgs e)
{
   if (_navigationInProgress)
      return;
   _navigationInProgress = true;
   NavigationService.Navigate(new Uri("/Page1.xaml", UriKind.Relative));
}

protected override void OnNavigatedFrom(NavigationEventArgs e)
{
   base.OnNavigatedFrom(e);
   _navigationInProgress = false;
}

Both approaches work fine (tested on a WP7 device).

Thursday, November 25, 2010

Prayer Times for Windows Phone 7

I was working on this application in my spare time last month. After several attempts to comply with Microsoft’s specifications, I managed to get through their certification process and finally it was published on their marketplace.
"Prayer times" application displays Muslim prayer times for any location in the world. Users can use either Geo location service or select their current location from the list of predefined locations. Direction to Kaaba is shown as well.






Tuesday, November 23, 2010

Помните, скоты, что вы люди и должны сквозь темный мрак действительности устремить взоры в беспредельный простор вечности и постичь, что все здесь тленно и недолговечно и что только один Бог вечен…

Фельдкурат Отто Кац.
«Похождения бравого солдата Швейка»

Friday, November 19, 2010

Isle of Dogs. Ферма Mudchute

   В прошлые выходные всей семьей ходили на ферму Mudchute city farm, которая находится недалеко от моей работы – на собачьем острове (Isle of Dogs). Да именно на ферму. В Лондоне есть несколько ферм (около десятка), на которых реальные фермеры разводят всякую живность. Обычно такие фермы примыкают к паркам, и используются для того, чтобы знакомить «парниковых» жителей британской столицы с живой фауной, пусть даже в ее одомашненной ипостаси.
   Практически при каждой ферме есть магазин, где можно купить фермерских яиц и мяса, а еще фермерская «кухня» - где можно отведать все это, приготовленное по традиционным английским рецептам. Также школьники соответствующего боро (округа), могут добровольно вкалывать на ферме - получается что-то вроде российских юннатов. Правда, тут им за это платят деньги.:)
   Доступ к фермам – свободный, для всех желающих. Разрешают трогать и кормить животных, всем все рассказывают, в общем, выходит довольно интересно.
   Больше всего поражает контраст – бараны на фоне небоскребов :).

Sunday, November 14, 2010

1001 изобретение

   Видео - наглядное объяснение того, чем занимались мусульмане в средние века.
   Для одних это было темное время - милосердные и высоконравственные христиане кромсали друг дружку и близлежащих соседей и разводили антисанитарию, заявляя, что мыться чаще, чем раз в год это грех. Священники вели диспуты на тему «Имеет ли женщина душу?» и во «славу» Бога сжигали этих самых женщин на кострах. Любой грамотный, т.е. умеющий с трудом читать по слогам и выводить каракули как курица лапой, брался под особый контроль - как бы ни вышло чего. Ну и так далее.
   В это же самое время дикие и некультурные мусульмане систематизировали то, что им досталось от римлян, греков и индусов, и заложили базис современной науки, изобретя кучу всего нового. Угнетенные и бесправные мусульманские женщины тоже, как ни странно внесли большой вклад в общее дело. Практически каждый шкед в пределах халифата мог читать и писать, строились финансируемые государством университеты и снаряжались научные экспедиции.


   Некоторые, особо привередливые, могут спросить: «Почему же сейчас мусульмане такие оборванцы и в массе своей безграмотны и дремучи?». Отвечаю. Все потому, что первые поколения мусульман на первое место ставили Ислам и неукоснительно следовали его канонам, к которым, в частности, относится придание огромного значения знаниям и учебе. Последующие поколения отошли от Ислама, развалили халифат и в настоящее время сидят на подачках Запада. Simple like that.
   Кстати, вот ссылка на сайт, на котором собрано наследие мусульманской научной мысли, оказавшей существенное влияние на современный мир.
   Изначально увидел это видео у брата Олега в его журнале «К арабам», там оно было с русскими субтитрами, но сейчас почему-то недоступно (хостилось на рутубе).

Thursday, November 11, 2010

О практическом применении булевой алгебры в повседневной работе программиста

   Вчера на работе понадобилось написать сложное условие, зависящее от семи переменных. Вроде ничего такого, но больно уж сложными были внутренние зависимости между переменными, т.е. если x1 ИСТИНА И x2 ИСТИНА, но при этом x3 ИЛИ x6 ЛОЖЬ, то результат будет ИСТИНА. Т.е. очень все мозгодробно. Сел, было, я писать это в лоб, ветвистыми if-ами, и тут меня торкнуло - в мозгу всплыло: «Совершенная дизъюнктивная нормальная форма». Точно!
   Построил таблицу истинности, вывел из нее длиннющую СКНФ, затем, пользуясь правилом Де Моргана и другими логическими операциями, упростил ее и получил вменяемую булеву функцию. Быстренько нарисовал на бумажке логическую схему полученной функции и вручную прогнал через нее основные строки таблицы истинности. Потратив на все про все около 15 минут, и получив вместо простыни неудобоваримого кода, одну красивую строку, я понял, что не зря Аюб Акбашевич влепил мне трояк по дискретной математике, и не зря я её (дискретку) потом ботал для пересдачи. Совсем не зря, хотя в то время так не казалось.

Wednesday, November 10, 2010

Год в Великобритании

   Уже прошел год, с тех пор как я приехал в Великобританию. Как сейчас помню, 7 ноября 2009, ранее утро, аэропорт Хитроу и я с тремя чемоданами. У меня было состояние слегка измененного сознания, потому что я сильно недосыпал несколько дней перед отлетом.
   Вечером 5-го ноября, я съехал со съемной квартиры в Ясенево, с тремя чемоданами вещей, и на такси отправился к двоюродному брату. Все остальные вещи и мебель были заблаговременно переправлены в Махачкалу или розданы друзьям/родственникам. Девочки тоже уже добрались до Махачкалы и ждали, пока я устроюсь в Лондоне, чтобы их вызвать.
   В ночь с 5-го на 6-е, мы долго общались и легли очень поздно. При этом было очень непросто заснуть, несмотря на усталость - сказывалось волнение.
   6-го ноября, я проснулся около 6-ти утра, это был мой последний день перед отъездом, и надо было еще сделать массу дел. Я бегал по городу весь день. Виделся с бывшим работодателем, заезжал в поликлинику, пытался поменять рубли на фунты, но не смог, поменял на евро. По пути обзванивал всех, с кем не успел попрощаться лично. Ближе к вечеру (уже стемнело, и шел снег) я заехал попрощаться к Аризиным родственникам и попал на варенную баранью голову, которую не ел уже лет сто. Потом вернулся к брату, а там уже собрались все родные и близкие, и устроили мне импровизированные проводы. Все разошлись поздно, и мы легли около 12, чтобы проспав 2 часа встать с братом и отправиться в аэропорт. Мой вылет был в 5 утра из Домодедово.
   После регистрации, на которой мне пришлось заплатить за багаж больше чем за билет, мы сели в кафе – попить чаю, и тут на меня накатило. Куда я еду? Тут все мои друзья и родные, все понятно и знакомо. Да, все не идеально - везде коррупция и вообще театр абсурда но, в конце концов, жить можно, вон и в Сомали люди живут. Начавшийся было мандраж быстро прошел, т.к. надо было уже проходить паспортный контроль. Сонный пограничник даже не поинтересовался, куда и зачем я еду, просто шлепнул печать и протянул мне мой паспорт.
   В самолете меня окатило холодной волной, когда я понял, что я почти не понимаю стюардесс. Я еще не знал, что это и есть тот самый знаменитый лондонский «кокни». Четыре часа полета, я провел в лихорадочном возбуждении. Мы подлетали к Лондону на рассвете, и самолет летел прямо через центр британской столицы. Вестминтсер со своим Биг-Беном, ранее виденный только по телевизору и на картинках, был как на ладони. В общем, это было завораживающее зрелище.
   На таможне, любезная дама пограничник задала пару вопросов общего характера и предупредила, что мне необходимо зарегистрироваться в полиции в течение семи рабочих дней. Шлепнула в паспорт и на визу кучу печатей и со словами «Welcome to the United Kingdom» вернула его обратно.
   Я замучался со своими тремя чемоданами и в своей «аляске» при плюсовой температуре. Пришлось изрядно попотеть. Выйдя из здания аэропорта, я остановился перевести дух, и тут накатила вторая волна. «Что я здесь делаю? Куда я приехал? Зачем?» - спрашивал я себя. Но это все было, видимо от недосыпания - через пару минут прошло.
   Наивный чукотский юноша, я думал, что поеду до снимаемой комнаты на метро, но вовремя одумался и взял кэб, который обошелся мне в 80 фунтов. Я тогда не совсем понимал, что это бешеные деньги :). Кстати, изрядную часть евро, я перевел в фунты прямо в аэропорту. Я понимал, что теряю на этом, но хотел сразу расплатиться с хозяином комнаты за месяц вперед, чтобы уже не дергаться.
   Сейчас я понимаю, как мы ехали, но на то время, в голове отпечатались только какие-то куски маршрута, которые я идентифицировал позднее. Но все было как в сказке, город, залитый утренним солнцем, все такое яркое и радостное.
   На новом месте я устроился без проблем. Сразу распаковался, подключился к точке доступа, и позвонил своим, чтобы успокоить. Вышел на улицу, купил комплект постельного белья в ближайшем Праймарке и продуктов на неделю вперед в Моррисонзе, принял душ и завалился спать. В обоих магазинах я не понимал продавцов, а они не понимали меня.
   Этот кокни заставил меня сильно попотеть первое время. Многие британцы говорят на кокни, особенно это касается людей ниже среднего класса. Изначально на нем разговаривали грузчики в доках стописят лет тому назад, а потом он перекинулся и на остальных. Кокни - это такой непередаваемый сленг, когда: а) слова искажаются до полной неузнаваемости, б) полностью подменяется их смысл.
   Конечно, в России тоже есть нечто подобное, только наш сленг корням уходит в зону. Я не могу представить себе иностранца, в совершенстве знающего литературный русский, который сможет понять следующую фразу: «Кааоче, эта хрень присабачивается сюдыма, а ту фигню мы засандалим по самое не балуй вон тудыма. И сё бу ништяк». Вот кокни – это нечто подобное, только на английском. Первое время я невообразимо страдал от того, что ничего не понимаю. Но к чести британцев, надо отметить, что если они видят, что человек не понимает, они будут пытаться объяснить другими словами и могут по несколько раз повторять, пока человек не поймет.
   Хорошо хоть не все рекрутеры говорят на кокни, и поиски работы не вызывали больших проблем. Да, пару недель было трудно привыкнуть к британскому (не кокни) акценту, но потом стало легче.
   Еще, в первый день, меня чуть два раза не сбила машина, т.к. здесь ездят по другой стороне дороги, хотя, по мнению британцев, это все остальные ездят не по той стороне. Первые два месяца я по нескольку раз смотрел в обе стороны, прежде чем переходить дорогу.
   Кроме того первые месяцы, я таскал в кармане минимум сотню фунтов, т.к. никак не мог отвыкнуть от крупных российских купюр. Было странно, что можно выйти с десяткой в кармане, и это немалые деньги – примерно 500 р.
   Прошел год. Хвала Всевышнему, мы закрепились в этой стране. Я нашел замечательную работу, которая мне очень нравится. Я работаю в прекрасном интернациональном коллективе, над интересными проектами. Ребенок ходит в pre-school и уже трещит по-английски, и у нее потихоньку появляются здесь подруги. Ариза учит язык и думает поступать в колледж, чтобы конвертировать российского экономиста во что-то более востребованное на британском рынке.
   Здесь нет многих раздражающих вещей, мешающих жить в России. Нет взяток, нет необходимости носить с собой документы. На улицах относительно безопасно даже глубокой ночью. Общество открыто и толерантно. Ты все равно свой, даже если не такой как все.
   Конечно, здесь не все идеально. Улицы не очень чистые, в Москве, к примеру, чище. Наркота и бухло здесь тоже проблема, правда, не такая острая. Есть еще армия безработных, сидящих на пособиях и даже не думающих с них слезать, но новое правительство решило это дело исправить. Если в Москве всю грязную и неквалифицированную работу делают таджики, то здесь это прибалты, причем из низших слоев тамошнего прибалтийского общества со всеми вытекающими (кстати, как и таджики в Москве, они ведь тоже не из профессорских семей). Здесь нет такого обилия магазинов как в Москве, и что-то купить несколько сложнее. Например, крупно-листовой черный чай можно купить только в специализированных магазинах, про зеленый чай я вообще молчу. В общем, есть и свои минусы, но плюсов существенно больше.
   Я ни разу не жалею о том, что в 2006 решил рвануть на Запад. Со временем эта решимость только укреплялась, и наконец, в 2009 вылилась в эмиграцию. Пока нас здесь все устраивает и я очень доволен. Надеюсь, что дальше будет только лучше. Амин.