Scrum planning poker cards

Предлагаю список сайтов, где можно заказать готовые колоды карт для скрам команды.
Очень помогает при планировании.
  • Топ1 - http://www.crisp.se/bocker-och-produkter/planning-poker - 9 долларов с доставкой, в колоде карт на 4 человека, т.ч. рекомендую заказать пару колод.
  • Быстрая доставка - http://scrumtrek.ru/products/planning-poker-cards/ - 700 рублей за колоду - самый дорогой вариант, но из Москвы прийдет быстрее.
  • Еще дороже из Европы - http://agile42.enstore.com/browse/1 - колода каждому участнику нужна 4 евро + налоги + доставка 9 евро
  • Не зацепило - http://www.agilehardware.com/products/
  • Очень дорогая доставка - http://store.mountaingoatsoftware.com/collections/all - от 40 долларов доставка
Также можно сэкономить за счет онлайн версии - http://www.planningpoker.com/
или же PDF версии:
односторонние - http://www.st-webdevelopment.com/agile/2009/11/planning-poker-cards-pdf-download/
двусторонние - http://www.tekool.net/blog/2009/07/21/printable-agile-planning-poker/
и http://www.hennebert.org/web/Download/planning-poker.html

Wix: Uninstall previous version, regardless of installation type

 
У wix установщика есть такая неприятная вещь, как оставлять нетронутыми предыдущие установки, если они были сделаны в другом контексте.
 
Например, если у вас имеется версия "для всех", а сейчас вы ставите версию "только для себя" и хотите использовать механизм FindRelatedProducts для удаления старых уставок, то сразу ничего не получится. Нет, wix, конечно, найдёт старую версию, но честно признается в том, что пропустит её удаление, т.к. она сделана в другом контексте.
Решение есть.
Предлагается перед стандартной процедурой удаление RemoveExistingProducts запускать "свой" поиск предыдущих версий, если wix отказывается это делать за нас.
Таким образом, нам нужно

1. свойство для записи GUID'ов предыдущих версий
OLD_PRODUCTS

2. условия при которых удалять старые версии. Например, всегда:
<Upgrade Id="INSERT_UPGRADE_GUID_HERE">
<UpgradeVersion Minimum="0.0.0.0" IncludeMinimum="yes" Maximum="99.0.0.0" IncludeMaximum="yes" Property="OLD_PRODUCTS" />
</Upgrade>
 
3. условия при которых делать принудительное удаление (вернее принудительный поиск) старых версий
<Custom Action="Action.FindPreviousProducts" Before="RemoveExistingProducts">(NOT Installed) AND (NOT (REMOVE="ALL")) AND OLD_PRODUCTS=""</Custom>

для чего необходимо заранее объявить действие Action.FindPreviousProducts:
<CustomAction BinaryKey="Binary.FindPreviousProducts" Id="Action.FindPreviousProducts" DllEntry="FindPreviousProducts" Execute="immediate" Return="check" />
<Binary Id="Binary.FindPreviousProducts" SourceFile="OldProductFinder.dll" />
 
а в библиотеке OldProductFinder.dll выставить наружу CustomAction метод FindPreviousProducts.

Read more...Collapse )

По мотивам статьи.

C2146 syntax error missing before identifier rgclsidAllowed


Если при компиляции в Visual Studio 2008 возникает описанные в заголовке ошибка, то следует установить следующие обновления:
1. Visual Studio 2008 Service Pack 1 ATL Security Update (KB971092)
2. Если не помогло, то Visual Studio 2008 Service Pack 1 ATL for Smart Devices Security Update (KB973675)
Read more...Collapse )

.Net: Console progress


Для отображения прогресса в консольных приложениях удобно использовать, как минимум проценты выполнения работы. Для этого есть куча решений, на основе одного из которых я добавил себе вот такой класс:

.Net: InternalsVisibleTo

 
Многи знают, но всё же хочется записать, т.к. полезно знать.

Чтобы internal типы были видны для других сборок, необходимо в AssemblyInfo.cs добавить
[assembly:InternalsVisibleTo("AnotherAssemblyName")]
Теперь, в библиотеке AnotherAssemblyName.dll можно спокойно использовать internal типы из исходной.

Вторая задача, сделать тоже самое для подписанных сборок.

Read more...Collapse )

Wix: Открыть ссылку при uninstall


Встала задача запускать приложение при удалении программы из системы, если установлена опция (галочка).
Для этого есть очень полезная статья, а также вопрос на stackoverflow.com, а точнее ответ.

