вторник, 19 июля 2011 г.

Visual Studio: когда Clean Solution не помогает

UPD. На самом деле все ОК - подробнее в этом сообщении.

Сегодня столкнулся со странной проблемой: после внесения изменений в код проекта, использующего ASP.NET MVC, и полного ребилда сервер (для отладки использовался локальный IIS) исполнял старую версию.

Очистил решение, собрал - результат тот же, и если поставить брейкпоинт где-нибудь, то он деактивируется по причине вроде "The breakpoint will not currently be hit. The source code is different then the original version.".

Решение проще простого - вручную удалить папку bin и пересобрать проект. Почему я не применил его сразу, а потратил время на копание в настройках проекта и документации? Доверял среде, выполняя Clean Solution. Вот так - доверяй, но проверяй.

суббота, 2 июля 2011 г.

Visual Studio 2010: невозможно заново подключить System.Core.dll

Недавно столкнулся с тем, что в MSVS 2010 невозможно заново подключить System.Core.dll в проект. Оказывается, это известная проблема. Решение - добавить нужную ссылку вручную, открыв файл проекта в текстовом редакторе:
<ItemGroup>
    ...
    <Reference Include="System" />
    <Reference Include="System.Core" />
    ...
</ItemGroup>

пятница, 1 июля 2011 г.

CUDA 4.0: решение проблем при сборке примеров

Честно следуя инструкциям из NVIDIA CUDA C Getting Started Guide for Microsoft Windows, я дошел до пункта "Verify The Installation", где предлагается скомпилировать примеры и запустить bandwidthTest.

Отлично, открываю файл решения для Студии 2010, и запускаю построение. Результат - ошибка: при линковке не найден shrUtils32D.lib.

Обзор папки, в которой размещается SDK (\NVIDIA GPU Computing SDK 4.0), позволил найти shrUtils_vs2010.sln (\NVIDIA GPU Computing SDK 4.0\shared), но при его построении тоже возникли ошибки - не был найден stopwatch.cpp, а также stopwatch_win.cpp. Решение несложное - найти эти файлы в содержимом SDK и добавить их в проект.

После этого shrUtils успешно компилируется и можно вернуться к исходной задаче - сборке примеров, которая теперь также выполняется успешно, позволяя запустить bandwidthTest, что является подтверждением правильной установки SDK и готовности системы к разработке.

Таким образом, нужно выполнить следующие шаги (используется VS 2010):
  1. Открыть решение shrUtils_vs2010.sln.
  2. Добавить в него stopwatch.cpp, а также stopwatch_win.cpp (искать в содержимом SDK).
  3. Собрать решение shrUtils_vs2010.sln.
  4. Открыть решение bandwidthTest_vs2010.sln и собрать его.
  5. Запустить приложение bandwidthTest и убедиться в корректности его работы.

воскресенье, 26 июня 2011 г.

Знакомство с разработкой для Android

Мобильные платформы - вещь интересная - привлекали меня давно. И вот теперь, имея на руках устройство с Андроидом на борту, просто руки чешутся :) попробовать разработать что-нибудь для него.

В планах - что-нибудь более-менее серьезное, взаимодействующее с облаком, а сейчас, в качестве тренировки, портированное приложение Cadence, о котором я уже писал ранее.

Вот так Cadence выглядит на эмуляторе:


Теперь осталось только разобраться как размещать приложения в Android App Market.

Впечатления:

  • порог вхождения достаточно низок, даже без опыта программирования на Java (мой случай) - примерно 6-7 часов на чтение "The Busy Coder's Guide to Android Development" (читается легко; практически без воды и в основном по делу), и около 2 часов на просмотр документации по Java и разработку в IntelliJ IDEA (очень порадовала, все удобно и быстро);
  • отладка: что-то определенное сказать сложно - само приложение простое и не требует особых усилий в этом направлении, единственное - эмулятор не особо шустрый.
Исходный код в открытом доступе (рефакторинг логики и локализация не помешают, но в целом - это работоспособное приложение).

среда, 15 июня 2011 г.

Оптимальный каденс и соответствующая ему скорость

