<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-26544185</id><updated>2012-01-27T08:55:14.098+01:00</updated><category term='WinRT'/><category term='C#'/><category term='Vista'/><category term='Visual Studio'/><category term='Learning'/><category term='jQuery'/><category term='jQueryMobile'/><category term='Windows 8'/><category term='Architecture'/><category term='SQL'/><category term='TrivadisContent'/><category term='DataAnnotations'/><category term='Razor'/><category term='Tools'/><category term='WPF/E'/><category term='AJAX'/><category term='WP7'/><category term='XML'/><category term='IIS'/><category term='Entity Framework'/><category term='ASP.NET MVC'/><category term='ASP.NET'/><category term='Silverlight'/><category term='ADO.NET'/><title type='text'>Tipps, Tricks and Tracks</title><subtitle type='html'>Architecture, ASP.NET MVC, C#, and more ...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>71</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-26544185.post-2936014256233032403</id><published>2012-01-27T08:55:00.000+01:00</published><updated>2012-01-27T08:55:14.107+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>SupportedOrientations not working on emulator</title><content type='html'>We all know the SupportedOrientations property on a windows phone page. Just set the value to Portrait and your App will only support the portrait orientation mode. Set it to Landscape and your App will only support the landscape orientation mode. Set it to PortraitOrLandscape and both are supported. That easy!&lt;br /&gt;By the way, the property Orientation tells the device in which orientation to start.&lt;br /&gt;&lt;br /&gt;But, yesterday I set the property on my main page from PortraitOrLandscape to Portrait only. And suddenly also on my other pages, where the SupportedOrientations property was still set to PortraitOrLandscape, the landscape mode was not supported anymore in my emulator. Hmmm, what happend here?&lt;br /&gt;&lt;br /&gt;After checking everything for&amp;nbsp;my mistake and not finding any and after a long helpless google session I finaly found my mistake by accident.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;I used the pc keyboard (by hitting PageUp). This disables the rotation in the emulator and that was my only problem&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;I hope this helps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-2936014256233032403?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/2936014256233032403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=2936014256233032403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2936014256233032403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2936014256233032403'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/supportedorientations-not-working-on.html' title='SupportedOrientations not working on emulator'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4702725685845277501</id><published>2012-01-24T12:46:00.000+01:00</published><updated>2012-01-24T12:46:40.853+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>ImageButton control for Windows Phone 7</title><content type='html'>To build an image button in WPF or Silverlight is a commen task. Also in Windows Phone 7 but here we have an additional problem, the themes. The basics I found in &lt;a href="http://silvergeek.net/2011/01/14/imagebutton-control-for-win-phone-7/"&gt;this&lt;/a&gt; nice article.&lt;br /&gt;&lt;br /&gt;What's not handled there is the themes. In the dark theme everything works fine but in the light theme the button is invisible because of the color (white in white). Therefore two more images are needed.&lt;br /&gt;&lt;br /&gt;First I added two more dependency properties to the ImageButton class. And then I extended the template to look like that.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;     &amp;lt;ControlTemplate x:Key="ImageButtonControlTemplate" TargetType="local:ImageButton"&amp;gt;&lt;br /&gt;       &amp;lt;Grid&amp;gt;&lt;br /&gt;         &amp;lt;VisualStateManager.VisualStateGroups&amp;gt;&lt;br /&gt;           &amp;lt;VisualStateGroup x:Name="CommonStates"&amp;gt;&lt;br /&gt;             &amp;lt;VisualState x:Name="Normal"/&amp;gt;&lt;br /&gt;             &amp;lt;VisualState x:Name="MouseOver"/&amp;gt;&lt;br /&gt;             &amp;lt;VisualState x:Name="Pressed"&amp;gt;&lt;br /&gt;               &amp;lt;Storyboard&amp;gt;&lt;br /&gt;                 &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PressedImage"&amp;gt;&lt;br /&gt;                   &amp;lt;DiscreteObjectKeyFrame KeyTime="0"&amp;gt;&lt;br /&gt;                     &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                       &amp;lt;Visibility&amp;gt;Visible&amp;lt;/Visibility&amp;gt;&lt;br /&gt;                     &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                   &amp;lt;/DiscreteObjectKeyFrame&amp;gt;&lt;br /&gt;                 &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;&lt;br /&gt;                 &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="NormalImage"&amp;gt;&lt;br /&gt;                   &amp;lt;DiscreteObjectKeyFrame KeyTime="0"&amp;gt;&lt;br /&gt;                     &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                       &amp;lt;Visibility&amp;gt;Collapsed&amp;lt;/Visibility&amp;gt;&lt;br /&gt;                     &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                   &amp;lt;/DiscreteObjectKeyFrame&amp;gt;&lt;br /&gt;                 &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;&lt;br /&gt;                 &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="PressedLightThemeImage"&amp;gt;&lt;br /&gt;                   &amp;lt;DiscreteObjectKeyFrame KeyTime="0"&amp;gt;&lt;br /&gt;                     &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                       &amp;lt;Visibility&amp;gt;Visible&amp;lt;/Visibility&amp;gt;&lt;br /&gt;                     &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                   &amp;lt;/DiscreteObjectKeyFrame&amp;gt;&lt;br /&gt;                 &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;&lt;br /&gt;                 &amp;lt;ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="NormalLightThemeImage"&amp;gt;&lt;br /&gt;                   &amp;lt;DiscreteObjectKeyFrame KeyTime="0"&amp;gt;&lt;br /&gt;                     &amp;lt;DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                       &amp;lt;Visibility&amp;gt;Collapsed&amp;lt;/Visibility&amp;gt;&lt;br /&gt;                     &amp;lt;/DiscreteObjectKeyFrame.Value&amp;gt;&lt;br /&gt;                   &amp;lt;/DiscreteObjectKeyFrame&amp;gt;&lt;br /&gt;                 &amp;lt;/ObjectAnimationUsingKeyFrames&amp;gt;&lt;br /&gt;               &amp;lt;/Storyboard&amp;gt;&lt;br /&gt;             &amp;lt;/VisualState&amp;gt;&lt;br /&gt;             &amp;lt;VisualState x:Name="Disabled"/&amp;gt;&lt;br /&gt;           &amp;lt;/VisualStateGroup&amp;gt;&lt;br /&gt;         &amp;lt;/VisualStateManager.VisualStateGroups&amp;gt;&lt;br /&gt;         &amp;lt;StackPanel Visibility="{StaticResource PhoneDarkThemeVisibility}"&amp;gt;&lt;br /&gt;           &amp;lt;Image x:Name="NormalImage" Source="{TemplateBinding Image}"/&amp;gt;&lt;br /&gt;           &amp;lt;Image x:Name="PressedImage" Source="{TemplateBinding PressedImage}" Visibility="Collapsed"/&amp;gt;&lt;br /&gt;         &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;         &amp;lt;StackPanel Visibility="{StaticResource PhoneLightThemeVisibility}"&amp;gt;&lt;br /&gt;           &amp;lt;Image x:Name="NormalLightThemeImage" Source="{TemplateBinding ImageLightTheme}"/&amp;gt;&lt;br /&gt;           &amp;lt;Image x:Name="PressedLightThemeImage" Source="{TemplateBinding PressedImageLightTheme}" Visibility="Collapsed"/&amp;gt;&lt;br /&gt;         &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;       &amp;lt;/Grid&amp;gt;&lt;br /&gt;     &amp;lt;/ControlTemplate&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;The magic&amp;nbsp;are the two&amp;nbsp;StackPanels and there visibility bound to the static resources PhoneDarkThemeVisibility and PhoneLightThemeVisibility which are part of the wp7 framework.&lt;br /&gt;&lt;br /&gt;Hope that helps!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4702725685845277501?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4702725685845277501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4702725685845277501' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4702725685845277501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4702725685845277501'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/imagebutton-control-for-windows-phone-7.html' title='ImageButton control for Windows Phone 7'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-7188209732874481002</id><published>2012-01-23T14:19:00.000+01:00</published><updated>2012-01-23T14:19:45.187+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>WP7 Shortcuts App Redesign</title><content type='html'>Last weekend I finished the redesign of my Shortcuts App. I'm happy that my poor design is gonne and that I can provide you now a real Windows Phone Look&amp;amp;Feel. Second good news is that I integrated webcams.travel api to search for webcams.&amp;nbsp;Will be in Marketplace very soon!&lt;br /&gt;&lt;br /&gt;Hope you will like it!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-_KPBCHlBH4A/Tx1ddsOiHjI/AAAAAAAAKV4/W0pPkTlYztU/s1600/td1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" nfa="true" src="http://3.bp.blogspot.com/-_KPBCHlBH4A/Tx1ddsOiHjI/AAAAAAAAKV4/W0pPkTlYztU/s320/td1.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-zZ_HOiCzD08/Tx1djJ3YW9I/AAAAAAAAKWI/w67w6bP1SEs/s1600/td3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" nfa="true" src="http://3.bp.blogspot.com/-zZ_HOiCzD08/Tx1djJ3YW9I/AAAAAAAAKWI/w67w6bP1SEs/s320/td3.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-1Kko_NFNq70/Tx1dknSq5zI/AAAAAAAAKWQ/RLgGuUbYzGg/s1600/td4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" nfa="true" src="http://1.bp.blogspot.com/-1Kko_NFNq70/Tx1dknSq5zI/AAAAAAAAKWQ/RLgGuUbYzGg/s320/td4.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://windowsphone.com/s?appid=5242b7aa-396a-4b96-93a0-e6af01018ec2"&gt;&lt;img border="0" nfa="true" src="http://4.bp.blogspot.com/-pOnlpHuR-ow/Tx1eLEWImbI/AAAAAAAAKWo/K0kAd14B1A0/s1600/Download-EN-Med.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-7188209732874481002?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/7188209732874481002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=7188209732874481002' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7188209732874481002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7188209732874481002'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/wp7-shortcuts-app-redesign.html' title='WP7 Shortcuts App Redesign'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-_KPBCHlBH4A/Tx1ddsOiHjI/AAAAAAAAKV4/W0pPkTlYztU/s72-c/td1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6179273521621846110</id><published>2012-01-23T14:01:00.000+01:00</published><updated>2012-01-23T14:01:56.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>WP7 ShellTileSchedule, Secondary Tiles Update Problem</title><content type='html'>Already in one of my last posts I blogged about the ShellTileSchedule class. I love the simplicity of this class and still use it in my Shortcuts App you can get &lt;a href="http://www.windowsphone.com/de-CH/apps/5242b7aa-396a-4b96-93a0-e6af01018ec2"&gt;here&lt;/a&gt;. After a complete re-design of the App, I did a lot of testing and found an interesting bug.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;My App did not refresh webcam images on phone, sms and mail live tiles.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I know the limitations of the&amp;nbsp;ShellTileSchedule class and checked them again and again.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Limitation&lt;/strong&gt;&lt;br /&gt;Note that you can only provide a RemoteImageUri. Therefore you must provide an online and available URI that represents an image to download and display. You can’t reference URI from your local application. The image size can NOT exceed 80KB, and download time can NOT exceed 60 sec.&lt;br /&gt;&lt;br /&gt;The bug must be somewhere else. Half a night later I found&amp;nbsp;the problem in the link property of the tile to update. If the link &lt;strong&gt;has more than one parameter&lt;/strong&gt; (like my phone, sms and mail tiles),&amp;nbsp; the update will not work. If there is non or only one parameter (like all my other functions) it works. So I changed the signature of the links and now everything is fine.&lt;br /&gt;&lt;br /&gt;&lt;span class="hps"&gt;Old code&lt;/span&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;         var tile = new StandardTileData()&lt;br /&gt;         {&lt;br /&gt;           Title = "Demo"&lt;br /&gt;         };&lt;br /&gt;         var link = new Uri&lt;br /&gt;           (string.Format(&lt;br /&gt;             "/Phone.xaml?name={0}&amp;amp;number={1}", &lt;br /&gt;             nameTextBlock.Text, &lt;br /&gt;             numberTextBlock.Text)&lt;br /&gt;             , UriKind.Relative);&lt;br /&gt;         ShellTile.Create(link, tile);  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="hps"&gt;New code&lt;/span&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;         var tile = new StandardTileData()&lt;br /&gt;         {&lt;br /&gt;           Title = "Demo"&lt;br /&gt;         };&lt;br /&gt;         var link = new Uri&lt;br /&gt;           (string.Format(&lt;br /&gt;             "/Phone.xaml?name={0}%{1}", &lt;br /&gt;             nameTextBlock.Text, &lt;br /&gt;             numberTextBlock.Text)&lt;br /&gt;             , UriKind.Relative);&lt;br /&gt;         ShellTile.Create(link, tile);  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;On the target form I changed the way to read the parameter to this&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;       if (this.NavigationContext.QueryString.Keys.Contains(Constants.NAME))&lt;br /&gt;         _name = this.NavigationContext.QueryString[Constants.NAME];&lt;br /&gt;       var x = _name.Split(new Char[] { '%' });&lt;br /&gt;       _name = x[0];&lt;br /&gt;       _number = x[1];  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6179273521621846110?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6179273521621846110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6179273521621846110' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6179273521621846110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6179273521621846110'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/wp7-shelltileschedule-secondary-tiles.html' title='WP7 ShellTileSchedule, Secondary Tiles Update Problem'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-5017481648384914755</id><published>2012-01-10T09:18:00.000+01:00</published><updated>2012-01-10T09:18:02.749+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Generic About Page for Windows Phone App</title><content type='html'>Now I have five Apps in the Marketplace. One thing every App needs is an About Page. If you give the customer an&amp;nbsp;About Page it looks&amp;nbsp;just more professional and the buttons to rate the&amp;nbsp;App or navigate to your other Apps should give you as a developer an advantage.&lt;br /&gt;Copy&amp;amp;Paste was my first approache. But we all now that's not a good one.&amp;nbsp;A lot of work and a good chance to miss a customisatzion and wrong information or links are&amp;nbsp;standing on the page.&lt;br /&gt;To&amp;nbsp;built a generic About Page is a much better idea. Here is what my page looks like.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-8KP0NDN6G8E/TwvjjKnURjI/AAAAAAAAKVc/AlBcoJGPd5M/s1600/about.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" kba="true" src="http://2.bp.blogspot.com/-8KP0NDN6G8E/TwvjjKnURjI/AAAAAAAAKVc/AlBcoJGPd5M/s320/about.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Pretty simple, isn't it? And here is what the xaml code and the code behind&amp;nbsp;looks like.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt; &amp;lt;phone:PhoneApplicationPage &lt;br /&gt;   x:Class="AboutPage"&lt;br /&gt;   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;br /&gt;   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&lt;br /&gt;   xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"&lt;br /&gt;   xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"&lt;br /&gt;   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"&lt;br /&gt;   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"&lt;br /&gt;   FontFamily="{StaticResource PhoneFontFamilyNormal}"&lt;br /&gt;   FontSize="{StaticResource PhoneFontSizeNormal}"&lt;br /&gt;   Foreground="{StaticResource PhoneForegroundBrush}"&lt;br /&gt;   SupportedOrientations="Portrait" Orientation="Portrait"&lt;br /&gt;   mc:Ignorable="d" d:DesignHeight="768" d:DesignWidth="480"&lt;br /&gt;   shell:SystemTray.IsVisible="True"&amp;gt;&lt;br /&gt; &lt;br /&gt;   &amp;lt;!--LayoutRoot is the root grid where all page content is placed--&amp;gt; &lt;br /&gt;   &amp;lt;Grid x:Name="LayoutRoot" Background="Transparent"&amp;gt;&lt;br /&gt;     &amp;lt;Grid.RowDefinitions&amp;gt;&lt;br /&gt;       &amp;lt;RowDefinition Height="Auto"/&amp;gt;&lt;br /&gt;       &amp;lt;RowDefinition Height="*"/&amp;gt;&lt;br /&gt;     &amp;lt;/Grid.RowDefinitions&amp;gt;&lt;br /&gt;  &lt;br /&gt;     &amp;lt;!--TitlePanel contains the name of the application and page title--&amp;gt;&lt;br /&gt;     &amp;lt;StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"&amp;gt;&lt;br /&gt;       &amp;lt;TextBlock x:Name="ApplicationTitle" Text="Demo" Style="{StaticResource PhoneTextNormalStyle}"/&amp;gt;&lt;br /&gt;       &amp;lt;TextBlock x:Name="PageTitle" Text="{Binding Path=LocalizedResources.About, Source={StaticResource LocalizedStrings}}" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/&amp;gt;&lt;br /&gt;     &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;  &lt;br /&gt;     &amp;lt;!--ContentPanel - place additional content here--&amp;gt;&lt;br /&gt;     &amp;lt;Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"&amp;gt;&lt;br /&gt;       &amp;lt;StackPanel Orientation="Vertical"&amp;gt;&lt;br /&gt;         &amp;lt;TextBlock x:Name="appNameTextBlock" TextAlignment="Center" Text="Demo" FontSize="{StaticResource PhoneFontSizeExtraLarge}" Foreground="{StaticResource PhoneAccentBrush}"/&amp;gt;&lt;br /&gt;         &amp;lt;TextBlock x:Name="appAuthorTextBlock" TextAlignment="Center" Margin="0,0,0,20" Text="Demo" FontSize="{StaticResource PhoneFontSizeMediumLarge}"/&amp;gt;&lt;br /&gt;         &amp;lt;TextBlock x:Name="appDescriptionTextBlock" Margin="0,0,0,30" TextWrapping="Wrap" Height="170" Text="{Binding Path=LocalizedResources.Description, Source={StaticResource LocalizedStrings}}" FontSize="{StaticResource PhoneFontSizeNormal}"/&amp;gt;&lt;br /&gt;         &amp;lt;Button x:Name="buyButton" Click="buyButton_Click" Content="{Binding Path=LocalizedResources.BuyNow, Source={StaticResource LocalizedStrings}}" /&amp;gt;&lt;br /&gt;         &amp;lt;Button x:Name="rateButton" Click="rateButton_Click" Content="{Binding Path=LocalizedResources.RateNow, Source={StaticResource LocalizedStrings}}" /&amp;gt;&lt;br /&gt;         &amp;lt;Button x:Name="emailButton" Click="emailButton_Click" Content="{Binding Path=LocalizedResources.SendEmail, Source={StaticResource LocalizedStrings}}" /&amp;gt;&lt;br /&gt;         &amp;lt;Button x:Name="showAppsButton" Click="showAppsButton_Click" Content="{Binding Path=LocalizedResources.GetMoreApps, Source={StaticResource LocalizedStrings}}" /&amp;gt;&lt;br /&gt;  &lt;br /&gt;       &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;     &amp;lt;/Grid&amp;gt;&lt;br /&gt;   &amp;lt;/Grid&amp;gt;&lt;br /&gt; &amp;lt;/phone:PhoneApplicationPage&amp;gt;  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;   public partial class AboutPage : PhoneApplicationPage&lt;br /&gt;   {&lt;br /&gt;     public AboutPage()&lt;br /&gt;     {&lt;br /&gt;       InitializeComponent();&lt;br /&gt;  &lt;br /&gt;       appNameTextBlock.Text = string.Format("{0} V{1}", ApplicationManifest.Title, ApplicationManifest.Version);&lt;br /&gt;  &lt;br /&gt;       appAuthorTextBlock.Text = ApplicationManifest.Publisher;&lt;br /&gt;       // Use this if you do not have a translation in your rescources&lt;br /&gt;       //appDescriptionTextBlock.Text = ApplicationManifest.Description;&lt;br /&gt;       ApplicationTitle.Text = ApplicationManifest.Title;&lt;br /&gt;       buyButton.IsEnabled = ApplicationLicense.IsTrial;&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     private void buyButton_Click(object sender, RoutedEventArgs e)&lt;br /&gt;     {&lt;br /&gt;       new MarketplaceDetailTask().Show();&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     private void rateButton_Click(object sender, RoutedEventArgs e)&lt;br /&gt;     {&lt;br /&gt;       new MarketplaceReviewTask().Show();&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     private void emailButton_Click(object sender, RoutedEventArgs e)&lt;br /&gt;     {&lt;br /&gt;       new EmailComposeTask()&lt;br /&gt;       {&lt;br /&gt;         To = "jctrachselatbluewin.com",&lt;br /&gt;         Subject = "Question/comment to " + ApplicationManifest.Title,&lt;br /&gt;       }.Show();&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     private void showAppsButton_Click(object sender, RoutedEventArgs e)&lt;br /&gt;     {&lt;br /&gt;       new MarketplaceSearchTask()&lt;br /&gt;       {&lt;br /&gt;         SearchTerms = "Jean-Claude Trachsel"&lt;br /&gt;       }.Show();&lt;br /&gt;     }&lt;br /&gt;   }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Because a lot of information is provided by the WMAppManifest.xml file anyway, we take it from there. Is this making sense?&amp;nbsp;I hope so! To access the file I use the following class.&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;   public static class ApplicationManifest&lt;br /&gt;   {&lt;br /&gt;     private static Dictionary&amp;lt;string, string&amp;gt; _properties;&lt;br /&gt;  &lt;br /&gt;     private static Dictionary&amp;lt;string, string&amp;gt; Properties&lt;br /&gt;     {&lt;br /&gt;       get&lt;br /&gt;       {&lt;br /&gt;         if (null == _properties)&lt;br /&gt;         {&lt;br /&gt;           _properties = new Dictionary&amp;lt;string, string&amp;gt;();&lt;br /&gt;           var appManifestXml = XDocument.Load("WMAppManifest.xml");&lt;br /&gt;           using (var rdr = appManifestXml.CreateReader(ReaderOptions.None))&lt;br /&gt;           {&lt;br /&gt;             rdr.ReadToDescendant("App");&lt;br /&gt;             if (!rdr.IsStartElement())&lt;br /&gt;             {&lt;br /&gt;               throw new System.FormatException("App tag not found in WMAppManifest.xml ");&lt;br /&gt;             }&lt;br /&gt;             rdr.MoveToFirstAttribute();&lt;br /&gt;             while (rdr.MoveToNextAttribute())&lt;br /&gt;             {&lt;br /&gt;               _properties.Add(rdr.Name, rdr.Value);&lt;br /&gt;             }&lt;br /&gt;           }&lt;br /&gt;         }&lt;br /&gt;         return _properties;&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string Version&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["Version"]; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string ProductId&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["ProductID"]; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string Title&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["Title"]; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string TitleUc&lt;br /&gt;     {&lt;br /&gt;       get { return !string.IsNullOrEmpty(Title) ? Title.ToUpperInvariant() : null; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string Genre&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["Genre"]; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string Description&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["Description"]; }&lt;br /&gt;     }&lt;br /&gt;  &lt;br /&gt;     public static string Publisher&lt;br /&gt;     {&lt;br /&gt;       get { return Properties["Publisher"]; }&lt;br /&gt;     }&lt;br /&gt;   }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;If you need localization like I do in all of my Apps, there is one more class needed to do the binding like you can see in the xaml code above. This class accesses a file named AppResources.resx.&lt;br /&gt;&lt;pre style="background: url(http://2.bp.blogspot.com/_z5ltvMQPaa8/SjJXr_U2YBI/AAAAAAAAAAM/46OqEP32CJ8/s320/codebg.gif) #f0f0f0; border-bottom: #cccccc 1px dashed; border-left: #cccccc 1px dashed; border-right: #cccccc 1px dashed; border-top: #cccccc 1px dashed; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-align: left; width: 99%;"&gt;&lt;code style="color: black; word-wrap: normal;"&gt;   public class LocalizedStrings&lt;br /&gt;   {&lt;br /&gt;     private static AppResources localizedResources = new AppResources();&lt;br /&gt;     public AppResources LocalizedResources { get { return localizedResources; } }&lt;br /&gt;   }  &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;I hope this helps and fell free to use my About Page in your App.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.windowsphone.com/de-CH/search?q=Jean-Claude"&gt;&lt;img border="0" kba="true" src="http://3.bp.blogspot.com/-FMoADyk9rBQ/Twv0FeurPWI/AAAAAAAAKVk/Y9p6RdfgvI0/s1600/Download-EN-Med.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-5017481648384914755?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/5017481648384914755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=5017481648384914755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5017481648384914755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5017481648384914755'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/generic-about-page-for-windows-phone.html' title='Generic About Page for Windows Phone App'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-8KP0NDN6G8E/TwvjjKnURjI/AAAAAAAAKVc/AlBcoJGPd5M/s72-c/about.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4266346902931130778</id><published>2012-01-06T11:21:00.000+01:00</published><updated>2012-01-06T11:21:23.859+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>Tile Tasks, the shortcut app for Windows Phone</title><content type='html'>Shortcuts are often very helpfull. Specially on a slow device like my iPhone 3GS, it would be very helpful to have some shortcuts to make a call, send a sms or toggle airplane mode on and off instead to tap thru all this menues.&amp;nbsp;If I hopefully get my Nokia Lumia 900 soon, I do not want to miss this functionality again and I built Tile Tasks. The functionality today includes:&lt;br /&gt;- Quick dial your friends phone number&lt;br /&gt;- Send a sms with a default text &lt;br /&gt;- Send an email with default subject and body&lt;br /&gt;- Navigate to an internet address&lt;br /&gt;- Add a Webcam to your tile&lt;br /&gt;- Shortcut Airplane mode&lt;br /&gt;- Shortcut WiFi&lt;br /&gt;- Shortcut Bluetooth&lt;br /&gt;- Shortcut Cellular&lt;br /&gt;&lt;br /&gt;And here what it looks like to build a shortcut for a call, an email and a website link with a webcam image as tile background that will be updated every hour.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-cNbXNYtD3PQ/TwazAk847jI/AAAAAAAAKUs/uKmfheTdmoQ/s1600/td1a.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://1.bp.blogspot.com/-cNbXNYtD3PQ/TwazAk847jI/AAAAAAAAKUs/uKmfheTdmoQ/s320/td1a.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XiKQwQeYdZo/TwazECtX7zI/AAAAAAAAKU0/FFFjTSMZXbI/s1600/td1c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-XiKQwQeYdZo/TwazECtX7zI/AAAAAAAAKU0/FFFjTSMZXbI/s320/td1c.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-XAovqiGyxOs/TwazIC80gYI/AAAAAAAAKU8/a322rbeTOso/s1600/td1d.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-XAovqiGyxOs/TwazIC80gYI/AAAAAAAAKU8/a322rbeTOso/s320/td1d.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The generated tiles have frontside and backside information and gives the user quick access to many functionalities. The example tiles looks like this. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-loSshzWS03U/Twaz9tLXX8I/AAAAAAAAKVE/UH45gDqWSYU/s1600/td2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-loSshzWS03U/Twaz9tLXX8I/AAAAAAAAKVE/UH45gDqWSYU/s320/td2.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-8UUFj9P9a_U/Twa0CWu4s1I/AAAAAAAAKVM/tvSkP7iWw-A/s1600/td3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://4.bp.blogspot.com/-8UUFj9P9a_U/Twa0CWu4s1I/AAAAAAAAKVM/tvSkP7iWw-A/s320/td3.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;Like always in my posts, what about the technical stuff? Was there anything exciting? Plenty of them. One of the intersting and new stuff was to show the webcam image on the tile and update them periodicaly. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There are different options to do that. I've chosen the simplest and used the ShellTileSchedule class. My methode looks as simple as this: &lt;br /&gt;&amp;nbsp; &lt;br /&gt;private static void createTileSchedule(ShellTile tile, Uri link) &lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; var tileSchedule = new ShellTileSchedule(tile)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Recurrence = UpdateRecurrence.Interval,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Interval = UpdateInterval.EveryHour,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StartTime = DateTime.Now,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RemoteImageUri = link&lt;br /&gt;&amp;nbsp; };&lt;br /&gt;&amp;nbsp; tileSchedule.Start();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;The parameter tile is the tile where you like to add the webcam image as background. It can be the primary or a secondary tile. The link is the absolut address to a webcam image. Supported are jpg and png files, note that you can only provide a RemoteImageUri. Therefore you must provide an online and available URI that represents an image to download and display. You can’t reference URI from your local application. The image size can NOT exceed 80KB, and download time can NOT exceed 60 sec.&lt;br /&gt;&lt;br /&gt;Is there anything else to deal with? Oh yes! The ShellTileSchedule class is very easy to use but has some big disadvantages. For me the most importants are:&lt;br /&gt;&lt;br /&gt;1. You can’t get the status of the ShellTileSchedule. Even worse is the fact that the schedule might be stopped because for whatever reason (ex. phone is on Airplane Mode) and the tile background wount be refreshed.&lt;br /&gt;2. You have to wait at least 1 hour before the tile is updated for the first time.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mark.mymonster.nl/2010/12/19/solving-3-problems-with-the-shelltileschedule/"&gt;Here&lt;/a&gt; is an excelent article from Mark Monster that addresses this points. And &lt;a href="http://msdn.microsoft.com/en-us/gg266432"&gt;here&lt;/a&gt;&amp;nbsp;are some good informations from Microsoft about Tile Notifications (Chapter 3).&lt;br /&gt;&lt;br /&gt;And after all, if you think you will like the app&amp;nbsp;and it is helpfull for you,&amp;nbsp;please get it here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://windowsphone.com/s?appid=5242b7aa-396a-4b96-93a0-e6af01018ec2"&gt;&lt;img border="0" rea="true" src="http://3.bp.blogspot.com/-n_Ok74x48fo/TwbHVywxO3I/AAAAAAAAKVU/jEzEXP4X_Tk/s1600/Download-EN-Med.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4266346902931130778?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4266346902931130778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4266346902931130778' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4266346902931130778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4266346902931130778'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2012/01/tile-tasks-shortcut-app-for-windows.html' title='Tile Tasks, the shortcut app for Windows Phone'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-cNbXNYtD3PQ/TwazAk847jI/AAAAAAAAKUs/uKmfheTdmoQ/s72-c/td1a.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1276756197571824839</id><published>2011-12-25T09:17:00.000+01:00</published><updated>2011-12-25T09:17:04.491+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>My first WP7 app, the shopping list</title><content type='html'>Beside the "big apps" like facebook, twitter or celsius, the application I use most on my iPhone is the shopping list. It's very helpfull not to write all the things on paper each time but just choose from a list of items I bought recently and add them with&amp;nbsp;one finger movement. The list makes it very convenient to add my stuff and also remembers me of what to buy by looking at all the things from the last weeks. So this is defenitely the first app I need if I win a Nokia Lumia at the&amp;nbsp;MSDN CH contest &lt;a href="http://msdn.microsoft.com/de-ch/hh564103?ocid=otc-n-ch-loc--MSDN"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There must be three elements in the app. The shopping list, the list with recent items and the posibility to add new stuff. A &lt;a href="http://msdn.microsoft.com/en-us/library/ff941104(v=vs.92).aspx"&gt;panorama app&lt;/a&gt; seems to be the perfect thing. With the panorama design I can quickly switch between the three screens.&lt;br /&gt;&lt;br /&gt;A word and a blow. That's what the finished app looks like.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-av5727Zgx5w/TvXwQNBmnLI/AAAAAAAAKT0/khd8VrzpLi0/s1600/PS1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://4.bp.blogspot.com/-av5727Zgx5w/TvXwQNBmnLI/AAAAAAAAKT0/khd8VrzpLi0/s320/PS1.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-suohNlVT-wo/TvXwSHis-bI/AAAAAAAAKT8/qKuiMkEDyaQ/s1600/ps2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://4.bp.blogspot.com/-suohNlVT-wo/TvXwSHis-bI/AAAAAAAAKT8/qKuiMkEDyaQ/s320/ps2.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0Iu5YALb430/TvXwTbvS0mI/AAAAAAAAKUE/CqNPFmdFEXs/s1600/ps3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-0Iu5YALb430/TvXwTbvS0mI/AAAAAAAAKUE/CqNPFmdFEXs/s320/ps3.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;What else does the perfect shopping list need? It should tell you something about your list even if the app is closed. Cool that Windows Phone offers the live tile. This way I'm able to write the number of items to buy to the tile and on the back of the tile I write randomly changing the item names and quantity. So how does this look like? Here we go.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-ZtSMFB5nSLA/TvXxWJKOBSI/AAAAAAAAKUQ/p-b_Nd5a_bo/s1600/Home1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-ZtSMFB5nSLA/TvXxWJKOBSI/AAAAAAAAKUQ/p-b_Nd5a_bo/s320/Home1.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-t7H2Ox_7U1s/TvXxXsQyJ3I/AAAAAAAAKUY/NS_cRR5Re7o/s1600/Home2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" rea="true" src="http://3.bp.blogspot.com/-t7H2Ox_7U1s/TvXxXsQyJ3I/AAAAAAAAKUY/NS_cRR5Re7o/s320/Home2.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And what about the technical stuff? Was there anything exciting? Oh yes, the live tiles, the background agent task or&amp;nbsp;building a drag&amp;amp;drop sortable list are very interessting tasks to do.&lt;br /&gt;&lt;br /&gt;Everybody knows the sortable list from the iPhone. Seems to be a nice and simple control there, because it looks in every app the same and has the same functionality. I thought there must be a control like this in Mango. But there isn't. Thanx to Jason Ginchereau&amp;nbsp;who gave as this missing control. Works very well and you can download it from his blog &lt;a href="http://blogs.msdn.com/b/jasongin/archive/2011/01/03/wp7-reorderlistbox-improvements-rearrange-animations-and-more.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Working with the tiles is the next tasks. Mango gives as a lot of power and working with the tiles is very easy. Writting the number of items to buy to the tile is as easy as this.&lt;br /&gt;&lt;br /&gt;// Application Tile is always the first Tile, even if it is not pinned to Start.&lt;br /&gt;var firstTile = ShellTile.ActiveTiles.First();&lt;br /&gt;&lt;br /&gt;// Application Tile should always be found&lt;br /&gt;if (firstTile != null)&lt;br /&gt;{&lt;br /&gt;// Set the properties to update for the Application Tile.&lt;br /&gt;var newTileData = new StandardTileData&lt;br /&gt;{&lt;br /&gt;Count = number&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Update the Application Tile&lt;br /&gt;firstTile.Update(newTileData);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now let's take a look on how the background agents tasks write the items on the back of the tile. Read the details on how to use it &lt;a href="http://msdn.microsoft.com/en-us/library/hh202942(v=VS.92).aspx"&gt;here&lt;/a&gt;.&amp;nbsp;First we need to register and start a periodic tasks. I start if the app is closing or deactivated.&lt;br /&gt;&lt;br /&gt;// Obtain a reference to the period task, if one exists&lt;br /&gt;var periodicTask = ScheduledActionService.Find(PeriodicTaskName.SHOPPING_LIST_AGENT) as PeriodicTask;&lt;br /&gt;&lt;br /&gt;// If the task already exists and background agents are enabled for the application, &lt;br /&gt;// you must remove the task and then add it again to update the schedule&lt;br /&gt;if (periodicTask != null)&lt;br /&gt;{&lt;br /&gt;ScheduledActionService.Remove(PeriodicTaskName.SHOPPING_LIST_AGENT);&lt;br /&gt;}&lt;br /&gt;periodicTask = new PeriodicTask(PeriodicTaskName.SHOPPING_LIST_AGENT);&lt;br /&gt;&lt;br /&gt;// The description is required for periodic agents. This is the string that the user&lt;br /&gt;// will see in the background services settings page on the device.&lt;br /&gt;periodicTask.Description = "This periodic task shows random items from your Shopping List in the tile background title.";&lt;br /&gt;&lt;br /&gt;// Place the call to Add in a try block in case the user has disabled agents&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;ScheduledActionService.Add(periodicTask);&lt;br /&gt;&lt;br /&gt;#if(DEBUG_AGENT)&lt;br /&gt;ScheduledActionService.LaunchForTest(PeriodicTaskName.SHOPPING_LIST_AGENT, TimeSpan.FromSeconds(10));&lt;br /&gt;#endif&lt;br /&gt;}&lt;br /&gt;catch (InvalidOperationException exception)&lt;br /&gt;{&lt;br /&gt;if (exception.Message.Contains("BNS Error: The action is disabled"))&lt;br /&gt;{&lt;br /&gt;ToastNotifications.Show("Background agents:", "Disabled by the user.");&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;And last but not least we need the agent who is doing the job. Implement this class in a seperate project and make sure to fullfill &lt;a href="http://msdn.microsoft.com/en-us/library/hh202962(v=VS.92).aspx"&gt;this&lt;/a&gt; requirements to pass the certification. In a very simple form this class looks like that.&lt;br /&gt;&lt;br /&gt;public class ScheduledAgent : ScheduledTaskAgent&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;protected override void OnInvoke(ScheduledTask task)&lt;br /&gt;{&lt;br /&gt;#if DEBUG_AGENT&lt;br /&gt;ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(10));&lt;br /&gt;#endif&lt;br /&gt;// Do work&lt;br /&gt;TileNotifications.UpdateTile();&lt;br /&gt;&lt;br /&gt;// Call NotifyComplete to let the system know the agent is done working.&lt;br /&gt;NotifyComplete();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;By adding a reference to this project Visual Studio also&amp;nbsp;adds an entry to the WMAppManifest. That's it. Our shopping list app is finished.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And what else did I learned? If I build a WP7&amp;nbsp;app I need almost more time to do all the design stuff then programming. Nice icons, a cool background image and a well designed app is as important as the functionality itself. To make the user choose your app from&amp;nbsp;&lt;a href="http://www.windowsphone.com/en-US/marketplace"&gt;marketplace&lt;/a&gt; where 100`000 of other&amp;nbsp;apps are available, you need to have a good design.&lt;br /&gt;Next thing that will help to sell your app is offering a trial version. To write good keywords in app hub&amp;nbsp;is also a part of the success (and delimit them with a semicolon). An AboutPage is also a good plan. More about this in the next post.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And after all, if you think you will love the app like I do and it is helpfull for you (or your wife ;-) please get it here.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://windowsphone.com/s?appid=535c7112-75ef-46a1-93c9-d1864c528dda"&gt;&lt;img border="0" rea="true" src="http://2.bp.blogspot.com/-6yW6crMqqlY/TvXyWVY1yZI/AAAAAAAAKUk/1UAnRVuDMOo/s1600/Download-EN-Med.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1276756197571824839?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1276756197571824839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1276756197571824839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1276756197571824839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1276756197571824839'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/12/my-first-wp7-app-shopping-list.html' title='My first WP7 app, the shopping list'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-av5727Zgx5w/TvXwQNBmnLI/AAAAAAAAKT0/khd8VrzpLi0/s72-c/PS1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-5188672059300757489</id><published>2011-12-21T17:18:00.000+01:00</published><updated>2011-12-21T17:18:08.157+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>My first Windows Phone 7 Game</title><content type='html'>&lt;div&gt;As I wrote in my last post my first windows phone app was a game called Simon aka Saimon&amp;nbsp;or here in Switzerland better known as Senso. It's a classic brain game from the 80ies and everybody in my age will know&amp;nbsp;the old version from MB&amp;nbsp;I guess.&lt;br /&gt;&lt;br /&gt;The goal of the game is to repeat the color sequences&amp;nbsp;as long as you can. You will start with one color and with every right reputation one additional color will be added.&lt;br /&gt;&lt;br /&gt;And this is what the game looks like.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-jV7VEAotBMk/TvH9E__EYyI/AAAAAAAAKTg/tdk8fj_pnyE/s1600/senso1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" oda="true" src="http://2.bp.blogspot.com/-jV7VEAotBMk/TvH9E__EYyI/AAAAAAAAKTg/tdk8fj_pnyE/s320/senso1.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;To make the game more interesting I added different color schemas. You got the classic&amp;nbsp;design&amp;nbsp;in a nice Windows Phone Metro Style look, a dark and a bright color schema which are harder to play.&lt;br /&gt;To make the game more addicting and more fun to play I added a statistic and you and your friends can set up a competition.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-f8eaqKlUu04/TvICcAawteI/AAAAAAAAKTo/MQ6r7gTHHgw/s1600/senso4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" oda="true" src="http://1.bp.blogspot.com/-f8eaqKlUu04/TvICcAawteI/AAAAAAAAKTo/MQ6r7gTHHgw/s320/senso4.png" width="192px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;And now we take a look at the programming. Was there anything exciting? At the begining everything was straight forward. Take four buttons, setup some storyboards, ...&lt;br /&gt;Then&amp;nbsp;I wanted to add four sounds for the button clicks. In a Silverlight App for WP7&amp;nbsp;there is the media tag for a background sound. After a short google session it was clear not to use the media tag. It's not right thing&amp;nbsp;for my needs, playing different sounds in a short sequence. &lt;br /&gt;What I need is the SoundEffect class from the Microsoft.Xna.Framework.Audio. To make this sounds work you also need the FrameworkDispatcher class. &lt;br /&gt;So first thing to do is to add a reference to the Microsoft.Xna.Framework.dll. Then you got access to all the classes you need. For the rest take a look at the &lt;a href="http://msdn.microsoft.com/en-us/library/ff431744(v=vs.92).aspx"&gt;Sound Sample&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After all, if you think you like the game get it here. Or if you not sure yet, wait for the trail version that&amp;nbsp;is already submitted to Microsoft.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://windowsphone.com/s?appid=9bd0eeff-44af-4c05-9ccb-3b013484724d"&gt;&lt;img border="0" oda="true" src="http://1.bp.blogspot.com/-940mLgdV9f4/TvHrdvHxQrI/AAAAAAAAKTY/wmVzUh52qb4/s1600/Download-EN-Med.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-5188672059300757489?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/5188672059300757489/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=5188672059300757489' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5188672059300757489'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5188672059300757489'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/12/my-first-windows-phone-7-game.html' title='My first Windows Phone 7 Game'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-jV7VEAotBMk/TvH9E__EYyI/AAAAAAAAKTg/tdk8fj_pnyE/s72-c/senso1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6051919944785119540</id><published>2011-12-18T13:02:00.001+01:00</published><updated>2011-12-19T17:56:07.155+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='WP7'/><title type='text'>How to start with Windows Phone Development</title><content type='html'>Before I actualy start let me tell you one thing: I can't realy write something new. Everything about windows phone development is already out there. But lets start the story three weeks ago. &lt;br /&gt;&lt;br /&gt;Three weeks ago I wanted to do something new. At this time I read from @techpreacher on &lt;a href="http://www.twitter.com/"&gt;Twitter&lt;/a&gt; that Microsoft Switzerland started a contest where you can win a Nokia Lumia, the new Windows Phone from Nokia. Read more about it &lt;a href="http://blogs.msdn.com/b/swiss_dpe_team/archive/2011/11/15/wettbewerb-nokia-lumia-phones-und-surface-zu-gewinnen.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;That was good motivation for me and Windows Phone or short WP7 development was the thing to do. It was a good idea to get some more knowledge in this area specially because the Windows 8 Metro Style App developement is pretty close to WP7 development. This I learned at a &lt;a href="http://www.msugs.ch/"&gt;MSUGS&lt;/a&gt; event where Maik Schärer talked about it. So this will also be a good investment for the future.&lt;br /&gt;&lt;br /&gt;The idee for the first app was to build the cool&amp;nbsp;Senso game from the 80ies which&amp;nbsp;I already did ten years ago for the hp and compaq pda's everybody in my age will surely remeber. So let's start.&lt;br /&gt;&lt;br /&gt;I already had a WindowsLive account, Visual Studio 2010 installed and some Silverlight knowlage. I asked Google what to do next. I need the Windows Phone SDK 7.1. Version 7.1 to build Windows Phone 7.5 (Mango) apps? Yes that's right :-) Get it from &lt;a href="http://create.msdn.com/en-us/home/getting_started"&gt;here&lt;/a&gt;. If you installed the SDK you got everything you need to develop a WP7 app and test it on the emulator. You don't evan need a windows phone. &lt;br /&gt;Another must have tool ist the &lt;a href="http://silverlight.codeplex.com/releases/view/75888"&gt;Silverlight for&amp;nbsp;Windows Phone Toolkit&lt;/a&gt; which provides a lot of useful additional controls. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Now the technical part begins. Start Visual Studio, choose the right templete for your app, etc. It makes no sense if I write anything about the dev part in this blog. Everything on how to start you will find &lt;a href="http://create.msdn.com/en-US/"&gt;here&lt;/a&gt;, start under education. Another great resource is &lt;a href="http://msdn.microsoft.com/en-us/library/ff402535(v=vs.92).aspx"&gt;MSDN&lt;/a&gt;. And already in the first view hours I had a lot of specific questions, problems and no answers. All the answers I found on the great &lt;a href="http://windowsphonegeek.com/"&gt;WindowsPhoneGeek&lt;/a&gt; site. Give it a try! &lt;br /&gt;&amp;nbsp; &lt;br /&gt;If you wanna make your App available to others, you need an account on &lt;a href="http://create.msdn.com/en-US/"&gt;AppHub&lt;/a&gt;. The registration is straight forward but will cost you a few bucks. The only strange thing was the exchange rate. $ 99.- in the US and CHF 129.- in Switzerland. C'mon Microsoft, what's wrong with you guys!? Anyway, pay and they do a real good job for you by selling your App to the whole world. I think it's a faire deal. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;To get your App certified you have to fullfill a lot of requirements. It's a good idea to read &lt;a href="http://msdn.microsoft.com/en-us/library/hh202939(v=VS.92).aspx"&gt;this&lt;/a&gt; section on MSDN. It gives you a good understanding on what are the dos and don'ts so that your App will be available on the whole world soon. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Last thing I learned, give them a trial version of your App. The statistic sais, you will sell 70% more this way. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;So now have fun developing wp7 apps and games! &lt;br /&gt;&amp;nbsp; &lt;br /&gt;Ohh,&amp;nbsp;one last thing, buy my Apps on the &lt;a href="http://www.windowsphone.com/"&gt;Microsoft Marketplace&lt;/a&gt; and follow &lt;a href="http://twitter.com/jctrachsel"&gt;me&lt;/a&gt; on twitter for more great hints ;-) &lt;br /&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6051919944785119540?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6051919944785119540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6051919944785119540' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6051919944785119540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6051919944785119540'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/12/how-to-start-with-windows-phone.html' title='How to start with Windows Phone Development'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-2311942078124819343</id><published>2011-10-17T10:24:00.001+02:00</published><updated>2011-10-17T12:22:44.590+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Web Application Performance Tuning</title><content type='html'>In my actual project I have to do&amp;nbsp;the performance tuning of a Microsoft Dynamics CRM System. From a&amp;nbsp;technical viewpoint this is&amp;nbsp;just an ASP.NET WebForms and WCF Services application. Therefore I was looking for some tools to monitor and analyse a web application. The customer&amp;nbsp;don't want to&amp;nbsp;spend any money on a tool, therefore it has to be free, open source or at least under $100.-.&amp;nbsp;Here is a list of what I have found and what I use now.&lt;br /&gt;&lt;br /&gt;IE Developer Toolbar&lt;br /&gt;Used to analyse the HTML that is rendered in the browser. Very usefull to fix design bugs.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.fiddler2.com/"&gt;Fiddler2&lt;/a&gt;&lt;br /&gt;Used to analyse what is sent and received over the wire. Analyse traffic, header information, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dynatrace.com/"&gt;DynaTrace Ajax Edition&lt;/a&gt;&lt;br /&gt;Used to analyse what's going on on the client. Used to analyse CPU and memory usage, JavaScript, etc.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ca.com/"&gt;IntroScope&lt;/a&gt;&lt;br /&gt;Used to analyse what happens on the server. Used to analyse CPU and memory usage, code, queries to the db, etc.&lt;br /&gt;&lt;br /&gt;Not used yet&lt;br /&gt;- HttpWatch &lt;br /&gt;- NetMon&lt;br /&gt;- Windows Performance Monitor &lt;br /&gt;- Windows Resource Monitor&lt;br /&gt;- Visual Round Trip Analyser&lt;br /&gt;- Performance Toolkit for Microsoft Dynamics CRM 2011&lt;br /&gt;&lt;br /&gt;Any further recommendations are very welcome. Write your comment!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-2311942078124819343?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/2311942078124819343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=2311942078124819343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2311942078124819343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2311942078124819343'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/10/web-application-performance-tuning.html' title='Web Application Performance Tuning'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-7710329237505831343</id><published>2011-10-11T09:46:00.000+02:00</published><updated>2011-10-11T09:46:54.242+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQueryMobile'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Mobile 1.0 RC1 released</title><content type='html'>&lt;strong&gt;The future is mobile.&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;At the Microsoft conference &lt;a href="http://www.buildwindows.com/"&gt;Build&lt;/a&gt; last month, ASP.NET MVC 4 was announced and with it the &lt;a href="http://jquerymobile.com/"&gt;jQuery Mobile Framework&lt;/a&gt;. Since a few days jQuery Mobile 1.0 RC1 is released. But what is jQuery Mobile? &lt;br /&gt;&lt;br /&gt;There Website tells us:&lt;br /&gt;A unified user interface system across all popular mobile device platforms, built on the rock-solid jQuery and jQuery UI foundation. Its lightweight code is built with progressive enhancement, and has a flexible, easily themeable design.&lt;br /&gt;&lt;br /&gt;So let's see what it does and how it can be used. I build a small demo web application with ASP.NET MVC 4. Based on the AdventureWorks database and the vendor table I got a form that looks in the Windows Phone emulator like that.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-ki6hxfUklQg/TpPqEGOfFOI/AAAAAAAAKRU/kYv_1tspKKQ/s1600/Capture1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" oda="true" src="http://2.bp.blogspot.com/-ki6hxfUklQg/TpPqEGOfFOI/AAAAAAAAKRU/kYv_1tspKKQ/s320/Capture1.JPG" width="172px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Looks not too bad but not really phone like.&amp;nbsp;Via NuGet I install jQuery.Mobile.MVC which is based on jQuery.Mobile. After the installation I already have a new design because of the new MasterPage that was installed with the package. The site looks like:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-O_IBQia9CpA/TpPrTw9Qa-I/AAAAAAAAKRc/RjSMBrNEOYk/s1600/Capture2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" oda="true" src="http://4.bp.blogspot.com/-O_IBQia9CpA/TpPrTw9Qa-I/AAAAAAAAKRc/RjSMBrNEOYk/s320/Capture2.JPG" width="172px" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Much better already. But where does this changes come from? If we take a look at the new mobile MasterPage we'll find the following code:&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-jdXlguC6sBc/TpPtBBXYFpI/AAAAAAAAKRk/rKuzS-iMcgs/s1600/Capture3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" oda="true" src="http://3.bp.blogspot.com/-jdXlguC6sBc/TpPtBBXYFpI/AAAAAAAAKRk/rKuzS-iMcgs/s1600/Capture3.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;In this code snippet we see two new attributes (data-role and&amp;nbsp;data-theme)&amp;nbsp;which belong to jQuery Mobile and they are the reason for the new formatting.&lt;br /&gt;&lt;br /&gt;If we like to format the Create New&amp;nbsp;link on top of the side, so it will&amp;nbsp;be a touchable button instead of the normal link, it's that simple. Just add the attribute data-role="button" and if you also&amp;nbsp;like an image next to it data-icon="plus". After that small change&amp;nbsp;it looks like:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Lq1yupU_rb8/TpPumpbwkgI/AAAAAAAAKRs/5AlclFl55KQ/s1600/Capture4.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320px" oda="true" src="http://1.bp.blogspot.com/-Lq1yupU_rb8/TpPumpbwkgI/AAAAAAAAKRs/5AlclFl55KQ/s320/Capture4.JPG" width="171px" /&gt;&lt;/a&gt;&lt;/div&gt;Pretty easy, isn't it. There are a lot more functionality and design stuff in jQuery Mobile. Check out there website and attend my session at &lt;a href="http://www.techdays.ch/"&gt;TechDays&lt;/a&gt; in Bern.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-7710329237505831343?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/7710329237505831343/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=7710329237505831343' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7710329237505831343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7710329237505831343'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/10/jquery-mobile-10-rc1-released.html' title='jQuery Mobile 1.0 RC1 released'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-ki6hxfUklQg/TpPqEGOfFOI/AAAAAAAAKRU/kYv_1tspKKQ/s72-c/Capture1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4896657576963238768</id><published>2011-09-27T15:16:00.002+02:00</published><updated>2011-09-27T15:22:37.072+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>ASP.NET MVC 4 Developer Preview Released</title><content type='html'>At the Build conference Microsoft has announced the availability of ASP.NET MVC 4 Developer Preview. The following are the some of the new features of ASP.NET MVC 4 Developer Preview.&lt;br /&gt;◦Enhancements to Default Project Templates&lt;br /&gt;◦Mobile Project Template&lt;br /&gt;◦Display Modes&lt;br /&gt;◦jQuery Mobile, the View Switcher, and Browser Overriding&lt;br /&gt;◦Recipes for Code Generation in Visual Studio&lt;br /&gt;◦Task Support for Asynchronous Controllers&lt;br /&gt;&lt;br /&gt;For more information join my talk on Oktober 21, 2011 at &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/default.aspx"&gt;TechDays&lt;/a&gt; in Bern. Hope to see you there!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4896657576963238768?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4896657576963238768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4896657576963238768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4896657576963238768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4896657576963238768'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/09/aspnet-mvc-4-developer-preview-released.html' title='ASP.NET MVC 4 Developer Preview Released'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4217417861148708522</id><published>2011-09-20T10:02:00.008+02:00</published><updated>2011-09-20T16:42:21.092+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WinRT'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 8'/><title type='text'>Windows 8, WinRT, .NET 4.5 and more</title><content type='html'>Last week at the Build conference in Anaheim CA lots of new announcements have been made. The big things were Windows 8, Metro Style Apps and WinRT. But also .NET 4.5, ASP.NET MVC 4 and other new stuff came up.&lt;br /&gt;&lt;br /&gt;Sadly I had to stay at home and did not get all the information from the remarkable experts who were speaking at Build (and did not get the cool tablet). But after I read a lot of Blogs and talked to a lot of friends (some have been there) I will write in this post what the most important news is to me.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Windows 8&lt;/strong&gt; has two modes. The &lt;em&gt;Desktop&lt;/em&gt; mode addressing the business needs using keyboard and mouse (this is where all our Win7 Apps are running in the future) and the new &lt;em&gt;Metro style&lt;/em&gt; mode addressing the lifestyle needs with touch etc.&lt;br /&gt;Therefore there are also two development stacks. The big picture is shown below.&lt;br /&gt;&lt;br /&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 180px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5654353889284634210" border="0" alt="" src="http://2.bp.blogspot.com/-mnicZDMvw6Y/TnhM530otmI/AAAAAAAAKRQ/SOZr6m5v9v4/s320/win8.png" /&gt;&lt;br /&gt;&lt;br /&gt;On the right side there is the &lt;em&gt;Desktop&lt;/em&gt; mode stack in blue with .NET 4.5, C# ?, Silverlight 5, WPF ?, HTML 5, etc. Pretty much the same as we’re having today.&lt;br /&gt;On the left side in green there is the new &lt;em&gt;Metro style&lt;/em&gt; mode stack with WinRT, C# 5, XAML, HTML 5 etc. that brings the big news.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WinRT&lt;/strong&gt;&lt;br /&gt;Also WinRT is not completely new. WinRT covers a great part of the Win32 functionality and many of the .NET 4.5 libraries are also (unmanaged) WinRT libraries. But stuff like WinForms etc. will definitely not be part of WinRT and can be found just in the Desktop App part where the full .NET 4.5 framework is located.&lt;br /&gt;A thin managed layer gives the developer the C# programming API. With C++ this layer is not needed what could be an advantages for some critical scenarios. JavaScript uses the Chakra Engine to access WinRT.&lt;br /&gt;Fast and fluid is what we heard a lot when someone talks about Metro style apps. There is a good chance that the WinRT APIs are mostly asynchronous. The C# 5 features will help as to handle this approach.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Portability&lt;/strong&gt;&lt;br /&gt;HTML/JavaScript Metro style apps are not typical web programming and are not cross platform. Furthermore they will be build specially for Windows 8 using the WinRT APIs.&lt;br /&gt;XAML/C# Metro style apps are neither Silverlight nor WPF. They are something new using the WinRT APIs. Silverlight and WPF Apps are still present on the Desktop App side.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Business thoughts&lt;/strong&gt;&lt;br /&gt;Pretty cool all this new possibilities (Metro style apps) and all the old ones (Desktop apps) are also still working (even WinForms). Pretty cool that I can use all my existing knowlege to build the app of the future by only learning a few new things (WinRT).&lt;br /&gt;As a developer employed by a software vendor working on one product I'm probably really happy. I can choose the technology I'm familiar with and addresses my needs best.&lt;br /&gt;Being a .NET consultant at Trivadis it's not just fun because my boss expects me to do whatever my next customer prefers and therefore I do have to know just everything. And what about a service and maintenance team if every app comes in another technology?&lt;br /&gt;Am I completely wrong by thinking the wide range of technologies ends up in superficial knowledge and in a next step in bad quality? Probably it would have been a good idea to make the world a little bit easier!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4217417861148708522?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4217417861148708522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4217417861148708522' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4217417861148708522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4217417861148708522'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/09/windows-8-winrt-net-45-and-more.html' title='Windows 8, WinRT, .NET 4.5 and more'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-mnicZDMvw6Y/TnhM530otmI/AAAAAAAAKRQ/SOZr6m5v9v4/s72-c/win8.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4049541073811141235</id><published>2011-05-04T10:11:00.003+02:00</published><updated>2011-05-08T19:29:04.424+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Razor'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>TechDays 11, ASP.NET MVC</title><content type='html'>TechDays 11 in Basel are over and we all had a great time with lot of interesting informations.&lt;br /&gt;&lt;br /&gt;On the &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/default.aspx"&gt;TechDays Website&lt;/a&gt; you will find soon the recordings and the slides.&lt;br /&gt;&lt;br /&gt;If anybody is interested in the demo application of my Speech "Mit ASP.NET MVC zur praxistauglichen Webseite" please let me know and I will send it to you.&lt;br /&gt;&lt;br /&gt;If you missed my speech your next chance to get more information about ASP.NET MVC and Razor is at the &lt;a href="http://www.seesharpparty.de/"&gt;See#Party&lt;/a&gt; in Konstanz.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4049541073811141235?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4049541073811141235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4049541073811141235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4049541073811141235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4049541073811141235'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/05/techdays-11-aspnet-mvc.html' title='TechDays 11, ASP.NET MVC'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6944635499069876168</id><published>2011-04-21T11:08:00.013+02:00</published><updated>2011-04-21T13:42:04.848+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Razor'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>Razor Inside Templates</title><content type='html'>In the &lt;a href="http://it-republik.de/dotnet/dotnet-magazin-ausgaben/Internet-Explorer-9-000439.html"&gt;dot.NET Magazin 4.2011&lt;/a&gt; I wrote an article about Razor, the new view engine that comes with ASP.NET MVC 3. Therefore, it is probably obvious that I worked a lot with Razor. Despite all my work with this amazing new view engine I really love, I just discovered this week another interesting feature which I call the "Razor Inside Templates".&lt;br /&gt;&lt;br /&gt;So what is it all about? Let's take a look at an easy example:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-38d9d6Kqp4Y/TbAAOz4cEOI/AAAAAAAAKQM/YzIquOcjYNU/s1600/1.JPG"&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/-EbrIwWp14BE/TbAKo-06gGI/AAAAAAAAKQc/SJml-qnqIJs/s1600/1.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 54px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597986035997507682" border="0" alt="" src="http://4.bp.blogspot.com/-EbrIwWp14BE/TbAKo-06gGI/AAAAAAAAKQc/SJml-qnqIJs/s320/1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Even so this is a very simple example, there are some magic points to look at.&lt;br /&gt;&lt;br /&gt;First we define a Func with the parameter type string and get back a return value with the type HelperResult. Instead of the string parameter we could use any type. Even dynamic is an option so we can pass in an anonymous type. This is shown in the next example.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-tZtxd6nyfhw/TbAIEHQ0ZnI/AAAAAAAAKQU/Lqyq80NAH80/s1600/2.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5597983203583616626" border="0" alt="" src="http://3.bp.blogspot.com/-tZtxd6nyfhw/TbAIEHQ0ZnI/AAAAAAAAKQU/Lqyq80NAH80/s320/2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The second magic point is the item object. With the @item it is possible to access the parameter data passed in. Now the basics are clear and we love the inside templates. But is this all or where does this lead us to?&lt;br /&gt;&lt;br /&gt;Think of the possibility to write an extension method doing a loop. Instead of just passing in the data, the extension method can accept a template as a parameter. So we could build a WebForms Repeater control. Interesting thought, right?&lt;br /&gt;&lt;br /&gt;Let's take a look at the example.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/-X2kA00kR9zY/TbASvlByCoI/AAAAAAAAKQk/nsFHa2YsezI/s1600/3.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 81px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597994945424263810" border="0" alt="" src="http://3.bp.blogspot.com/-X2kA00kR9zY/TbASvlByCoI/AAAAAAAAKQk/nsFHa2YsezI/s320/3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;This is the extension method doing the loop by using the template.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-zjUGNutImA0/TbAT6zou2bI/AAAAAAAAKQs/i8UYgfW3Gns/s1600/4.JPG"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 73px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5597996237835917746" border="0" alt="" src="http://4.bp.blogspot.com/-zjUGNutImA0/TbAT6zou2bI/AAAAAAAAKQs/i8UYgfW3Gns/s320/4.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;And that's how I used the above extension method to list all vendor names from the AdventureWorks database by using a template.&lt;br /&gt;&lt;br /&gt;There are many more situation where we can use the inside template feature to build code in a simple and nice way and where we can reuse the functionality because of the templating option.&lt;br /&gt;&lt;br /&gt;More about it and how it works under the hood, you can read in this blog by &lt;a href="http://vibrantcode.com/blog/2010/8/2/inside-razor-part-3-templates.html"&gt;Andrew Nurse&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6944635499069876168?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6944635499069876168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6944635499069876168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6944635499069876168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6944635499069876168'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/04/razor-inside-templates.html' title='Razor Inside Templates'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-EbrIwWp14BE/TbAKo-06gGI/AAAAAAAAKQc/SJml-qnqIJs/s72-c/1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1565802510122687913</id><published>2011-03-28T13:34:00.010+02:00</published><updated>2011-03-29T10:15:33.823+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DataAnnotations'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Localized Validation with DataAnnotations in Silverlight</title><content type='html'>Like the title explains, I like to validate input in my Silverlight application. I want to do it with DataAnnotations and I also want my ErrorMessages to be in the language of the user. Sounds pretty easy, not?&lt;br /&gt; &lt;br /&gt;My solution has the following projects &lt;br /&gt;- Data project with my Entity Framework Model &lt;br /&gt;- Web project hosting my Silverlight application and my WCF RIA Services &lt;br /&gt;- Silverlight project, that’s my application &lt;br /&gt;&lt;br /&gt;The idee of DataAnnotations is to define the validation in one place and use it in all clients. WCF RIA Services as well as ASP.NET MVC generate client code based on the server site DataAnnotations and that’s pretty cool. &lt;br /&gt;&lt;br /&gt;Therefore I build a partial class for my entity ‘Foo’ and set the attribute [MetadataType(typeof(FooMetadata))] on it and build the ‘FooMetadata’ class in which I set the DataAnnotations attributs. To be precise I define the Required attribute on my property ‘Name’. All that in a central place, the Data project. &lt;br /&gt;&lt;br /&gt;Then I run the application. Everything works fine. Great! &lt;br /&gt;&lt;br /&gt;Now I need the localization. I'm adding a resx File with the error messages for my validation. On the Required attribute I add the resources like this [Required(ErrorMessageResourceName = "Required", ErrorMessageResourceType = typeof(ValidationResources))]. So far so good. Now I build the project and I get an error in the client side class generated thru the WCF RIA Services instead of the DataAnnotations attribute. Type ValidationResources is not known in the client project does it say. Hmm, that's probably right. &lt;br /&gt;&lt;br /&gt;First idea is to add a common project to my solution, add the resx to this project and reference it from the Silverlight and the Data project. Bad idea because the Silverlight project can only refer Silverlight projects and the Data project is not happy with a Silverlight class library. So I could go the long way and add a 'normal' class library with the resx File and a Silverlight class library with the resx files linked in and so on. &lt;br /&gt;&lt;br /&gt;I do it the simple way and link the resx files from the Data project direct to my Silverlight project by clicking Add-&gt;Existing Item-&gt;Add as Link. Now I got the type with the same namespace in both projects. To make it look nice in Visual Studio I can edit the Silverlight project file and add the dependency beetween the resx and the generated code file in notepad. &lt;br /&gt;WCF RIA Services are generating the right classes with all the attributes and the solution is building. Are we done yet? &lt;br /&gt;&lt;br /&gt;When I run the application I discover one last problem. In my generated resx access code file I find the following line: &lt;br /&gt;… global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Namespace.ValidationResources", typeof(ValidationResources).Assembly);…&lt;br /&gt; &lt;br /&gt;Because the namespace is different in the two projects, the resx (XML) file can’t be found at runtime. If I change it to the Silverlight project namespace, everything works fine. But if I would run the custom tool again, my changes are gone. This is not a good solution.&lt;br /&gt;&lt;br /&gt;So I move the resx file to the Silverlight application. Everything is generated the right way here. Now I link in the generated code file in the Data project to make the type available for the DataAnnotations attributes. That’s it.&lt;br /&gt;&lt;br /&gt;It's also not the perfect solution because if I do have a secound GUI like an ASP.NET MVC application I do need the resx file also in this project. So, if there is a better solution out there please let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1565802510122687913?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1565802510122687913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1565802510122687913' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1565802510122687913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1565802510122687913'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/03/localized-validation-with.html' title='Localized Validation with DataAnnotations in Silverlight'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6811149728923246994</id><published>2011-01-21T17:05:00.008+01:00</published><updated>2011-01-26T20:27:47.156+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>ASP.NET and asynchronous communication</title><content type='html'>Today I had to add a delete function to an old ASP.NET WebForms website. It was missing because there are a lot of relational data. So the steps to delete a record are:&lt;br /&gt;- Click delete button&lt;br /&gt;- Proof of existing relational data&lt;br /&gt;- Show the result to the customer (and ask what to do)&lt;br /&gt;- Delete all or cancel the delete action&lt;br /&gt;&lt;br /&gt;Because I'm used to work with ASP.NET MVC, I thought on jQuery to solve the problem. Async calls to an Action on a Controller class and showing the result in a modal popup are easy tasks to do in ASP.NET MVC. This because of the MVC architecture, specially the Routing Engine used in MVC.&lt;br /&gt;But in this case, I had to deal with ASP.NET WebForms and no routing to a Controller class. So how to solve the problem? I saw four different ways to do it:&lt;br /&gt;1) Build a WCF Service and call it with jQuery&lt;br /&gt;2) Create a ashx handler and call it with jQuery&lt;br /&gt;3) Set the [WebMethod] Attribute to a method in the aspx page and call it with jQuery&lt;br /&gt;4) Use the ScriptManager, the [WebMethod] and [ScriptMethod] Attribute&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The first option (1), building a WCF Service is to much work for this small task.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The secound option (2) is quite good. The only thing I don't like is, I have to deal with two files what makes maintainance harder. Let's take a look at this solution anyway.&lt;br /&gt;The jQuery code to call the handler looks like:&lt;br /&gt;&lt;br /&gt;$(document).ready(function () {&lt;br /&gt;  $("#deleteButton").click(function () {&lt;br /&gt;  $.ajax({&lt;br /&gt;    type: "POST",&lt;br /&gt;    url: "Handler1.ashx",&lt;br /&gt;    data: "{'siteId':'" + id + "'}",&lt;br /&gt;    contentType: "application/json; charset=utf-8",&lt;br /&gt;    dataType: "json",&lt;br /&gt;    success: function (msg) {&lt;br /&gt;      // What you like to do on success&lt;br /&gt;    },&lt;br /&gt;    fail: function (msg) {&lt;br /&gt;      // What you like to do on error&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;  });&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;The Handler (ashx-File) can be added easily with Visual Studio. Just select the Generic Handler template. The code looks like:&lt;br /&gt;&lt;br /&gt;public class Handler1 : IHttpHandler&lt;br /&gt;{&lt;br /&gt;  public void ProcessRequest(HttpContext context)&lt;br /&gt;  {&lt;br /&gt;    // Check for relational data and generate the message&lt;br /&gt;    var message = "Generated message for the user";&lt;br /&gt;&lt;br /&gt;    context.Response.ContentType = "text/plain";&lt;br /&gt;    context.Response.Write(message);&lt;br /&gt;  }&lt;br /&gt;...&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The third option (3) is in this case my favorite. Simple and easy. The jQuery call is the same, just the URL changes to something like&lt;br /&gt;...&lt;br /&gt;url: "SiteName.aspx/IsDeletable",&lt;br /&gt;...&lt;br /&gt;where the parameter after the slash is the name of the method.&lt;br /&gt;In the ASPX-File we have to add a static method and decorate it with the [WebMethod] attribute. That's it! The code looks like:&lt;br /&gt;&lt;br /&gt;[WebMethod]&lt;br /&gt;public static string IsDeletable(Guid siteId)&lt;br /&gt;{&lt;br /&gt;  // Check for relational data and generate the message&lt;br /&gt;  var message = "Generated message for the user";&lt;br /&gt;  return message;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;IMPORTANT: The method has to be static.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The last option is ASP.NET WebForms specific and uses the ScriptManager. In my opinion do we have a better solution with the jQuery version. Anyway, here is what you need:&lt;br /&gt;&lt;br /&gt;Add a ScriptManager as follow:&lt;br /&gt;... ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true" ...&lt;br /&gt;&lt;br /&gt;Add JavaScript code to make the call:&lt;br /&gt;...&lt;br /&gt;PageMethods.IsDeletable(id);&lt;br /&gt;...&lt;br /&gt;Notice that this is just the call. Get and handle the return value has to be added as well.&lt;br /&gt;&lt;br /&gt;And on the method in our aspx-File we do need an additional attribute:&lt;br /&gt;[System.Web.Script.Services.ScriptMethod()]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Now it's up to you to choose your right solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6811149728923246994?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6811149728923246994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6811149728923246994' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6811149728923246994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6811149728923246994'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/01/aspnet-and-asynchronous-communication.html' title='ASP.NET and asynchronous communication'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-7338112109886173165</id><published>2011-01-14T10:40:00.003+01:00</published><updated>2011-01-14T11:12:28.398+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Everything just random?</title><content type='html'>Today I had to fix some code of a colleague. To test the class I've fixed, there was a mock class generating random testdata. But this testdata were always the same. So I looked also at this problem and found the following code:&lt;br /&gt;&lt;br /&gt;for (int i = foo; i &lt; bar; i++)&lt;br /&gt;{&lt;br /&gt;    return new Random().Next();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Looks good at first glance, but this will always return the same number (at least in the same second). This is because the Random class uses in the default constructor a time-dependent default seed value.&lt;br /&gt;&lt;br /&gt;An easy way to fix the problem would be to use the overloaded constructor and provide a unique seed value. For example just the int value i used for the for loop. This could look like:&lt;br /&gt;&lt;br /&gt;for (int i = foo; i &lt; bar; i++)&lt;br /&gt;{&lt;br /&gt;    return new Random(i).Next();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Another way to get random numbers would be in using the Next method in a correct way. This meens on the same instance of the Random class. In this case the initialization of the Random class has to be outside the loop. The code would look like this:&lt;br /&gt;&lt;br /&gt;var r = new Random();&lt;br /&gt;for (int i = foo; i &lt; bar; i++)&lt;br /&gt;{&lt;br /&gt;    return new r.Next();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;This way would definitely be better, then we need just one instance of the Random class.&lt;br /&gt;&lt;br /&gt;Further information on the Random class can be found here &lt;a href="http://msdn.microsoft.com/en-us/library/system.random.aspx"&gt;http://msdn.microsoft.com/en-us/library/system.random.aspx&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-7338112109886173165?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/7338112109886173165/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=7338112109886173165' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7338112109886173165'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7338112109886173165'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/01/everything-just-random.html' title='Everything just random?'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8528839346730902093</id><published>2011-01-04T15:44:00.005+01:00</published><updated>2011-01-05T13:29:52.719+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><title type='text'>Relaunch</title><content type='html'>Welcome back!&lt;br /&gt;After a pretty long break in blogging I'm starting over again. Trivadis gave me a good reason for it ;-) Hopefully there are coming up a lot of interesting themes in 2011.&lt;br /&gt;&lt;br /&gt;I'm sure &lt;b&gt;ASP.NET MVC&lt;/b&gt; will be big also this year with the release of version 3. I'm doing definitely some interesting post about it. But my first activity is a speech for MSUGS on February 17, 2011. For more infos visit &lt;a href="http://www.msugs.ch/Events/tabid/60/ModuleID/380/ItemID/36/mctl/EventDetails/Default.aspx?selecteddate=17.02.2011"&gt;MSUGS&lt;/a&gt;. And I will do a session at &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays/default.aspx"&gt;TechDays 2011&lt;/a&gt; in May as well.&lt;br /&gt;&lt;br /&gt;Further there will be the first public beta release of &lt;b&gt;Silverlight 5&lt;/b&gt; in spring with many new cool features like:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Richer Media Support&lt;/li&gt;&lt;li&gt;3D Support&lt;/li&gt;&lt;li&gt;P/Invoke&lt;/li&gt;&lt;li&gt;Elevated rights in the browser&lt;/li&gt;&lt;li&gt;Vector printing&lt;/li&gt;&lt;li&gt;Multiple windows (out-of-Browser only)&lt;/li&gt;&lt;li&gt;Improved DataBinding (almost like in WPF)&lt;/li&gt;&lt;li&gt;Custom MarkupExtensions&lt;/li&gt;&lt;li&gt;Debugging DataBinding&lt;/li&gt;&lt;li&gt;UI Testing&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So stay tuned!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8528839346730902093?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8528839346730902093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8528839346730902093' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8528839346730902093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8528839346730902093'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2011/01/relaunch.html' title='Relaunch'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-5050545395937247718</id><published>2009-04-10T13:05:00.003+02:00</published><updated>2011-01-04T15:42:22.215+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET MVC'/><title type='text'>ASP.NET MVC</title><content type='html'>Nachdem ich mich nun seit rund einem Jahr mit dem ASP.NET MVC Framework beschäftige, durfte ich an den TechDays 2009 in Bern einen entsprechenden Vortrag halten. Die Slides und Demos werden in Kürze unter &lt;a href="http://www.microsoft.com/switzerland/msdn/de/techdays"&gt;TechDays&lt;/a&gt; verfügbar sein.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-5050545395937247718?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/5050545395937247718/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=5050545395937247718' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5050545395937247718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5050545395937247718'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2009/04/aspnet-mvc.html' title='ASP.NET MVC'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4898620005841655818</id><published>2008-03-11T08:33:00.008+01:00</published><updated>2008-03-11T21:36:22.906+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Virtual, new and override - the differences</title><content type='html'>Auf die Frage was ist der Unterschied zwischen new und override, im konkreten Fall für ein Property verwendet, bekommt man stehts die korrekte Antwort. New versteckt das Property in der Basisklasse, override überschreibt dieses. Gut, aber was heisst das genau? Nun werden die sinnvollen Antworten doch eher rare.&lt;br /&gt;&lt;br /&gt;Folgendes Beispiel zeigt die Funktionsweisen auf. Parent ist die Basisklasse, die zwei Properties Foo und Bar anbietet. Child ist eine Klasse die von Parent ableitet und die beiden Properties einmal mit new und einmal mit override überschreibt. In der Klasse MyClass werden zwei Instanzen von Child erzeugt, wobei im ersten Fall die Deklaration auf die Basisklasse Parent lautet. Die beiden Properties der beiden Instancen werden abgefragt und ausgedruckt.&lt;br /&gt;&lt;br /&gt;public class MyClass&lt;br /&gt;{&lt;br /&gt;public static void Main()&lt;br /&gt;{&lt;br /&gt;Parent p = new Child();&lt;br /&gt;Child c = new Child();&lt;br /&gt;Console.WriteLine(p.Foo);&lt;br /&gt;Console.WriteLine(p.Bar);&lt;br /&gt;Console.WriteLine(c.Foo);&lt;br /&gt;Console.WriteLine(c.Bar);&lt;br /&gt;Console.ReadLine();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;public class Parent&lt;br /&gt;{&lt;br /&gt;public string Foo {get{return "ParentFoo";}}&lt;br /&gt;public virtual string Bar {get{return "ParentBar";}}&lt;br /&gt;}&lt;br /&gt;public class Child : Parent&lt;br /&gt;{&lt;br /&gt;public new string Foo {get{return "ChildFoo";}}&lt;br /&gt;public override string Bar {get{return "ChildBar";}}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Das aufschlussreiche Ergebniss sieht so aus:&lt;br /&gt;ParentFoo&lt;br /&gt;ChildBar&lt;br /&gt;ChildFoo&lt;br /&gt;ChildBar&lt;br /&gt;&lt;br /&gt;Da zwei Instancen von Child erzeugt wurden ist der Ausdruck ParentFoo doch für den einen oder anderen erstaunlich. Wie kommt das? Die Antwort liegt im Early- und Late Binding.&lt;br /&gt;&lt;br /&gt;Im Fall von Foo wurde das Property auf der Parent Klasse nicht mit virtual deklariert. Somit wird das Early Binding verwendet. Das heisst, der Compiler legt zur Kompilierzeit fest welches Property aufgerufen wird. Da im ersten Fall die Variable als Parent deklariert ist, wird in jedem Fall (egal was für eine Instanz effektiv vorhanden ist) das Property Foo der Klasse Parent aufgerufen und im zweiten Fall das Property der Klasse Child.&lt;br /&gt;&lt;br /&gt;Im Fall von Bar wurde das Property auf der Basisklasse mit virtual deklariert und somit das Early Binding verhindert. Das heisst, das zur Laufzeit die Instance analysiert wird und entsprechend das Property der effektiv vorhandenen Klasse (in unserem Fall Child) aufgerufen wird.&lt;br /&gt;&lt;br /&gt;Und zum Schluss noch einen Blick auf den IL Code:&lt;br /&gt;&lt;br /&gt;.method public hidebysig static void Main() cil managed&lt;br /&gt;{&lt;br /&gt;.entrypoint&lt;br /&gt;.maxstack 1&lt;br /&gt;.locals init (&lt;br /&gt;[0] class Parent parent,&lt;br /&gt;[1] class Child child)&lt;br /&gt;L_0000: newobj instance void Child::.ctor()&lt;br /&gt;L_0005: stloc.0&lt;br /&gt;L_0006: newobj instance void Child::.ctor()&lt;br /&gt;L_000b: stloc.1&lt;br /&gt;L_000c: ldloc.0&lt;br /&gt;L_000d: callvirt instance string Parent::get_Foo()&lt;br /&gt;L_0012: call void [mscorlib]System.Console::WriteLine(string)&lt;br /&gt;L_0017: ldloc.0&lt;br /&gt;L_0018: callvirt instance string Parent::get_Bar()&lt;br /&gt;L_001d: call void [mscorlib]System.Console::WriteLine(string)&lt;br /&gt;L_0022: ldloc.1&lt;br /&gt;L_0023: callvirt instance string Child::get_Foo()&lt;br /&gt;L_0028: call void [mscorlib]System.Console::WriteLine(string)&lt;br /&gt;L_002d: ldloc.1&lt;br /&gt;L_002e: callvirt instance string Parent::get_Bar()&lt;br /&gt;L_0033: call void [mscorlib]System.Console::WriteLine(string)&lt;br /&gt;L_0038: call string [mscorlib]System.Console::ReadLine()&lt;br /&gt;L_003d: pop&lt;br /&gt;L_003e: ret&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Würde man nicht erwarten, dass beim Early Binding ein call und nicht ein callvirt aufgerufen wird? Eigentlich schon. Das callvirt wird generiert, damit die Klasse auf null geprüft werden kann. Der JIT Compiler wird aber nach der null Prüfung diesen Aufruf effektiv in einen non-virtual Aufruf umsetzen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4898620005841655818?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4898620005841655818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4898620005841655818' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4898620005841655818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4898620005841655818'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2008/03/virtual-new-and-override-differences.html' title='Virtual, new and override - the differences'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-2407368915703822297</id><published>2008-01-02T17:58:00.000+01:00</published><updated>2008-01-02T19:06:46.265+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><title type='text'>Mehrere Tabellen auf eine Entität mappen</title><content type='html'>Meistens sind Daten in einer Datenbank normalisiert abgelegt. In der Applikation möchte man aber oft mit den nicht normalisierten Daten arbeiten. Ist das ADO.NET Entity Framework die Lösung?&lt;br /&gt;&lt;br /&gt;Jein lautet die Antwort. Und um es vorne weg zu nehmen, ein Mapping von mehreren Tabellen auf eine Entität ist möglich, aber nur wenn diese eine 1:1 Beziehung haben. Das heisst, in den meisten Fällen wird man besser fahren, wenn auf der Datenbank eine geeignete View erstellt, diese auf die Entität gemapped und das Update, Insert und Delete über Stored Procedures gelöst wird.&lt;br /&gt;&lt;br /&gt;Nun aber zur Lösung. Zuerst wird ein Model mit dem Assistenten erstellt, das alle gewünschten Tabellen enthält.&lt;br /&gt;&lt;br /&gt;Die Anpassungen am Conceptual Model (CSDL) sind einfach. Auf der Entität werden die gewünschten Attribute aus den weiteren Tabellen hinzugefügt. So wurde etwa hier die Entität Cars um das Attribut Value erweitert.&lt;br /&gt;&lt;br /&gt;&amp;#060?xml:namespace prefix = edmx /&amp;#062&amp;#060edmx:conceptualmodels&amp;#062&lt;br /&gt;&amp;#060schema xmlns="http://schemas.microsoft.com/ado/2006/04/edm" alias="Self" namespace="Model"&amp;#062&lt;br /&gt;&amp;#060entitycontainer name="Entities"&amp;#062&lt;br /&gt;&amp;#060entityset name="Cars" entitytype="Model2.Cars"&amp;#062&lt;br /&gt;&amp;#060/entitycontainer&amp;#062&lt;br /&gt;&amp;#060entitytype name="Cars"&amp;#062&lt;br /&gt;&amp;#060key&amp;#062&lt;br /&gt;&amp;#060propertyref name="ID_Cars"&amp;#062&lt;br /&gt;&amp;#060/key&amp;#062&lt;br /&gt;&amp;#060property name="ID_Cars" nullable="false" type="Guid"&amp;#062&amp;#060/property&amp;#062&lt;br /&gt;&amp;#060property name="Brand" type="String" maxlength="50"&amp;#062&amp;#060/property&amp;#062&lt;br /&gt;&amp;#060property name="Model" type="String" maxlength="50"&amp;#062&amp;#060/property&amp;#062&lt;br /&gt;&lt;em&gt;&amp;#060property name="Value" type="String" maxlength="50"&amp;#062&amp;#060/property&amp;#062&lt;/em&gt;&lt;br /&gt;&amp;#060/entitytype&amp;#062&lt;br /&gt;&amp;#060/schema&amp;#062&lt;br /&gt;&amp;#060/edmx:conceptualmodels&amp;#062&lt;br /&gt;&lt;br /&gt;Anpassungen am Storage Model (SSDL) sind keine notwendig, da sich an der Datenbank, welche durch dieses Model repräsentiert wird, nichts ändert.&lt;br /&gt;&lt;br /&gt;Durch Anpassung des Mappings werden die neu definierten Attribute auf der Entität nun auf die im Storage Model vorhandenen gemapped. Dies wird realisiert durch Hinzufügen eines zusätzlichen Mapping Fragment.&lt;br /&gt;&lt;br /&gt;&amp;#060edmx:mappings&amp;#062&lt;br /&gt;&amp;#060mapping xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS" space="C-S"&amp;#062&lt;br /&gt;&amp;#060entitycontainermapping cdmentitycontainer="Entities" storageentitycontainer="dbo"&amp;#062&lt;br /&gt;&amp;#060entitysetmapping name="Cars"&amp;#062&lt;br /&gt;&amp;#060entitytypemapping typename="IsTypeOf(Model.Cars)"&amp;#062&lt;br /&gt;&amp;#060mappingfragment storeentityset="Cars"&amp;#062&lt;br /&gt;&amp;#060scalarproperty name="ID_Cars" columnname="ID_Cars"&amp;#062&lt;br /&gt;&amp;#060scalarproperty name="Brand" columnname="Brand"&amp;#062&lt;br /&gt;&amp;#060scalarproperty name="Model" columnname="Model"&amp;#062&lt;br /&gt;&amp;#060/mappingfragment&amp;#062&lt;br /&gt;&lt;em&gt;&amp;#060mappingfragment storeentityset="Extensions"&amp;#062&lt;br /&gt;&amp;#060scalarproperty name="ID_Cars" columnname="ID_Extensions"&amp;#062&lt;br /&gt;&amp;#060scalarproperty name="Value" columnname="Value"&amp;#062&lt;br /&gt;&amp;#060/mappingfragment&amp;#062&lt;/em&gt;&lt;br /&gt;&amp;#060/entitytypemapping&amp;#062&lt;br /&gt;&amp;#060/entitysetmapping&amp;#062&lt;br /&gt;&amp;#060/entitycontainermapping&amp;#062&lt;br /&gt;&amp;#060/mapping&amp;#062&lt;br /&gt;&amp;#060/edmx:mappings&amp;#062&lt;br /&gt;&lt;br /&gt;Nicht mehr benötigter Code wie EntitySets und AssociationSets sind im CSDL und dem Mapping zu löschen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-2407368915703822297?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/2407368915703822297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=2407368915703822297' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2407368915703822297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2407368915703822297'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2008/01/mehrere-tabellen-auf-eine-entitt-mappen.html' title='Mehrere Tabellen auf eine Entität mappen'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8344600083623732073</id><published>2007-12-19T11:53:00.000+01:00</published><updated>2007-12-20T09:01:02.632+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Vom Namen zur Instanz mit DynamicMethod</title><content type='html'>Ein Kunde legt beim Logging unterschiedliche LogMessages (unterschiedliche Klassen) in einer Datenbank ab. Dabei werden der Typ der Message (der LogMessage Klassenname), die Message selber sowie weitere Felder in der Tabelle gespeichert.&lt;br /&gt;Nun sollten diese Einträge gelesen und die ursprünglichen Objekte wieder hergestellt werden.&lt;br /&gt;&lt;br /&gt;Für die erste Lösung wurde der offensichtliche Weg mit Reflection gewählt:&lt;br /&gt;&lt;br /&gt;string s = "Namespace.Name.FromDB";&lt;br /&gt;Assembly a = Assembly.GetAssembly(typeof(ThisClass));&lt;br /&gt;Type t = a.GetType(s);&lt;br /&gt;BaseType b = (BaseType)Activator.CreateInstance(t);&lt;br /&gt;&lt;br /&gt;Da dies nicht sehr performant ist, wurde der Code wie folgt verbessert:&lt;br /&gt;&lt;br /&gt;string s = "Namespace.Name.FromDB";&lt;br /&gt;Assembly a = Assembly.GetAssembly(typeof(ThisClass));&lt;br /&gt;Type t = a.GetType(s);&lt;br /&gt;ConstructorInfo i = t.GetConstructor(Type.EmptyTypes);&lt;br /&gt;BaseType b = (BaseType)i.Invoke(null);&lt;br /&gt;&lt;br /&gt;Wobei der Klassenname und die zugehörige ConstructorInfo in einem statischen Dictionaire abgelegt werden, damit diese nicht bei jedem Aufruf neu evaluiert werden müssen. So haben wir vom zweiten bis x-ten Aufruf den gewünschten Performancegewinn. Der Code dazu sieht folgendermassen aus.&lt;br /&gt;&lt;br /&gt;ConstructorInfo c = null;&lt;br /&gt;if (_cinfo.TryGetValue(s, out c))&lt;br /&gt;{&lt;br /&gt;c = t.GetConstructor(Type.EmptyTypes);&lt;br /&gt;lock(_cinfo)&lt;br /&gt;{&lt;br /&gt;if (_cinfo.ContainsKey(s))&lt;br /&gt;{&lt;br /&gt;_cinfo.Add(s, c);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Noch eleganter und viel performanter geht's mit Dynamic Methods. Der von der dynamischen Methode zurückgegebene Delegate wird wie zuvor die ConstructorInfo in einem Dictionaire abgelegt und für die Folgeaufrufe wieder verwendet:&lt;br /&gt;&lt;br /&gt;public delegate BaseType CtorDelegate();&lt;br /&gt;&lt;br /&gt;DynamicMethod dm = new DynamicMethod&lt;br /&gt;("MyCtor", typeof(BaseType), Type.EmptyTypes, typeof(BaseType).Module);&lt;br /&gt;ILGenerator ilgen = dm.GetILGenerator();&lt;br /&gt;ilgen.Emit(OpCodes.Newobj, t.GetConstructor(Type.EmptyTypes));&lt;br /&gt;ilgen.Emit(OpCodes.Ret);&lt;br /&gt;CtorDelegate d = (CtorDelegate)dm.CreateDelegate(typeof(CtorDelegate));&lt;br /&gt;&lt;br /&gt;Der Aufruf ist dann genau so kurz (d wird zuvor aus dem Dictionaire gelesen) und unheimlich schnell:&lt;br /&gt;&lt;br /&gt;t message = (t)d();&lt;br /&gt;&lt;br /&gt;Nun muss nur noch alles in einer Factory Klasse schön verpackt werden und fertig. Mehr zu diesem Thema inklusive Performance Messungen findet man wie immer bei Google ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8344600083623732073?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8344600083623732073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8344600083623732073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8344600083623732073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8344600083623732073'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/12/vom-namen-zur-instanz-mit-dynamicmethod.html' title='Vom Namen zur Instanz mit DynamicMethod'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-9189945132973124847</id><published>2007-11-05T19:39:00.000+01:00</published><updated>2007-11-05T21:36:09.982+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Sprachfeatures C# 3.0 und wie sie die Welt verändern</title><content type='html'>Mit dem .NET Framework 3.5 kommen erneut etliche Features zur Sprache C# 3.0 hinzu, die dem Entwickler das Leben bedeutend erleichtern (ausser man ist auf der Wartungsseite).&lt;br /&gt;Automatic Properties, Extension Methods, Lambda Expressions, Anonymous Types, usw. bieten dem Entwickler vollkommen neue Möglichkeiten, was zu sehr schickem Code führen kann. Bei exzessivem Anwenden nur des Features oder der Eleganz wegen kann das aber zu schwer wartbarem und unübersichtlichen Code- und Sprachauswüchsen führen.&lt;br /&gt;&lt;br /&gt;Trotzdem, ganz hübsche ist folgendes (auch wenn nicht sehr sinnvoll ;-):&lt;br /&gt;7.TimesPrint("MeinText");&lt;br /&gt;&lt;br /&gt;Wesentlich eleganter als:&lt;br /&gt;for (int i = 0; i &lt; 7; i++)&lt;br /&gt;{&lt;br /&gt;    Console.WriteLine("MeinText");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Doch damit es funktioniert braucht's noch eine Extension Method:&lt;br /&gt;Public static void TimesPrint(this int no, string s)&lt;br /&gt;{&lt;br /&gt;    for (int i = 0; i &lt; no; i++)&lt;br /&gt;    {&lt;br /&gt;        Console.WriteLine(s);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Etwas allgemeiner formuliert könnte der Aufruf so aussehen und so auch wirklich Sinn machen (die Extension Method muss natürlich entsprechend angepasst werden):&lt;br /&gt;7.Times(i =&gt; Console.WriteLine("MeinText"));&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ob die Wartbarkeit durch die schwerer erkennbare Funktionalität komplexer oder durch die elegante Syntax doch eher erleichtert wird, wird spätestens die Praxis zeigen.&lt;br /&gt;&lt;br /&gt;So oder so, die neuen Features machen viel Spass!&lt;br /&gt;&lt;br /&gt;PS: Eine gute Übersicht zu den neuen Features gibt's &lt;a href="http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/csharp_3.0_specification.doc"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-9189945132973124847?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/9189945132973124847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=9189945132973124847' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/9189945132973124847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/9189945132973124847'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/11/sprachfeatures-c-30-und-wie-sie-die.html' title='Sprachfeatures C# 3.0 und wie sie die Welt verändern'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-963221008621752229</id><published>2007-10-25T08:54:00.000+02:00</published><updated>2007-10-25T10:12:34.829+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Output Parameter in dynamischem T-SQL</title><content type='html'>In einer Stored Procedure werden in einem ersten Schritt zwei Variablen gesetzt, die für die weitere Verarbeitung benötigt werden. Dies könnte so aussehen:&lt;br /&gt;&lt;br /&gt;SELECT @var1 = Var1, @var2 = Var2&lt;br /&gt;FROM MyTable&lt;br /&gt;WHERE ID = @ID&lt;br /&gt;&lt;br /&gt;Nun muss das Statement aber dynamisch zusammengestellt werden und der Select-String danach ausgeführt werden. Dies könnte so aussehen:&lt;br /&gt;&lt;br /&gt;SET @query = '&lt;br /&gt;SELECT @var1 = Var1, @var2 = Var2&lt;br /&gt;FROM MyTable&lt;br /&gt;WHERE ID = ' + CAST(@ID as CHAR(15))&lt;br /&gt;EXEC (@query)&lt;br /&gt;&lt;br /&gt;In meinem Fall wird das Statement auf einem Hostsystem ausgeführt und der Aufruf muss über Openquery gemacht werden. Dies könnte so aussehen:&lt;br /&gt;&lt;br /&gt;SET @query = '&lt;br /&gt;SELECT @var1 = Var1, @var2 = Var2&lt;br /&gt;FROM OPENQUERY(MySystem, ''SELECT Var1, Var2 FROM MyTable WHERE ID = '&lt;br /&gt;+ dbo.MyTypeConverter(@id) + ''')'&lt;br /&gt;EXEC (@query)&lt;br /&gt;&lt;br /&gt;Ganz klar, dass die beiden Variablen so nicht mehr abgefüllt werden, sondern zu einem Fehler führen. Wie können diese gesetzt werden?&lt;br /&gt;Gemäss einer ersten Idee wurde eine Variable vom Typ TABLE verwendet und das Openquery-Resultat mit INSERT INTO angefügt. Danach das erste Select-Statement verwendet um die Variablen zu setzten. Funktioniert! Ist aber nicht sehr elegant.&lt;br /&gt;Hübscher ist's so:&lt;br /&gt;&lt;br /&gt;SET @params = ' @var1 int OUTPUT, @var2 nvarchar(max) OUTPUT'&lt;br /&gt;SET @query = '&lt;br /&gt;SELECT @var1Out = Var1, @var2Out = Var2&lt;br /&gt;FROM OPENQUERY(MySystem, SELECT Var1, Var2 FROM MyTable '&lt;br /&gt;+ dbo.MyTypeConverter(@id) + ''')'&lt;br /&gt;EXEC sp_executesql @query, @params, @var1Out = @var1 OUTPUT, @var2Out = @var2 OUTPUT&lt;br /&gt;&lt;br /&gt;Dieser Ansatz mit der System Procedure sp_executesql bietet zudem noch weitere Vorteile die in der SQL Server Hilfe nachgelesen werden können.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-963221008621752229?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/963221008621752229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=963221008621752229' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/963221008621752229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/963221008621752229'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/10/output-parameter-in-dynamischem-t-sql.html' title='Output Parameter in dynamischem T-SQL'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-2701691671051447937</id><published>2007-10-05T10:15:00.000+02:00</published><updated>2007-10-05T10:57:52.173+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>Dynamic Method Performance</title><content type='html'>In einem interessanten Artikel im &lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/"&gt;MSDN Magazine&lt;/a&gt; wird auf unterschiedliche Performance Probleme, im Speziellen im Zusammenhang mit Reflection, eingegangen. Mich interessierte vor allem die gelobte Performance der dynamischen Methoden, die seit der .NET Framework Version 2.0 zur Verfügung stehen. Eine einfache Testanwendung hat gezeigt, dass der Artikel recht behält.&lt;br /&gt;In der Testanwendung wird einem Objekt ein String eine Million mal zugewiesen. Dies zuerst direkt verdrahtet, danach mit dynamischer Methode und zuletzt via Reflection. Das Ergebnis ist eindeutig. Die direkt verdrahtete Methode ist natürlich die Schnellste, die dynamische Methode braucht dafür doppelt so lange (was ich immer noch sehr gut finde) und mittels Reflection dauert es 100mal länger. What a gain!&lt;br /&gt;Übrigens, die Assembly habe ich mit Lutz's Reflector untersucht, um sicher zu stellen, dass die Schlaufe auch wirklich bei allen drei Varianten ausgeführt wird.&lt;br /&gt;&lt;br /&gt;Und hier noch der Code:&lt;br /&gt;&lt;br /&gt;public class Program&lt;br /&gt;{&lt;br /&gt;private delegate void DemoDelegate(Foo arg);&lt;br /&gt;&lt;br /&gt;static void Main(string[] args)&lt;br /&gt;{&lt;br /&gt;Stopwatch stopwatch = new Stopwatch();&lt;br /&gt;&lt;br /&gt;Foo f = new Foo();&lt;br /&gt;stopwatch.Start();&lt;br /&gt;for (int i = 0; i &lt; 1000000; i++)&lt;br /&gt;{&lt;br /&gt;f.Text = "Hello World!";&lt;br /&gt;}&lt;br /&gt;stopwatch.Stop();&lt;br /&gt;Console.WriteLine("Direct: {0}", stopwatch.Elapsed);&lt;br /&gt;&lt;br /&gt;stopwatch.Reset();&lt;br /&gt;&lt;br /&gt;DemoDelegate del = createMethod();&lt;br /&gt;stopwatch.Start();&lt;br /&gt;for (int i = 0; i &lt; 1000000; i++)&lt;br /&gt;{&lt;br /&gt;del(f);&lt;br /&gt;}&lt;br /&gt;stopwatch.Stop();&lt;br /&gt;&lt;br /&gt;Console.WriteLine("Dynamic method: {0}", stopwatch.Elapsed);&lt;br /&gt;&lt;br /&gt;stopwatch.Reset();&lt;br /&gt;&lt;br /&gt;PropertyInfo property = f.GetType().GetProperty("Text");&lt;br /&gt;stopwatch.Start();&lt;br /&gt;for (int i = 0; i &lt; 1000000; i++)&lt;br /&gt;{&lt;br /&gt;property.SetValue(f, "Hello World!", null);&lt;br /&gt;}&lt;br /&gt;stopwatch.Stop();&lt;br /&gt;Console.WriteLine("Reflection: {0}", stopwatch.Elapsed);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Console.ReadKey();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private static DemoDelegate createMethod()&lt;br /&gt;{&lt;br /&gt;Type[] parameterTypes = new Type[] { typeof(Foo) };&lt;br /&gt;DynamicMethod method = new DynamicMethod("Demo", null, parameterTypes, typeof(Program));&lt;br /&gt;&lt;br /&gt;ILGenerator iLGenerator = method.GetILGenerator();&lt;br /&gt;iLGenerator.Emit(OpCodes.Ldarg_0);&lt;br /&gt;iLGenerator.Emit(OpCodes.Ldstr, "Hello World!");&lt;br /&gt;MethodInfo setMethod = typeof(Foo).GetProperty("Text").GetSetMethod();&lt;br /&gt;iLGenerator.EmitCall(OpCodes.Call, setMethod, null);&lt;br /&gt;iLGenerator.Emit(OpCodes.Ret);&lt;br /&gt;&lt;br /&gt;return (DemoDelegate)method.CreateDelegate(typeof(DemoDelegate));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class Foo&lt;br /&gt;{&lt;br /&gt;private string _text;&lt;br /&gt;&lt;br /&gt;public string Text&lt;br /&gt;{&lt;br /&gt;get { return _text; }&lt;br /&gt;set { _text = value; }&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-2701691671051447937?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/2701691671051447937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=2701691671051447937' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2701691671051447937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/2701691671051447937'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/10/dynamic-method-performance.html' title='Dynamic Method Performance'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-435154505005376419</id><published>2007-09-14T16:17:00.000+02:00</published><updated>2007-09-14T16:21:49.557+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Remote Debbuging</title><content type='html'>Wenn man eine Applikation remote debuggen soll, wird man feststellen, dass verschiedene Punkte beachtet werden müssen, damit das Ziel erreicht wird. Einige hoffentlich nützliche Hinweise möchte ich hiermit weitergeben:&lt;br /&gt;&lt;br /&gt;1. Remotedebugging heisst, mit dem lokalen Visual Studio eine laufende Applikation auf einer anderen Maschine, typischerweise einem Server, zu debuggen.&lt;br /&gt;2. Der Applikationscode (dll und pdb Files) muss auf beiden Systemen identisch sein.&lt;br /&gt;3. Auf der Remotemaschine muss der Remote Debugger, im Speziellen das File msvsmon.exe vorhanden sein. Auf der lokalen Maschine muss Visual Studio vorhanden sein.&lt;br /&gt;4. Der lokale Account (unter dem Visual Studio läuft) muss auf dem Remotesystem Administratorrechte haben, damit sich Visual Studio attachen kann.&lt;br /&gt;5. Auf dem Remotesystem muss der Remotedebugger (msvsmon.exe) unter dem lokalen Account (unter demselben wie Visual Studio läuft), gestartet werden (im Contextmenü Run as ... ausführen).&lt;br /&gt;6. In Visual Studio muss unter Tools, Options, Debugging, General die Option ‚Enable just my Code’ inaktiv sein, damit die Symbols geladen werden und Breakepoints gesetzt werden können.&lt;br /&gt;7. In Visual Studio kann nun unter Debug, Attach to Process der Remoteprozess angebunden werden. Dazu Transport: Default und Qualifier: SERVERNAME wählen. Nun den gewünschten Prozess, z. Bsp. W3wp.exe auswählen. Ist der gewünschte Prozess nicht aufgelistet, muss sichergestellt werden, dass die Applikation wirklich läuft. Dazu z. Bsp. Die Webseite aufrufen.&lt;br /&gt;8. Nun wie gewohnt debuggen.&lt;br /&gt;&lt;br /&gt;Viel Spass.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-435154505005376419?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/435154505005376419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=435154505005376419' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/435154505005376419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/435154505005376419'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/09/remote-debbuging.html' title='Remote Debbuging'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8106921365791919927</id><published>2007-09-14T15:56:00.000+02:00</published><updated>2007-09-14T16:01:24.118+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>http und Textfile</title><content type='html'>Für einen Kunden sollte ich von einer Webseite (&lt;a href="http://.../mytext.php"&gt;http://.../mytext.php&lt;/a&gt;) ein File downloaden und den Text auf einem Server Share speichern. Und so einfach ist das mit .NET 2.0.&lt;br /&gt;&lt;br /&gt;// Get stream from any webserver over HTTP response object&lt;br /&gt;WebRequest request = (WebRequest)WebRequest.Create(new Uri("http://.../mytext.php"));&lt;br /&gt;WebResponse response = request.GetResponse();&lt;br /&gt;// create reader to read the stream and save it in a string&lt;br /&gt;StreamReader reader = new StreamReader(response.GetResponseStream());&lt;br /&gt;// write string to a file&lt;br /&gt;File.WriteAllText(@"c:/test.txt", reader.ReadToEnd());&lt;br /&gt;// close objects&lt;br /&gt;reader.Close();&lt;br /&gt;response.Close();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8106921365791919927?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8106921365791919927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8106921365791919927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8106921365791919927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8106921365791919927'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/09/http-und-textfile.html' title='http und Textfile'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-7035778679426062927</id><published>2007-02-14T08:05:00.000+01:00</published><updated>2007-09-14T15:53:12.880+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>Microsoft Expression - Tools for Designer or Developer?</title><content type='html'>Vier neue Produkte aus dem Hause Microsoft warten auf uns Entwickler... oder doch nicht?&lt;br /&gt;&lt;br /&gt;* Microsoft Expression Media (endgültige Version erscheint voraussichtlich Mitte 2007)&lt;br /&gt;Expression Media ist ein Produkt für das Digital Asset Management. Basierend auf der Software iView MediaPro, die im Juni 2006 von Microsoft übernommen wurde, dient es der Katalogisierung und Verarbeitung von Mediendateien wie Grafiken und Videos.&lt;br /&gt;&lt;br /&gt;Ich denke nicht, dass dieses Produkt für Entwickler von Interesse ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* Microsoft Expression Design (Beta 1 verfügbar, endgültige Version erscheint voraussichtlich Mitte 2007)&lt;br /&gt;Expression Design ist das Bildbearbeitungsprogramm, also der PhotoShop von Microsoft. Das Produkt deckt höchste Anforderungen ab, könnte aber auch einige Entwickler überfordern. Vielleich hält man sich da doch besser ans Paint.NET 3.0 mit dem auch ein Entwickler das gewünschte Resultat erreicht und zudem erst noch der Sourcecode vorliegt (siehe letzte Posts).&lt;br /&gt;&lt;br /&gt;Ich denke nicht, dass dieses Produkt für Entwickler von Interesse ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* Microsoft Expression Web (bereits verfügbar)&lt;br /&gt;Das aus Microsoft FrontPage hervorgegangene Expression Web ist eine Web-Entwicklungsumgebung die leider nicht alles bietet was man sich wünscht. Ich war total entäuscht von diesem Produkt. Zum Beispiel werden keine Themes und Skins von ASP.NET 2.0 unterstützt aber auch Basics wie ein tabellenloses Layout (mit DIV Tags und CSS) wird nicht unterstützt. Das heisst, der Designer kann's nicht anzeigen und es gibt auch keine Tools, Intellisense, ... um damit zu arbeiten.&lt;br /&gt;&lt;br /&gt;Ich denke nicht, dass dieses Produkt für Entwickler von Interesse ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;* Microsoft Expression Blend (Beta 2 verfügbar, endgültige Version erscheint voraussichtlich Mitte 2007)&lt;br /&gt;Expression Blend ist ein Designwerkzeug für das Erstellen von interaktiven Benutzeroberflächen. Es fungiert als WYSIWYG-Editor für XAML, eine in XML formulierte Sprache zur Beschreibung und Erstellung von Oberflächen der Windows Presentation Foundation (WPF und WPF/E). Vektorgrafiken, Rastergrafiken, 3D-Objekte aus bekannten 3D-Programmen, Videos, Sound und Text lassen sich miteinander vereinen und mit Hilfe einer Zeitleiste animieren.&lt;br /&gt;&lt;br /&gt;Ich denke, dass dieses Produkt bis zu einem bestimmten Punkt auch für Entwickler von Interesse ist. Um alle Möglichkeiten auszuschöpfen, sollte es allerdings in die Hände eines Grafikers gelegt werden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-7035778679426062927?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/7035778679426062927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=7035778679426062927' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7035778679426062927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7035778679426062927'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/02/microsoft-expression-tools-for-designer.html' title='Microsoft Expression - Tools for Designer or Developer?'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6982723972629860593</id><published>2007-02-07T12:30:00.000+01:00</published><updated>2007-09-14T15:54:46.970+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>UpdatePanel und Validation Controls</title><content type='html'>Natürlich wollen wir alle das UpdatePanel einsetzen. Speziell wenn wir ein oder mehere GridViews auf der Seite haben, die ein Paging, Sorting und Edit bieten.&lt;br /&gt;Gerade im Edit Fall kommen aber sicher die Validator Controls ins Spiel, die aber leider im UpdatePanel nicht funktionieren.&lt;br /&gt;&lt;br /&gt;Das Problem wird gelöst, in dem AJAX-Compatible Validators verwendet werde, die im CTP auch bereits vorhanden waren. Im RTM sind sie aber nicht dabei, sondern ausgelagert in den ASP.NET AJAX January Futures CTP, den man &lt;a href="http://ajax.asp.net/futures/default.aspx?tabid=47"&gt;hier&lt;/a&gt; downloaden kann.&lt;br /&gt;&lt;br /&gt;Wer weder verzichten, noch den CTP einsetzen will, der kann auf den Validater Controls einfach die Property enableclientscript="false" setzen und das Ganze funktioniert. Ein paar Einschränkungen gibt's natürlich. Z.Bsp. showmessagebox="true" auf dem ValidationSummary funktioniert nicht.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6982723972629860593?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6982723972629860593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6982723972629860593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6982723972629860593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6982723972629860593'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/02/updatepanel-und-validation-controls.html' title='UpdatePanel und Validation Controls'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-180434569135940596</id><published>2007-02-04T11:02:00.000+01:00</published><updated>2007-09-14T15:55:13.280+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>GridView and Formating</title><content type='html'>Ich will ein Datum im GridView formatieren und es gibt auch eine entsprechende Property. Einfach? Gar nicht! Den die Property will einfach nicht greifen. Nach langem finde ich den Weg der funktioniert, obwohl mir da noch etwas das Verständnis dafür fehlt.&lt;br /&gt;Die Formatierung greift nur, wenn die Property HTMLEncode auf false gesetzt wird.&lt;br /&gt;&lt;br /&gt;Das funktionierende Beispiel:&lt;br /&gt;&lt;br /&gt;&lt;asp:gridview id="MeetingsGridView" datasourceid="MeetingsObjectDataSource" datakeynames="ID" autogeneratecolumns="False" allowpaging="True" runat="server"&gt;&lt;br /&gt;&lt;columns&gt;&lt;br /&gt;&lt;asp:boundfield headertext="Date" htmlencode="false" dataformatstring="{0:dd. MMM yyyy}" datafield="MeetingDate" sortexpression="MeetingDate"&gt;&lt;/asp:boundfield&gt;&lt;br /&gt;&lt;asp:boundfield headertext="Type" datafield="MeetingType" sortexpression="MeetingType"&gt;&lt;br /&gt;&lt;asp:boundfield headertext="City" datafield="Location" sortexpression="Location"&gt;&lt;br /&gt;&lt;/columns&gt;&lt;br /&gt;&lt;/asp:gridview&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-180434569135940596?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/180434569135940596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=180434569135940596' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/180434569135940596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/180434569135940596'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/02/gridview-and-formating.html' title='GridView and Formating'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-3587622901987513516</id><published>2007-02-02T09:30:00.000+01:00</published><updated>2007-09-17T15:06:10.418+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><title type='text'>February CTP of WPF/E</title><content type='html'>Der Dezember Release ist bereits abgelaufen, obwohl dieser bis Ende Februar hätte laufen müssen. Macht nichts, den der Februar Release ist bereits &lt;a href="http://go.microsoft.com/fwlink/?linkid=77792&amp;amp;clcid=0x409"&gt;da&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Einige schöne, neue Features sind hinzugekommen. Aber auch einige Änderungen an bestehenden Sachen, so das viele Beispiele nicht mehr laufen.&lt;br /&gt;&lt;br /&gt;Mehr Infos gibt's &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-3587622901987513516?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/3587622901987513516/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=3587622901987513516' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/3587622901987513516'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/3587622901987513516'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/02/february-ctp-of-wpfe.html' title='February CTP of WPF/E'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6842621535723906765</id><published>2007-01-31T07:24:00.000+01:00</published><updated>2008-12-12T09:07:37.906+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>Paint.NET</title><content type='html'>Auch als Software Entwickler ist ein Grafikprogramm immer wieder von nutzen. Nur soll es nicht so teuer und kompliziert sein wie ein PhotoShop und doch etwas mehr Möglichkeiten bieten als ein Paint.&lt;br /&gt;&lt;div&gt;Definitiv das richtige Tool für den .NET Entwickler ist Paint.NET. Dies ist nicht etwa Paint in .NET programmiert sondern wirklich ein kleiner aber feiner PhotoShop.&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_Y1nsVvKBSOA/RcA3qKIGzDI/AAAAAAAAADE/sCb-P0p-VvA/s1600-h/paintnet.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5026078381557861426" style="CURSOR: hand" alt="" src="http://1.bp.blogspot.com/_Y1nsVvKBSOA/RcA3qKIGzDI/AAAAAAAAADE/sCb-P0p-VvA/s320/paintnet.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt;&lt;a href="http://www.getpaint.net/download.html"&gt;Hier&lt;/a&gt; geht's zum Produkt. Übrigens, es gibt's sogar den Source Code zum downloaden ;-)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6842621535723906765?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6842621535723906765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6842621535723906765' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6842621535723906765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6842621535723906765'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/painnet.html' title='Paint.NET'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Y1nsVvKBSOA/RcA3qKIGzDI/AAAAAAAAADE/sCb-P0p-VvA/s72-c/paintnet.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-230216877347383821</id><published>2007-01-29T10:03:00.000+01:00</published><updated>2007-09-14T15:56:22.159+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Redirecting to another page</title><content type='html'>Um von einer zur anderen Seite navigieren zu können, kennen wir heute die unterschiedlichsten Methoden. Mit ASP.NET werden hauptsächlich vier Arten eingesetzt.&lt;br /&gt;- Hyperlinks&lt;br /&gt;- Browser Redirect&lt;br /&gt;- Server Transfer&lt;br /&gt;- Cross-Page Posting&lt;br /&gt;&lt;br /&gt;Die Vor- und Nachteile werden &lt;a href="http://msdn2.microsoft.com/en-us/library/x3x8t37x(VS.80).aspx"&gt;hier&lt;/a&gt; von Microsoft beschrieben.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Für alle die immer noch eine gewisse Unsicherheit spüren, hier noch ein paar Ergänzungen.&lt;br /&gt;&lt;br /&gt;Sofern von der einen zur anderen Seite keine Daten übertragen werden müssen, sollte der Hyperlink verwendet werden. Ausnahme, wenn man die URL 'verstecken' will.&lt;br /&gt;&lt;br /&gt;Auf das Redirect wird wenn immer möglich verzichtet, da dies einen zusätzlichen Roundtrip bedeutet.&lt;br /&gt;&lt;br /&gt;Wenn Daten ausgetauscht werden müssen, kommen die beiden Möglichkeiten 'Server Transfer' und 'Cross-Page Posting' ins Spiel.&lt;br /&gt;'Cross-Page Posting' ist seit ASP.NET 2.0 möglich und die etwas schönere Variante. Dabei ändert sich die Browserfunktionalität nicht, jedoch muss das Ziel fix verdrahtet werden.&lt;br /&gt;Beim 'Server Transfer' ist ein GoBack im Browser nicht möglich, die dynamische Adressierung jedoch kein Problem.&lt;br /&gt;In der Praxis merkt man aber sehr schnell, dass beide Methoden ihre Berechtiging haben und man am Besten fährt, wenn eine Kombination der beiden Möglichkeiten verwendet wird.&lt;br /&gt;&lt;br /&gt;Datenübergabe:&lt;br /&gt;Beim 'Server Transfer' werden die Daten über public Properties übergeben, die auf der aufrufenden Seite implementiert werden. Auf der Zielseite können sie über das Object Context.Handler abgefragt werden.&lt;br /&gt;((PagesClassName)Context.Handler).PropertyName&lt;br /&gt;&lt;br /&gt;Beim 'Cross-Page Posting' können die Felder mit FindControl() ausgelesen werden.&lt;br /&gt;((TextBox)((PagesClassName)PreviousPage).FindControl("MyTextBox")))).Text&lt;br /&gt;&lt;br /&gt;Diese Methode muss verwendet werden da die Controls protected sind. Aus Performance-Gründen (und OO Sicht) sollte auf diese Methode verzichtet werden. Wenn analog dem 'Server Transfer' mit public Properties gearbeitet wird, lassen sich zudem Schwierigkeiten vermeiden, die beim Einsatz von Masterpages und UserControls entstehen und mit einem zwischenschritt über den ContentPlaceholder gelöst werden müssten.&lt;br /&gt;prePage = (PagesClassName)PreviousPage;&lt;br /&gt;ContentPlaceHolder c = (ContentPlaceHolder)prePage .Master.FindControl("ContentPlaceHolder1");&lt;br /&gt;(((TextBox)(c.FindControl("MyTextBox"))).Text&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/x3x8t37x(VS.80).aspx"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-230216877347383821?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/230216877347383821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=230216877347383821' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/230216877347383821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/230216877347383821'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/redirecting-to-another-page.html' title='Redirecting to another page'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4644501450622843542</id><published>2007-01-24T07:56:00.000+01:00</published><updated>2007-09-17T15:06:51.798+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><title type='text'>WPF/E for the real world</title><content type='html'>Ich war sofort begeistert von WPF/E als ich die ersten Beispiel sah. Wenn man aber erst mal einen Tag damit rumgespielt und selber die ersten Demos realister hat kommt plötzlich die Frage: War's das schon?&lt;br /&gt;&lt;br /&gt;Im Moment ja, den wichtige Elemente für eine 'richtige' Anwendung fehlen noch. So gibt's nicht einmal eine Textbox, was die Interaktivität schwierig macht.&lt;br /&gt;Das ist natürlich alles bereits angekündigt, wir müssen uns aber noch etwas in Geduld üben.&lt;br /&gt;&lt;br /&gt;Wer schon mal einen kleinen Vorgeschmack möchte, soll sich &lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/archive/2006/12/14/629.aspx"&gt;das Beispiel&lt;/a&gt; von Tony anschauen. Nice!&lt;br /&gt;&lt;br /&gt;Stay tuned, more is coming up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4644501450622843542?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4644501450622843542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4644501450622843542' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4644501450622843542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4644501450622843542'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/wpfe-for-real-world.html' title='WPF/E for the real world'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-9215200516054766250</id><published>2007-01-23T20:27:00.000+01:00</published><updated>2007-09-17T15:03:50.343+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET AJAX 1.0 Released</title><content type='html'>Leider reichte es dazumal mit dem Release nicht auf den Projektstart vom Dezember 2006. Das wir ihn jetzt bereits bekommen haben ist aber sehr erfreulich. Dann wollen wir uns mal ans Update machen.&lt;br /&gt;&lt;br /&gt;Den ASP.NET AJAX 1.0 Release gibt's &lt;a href="http://ajax.asp.net/"&gt;hier&lt;/a&gt;. Die Online Doku ist nun auch ganz ordentlich und die Upgrade Whitepaper funktionieren.&lt;br /&gt;&lt;br /&gt;Auch vom ASP.NET AJAX Control Toolkit gibt's am selben Ort einen neuen Release. Wie man im &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/01/23/asp-net-ajax-1-0-released.aspx"&gt;Blog von Scott&lt;/a&gt; sieht, sind ein paar schöne Controls wie der Calendar Extender dazu gekommen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-9215200516054766250?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/9215200516054766250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=9215200516054766250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/9215200516054766250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/9215200516054766250'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/aspnet-ajax-10-released.html' title='ASP.NET AJAX 1.0 Released'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1777475944249574157</id><published>2007-01-22T15:36:00.000+01:00</published><updated>2007-09-14T15:56:22.160+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Templated Control with Designer Support</title><content type='html'>Für mein aktuelles Projekt benötigten wir eine schön formatierte Box die einen Titel hat. Statt diese auf jeder Seite x-mal mit Table Tags zu bauen und zu formatieren, wollten wir ein eigenes Control verwenden.&lt;br /&gt;&lt;br /&gt;1. Versuch: Erstellen eines einfachen Controls abgeleitet von der Klasse Controls befriedigte unsere Bedürfnisse nur mässig, da zwischen dem Start- und Endtag nur Text verwendet werden konnte. Wir wollten jedoch ASP.NET Controls in der Box platzieren.&lt;br /&gt;&lt;br /&gt;[DefaultProperty("Title"), ToolboxData("&lt;{0}:SimpleBox runat=server&gt;")]&lt;br /&gt;public class SimpleBox : Control&lt;br /&gt;{&lt;br /&gt;private string _title;&lt;br /&gt;&lt;br /&gt;[Bindable(true), Category("Appearance"), DefaultValue("")]&lt;br /&gt;public string Title&lt;br /&gt;{&lt;br /&gt;get { return _title; }&lt;br /&gt;set { _title = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected override void Render(HtmlTextWriter output)&lt;br /&gt;{&lt;br /&gt;string outputString = string.Empty;&lt;br /&gt;&lt;br /&gt;// generate output (html)&lt;br /&gt;outputString = "&amp;#060;table cellspacing="0" cellpadding="0" border="1"&amp;#062;"&lt;br /&gt;+ " &amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td&amp;#062;" + Title + "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td&amp;#062;";&lt;br /&gt;&lt;br /&gt;// read between the begin and end tag&lt;br /&gt;if ((HasControls()) &amp;&amp;amp; (Controls[0] is LiteralControl))&lt;br /&gt;{&lt;br /&gt;outputString += ((LiteralControl)Controls[0]).Text;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;string outputStringEnd = "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ "&amp;#060;/table&amp;#062;";&lt;br /&gt;&lt;br /&gt;// speak your mind&lt;br /&gt;output.Write(outputString);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. Versuch: Erstellen eines Composite Controls&lt;br /&gt;Das war schon besser. Die Controls zwischen Start- und Endtag wurden erkannt und gerendert. Einziges Problem waren die Events der Childcontrols. Diese wurden nicht gefeuert. Könnte man ausprogrammieren, aber...&lt;br /&gt;&lt;br /&gt;[DefaultProperty("Title"), ToolboxData("&lt;{0}:ComposedBox runat=server&gt;")]&lt;br /&gt;public class ComposedBox : Control, INamingContainer&lt;br /&gt;{&lt;br /&gt;private string _title;&lt;br /&gt;&lt;br /&gt;//[Bindable(true), Category("Appearance"), DefaultValue("")]&lt;br /&gt;public string Title&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;return _title;&lt;br /&gt;}&lt;br /&gt;set&lt;br /&gt;{&lt;br /&gt;_title = value;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;string outputStringStart = "&amp;#060;table cellspacing="0" cellpadding="0" border="1"&amp;#062;"&lt;br /&gt;+ " &amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td&amp;#062;" + Title + "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td&amp;#062;";&lt;br /&gt;&lt;br /&gt;string outputStringEnd = "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ "&amp;#060;/table&amp;#062;&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;this.Controls.AddAt(0, (new LiteralControl(outputStringStart)));&lt;br /&gt;this.Controls.AddAt(this.Controls.Count - 1, (new LiteralControl(outputStringEnd)));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Versuch: Das Templated Control&lt;br /&gt;Hier funktioniert alles auf anhieb, ohne grossen Programmieraufwand. In kurzer Zeit war unser Control erstellt und die formatierte Box stand zur Verfügung. In einer überarbeiteten Variante integrierten wir dann auch noch den fehlenden Designer Support. Great!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class BoxTemplate : CompositeControl, INamingContainer&lt;br /&gt;{&lt;br /&gt;private String _message = null;&lt;br /&gt;public BoxTemplate() { }&lt;br /&gt;public BoxTemplate(String message)&lt;br /&gt;{&lt;br /&gt;_message = message;&lt;br /&gt;}&lt;br /&gt;public String Message&lt;br /&gt;{&lt;br /&gt;get { return _message; }&lt;br /&gt;set { _message = value; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[DefaultProperty("Title"),&lt;br /&gt;ParseChildren(true), PersistChildren(false),&lt;br /&gt;Designer("CSBS.TVCITTool.Client.Web.Controls.TemplatedBoxControlDesigner, CSBS.TVCITTool.Client.Web.Controls"),&lt;br /&gt;ToolboxData("&lt;{0}:TemplatedBox runat=server&gt;")]&lt;br /&gt;public class TemplatedBox : CompositeControl, INamingContainer&lt;br /&gt;{&lt;br /&gt;private string _title;&lt;br /&gt;private ITemplate _messageTemplate = null;&lt;br /&gt;private String _message = null;&lt;br /&gt;&lt;br /&gt;public String Message&lt;br /&gt;{&lt;br /&gt;get { return _message; }&lt;br /&gt;set { _message = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[Bindable(true), Category("Appearance"), DefaultValue("")]&lt;br /&gt;public string Title&lt;br /&gt;{&lt;br /&gt;get { return _title; }&lt;br /&gt;set { _title = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;[PersistenceMode(PersistenceMode.InnerProperty), DefaultValue(null), TemplateContainer(typeof(BoxTemplate)),&lt;br /&gt;TemplateInstance(TemplateInstance.Single), Browsable(false)]&lt;br /&gt;public ITemplate MessageTemplate&lt;br /&gt;{&lt;br /&gt;get { return _messageTemplate; }&lt;br /&gt;set { _messageTemplate = value; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public override void DataBind()&lt;br /&gt;{&lt;br /&gt;EnsureChildControls();&lt;br /&gt;base.DataBind();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;// If a template has been specified, use it to create children.&lt;br /&gt;// Otherwise, create a single literalcontrol with message value&lt;br /&gt;&lt;br /&gt;string outputStringStart = "&lt;br /&gt;&amp;#060;table class="boxframe" cellspacing="'\"&amp;#062;"&lt;br /&gt;+ " &amp;#060;tbody&amp;#062;&amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td class="boxheader"&amp;#062;" + Title + "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;tr&amp;#062;"&lt;br /&gt;+ " &amp;#060;td&amp;#062;";&lt;br /&gt;&lt;br /&gt;string outputStringEnd = "&amp;#060;/td&amp;#062;"&lt;br /&gt;+ " &amp;#060;/tr&amp;#062;"&lt;br /&gt;+ "&amp;#060;/tbody&amp;#062;&amp;#060;/table&amp;#062;&lt;br /&gt;";&lt;br /&gt;&lt;br /&gt;if (MessageTemplate != null)&lt;br /&gt;{&lt;br /&gt;Controls.Clear();&lt;br /&gt;BoxTemplate i = new BoxTemplate(this.Message);&lt;br /&gt;MessageTemplate.InstantiateIn(i);&lt;br /&gt;Controls.Add(i);&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;this.Controls.Add(new LiteralControl(this.Message));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;this.Controls.AddAt(0, (new LiteralControl(outputStringStart)));&lt;br /&gt;this.Controls.AddAt(this.Controls.Count, (new LiteralControl(outputStringEnd)));&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class TemplatedBoxControlDesigner : CompositeControlDesigner&lt;br /&gt;{&lt;br /&gt;private TemplatedBox _designControl;&lt;br /&gt;private TemplateGroupCollection _templateGroupCollection;&lt;br /&gt;&lt;br /&gt;public override void Initialize(System.ComponentModel.IComponent component)&lt;br /&gt;{&lt;br /&gt;base.Initialize(component);&lt;br /&gt;_designControl = (TemplatedBox)component;&lt;br /&gt;SetViewFlags(ViewFlags.DesignTimeHtmlRequiresLoadComplete, true);&lt;br /&gt;SetViewFlags(ViewFlags.TemplateEditing, true);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public override TemplateGroupCollection TemplateGroups&lt;br /&gt;{&lt;br /&gt;get&lt;br /&gt;{&lt;br /&gt;if (_templateGroupCollection == null)&lt;br /&gt;{&lt;br /&gt;_templateGroupCollection = base.TemplateGroups;&lt;br /&gt;TemplateGroup group;&lt;br /&gt;TemplateDefinition templateDefinition;&lt;br /&gt;group = new TemplateGroup("ContextRowTemplates");&lt;br /&gt;templateDefinition = new TemplateDefinition(this, "MessageTemplate", _designControl, "MessageTemplate", false); //der vierte Parameter ist der Name der Property des Control&lt;br /&gt;group.AddTemplateDefinition(templateDefinition);&lt;br /&gt;_templateGroupCollection.Add(group);&lt;br /&gt;}&lt;br /&gt;return _templateGroupCollection;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1777475944249574157?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1777475944249574157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1777475944249574157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1777475944249574157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1777475944249574157'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/templated-control-with-designer-support.html' title='Templated Control with Designer Support'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1309828478032667393</id><published>2007-01-09T12:25:00.000+01:00</published><updated>2007-09-17T15:03:14.073+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><title type='text'>Passed 70-554</title><content type='html'>I did it again... und bin nun endlich MCPD.&lt;br /&gt;&lt;br /&gt;Hilfen und Links findet ihr in den weiteren Blogs mit dem Label Learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1309828478032667393?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1309828478032667393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1309828478032667393' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1309828478032667393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1309828478032667393'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/passed-70-554.html' title='Passed 70-554'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8321776706460008769</id><published>2007-01-05T08:40:00.000+01:00</published><updated>2007-09-14T15:56:22.161+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>WPF/E Code Samples</title><content type='html'>Es ist noch nicht lange her das wir WPF/E erhalten haben und schon gibt's dutzende Beispiele.&lt;br /&gt;Microsoft hat gleich selber ein Sample Pack erstellt das man &lt;a href="http://www.microsoft.com/downloads/thankyou.aspx?familyId=8AEEBE39-6699-4F4F-9732-CA732E57AE21&amp;displayLang=en"&gt;hier&lt;/a&gt; downloaden kann. Weitere Informationen gibt's auf &lt;a href="http://msdn2.microsoft.com/en-us/asp.net/bb187358.aspx"&gt;MSDN WPF/E Dev Center&lt;/a&gt;.&lt;br /&gt;Weitere interessante Beispiele inklusive Source Code findet man im Blog von Mike Harsh &lt;a href="http://blogs.msdn.com/mharsh/default.aspx"&gt;hier&lt;/a&gt; oder &lt;a href="http://richardleggett.co.uk/downloads/wpfe/Tests/Tests/"&gt;hier&lt;/a&gt; von Richard Leggett.&lt;br /&gt;Mein technisches Lieblingsbeispiel kommt von Simon, leider ohne Source Code und befindet sich &lt;a href="http://blogs.interfacett.com/simon/2006/12/13/wpfe-mouse-track.html"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8321776706460008769?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8321776706460008769/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8321776706460008769' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8321776706460008769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8321776706460008769'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2007/01/wpfe-code-samples.html' title='WPF/E Code Samples'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8354340018054515447</id><published>2006-12-15T21:25:00.000+01:00</published><updated>2007-09-17T15:07:26.327+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET AJAX 1.0 RC</title><content type='html'>Und gleich noch der RC von ASP.NET AJAX.&lt;br /&gt;Get it &lt;a href="http://ajax.asp.net/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8354340018054515447?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8354340018054515447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8354340018054515447' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8354340018054515447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8354340018054515447'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/12/aspnet-ajax-10-rc.html' title='ASP.NET AJAX 1.0 RC'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4573436981943193276</id><published>2006-12-15T16:18:00.000+01:00</published><updated>2007-09-17T15:04:40.926+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Microsoft Visual Studio 2005 Service Pack 1</title><content type='html'>Get it &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=BB4A75AB-E2D4-4C96-B39D-37BAF6B5B1DC&amp;amp;displaylang=en"&gt;here&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4573436981943193276?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4573436981943193276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4573436981943193276' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4573436981943193276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4573436981943193276'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/12/microsoft-visual-studio-2005-service.html' title='Microsoft Visual Studio 2005 Service Pack 1'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1971972528898727268</id><published>2006-12-14T09:57:00.000+01:00</published><updated>2007-09-17T15:05:33.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><title type='text'>WPF/E CTP available</title><content type='html'>Endlich ist WPF/E als Community Technologie Priview verfügbar.&lt;br /&gt;&lt;br /&gt;Damit man eine WPF/E Anwendung im Browser sehen und erleben kann, muss das &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A3E29817-F841-46FC-A1D2-CEDC1ED5C948&amp;amp;displaylang=en"&gt;Browser Plug-In&lt;/a&gt; installiert werden.&lt;br /&gt;&lt;br /&gt;Um eine WPF/E Anwendung zu bauen braucht's das &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=2B01EC7E-C3B8-47CC-B12A-67C30191C3AA&amp;amp;displaylang=en"&gt;WPF/E SDK&lt;/a&gt;. Wie man das WPF/E Project Template ohne 'Web Application Projects' installiert und weitere gute Infos gibt's &lt;a href="http://blogs.conchango.com/johnrayner/archive/2006/12/05/WPF_2F00_E_3A00_-Setting-up-your-workstation.aspx"&gt;hier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Die offizielle Microsoft Dokumentation findet man &lt;a href="http://msdn2.microsoft.com/en-us/library/bb188743.aspx"&gt;hier&lt;/a&gt;. Natürlich haben auch &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/12/04/announcing-the-release-of-the-first-wpf-e-ctp.aspx"&gt;Scott&lt;/a&gt; und &lt;a href="http://blogs.msdn.com/mharsh/default.aspx"&gt;Mike&lt;/a&gt; wie immer gute Posts in ihren Blogs.&lt;br /&gt;&lt;br /&gt;Nun geht's los und wir bauen die erste WPF/E Anwendung. Das Resultat und weitere Infos folgen. Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1971972528898727268?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1971972528898727268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1971972528898727268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1971972528898727268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1971972528898727268'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/12/wpfe-ctp-available.html' title='WPF/E CTP available'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8524370478830224617</id><published>2006-11-29T16:16:00.000+01:00</published><updated>2007-09-17T15:08:01.111+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><title type='text'>Discount on MCP Certifications</title><content type='html'>Wer sich heute entschliesst seinen MCAD oder MCSD.NET Titel auf die Version .NET 2.0 upzugraden, der kann das mit 25% Rabatt machen. Mehr Infos dazu gibt's &lt;a href="http://www.microsoft.com/learning/mcp/upgrade/default.mspx"&gt;hier&lt;/a&gt; (Achtung, Passport required).&lt;br /&gt;&lt;br /&gt;Wer MCT ist hat übrigens auf allen MCP Prüfungen einen Rabatt von 45%. Mehr dazu unter &lt;a href="https://mcp.microsoft.com/mct/courses_exams/exams_discount.mspx"&gt;https://mcp.microsoft.com/mct/courses_exams/exams_discount.mspx&lt;/a&gt; (Achtung, Passport required).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8524370478830224617?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8524370478830224617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8524370478830224617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8524370478830224617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8524370478830224617'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/11/discount-on-mcp-certifications.html' title='Discount on MCP Certifications'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-8299839894877115981</id><published>2006-11-14T14:43:00.000+01:00</published><updated>2007-09-17T15:08:33.354+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2005 SP1</title><content type='html'>Das Service Pack 1 für Visual Studio soll noch dieses Jahr, nämlich im Dezember ausgeliefert werden. Die Beta kann weiterhin bei Microsoft herunter geladen werden.&lt;br /&gt;&lt;br /&gt;Was darf man vom Service Pack erwarten:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The Hotfixes and General Distribution Release Updates released between Visual Studio 2005 Release to Market and the end of the Service Pack customer beta period.&lt;/li&gt;&lt;li&gt;Any fixes addressing security issues categorized by the Microsoft Security Response Center as "Critical", "Important" or "Moderate".&lt;/li&gt;&lt;li&gt;Fixes for product reliability and stability issues, including those reported by customers via the Product Feedback Center, and the crashes most frequently reported via Watson.&lt;/li&gt;&lt;li&gt;Fixes for common "eligible" functional issues reported by customers via the Product Feedback Center. "Eligible" functional issues are those that do not require breaking changes, architectural changes, or Design Change Request level feature work and that do not create unacceptable product quality risk and/or cost of implementation.&lt;/li&gt;&lt;li&gt;Fixes for the top customer and supportability issues as reported by Customer Support Services.&lt;/li&gt;&lt;/ul&gt;Weitere Infos gibt's &lt;a href="http://connect.microsoft.com/VisualStudio/content/content.aspx?ContentID=3311"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-8299839894877115981?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/8299839894877115981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=8299839894877115981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8299839894877115981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/8299839894877115981'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/11/visual-studio-2005-sp1.html' title='Visual Studio 2005 SP1'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-7194543511461636813</id><published>2006-11-03T09:08:00.000+01:00</published><updated>2007-09-14T15:56:22.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>Doodle or how to find the right time for a meeting</title><content type='html'>Wer oft Meetings plannen muss, kennt die Schwierigkeit einen Termin zu finden, der allen Beteiligten passt. Mit &lt;a href="http://www.doodle.ch"&gt;www.doodle.ch&lt;/a&gt; wird das nun aber etwas einfacher.&lt;br /&gt;&lt;div&gt;Ohne sich anzumelden kann ein Thema eröffnet werden und die zur Auswahl stehenden Daten werden fixiert. Danach kann der resultierende Link an alle Teilnehmer versendet werden, die ihre Verfügbarkeit eintragen können.&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;a href="http://photos1.blogger.com/blogger2/2105/3240/1600/Image2.jpg"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger2/2105/3240/320/Image2.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-7194543511461636813?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/7194543511461636813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=7194543511461636813' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7194543511461636813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/7194543511461636813'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/11/doodle-or-how-to-find-right-time-for.html' title='Doodle or how to find the right time for a meeting'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-5998356158858586048</id><published>2006-10-26T10:02:00.000+02:00</published><updated>2007-09-14T15:56:22.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>Google Custom Search</title><content type='html'>Jeden Tag verbringt man einige Zeit auf Google um Lösungen für irgend welche .NET Probleme zu finden. Mit Google Custom Search kann die Suche verfeinert und so die Trefferquote verbessert werden.&lt;br /&gt;Allgemeine Infos dazu gibt es auf &lt;a href="http://www.google.com/coop/cse/"&gt;www.google.com/coop/cse/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Dan Appleman hat bereits eine erste Version seiner Custom Search Site aufgeschalten. &lt;a href="http://www.searchdotnet.com"&gt;www.searchdotnet.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Wer suchet, der findet!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-5998356158858586048?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/5998356158858586048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=5998356158858586048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5998356158858586048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/5998356158858586048'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/google-custom-search.html' title='Google Custom Search'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-4960009215169339965</id><published>2006-10-24T13:41:00.000+02:00</published><updated>2007-09-14T15:56:22.163+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><title type='text'>C# 3.0 Extensions</title><content type='html'>In einer Diskussion über Mittag zum Thema C# 3.0 wurde nach den Verbesserungen der neuen Version gefragt. Aus diesem Grund hier eine kurze Übersicht und ein Dokument zum Thema von Microsoft.&lt;br /&gt;&lt;br /&gt;· Implicitly typed local variables, which permit the type of local variables to be inferred from the expressions used to initialize them.&lt;br /&gt;· Extension methods, which make it possible to extend existing types and constructed types with additional methods.&lt;br /&gt;· Lambda expressions, an evolution of anonymous methods that provides improved type inference and conversions to both delegate types and expression trees.&lt;br /&gt;· Object initializers, which ease construction and initialization of objects.&lt;br /&gt;· Anonymous types, which are tuple types automatically inferred and created from object initializers.&lt;br /&gt;· Implicitly typed arrays, a form of array creation and initialization that infers the element type of the array from an array initializer.&lt;br /&gt;· Query expressions, which provide a language integrated syntax for queries that is similar to relational and hierarchical query languages such as SQL and XQuery.&lt;br /&gt;· Expression trees, which permit lambda expressions to be represented as data (expression trees) instead of as code (delegates).&lt;br /&gt;&lt;br /&gt;Und &lt;a href="http://download.microsoft.com/download/9/5/0/9503e33e-fde6-4aed-b5d0-ffe749822f1b/csharp%203.0%20specification.doc"&gt;hier&lt;/a&gt; das vollständige Dokument.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-4960009215169339965?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/4960009215169339965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=4960009215169339965' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4960009215169339965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/4960009215169339965'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/c-30-extensions.html' title='C# 3.0 Extensions'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-3141448456024817252</id><published>2006-10-24T13:26:00.000+02:00</published><updated>2007-09-14T15:56:22.164+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>XML Notepad 2006</title><content type='html'>Wieder einmal ein nettes Tool von Microsoft. Hilft allen die ein einfaches, unkompliziertes Tool für das Arbeiten mit XML Files suchen. Schnelle, übersichtliche Darstellung und simple Bearbeitungsmöglichkeiten.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger2/2105/3240/1600/xmlnotepad01.gif"&gt;&lt;img style="CURSOR: hand" alt="" src="http://photos1.blogger.com/blogger2/2105/3240/320/xmlnotepad01.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Alles weitere &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxmlnet/html/xmlnotepad.asp"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-3141448456024817252?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/3141448456024817252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=3141448456024817252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/3141448456024817252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/3141448456024817252'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/xml-notepad-2006.html' title='XML Notepad 2006'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1254557741281249714</id><published>2006-10-16T11:49:00.000+02:00</published><updated>2007-09-14T15:56:22.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AJAX'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Atlas is now ASP.NET AJAX</title><content type='html'>Wir haben uns alle schon an den Begriff Atlas gewohnt. Nun aber heisst das Microsoft Framework für die AJAX (Asynchron JavaScript and XML) Funktionalität offiziell ASP.NET AJAX.&lt;br /&gt;&lt;br /&gt;Im Detail:&lt;br /&gt;Die Client-Side "Atlas" Javascript Library heisst Microsoft AJAX Library.&lt;br /&gt;Die Server-Side "Atlas" Funktionalität heisst ASP.NET 2.0 AJAX Extensions.&lt;br /&gt;Der "Atlas" Control Toolkit heisst ASP.NET AJAX Control Toolkit.&lt;br /&gt;&lt;br /&gt;Mehr dazu &lt;a href="http://ajax.asp.net/default.aspx?tabid=47"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1254557741281249714?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1254557741281249714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1254557741281249714' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1254557741281249714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1254557741281249714'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/atlas-is-now-aspnet-ajax.html' title='Atlas is now ASP.NET AJAX'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-6985922321308098724</id><published>2006-10-11T17:01:00.000+02:00</published><updated>2007-09-17T15:09:45.017+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>IE7 is coming</title><content type='html'>Wenn man dem &lt;a href="http://blogs.msdn.com/ie/archive/2006/10/06/IE7-Is-Coming-This-Month_2E002E002E00_Are-you-Ready_3F00_.aspx"&gt;Blog-Eintrag&lt;/a&gt; von Scott Graff glauben darf, dann kriegen wir den IE7 noch diesen Monat. Dieser wird sich rasch verbreiten, da die Auslieferung mit den automatischen Windows-Updates vorgesehen ist.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-6985922321308098724?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/6985922321308098724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=6985922321308098724' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6985922321308098724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/6985922321308098724'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/ie7-is-coming.html' title='IE7 is coming'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-976769237043219096</id><published>2006-10-10T09:36:00.000+02:00</published><updated>2007-09-14T15:56:22.166+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WPF/E'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>What is WPF/E?</title><content type='html'>WPF/E steht für Windows Presentation Foundation Everywhere und wurde an der PDC 2005 das erste Mal vorgestellt.&lt;br /&gt;&lt;br /&gt;Bei WPF/E handelt es sich um ein Subset von WPF, mit dessen Hilfe XAML Anwendungen plattformübergreifend und Browser unabhängig dargestellt werden können. Konkret heisst das, Anwendungen die mit dem .NET Framework 3.0 und XAML entwickelt wurden, können in Zukunft auf einem MAC im Safari, etc. ausgeführt werden. Dazu muss eine Runtime, die WPF/E, heruntergeladen und installiert werden. Diese soll jedoch kleiner als 1 MByte sein.&lt;br /&gt;&lt;br /&gt;Welche Funktionen unterstützt werden steht noch nicht fest. Bereits bekannt ist, dass 'nur' 2D und nicht 3D Grafiken möglich sind. Einen ersten Eindruck vermittelt der folgende Printscreen:&lt;br /&gt;&lt;br /&gt;WPF/E Clock in Firefox&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger2/2105/3240/1600/wpfeclock.jpg"&gt;&lt;img alt="WPF/E Clock" src="http://photos1.blogger.com/blogger2/2105/3240/320/wpfeclock.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Erste (Alpha, Beta) Versionen sind noch nicht verfügbar, sollten aber noch dieses Jahr erhältlich sein. Wohl deshalb sind auch Informationen über WPF/E noch rare. Auf &lt;a href="http://channel9.msdn.com/showpost.aspx?postid=193367"&gt;Channel 9&lt;/a&gt; findet man jedoch eine interessante Einführung.&lt;br /&gt;&lt;br /&gt;Wir bleiben gespannt!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-976769237043219096?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/976769237043219096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=976769237043219096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/976769237043219096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/976769237043219096'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/was-ist-wpfe.html' title='What is WPF/E?'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-1121355586265128546</id><published>2006-10-09T14:23:00.000+02:00</published><updated>2007-09-14T15:56:22.167+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>SQL Refactor</title><content type='html'>Da hatten wir doch kürzlich eine Diskusion welche Tools es gibt um SQL Code zu formatieren. Viele waren begeistert von &lt;a href="http://www.wangz.net/"&gt;SQL Pretty Printer&lt;/a&gt; und einer kostenlosen &lt;a href="http://www.wangz.net/cgi-bin/pp/gsqlparser/sqlpp/sqlformat.tpl"&gt;Online-Version&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nun gibt's aber von Red Gate den SQL Refactor, der alles bisherige in den Schatten stellt.&lt;br /&gt;&lt;br /&gt;Features:&lt;br /&gt;- Visual Studio integration&lt;br /&gt;- SQL Layout&lt;br /&gt;- Renaming&lt;br /&gt;- Table Split&lt;br /&gt;- Uppercase Keywords&lt;br /&gt;- ...&lt;br /&gt;&lt;br /&gt;Weitere Infos und den Download gibt's &lt;a href="http://www.red-gate.com/messageboard/viewtopic.php?t=3438"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-1121355586265128546?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/1121355586265128546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=1121355586265128546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1121355586265128546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/1121355586265128546'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/sql-refactor.html' title='SQL Refactor'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115994826691422317</id><published>2006-10-04T09:49:00.000+02:00</published><updated>2007-09-14T15:56:22.167+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Architecture'/><title type='text'>Good Agile, Bad Agile</title><content type='html'>Agile Development ist in aller Munde und zahlreiche Bücher zu diesem Thema sind erhältlich.&lt;br /&gt;Eine etwas andere Sichtweise findet man in diesem sehr unterhaltsamen Artikel:&lt;br /&gt;&lt;a title="blocked::http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html" href="http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html"&gt;http://steve-yegge.blogspot.com/2006/09/good-agile-bad-agile_27.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wer es etwas wissenschaftlicher mag, kriegt einen guten Überblick über Agile Development durch das Referat von Urs Meier. Eine Doku findet man auf der Trivadis Webseite, &lt;a href="http://www.trivadis.com/d/knowhow/referate/index.asp"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115994826691422317?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115994826691422317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115994826691422317' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115994826691422317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115994826691422317'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/10/good-agile-bad-agile.html' title='Good Agile, Bad Agile'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115918802551371347</id><published>2006-09-25T14:05:00.000+02:00</published><updated>2007-09-17T15:11:50.146+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IIS'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>IIS7 - Developer Features</title><content type='html'>Die Informationen zum Thema IIS7 werden täglich üppiger. Auf der Website &lt;a href="http://www.iis.net/"&gt;www.iis.net&lt;/a&gt; findet man grundsätzlich alle relevanten Infos zu diesem Thema mit guten Erklärungen und etlichen Beispielen.&lt;br /&gt;&lt;br /&gt;An dieser Stelle möchte ich die Möglichkeiten, die dem Entwickler neu zur Verfügung stehen, erwähnen und die wichtigsten Schritte kurz erläutern.&lt;br /&gt;&lt;br /&gt;Architektur:&lt;br /&gt;- ASP.NET ist voll integriert&lt;br /&gt;- Einheitliche HTTP Pipeline für managed und native Code&lt;br /&gt;- Einheitliches Configurationssystem (XML Files)&lt;br /&gt;&lt;br /&gt;Programmierung:&lt;br /&gt;- Erweitern des IIS Configuration Store&lt;br /&gt;* Schema Definition (XML) unter ...\system32\inetsrv\config\schema\NAME.xml speichern&lt;br /&gt;* Schema in applicationhost.config registrieren&lt;br /&gt;* Lesen und Schreiben der Settings über die Klassen ServerManager und ConfigurationManager&lt;br /&gt;- Erweitern des Core Servers (durch HTTP Handler)&lt;br /&gt;* Implementieren von IHttpHandler&lt;br /&gt;* Handler in web.config regisitrieren&lt;br /&gt;- Erweiterung für den IIS Manager (Add-In)&lt;br /&gt;* Assembly muss im GAC installiert werden&lt;br /&gt;* Referenzen auf die neuen IIS Assemblies&lt;br /&gt;* Klasse die von ModuleProvider ableitet implementieren&lt;br /&gt;* Klasse die von Module ableitet implementieren&lt;br /&gt;* Eigentliche UI Page erstellen (von ModulePage ableiten)&lt;br /&gt;* Module in administration.config registrieren&lt;br /&gt;&lt;br /&gt;Durch die Integration von ASP.NET und den modularen Aufbau des Servers sind die Möglichkeiten, die ein Entwickler nutzen kann, riesig und die Lernkurve sehr steil. Also gleich ausprobieren ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115918802551371347?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115918802551371347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115918802551371347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115918802551371347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115918802551371347'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/09/iis7-developer-features.html' title='IIS7 - Developer Features'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115703550279385029</id><published>2006-08-31T16:21:00.000+02:00</published><updated>2006-08-31T16:48:47.480+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><title type='text'>Passed 70-553</title><content type='html'>Für den Upgrade vom MCSD .NET zum MCPD gilt es zwei Tests zu absolvieren. Heute habe ich die Prüfung 70-553 bestanden und somit den ersten Schritt hinter mir.&lt;br /&gt;&lt;br /&gt;Sofern ich die Angaben von &lt;a href="http://www.microsoft.com/learning/exams/70-553.asp"&gt;Microsoft&lt;/a&gt; richtig interpretiere, darf ich mich nun MCTS .NET Framework 2.0 Web Applications und MCTS .NET Framework 2.0 Windows Applications nennen ;-)&lt;br /&gt;&lt;br /&gt;Beim Prüfungsbeginn kann zwischen den Sprachen C# und VB gewählt werden. Die Prüfung ist in drei Teile à 27-30 Fragen gegliedert. Web, Windows und Allgemein. Für jeden Teil stehen rund 80 Minuten zur Verfügung. Davon brauchte ich jeweils 30, also kein Zeitproblem.&lt;br /&gt;&lt;br /&gt;Mit den Braindumps von &lt;a href="http://www.testking.com/70-553.htm"&gt;Testking&lt;/a&gt; ist man relativ gut vorbereitet. Im Windows und im allgemeinen Teil waren mir die Fragen zu 80% bekannt, im Webbereich zu 50%.&lt;br /&gt;&lt;br /&gt;Euch viel Glück!&lt;br /&gt;&lt;br /&gt;Cheers&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115703550279385029?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115703550279385029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115703550279385029' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115703550279385029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115703550279385029'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/passed-70-553.html' title='Passed 70-553'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115686782699836531</id><published>2006-08-29T18:01:00.000+02:00</published><updated>2007-09-17T15:15:14.936+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Recent Projects Liste in Visual Studio 2005</title><content type='html'>Wer oft Demos vorführt, Kurse gibt, Beispiele studiert oder einfach mit vielen Projekten spielt, um kurz etwas zu probieren, der hat wie ich, eine überladene, schlecht organisierte Recent Projects List auf der Start Page.&lt;br /&gt;Vergeblich sucht man in der Visual Studio IDE eine Möglichkeit um diese Projekte zu verwalten. Zum Glück geht dies aber ganz einfach, indem der Registry Key bearbeitet wird.&lt;br /&gt;&lt;br /&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115686782699836531?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115686782699836531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115686782699836531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115686782699836531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115686782699836531'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/recent-projects-liste-in-visual-studio.html' title='Recent Projects Liste in Visual Studio 2005'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115649020441937043</id><published>2006-08-25T09:08:00.000+02:00</published><updated>2007-09-17T15:15:14.937+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET 2.0 Client Callbacks</title><content type='html'>Erste AJAX Funktionalität wurde bereits in ASP.NET 2.0 fest eingebaut. Dies über die sogenannten Client Callbacks. Dazu muss in der Page Klasse das Interface ICallbackEventHandler implementiert werden.&lt;br /&gt;&lt;br /&gt;Die Funktionalität ist weder so einfach wie das im Atlas Control Tool Kit enthaltene UpdatePanel, noch so mächtig wie das Atlas Framework. Wer aber einfache AJAX Funktionalität nutzen möchte, ohne zusätzliche Komponenten einzusetzten, dem dürfte diese Möglichkeit gerade richtig kommen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115649020441937043?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115649020441937043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115649020441937043' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115649020441937043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115649020441937043'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/aspnet-20-client-callbacks.html' title='ASP.NET 2.0 Client Callbacks'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115598989991084180</id><published>2006-08-19T13:58:00.000+02:00</published><updated>2007-09-17T15:15:14.937+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2005 for .NET 1.1 Applications</title><content type='html'>Wieso kann ich in Visual Studio 2005 nicht einfach das Target Framework ändern, um damit auch .NET 1.x Applikationen erstellen zu können? Diese Frage haben sich viele Leute gestellt und die Antwort eines Members vom MSBuilt Team ist, das wird kommen!&lt;br /&gt;Wer darauf aber nicht warten will, sondern bereits heute die schönen Features vom Visual Studio 2005 nutzen möchte aber immer noch für die 1.1 Plattform entwickeln muss, dem wird &lt;a href="http://www.codeplex.com/Wiki/View.aspx?ProjectName=MSBee"&gt;hier&lt;/a&gt; geholfen.&lt;br /&gt;&lt;br /&gt;MSBee ist ein OpenSource Projekt, dass das Erstellen von .NET 1.1 Anwendungen mit Visual Studio 2005 erlaubt. Möglich wird das durch die Erweiterbarkeit der in der Version 2005 hinzugekommenen Komponente MSBuilt.&lt;br /&gt;&lt;br /&gt;Vorausgesetzt wird, dass keine .NET 2.0 spezifischen Features verwendet werden. Weiter muss ein Projekt File vorhanden sein, weshalb im Webbereich mit Web Application Projects gearbeitet werden muss.&lt;br /&gt;&lt;br /&gt;OK, das sind ein paar Einschränkungen. Wer die Features von Visual Studio jedoch kennt, weiss das man trotzdem noch viel gewinnt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115598989991084180?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115598989991084180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115598989991084180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115598989991084180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115598989991084180'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/visual-studio-2005-fr-net-11.html' title='Visual Studio 2005 for .NET 1.1 Applications'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115575758214001074</id><published>2006-08-16T21:39:00.000+02:00</published><updated>2006-08-16T22:24:32.863+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio 2003 Service Pack 1</title><content type='html'>Für alle die sich auch immer noch mit alten Tools rumschlagen müssen. Hier steht's zum &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=69d2219f-ce82-46a5-8aec-072bd4bb955e&amp;amp;DisplayLang=en"&gt;download&lt;/a&gt; bereit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115575758214001074?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115575758214001074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115575758214001074' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115575758214001074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115575758214001074'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/visual-studio-2003-service-pack-1_16.html' title='Visual Studio 2003 Service Pack 1'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115562363468334048</id><published>2006-08-15T08:14:00.000+02:00</published><updated>2007-09-17T15:15:14.938+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>Visual Studio Tools</title><content type='html'>Schon wieder bin ich dazu verdammt ein Projekt mit Visual Studio 2003 zu entwickeln. Da ich bereits heute die netten Features wie Refactoring, ... vom 2005 vermisse, muss dringend etwas dagegen getan werden.&lt;br /&gt;&lt;br /&gt;Das haben auch die Leute von JetBrains gedacht und &lt;a href="http://www.jetbrains.com/resharper/"&gt;ReSharper &lt;/a&gt;entwickelt.&lt;br /&gt;- Error Highlighting and Quick-Fixes&lt;br /&gt;- Advanced Coding Assistance&lt;br /&gt;- Numerous Refactorings&lt;br /&gt;- Navigation and Search&lt;br /&gt;- Unit Testing&lt;br /&gt;- ASP.NET Editing&lt;br /&gt;- NAnt and MS Build Scripts Editing&lt;br /&gt;&lt;br /&gt;Ich werde das Tool auf jeden Fall testen, sobald ich wieder zum coden komme (zuerst stehen noch Trainings und Ferien an). Und ich bin sicher, mein Arbeitgeber wird die $200.- gerne ausgeben, wenn ich danach hoch motiviert und extrem produktiv bin ;-)&lt;br /&gt;&lt;br /&gt;Weitere Refactoring Tools die gut aussehen sind:&lt;br /&gt;- &lt;a href="http://www.omnicore.com/justcode.htm"&gt;JustCode!&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.devexpress.com/Products/NET/IDETools/Refactor/"&gt;Refactor!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Viele weitere Tools in allen möglichen Flavores gibt's übrigens &lt;a href="http://sharptoolbox.com/"&gt;hier&lt;/a&gt;. Also los, stöbern, ausprobieren und den Erlebnisbericht hier veröffentlichen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115562363468334048?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115562363468334048/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115562363468334048' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115562363468334048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115562363468334048'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/visual-studio-tools.html' title='Visual Studio Tools'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115488882251143326</id><published>2006-08-06T20:15:00.000+02:00</published><updated>2006-08-06T20:27:02.550+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><title type='text'>MCSD --&gt; MCPD</title><content type='html'>Zertifizierungen sind doch das Schönste. Endlich dürfen wir beweisen was wir können. Und kriegen dafür auch noch hübsche Papiere. Zudem brauchen wir die, den wir wollen ja auch nächstes Jahr wieder Gründe für eine Lohnerhöhung in der Tasche haben.&lt;br /&gt;&lt;br /&gt;Für den Upgrade vom MCSD auf den MCPD braucht es zwei Prüfungen. Mehr dazu &lt;a href="http://www.microsoft.com/learning/mcp/mcpd/entapp/default.mspx"&gt;hier&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-553.asp"&gt;Exam 70–553&lt;/a&gt;: UPGRADE: MCSD Microsoft .NET Skills to MCPD: Enterprise Application Developer by Using the Microsoft .NET Framework: Part 1&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/learning/exams/70-554.asp"&gt;Exam 70–554&lt;/a&gt;: UPGRADE: MCSD Microsoft .NET Skills to MCPD: Enterprise Application Developer by Using the Microsoft .NET Framework: Part 2&lt;br /&gt;&lt;br /&gt;Nun fehlt nur noch die geeignete Vorbereitung. Wenn man sich (so wie ich) im Alltag immer noch mit .NET 1.x rumschlagen muss, sind ein paar gute Fragen zur Vorbereitung gold wert. Die gibt's unter folgenden Adressen. Leider sind sie noch nicht überall vorhanden :-(&lt;br /&gt;&lt;a href="http://www.testking.com"&gt;http://www.testking.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pass4sure.com"&gt;http://www.pass4sure.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.real-exams.com"&gt;http://www.real-exams.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Wer weitere colle Links hat darf diesen Blogeintrag natürlich gerne mit Comments ergänzen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115488882251143326?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115488882251143326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115488882251143326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115488882251143326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115488882251143326'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/mcsd-mcpd.html' title='MCSD --&gt; MCPD'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115471305621475873</id><published>2006-08-04T19:17:00.000+02:00</published><updated>2007-09-17T15:15:14.939+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ObjectDataSource - gewusst wie.</title><content type='html'>Wer das erste Mal vom ObjectDataSource Objekt liesst, welches mit .NET 2.0 zur Welt kam, wird begeistert sein. Nach den ersten Gehversuchen könnte dies jedoch anders sein.&lt;br /&gt;&lt;br /&gt;Wer mit dem ObjectDataSource arbeitet, kriegt von Microsoft einige Features gratis dazu. Speziell wenn die Source an ein DataView etc. gebunden wird.&lt;br /&gt;&lt;br /&gt;Die ObjectDataSource hat aber auch Ansprüche, die es zu beachten gilt. So zum Beispiel muss die Klasse, welche die Daten liefert und die Select, Update, Insert und Delete Methoden zur Verfügung stellt, einen Default Konstruktor haben.&lt;br /&gt;&lt;br /&gt;Weitere Probleme entstehen, wenn man die ObjectDataSource an einen generierten TableAdapter bindet und die darunterliegende Tabelle Nullable Felder hat. Der TableAdapter kann und will das auch, mit dem neuen generischen Typ Nullable arbeiten. Beim Generieren der Queries (Update) auf dem Adapter, werden somit auch die entsprechenden Parameter verwendet. Die ObjectDataSource kennt diese jedoch nicht. Das heisst, die Parameter Kollektion der beiden Objekte wird nicht übereinstimmen und beim Update wird eine Exception geworfen.&lt;br /&gt;&lt;br /&gt;Wird die ObjectDataSource jedoch gemäss den Vorgaben eingesetzt und sind die darunterliegenden Klassen konform zu deren Ansprüche, hat man viel gewonnen.&lt;br /&gt;&lt;br /&gt;Weitre Infos:&lt;br /&gt;&lt;a href="http://www.asp.net/QuickStart/aspnet/doc/ctrlref/data/objectdatasource.aspx"&gt;http://www.asp.net/QuickStart/aspnet/doc/ctrlref/data/objectdatasource.aspx&lt;/a&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.aspx"&gt;http://msdn2.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115471305621475873?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115471305621475873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115471305621475873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115471305621475873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115471305621475873'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/08/objectdatasource-gewusst-wie.html' title='ObjectDataSource - gewusst wie.'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115433332677129603</id><published>2006-07-31T09:19:00.000+02:00</published><updated>2007-09-17T15:15:14.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>ASP.NET und Localization</title><content type='html'>Wer unter ASP.NET 1.x die localization Features nutzen wollte, der hatte viel zu tun. Es mussten eigene Klassen geschrieben werden, die Texte von den Forms mussten irgendwie in die Resourcen Files kommen und manuel verwaltet werden. Und die Dokumentation war auch nur spärlich.&lt;br /&gt;&lt;br /&gt;Erfreulicherweise hat sich das mit ASP.NET 2.0 geändert. In der neuen Version wird nach implicit und explicit Localization unterschieden. Bei der impliciten Version braucht's überhaupt keine Handarbeit mehr.&lt;br /&gt;1. Visual Studio 2005 starten&lt;br /&gt;2. ASP.NET Webseite erstellen&lt;br /&gt;3. Seite im Design Modus öffnen&lt;br /&gt;4. Im Menü über Tools, Generate Local Resource das resx-File erstellen. Dadurch wird der ASP.NET-Folder App_LocalResources und das resx-File erstellt. Zudem wird die aspx-Seite mit den nötigen Properties in der Page Directive versehen.&lt;br /&gt;5. Kopieren und umbenennen (z. Bsp. Test.aspx.en.resx)&lt;br /&gt;6. Texte übersetzen&lt;br /&gt;7. Fertig!&lt;br /&gt;&lt;br /&gt;Ob das für die Praxis wirklich reicht ist fraglich. Sollte der Benutzer eine Sprache nicht explizit wählen können, ... aber für's Erste ist es allemal eine starke Verbesserung und Vereinfachung!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115433332677129603?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115433332677129603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115433332677129603' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115433332677129603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115433332677129603'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/07/aspnet-und-localization.html' title='ASP.NET und Localization'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115409871980209091</id><published>2006-07-28T16:51:00.000+02:00</published><updated>2006-10-15T11:18:49.119+02:00</updated><title type='text'>RSS Feed Readers</title><content type='html'>Um Feeds zu lesen gibt's unzählige Wege. Mein Favorit, die personalisierte Google Seite.&lt;br /&gt;&lt;br /&gt;Im IE7 ist neu ein Feedreader gleich eingebaut und die Feeds können wie Favoriten verwaltet werden. Cool? Na ja!?&lt;br /&gt;Mit Vista wird's aber schon besser. Die im IE registrierten Feeds können nun über Gadgets gleich auf dem Desktop überwacht und gelesen werden. Cool.&lt;br /&gt;Noch besser wird's mit Office 2007. In Outlook können die Feeds gleich noch wie Mails, jeder Feed entspricht einem Mail, verwaltet und archiviert werden.&lt;br /&gt;Nun bin auch ich überzeugt, die Feed-Integration in den neuen Microsoft Produkten spielt gut zusammen und bringt's echt!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115409871980209091?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115409871980209091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115409871980209091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115409871980209091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115409871980209091'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/07/rss.html' title='RSS Feed Readers'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-115398469133625922</id><published>2006-07-27T09:00:00.000+02:00</published><updated>2006-07-27T09:25:53.110+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><title type='text'>Vista - Super sicher oder nur mühsam</title><content type='html'>Vista sieht super aus, allem voran die Einstellung Vista Aero. Aber bewährt es sich auch bei der Arbeit? Das wird sich noch zeigen müssen.&lt;br /&gt;&lt;br /&gt;Eine der ersten Beobachtungen ist ein Fenster das dauernd aufpoppt und in dem man bestätigen muss, dass man diesen Vorgang ausführen will. Was hat's damit aufsich?&lt;br /&gt;&lt;br /&gt;Admin oder doch nicht?&lt;br /&gt;Nach dem Einloggen als Admin arbeitet Vista, trotzdem als PowerUser. Für alle Tätigkeiten die nach Admin Rechten verlangen, poppt nun ein Fenster auf, um den Wechsel (temporär) zu bestätigen. Da kann's auch mal vorkommen, dass man etwas ausführen will, dass man dann nicht darf. Zum Beispiel eine Website mit Visual Studio auf den IIS deployen. Die Lösung ist, Visual Studio über die rechte Maustaste, Start as Admin zu starten. Zudem errinnere man sich an den Commandozeilen Befehl Runas!&lt;br /&gt;&lt;br /&gt;Surfen in der Zwangsjacke!&lt;br /&gt;Wer mit dem Browser auf eine stinknormale Webseite surft, wird total glücklich sein und bleiben. Wer aber zum Beispiel seine Mails lesen möchte, wird einige Fragen haben. Wieso geht's nicht? Der Browser hat unter Sicherheit eine Einstellung, Checkbox!, SafeSurf. Ist die angeklickt, surft man sicher aber oft auch gar nicht. Also weg damit oder besser noch die 'problematischen' Sites in die TrustetSites eintragen.&lt;br /&gt;&lt;br /&gt;Viel Spass mit Vista!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-115398469133625922?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/115398469133625922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=115398469133625922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115398469133625922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/115398469133625922'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/07/vista-super-sicher-oder-nur-mhsam.html' title='Vista - Super sicher oder nur mühsam'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114893180238972514</id><published>2006-05-29T21:29:00.000+02:00</published><updated>2007-09-17T15:15:14.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><title type='text'>C# Snippets - Einsatz oder Missbrauch</title><content type='html'>Wieder ein Referat, wieder Demos, wieder viel Copy/Paste. Falsch. Dieses Mal habe ich alle vorbereiteten Codeteile als Snippets hinterlegt und mir so nicht nur viel Copy/Past Arbeit erspart, sondern das Publikum zum Staunen gebracht. Und so geht's.&lt;br /&gt;&lt;br /&gt;Den Snippet Manager, der in der Professional Edition unter Tools liegt suchte ich vergeblich in meiner Team Edition. Da hilft der Shortcut Ctrl+K, Ctrl+B oder den Eintrag über Customize dem Menü wieder hinzufügen.&lt;br /&gt;&lt;br /&gt;Danach ein bestehendes Snippet (Name.snippet im XML-Format) in VS öffnen, anpassen und speichern.&lt;br /&gt;&lt;br /&gt;Die neuen Snippets über den Manager einbinden.&lt;br /&gt;&lt;br /&gt;Fertig zum Einsatz!&lt;br /&gt;&lt;br /&gt;Übrigens gibt es die für VB Entwickler im VS integrierten Snippets &lt;a href="http://msdn.microsoft.com/vstudio/downloads/codesnippets/default.aspx"&gt;hier&lt;/a&gt; auch für C# Entwickler zum downloaden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114893180238972514?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114893180238972514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114893180238972514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114893180238972514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114893180238972514'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/05/c-snippets-einsatz-oder-missbrauch.html' title='C# Snippets - Einsatz oder Missbrauch'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114838949155994907</id><published>2006-05-23T15:01:00.000+02:00</published><updated>2007-09-17T15:15:14.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><title type='text'>Script#</title><content type='html'>JavaScrip ist und bleibt ein Horror für den wahren Programmierer. Oder? Nein, den nun gibt's Script# und alle Probleme sind gelöst. Alles weitere &lt;a href="http://www.nikhilk.net/Entry.aspx?id=121"&gt;hier&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114838949155994907?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114838949155994907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114838949155994907' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114838949155994907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114838949155994907'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/05/script.html' title='Script#'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114785294806024068</id><published>2006-05-17T09:28:00.000+02:00</published><updated>2007-09-17T15:15:14.941+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TrivadisContent'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Migration ASP.NET 1.x nach 2.0</title><content type='html'>Das Migrieren einer ASP.NET Applikation ist an vielen Orten ein Thema, da ASP.NET 2.0 sehr viele coole, neue Features mitbringt. Für den Upgrade bietet VS gute Unterstützt durch den eingebauten Wizard. Ein Patch steht zum &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7CECD652-FC04-4EF8-A28A-25C5006677D8&amp;displaylang=en"&gt;Download&lt;/a&gt; bereit ;-).&lt;br /&gt;&lt;br /&gt;Die erste Hürde auf dem Weg ist zu entscheiden welche Strategie, sprich welche Projekt Struktur für die Zukunft gewählt werden soll.&lt;br /&gt;Handelt es sich um eine grössere Applikation, dürfte ein Wechsel zur neuen VS 2005 Projekt Struktur nicht erwünscht sein. Dies lässt sich durch den Einsatz von VS 2005 Web Application Project umgehen, welches heute als &lt;a href="http://msdn.microsoft.com/asp.net/reference/infrastructure/wap/default.aspx"&gt;Download&lt;/a&gt; zur Verfügung steht, später im SP1 für VS 2005 enthalten sein wird.&lt;br /&gt;&lt;br /&gt;Weitere hilfreiche Infos gibt's hier:&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/asp.net/reference/migration/asp2mig/default.aspx?pull=/library/en-us/dnaspp/html/webprojectsvs05.asp"&gt;Step-By-Step Guide to Converting Web Projects from VS 2003 to VS 2005&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://webproject.scottgu.com/CSharp/Migration/Migration.aspx"&gt;Migrating from VS 2003 to VS 2005 using the Web Application Project&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/asp.net/reference/migration/asp2mig/default.aspx?pull=/library/en-us/dnvs05/html/migratefromaspnetto2.asp"&gt;Migrating from ASP.NET 1.x to ASP.NET 2.0&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/asp.net/reference/migration/asp2mig/default.aspx?pull=/library/en-us/dnaspp/html/conversionissuesasp_net.asp"&gt;Common Web Project Conversion Issues and Solutions&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/vstudio/default.aspx?pull=/library/en-us/dnvs05/html/WAP.asp"&gt;Introduction to Web Application Projects&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114785294806024068?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114785294806024068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114785294806024068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114785294806024068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114785294806024068'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/05/migration-aspnet-1x-nach-20.html' title='Migration ASP.NET 1.x nach 2.0'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114648895791653314</id><published>2006-05-01T14:43:00.000+02:00</published><updated>2006-05-08T10:09:50.656+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Web Developer Tools</title><content type='html'>Niemand schreibt eine Webanwendung von A bis Z im Notepad. Und wenn, dann sollte er den &lt;a href="http://www.flos-freeware.ch/notepad2.html"&gt;Notepad2 &lt;/a&gt;verwenden ;-)&lt;br /&gt;Üblicherweise wird man &lt;a href="http://msdn.microsoft.com/vstudio/"&gt;Visual Studio 2005&lt;/a&gt; oder &lt;a href="http://msdn.microsoft.com/vstudio/express/vwd/"&gt;Visual Web Developer 2005&lt;/a&gt; verwenden. Um die Webentwicklung weiter zu vereinfachen gibt es eine grosse Anzahl nützlicher Tools. Hier eine kleine Auswahl:&lt;br /&gt;- &lt;a href="http://www.nikhilk.net/Project.WebDevHelper.aspx"&gt;Nikhilks Web Dev Helper&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;DisplayLang=en"&gt;Microsoft IE Dev Toolbar&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9bfa49bc-376b-4a54-95aa-73c9156706e7&amp;amp;DisplayLang=en"&gt;Microsoft IIS Diagnostics Toolkit&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://blogs.msdn.com/mikhailarkhipov/archive/2006/04/17/577471.aspx"&gt;Mikhails Spell Checker&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/07/MustHaveTools/"&gt;MSDN Magazine Must Have Tools&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114648895791653314?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114648895791653314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114648895791653314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114648895791653314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114648895791653314'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/05/web-developer-tools.html' title='Web Developer Tools'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114556758766926288</id><published>2006-04-20T23:08:00.000+02:00</published><updated>2006-04-21T14:01:09.310+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Learning'/><title type='text'>MOC Kurse .NET 2.0</title><content type='html'>Die neuen Kurse sind in Core (3 Tage) und Advanced (2 Tage) aufgeteilt. Es ist nicht möglich die beiden Kurse zusammen zu fassen und in 4 Tagen zu geben, so wie dies Gerüchte behaupteten.&lt;br /&gt;Viel Spass mit den neuen Kursen!&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;We never intended the workshops to be taught combined in 4 days - I don't see any way you could do this without cutting units.&lt;br /&gt;Actually, we didn't intend them to be taught combined as 5 day workshops either - though we knew there would be CPLSs who would want to offer them that way. Ideally there should be a gap of several months of applying the concepts from the core workshops in the workplace before taking the advanced workshops.&lt;br /&gt;&lt;br /&gt;Regards, Eric&lt;br /&gt;Eric Dettinger Technologist Microsoft Learning&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114556758766926288?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114556758766926288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114556758766926288' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114556758766926288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114556758766926288'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/04/moc-kurse-net-20.html' title='MOC Kurse .NET 2.0'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-26544185.post-114550922211347590</id><published>2006-04-20T06:54:00.000+02:00</published><updated>2006-04-20T23:21:43.073+02:00</updated><title type='text'>Startschuss</title><content type='html'>Hallo Welt&lt;br /&gt;&lt;br /&gt;Nun geht's auch bei mir los mit einem Blog.&lt;br /&gt;More's coming up...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/26544185-114550922211347590?l=maintrick.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://maintrick.blogspot.com/feeds/114550922211347590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=26544185&amp;postID=114550922211347590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114550922211347590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/26544185/posts/default/114550922211347590'/><link rel='alternate' type='text/html' href='http://maintrick.blogspot.com/2006/04/startschuss.html' title='Startschuss'/><author><name>Jean-Claude Trachsel</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://photos1.blogger.com/blogger/5987/2779/320/nin.jpg'/></author><thr:total>0</thr:total></entry></feed>