Простыми словами,
- необходимо кастомизировать итоговую форму (ExitDialog), 
- настроить свойство, которое будет связано с этой опцией
- выполнить запуск Custom Action выбранной опции

В качестве дополнения 1:
Read more...Collapse )

HRESULT: 0x80131043 code specifies: "Modules which are not in the manifest were streamed in"

 
Вышеуказанная ошибка может быть получена в нескольких случаях. Упомяну сейчас про один из них.

У меня имеется нативная библиотека mynativecode.dll, которая оборачивается в managed c++ проекте, куда и линкуется с помощью /ASSEMBLYLINKRESOURCE:mynativecode.dll

Read more...Collapse )

Code signing certificate

 
Если вы хотите, чтобы ваше приложение не отображалось, как Unknown Publisher, то вам нужно подписать его сертификатом.
О том, где подешевле его купить и как подписать, довольно неплохо описано здесь.

COM: Register COM interop issue in the framework 2.0

При разработке COM объекта на Framework 2.0 столкнулся с ошибкой:
ERROR : C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(2731,9): error MSB3097: File "ClassLibrary1.dll" is not a valid assembly.

Проблема была в конфигурации x64 и в том, что студия пытается 32 битной версией regasm.exe зарегистрировать мой COM объект.

Решением проблемы было отключение опции Register for COM interop в опциях проекта и добавление post build event'a:
if /i "$(PlatformName)" == "x64" "%Windir%\Microsoft.NET\Framework64\v2.0.50727\regasm" "$(TargetPath)" /codebase

XML from HTML


Для чтения "неправильного" HTML в XML можно воспользоваться SgmlReader'ом.
Это позволит распарсить в XDocument/XmlDocument html файл с незакрытыми дегами и прочими ошибками.
На больших данных не проверял.

Unit tests: what else?

Заинтересовался двумя дополнительными библиотеками для тестирования - specflow и shouldly.
Пока что не пробовал ни ту ни другую, но, немного почитав, решил начать с shouldly, т.к. это больше похоже на набор extension методов к nunit + rhino mocks, которые я сейчас и использую.

Read more...Collapse )

Soft: Develop with pleasure



Каждый раз, запуская и используя SmartSVN, мне хочется говорить о нём.
TotalCommander, Resharper меня уже поглотили, теперь вот ещё и SmartSVN "поглотил" меня. Сижу на нём не первый год, программа действительно растёт год от года - респект разработчикам!. Рекомендую тем, кто "сидит" на TortoiseSVN!

Can I Pin a File to the Start Menu by Using a Script



Source

...
In Windows Explorer, you can pin an application to the Start Menu by right-clicking the application icon and then clicking Pin to Start Menu. Nothing wrong with that, of course, but if want to really be cool you can pin items to the Start Menu using a script. Here, for example, is a script that pins the Windows Calculator (calc.exe) to the Start Menu:
Read more...Collapse )

Visual Studio 2008: Status Bar



Source


I installed Visual Studio 2008 this week.* First thing I noticed? No status bar. Uwah??? Oh, it's probably off by default, like most of the toolbars. I bet if I right click on the toolbar I can show it. No? Well then the View menu. No? Window? Team? Analyze? Debug? Build? No. No no no no no!

Tools >> Options >> Environment >> General - check "Show status bar".

Whichever UX engineer decided that developers do not want the status bar to be shown as a defaulted option is either a sadist or someone that has never met a developer. Whoever authorized this as the default option needs to be dragged over a field of broken glass and dripped in alcohol. If it's a missed bug, I'm appalled because it means that someone wasn't running with either a clean machine or migrated their options from VS2005. If it's a found bug, and Triage decided to simply release note it, they also get the field of broken glass but they get to get dipped in lemon juice and rolled in sugar. In case you couldn't tell, you're pretty much boned without a visible status bad: you don't even know when a build is done, without it.

And I don't care who it was - even if it was BillG himself - but whoever decided to hide the bloody "Show status bar" on the Options dialog [that has at least 500 set-able options] rather than making it available on the View menu or context-sensitive toolbar menu, well, they're just wrong to put it there.

Concatenate Images

Что-то сходу онлайн сервиса не нашёл, т.ч. вот примерчик консольного приложения, которое по маске ищет ряд файлов и объединяет их в одну большую картинку (draft).

