VS2013 и Github

Team Foundation Server 2013 и Visual Studio 2013 “из коробки” научились работать с Github. Причем, работа эта ведется очень удобно.
Однако, при создании нового проекта в github есть нюансы. Здесь я опишу кратко как создать проект, исходный код которого будет храниться в github.

Для начала вам будет необходимо создать ПУСТОЙ репозиторий в Github:
1. Переходите на сайт github.com
2. Создаете репозиторий (кнопка “+” рядом с вашим именем)
3. В появившейся форме заполняете имя репозитория (обязательно) и описание (по желанию)
4. Нажимаете “Create repository”

Sic! Не надо ставить галочку напротив “Initialize this repository with readme” – это приведет к инициализации репозитория и из Visual Studio добавить проект в этот репозитоий уже не получится. Придется пользоваться другими средствами.

Теперь запустите Visual Studio 2013 и создайте тестовый проект. В окне создания проекта поставьте галочку напротив чек-бокса “Add to source control”:
github1

В окне “New Project” жмите “OK”. Вам будет предложен выбор системы хранения кода: TFS или Git. Создастся проект.

Теперь в source control в контекстном меню проекта вам будет доступно действие Commit в группе Source Control. Выполните свой первый коммит. Сейчас данные еще не отправились на сервер.

Для того, чтобы данные были на сервере вам необходимо выполнить Push:

  1. Переходим в Team Explorer
  2. Жмем на кнопку “Home” с изображением домика
  3. Теперь нажимаем на “Unsynced commits”. Отобразятся все коммиты, которые не были синхронизированы с серверомgithub1
  4. Нажимаете кнопку Sync и ваш исходных код отправляется на сервера github
  5. При выполнении первого push вам будет предложено указать URL вашего репозитория. Укажите URL репозитория, который мы создали ранее.

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

Windows Phone и сторонние сервисы

При разработке приложений для Windows Phone, использующих сторонние сервисы (например, клиент для ВКонтакте), нужно помнить, что не каждый проверяющий имеет аккаунт в социальной сети.

Если ваше приложение – клиент для какого-то сервиса или просто использует возможности стороннего сервиса необходимо при публикации его в Windows Phone Store указывать тестового пользователя. В первый раз найти где это сделать не так-то просто:
wps
1. На странице добавления XAP кликаете на “More XAP options” (на картинке обведено красным)
2. Появится еще одно текстовое поле (там, где на картинке большой красный восклицательный знак). Туда и пишите все, что вы хотите, чтобы знали проверяющие ваше приложение модераторы.

Windows Phone Developer Tools и Windows Server 2008

При попытке установить Windows Phone Developer Tools на рабочей машине под управлением Windows 2008 R2 обнаржул крайне неприятное сообщение о том, что данная ОС неподдерживается. Логичный вопрос: отчего же? Решил, что это не повод останавливаться в попытках заставить работать WP Tools на Win2008r2. Немного погуглив нашел решение. Нам потребуется:

  1. скачать Windows Phone Developer Tools web bootstrapper
  2. в консоли перейти в папку, куда был сохранен скачанный файл. Распакуйте его выполнив команду “vm_web.exe /x” (vm_web.exe – имя скачанного файла). Выберите папку, в которую будет распакован файл.
  3. откройте в проводнике Windows папку, в которую был распакован файл на шаге 2. Откройте любым текстовым редактором файл “baseline.dat”
  4. найдите раздел [gencomp7788]
  5. измените значение параметра InstallOnLHS с 1 на 0
  6. измените значение параметра InstallOnWin7Server с 1 на 0
  7. сохраните и закройте файл baseline.dat
  8. выполните в консоли “setup.exe /web” из папки в которую распаковали vm_web.exe на шаге 2.

Не забудьте ключ /web – иначе установка завершится ошибкой.

Fiddler & Windows Phone Emulator

Возникла необходимость отлавливать запросы, отправляемые моим приложением для WP7. По привычке запустив Fiddler обнаружил, что запросы, которые исходят от эмулятора он не видит. Грустно стало мне. Но решил все-таки разобраться с этим. К счастью долго думать не пришлось – решение нашлось достаточно быстро. Нужно всего-лишь:
1. Установить Fiddler 2.3.0.7.
2. Запустить Fiddler.
3. Выбрать в меню Tools раздел Fiddler Options.
4. На закладке Connections выыбираем Allow remote computers to connect box.
5. Жмем OK.
6. В поле QuickExec под списком всех запросов, вводим команду “prefs set fiddler.network.proxy.registrationhostname HostName” где HostName имя вашего компьютера.
7. Перезапускаем Fiddler.
8. Запустить (или перезапустить) эмулятор Windows Phone 7.
9. Откройте на эмуляторе Internet Explorer.
10. Вуаля! Трафик из эмулятора отображается в Fiddler.

В дополнение можно отфильтровать список запросов таким образом, чтобы отображались только те запросы, которые идут через эмулятор. Для этого
1. Зайдите на вкладку Filters
2. Выберите пункт Use Filters
3. В группе Client Process кликните напротив пункта Show only traffic from
4. В выпадающем списке найдите процесс с именем, похожим на “XDE:6768 – Windows Phone Emulator”.
Вот и все – теперь в списке отображаются только те запросы, которые вам необходимы.

WebClient и кэширование

Задача

Приложение для WP7 с WebClient для получения данных с url. При каждом обращении к данному url в браузере данные обновляются.

Проблема

Есть функция, которая должна при каждом ее вызове должна получать данные с определенного url:

void LoadRandomData() {
  WebClient wclientRandom = new WebClient();
  string url = "http://localhost/random.php";

  wclientRandom.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wclientRandom_DownloadStringCompleted);
  wclientRandom.DownloadStringAsync(new Uri(url));
}

void wclientRandom_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) {
  string result = e.Result;
  // делаем дела.
}

Но при получении данных программно из WP7 приложения данные возвращаются каждый раз одни и те же. То есть при вызове LoadRandomData() в e.Result всегда получали одну и ту же строку.

Решение

Решение оказалось до безобразия простым: добавляем случайный get-параметр и при каждом вызове будем получать новые данные:

void LoadRandomData() {
  WebClient wclientRandom = new WebClient();
  string url = "http://localhost/random.php?r=" + DateTime.Now.Ticks.ToString();

  wclientRandom.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wclientRandom_DownloadStringCompleted);
  wclientRandom.DownloadStringAsync(new Uri(url));
}

void wclientRandom_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) {
  // делаем дела.
}