Недавно задался вопросом - а оптимальный ли у меня каденс (частота педалирования)? (Что такое каденс и почему он так важен можно прочесть, например, здесь.)

Что нужно для ответа?

  1. Определиться с диапазоном. Тут все в порядке - в Интернете часто встречается рекомендация поддерживать каденс не ниже 60 об/мин, отсюда диапазон - 65-95 об/мин.
  2. Сравнить желаемый диапазон с реальным, чтобы сделать вывод об оптимальности.
Итак, осталось узнать свой реальный каденс. Как это сделать? Например, можно купить велокомпьютер, измеряющий каденс. А можно, зная свою скорость и текущую передачу, вычислить каденс, но делать такое в уме на ходу мягко говоря не комфортно, поэтому есть вариант проще - определить по диапазону каденса интервал скоростей для каждой передачи. Теперь, сравнив свою текущую скорость с полученными значениями, можно будет сделать вывод об оптимальности каденса.

Зависимость между скоростью и каденсом:

Скорость [км/ч] = Каденс [об/мин] * 60 [мин/ч] * Передача * Пи * Диаметр [дюйм] * 2.54 [см/дюйм] * 0.00001 [км/см],

где Передача - отношение числа зубцов ведущей звезды к ведомой, Диаметр - соответственно диаметр ведущего колеса.

Теперь легко определить оптимальную скорость езды на каждой передаче. Например, на LeaderFox Away 2010 передвигаться на передаче 2-4 (ведущая-ведомая) следует со скоростью 17-24 км/ч, чтобы поддерживать каденс 65-95 об/мин.

Конечно же, вручную считать дело неблагодарное, поэтому был написан небольшой онлайн-калькулятор, доступный по адресу http://py-sandbox.appspot.com/cadence.

Остается только пожелать сохранять оптимальный каденс и получать огромное удовольствие от каждой поездки!

суббота, 23 апреля 2011 г.

Очистка std::ostringstream (C++ stdlib)

Для экономии времени я (наверное, как и многие разработчики) привык разбираться с любым API "на лету", т. е. исходя из названий классов/интерфейсов/методов/т.д. Но вот здесь этот метод не сработал, пришлось заглянуть на cplusplus.com.

Итак, нужно очистить ostringstream.

Первое, что приходит на ум:

std::ostringstream out;
out << "foo";
out.clear();
out.str(); // == "foo"

Но нет, нужно так:

std::ostringstream out;
out << "foo";
out.str(std::string());
out.str(); // == ""

Вот теперь все в порядке.

воскресенье, 10 апреля 2011 г.

Acer Aspire One D250: реальная скорость передачи данных по WiFi

Являясь обладателем Acer Aspire One D250-0Bw, мне надоело перебрасывать данные с декстопа на нетбук посредством флешки (в мое оправдание - это бывает достаточно редко). Поэтому было решено наконец-таки приобрести WiFi адаптер для десктопа и организовать домашнюю беспроводную сеть. Все прошло удачно (в Сети достаточно руководств, как настроить WiFi сеть и расшарить Интернет-соединение).

И вот наступило время протестировать сеть под настоящей нагрузкой - перебросить гигабайт 30-40. Ок, начинаем копирование: все хорошо, но скорость 3,2 Мб/сек (или 25,6 Мбит/сек). Хм, странно, ведь скорость подключения 54 Мбит/сек и уровень сигнала отличный! Как оказалось 54 Мбит/сек - это теоретический максимум для 802.11g, реальное среднее значение колеблется около 20 Мбит/сек. Отлично! Выше среднего "из коробки", без доп. настроек!

И зачем я это написал, если подобную информацию легко можно найти в Сети? А вот зачем: скорость получилось увеличить. Панель управления - Система - Оборудование - Диспетчер устройств - Сетевые платы - Сетевой адаптер Broadcom 802.11g - Свойства - Дополнительно. А дальше как на скрине (кликабельно).


В результате скорость возросла до 3,9 Мб/сек (или 31,2 Мбит/сек) - не фонтан конечно, но уже лучше!