http://svn2.assembla.com/svn/DevSamples/ImageConcat (Binary and Sources)

Если кто подскажет, как теперь это в Silverlight приложение переделать, будет вообще замечательно. Хотелось бы использовать по http протоколу всё таки. Тем более, что в 4ой версии silverlight точно можно сделать multiupload’er.

Исходный код под катом.
 

Read more...Collapse )

 

HowTo: Record your own screen cast



Пока только кратко:

1. Качаем Freeware CamStudio или Jing
2. Устанавливаем, пользуемся

По-первому:
а) без ограничений
б) масса настроек
в) avi можно конвертить в wmv через Format Factory, если не уверены, что у клиента будут кодеки.

По-второму:
а) красиво, быстро, удобно
б) ограничение записи только во флеш (swf) и на 5 минут
в) возможность выложить бесплатно до 2Гб записей на онлайн хостинг (обязательная регистрация)

Wpf: ToolBar customization


Хочется записать в дневник на память пару простых, но не очевидных на первый взгляд вещей:

1. Зафиксировать toolbar, чтобы он не перетаскивался и одновременно с этим скрыть элемент, за который перетаскивание происходит можно установив в стиле свойство ToolBarTray.IsLocked="True"

2. Скрыть элемент, который показывает непоместившиеся кнопки toolbar, если он не используется, можно установив свойство ToolBar.OverflowMode="Never" и
Read more...Collapse )

bootstrapper: how to replace setup.exe manifest with asInvoker value


Столкнулся с проблемой, что VS 2008 (SP1?) создаёт загрузчик (bootstrapper), который нормально отрабатывает в XP для обычного пользователя (без админских прав), но требует привилегий в Vista & Windows 7.

 

Read more...Collapse )

Sql: Linq to Sql Compact Edition



Многие сталкивались с проблемой подружить linq с sqlce. В принципе, не всё так плохо.
Решений в интернете полно и все они сводятся к тому, чтобы создавать dbml с помощью утилиты sqlmetal.exe
Не буду повторять за другими, как это сделать, а просто приведу ссылку на конкретный работающий пример с исходниками.
Read more...Collapse )

Asp.Net: Quick search with Ajax AutoCompleteExtender from Ajax Control Toolkit



Если вам необходимо сделать что-то вроде строки поиска аля гугл или яндекс, т.е. чтобы при вводе появлялись возможные варианты запросов, то вам поможет Ajax Toolkit и его AutoCompleteExtender.
Также это будет полезно, если хочется заменить обычный html select (asp:DropDownList) на редактируемое окно с выбором вариантов.
Read more...Collapse )

Wix: How to Set Directory Permissions at Install Time using an MSI Created Using WIX



Если вы создаётся инсталляционный пакет с помощью wix, то рано или поздно начнёте использовать InstallScopeDlg, с помощью которого пользователь сможет выбирать установить ли программу для всех пользователей или только для него.
В режиме CurrentUser (для него) всё достаточно просто - необходимо установить пакет в один из подкаталогов %appdata%, где у пользователя есть полные права (NTFS).
А вот в режиме AllUsers (для всех) уже сложнее, т.к. в у станавливаемых каталог доступ будет по умолчанию только у администраторов и системного процесса SYSTEM, поэтому необходимо в процессе установки назначить дополнительные NTFS права.
О том, как это сделать описано здесь - How to Set Directory Permissions at Install Time using an MSI Created Using Windows Installer XML (WIX)

Wpf: System.ArithmeticException, FPU, флаги сопроцессора


Столкнулся с проблемой интеграции .Net COM объекта в native code, который менял флаги состояния сопроцессора -
при открытии большинства WPF форм вылетало исключение:
System.Arithmetic Exception Error When You Change the Floating-Point Control Register in a Managed Application

Почитать можно на support.microsoft.com

Вообще, как выход, можно флаги действительно в default состояние выставить, но можно и в отдельном процессе исполнять COM объект.

Managing Application Resources when WPF is Hosted


Начали интеграцию .Net COM объекта с unmanaged code'ом и столкнулись с проблемой применения WPF тем (Themes), т.к. в таком случае хостинга приложения Application.Current возвращает null и не достучаться до MergedDictionaries.
Нашёл нескольких решений данной проблемы в следующем посте

Improving WCF Interoperability: Flattening your WSDL and Inline XSD in WSDL with WCF



Для того, чтобы сервис выдавал наружу не просто кучу xml файлов, ссылающихся друг на друга, а целую "портянку" целиком, необходимо почитать http://blogs.thinktecture.com/cweyer/archive/2007/05/10/414840.aspx
Возможно почти полностью контролировать процесс генерации выдаваемого wsdl или же выдавать конкретный файл.
см. также статью

Visual Studio: How to display an assembly in the "Add Reference" dialog box



When you are developing a class library, you may want Visual Studio .NET to list your library in the Add Reference dialog box on the .NETtab without the user having to browse for it. 

This issue is not resolved if you install your assembly to the global assembly cache, because the Add Reference dialog box is path-based and does not enumerate the components from the global assembly cache.

Read more...

.Net: Simple Main



Если вы хотите, чтобы ваша .Net программа запускалась и корректно отрабатывала бы отсутствие .Net Framework'а, то неплохо было бы ознакомиться со следующей статьей.

В статье Jason Clark рассказывает об основных проблемах использования кода, который генерирует студия:
 
public static void Main() {
      Application.Run(new MyForm())

и о том, как с ними бороться.

Microsoft Word safe mode

Если у вас есть проблемы с запуском ms word, то можно попробовать запустить его в safe mode.
Для этого необходимо во время запуска зажать клавишу CTRL, после чего будет выдан запрос на запуск приложения в safe mode.

HowTo: MS Office 2007 Addins + .Net



Вы пробуете написать свой addon для 2007 офиса, но возникают проблему с отладкой, установкой или запуском на другой машине?
Попробуйте почитать эту статью, в которой я постарался выделить основные моменты.

WPF: Generic Support In XAML



Рано или поздно, вытесняя общую функциональность в базовый класс, многим приходится столкнуться с проблемой объявлениф базового класса для пользовательских контролов или окон, причём с наличием Generic аргумента.
При этом встаёт вопрос: "А как объявить такой класс в xaml? Ведь там нельзя написать WindowBase<T>!".

Ответ очень прост и найти его можно в следующей статье на codeproject.com:
<local1:WindowsBase x:TypeArguments=”local2:SomeType”>

How to create self-extracting file that automatically run the setup program contained inside

Чтобы создать самораспаковывающийся архив, который после распаковки запускал бы нужный вам файл, можно воспользоваться всем известной программой WinRar.
Read more...Collapse )
Если WinRar'а под рукой нет или просто хочется пользоваться стандартными программами, то рекомендую IExpress, который представляет собой небольшой, но функциональный Wizard.

.Net: Sign (Strong Name) a compiled assembly



Исходные данные: неподписанная скомпилированная .Net сборка

Задача: подписать сборку, чтобы можно было использовать в проектах, где все сборки требуют обязательной подписки.

Решение: оригинал можно глянуть здесь, а если кратко, то:
1. берём библиотеку
2. пропускаем через ildasm.exe получая IL
3. с помощью ilasm.exe получаем обратно уже подписанную библиотеку из полученного IL и указанного ключа

ps при использовании ilasm.exe нужно добавить ключ /dll, если нужна библиотека, а не приложение.

Firefox -> Google Chrome



Если вы устали от достаточно медленного запуска Firefox при постоянно занятом винчестере, то Google Chrome (пока ещё) может вам в этом помочь, заменив FF.
"Пока ещё", потому что сейчас GH действительно быстро стартует и, не имея "кучи" extensions, делает это в радость пользователю.

Read more...Collapse )

VSAddin: Google Translate



Пробовал разного рода софт, который бы выделенный текст переводил на лету, но как-то попадались решения не всегда работающие (то память "кушает", то приложение заставляет "тормозить", то ещё что-либо). Сократ платный, Lingvo тоже, да ещё и тяжеловестный.

А нужно в основном в Visual Studio переводить. Так что решил набросать небольшой addin к студии 2005/2008, который можно взять отсюда http://code.google.com/p/vstranslate/downloads/list

Перевод показывается не ахти как - MessageBox'ом, но исходники есть, так что можете использовать ToolTip или что душе угодно.

PS
Addin использует сторонние обёртки google translate api, которые впрочем можно легко и быстро заменить. Ссылки в коде.

Mercurial: how to start



Во-первых,
вам нужен хостинг. В прошлом месяце у google появилась поддержка mercurial. Почитать можно здесь. Так что идём по адресу и просто создаём новый проект. Только надо учитывать, что он будет open source, а иначе можно воспользоваться сервисом bitbucket.

Во-вторых,
Read more...Collapse )