Thursday, September 28, 2006

New Design/New Name

For all you getting this via Atom/RSS (btw, thanks for subscribing), come on by and check out the new blog design. This time I went for a darker design giving a bit of a Vista-ish feel. Also, you will see I finally formally changed the name to NetFX Harmonics to agree with the INSANE decision to rename WinFX to .NET 3.0.



Finally, if you haven't done so already please start using the new feed at http://feeds.feedburner.com/FXHarmonics/ to replace to old one. I will soon be discontinuing the old feed.

JavaScript Graphics Development Updated

For all those interested in learning some introductory concepts some lesser known features of JavaScript, I just updated my e-chapter on JavaScript Graphics Development. This an introduction to using JavaScript and Ajax concepts to do manual graphics development. It also touches briefly on concepts involving interactive graphics and widget creation.



Anyhow, here's the link:

Exam Update

Well, I'm a month into the ACTUAL writing of the C# 2.0 exam and I'm finding it just as fun as I thought it would be. This exam is more advanced than most people are probably going to want it to be, but I just can't imagine WHY someone would want to take a sissy exam. That doesn't help anyone. On the other end of things, anyone who knows Richter's CLR via C# book by heart should do great on this exam.



The only previews I can give at this time are that this exam is really more of a C#/CLR 2.0 exam as I have a sections for reflection and AppDomain management. I also have sections for more controversial things like COM Interop and unsafe code (not too bad-- I'm not about to ask pointer arithmetic questions!). The other thing I can say is that this complements the 70-* certification exams in that this covers the more technical dimension of the CLR, C#, and the framework. It's more like computer science exams than the certification exams. That is, they are more algorithmic than scenario-based.



As I progress, I'm also setting aside questions for a possible CLR 2.0 exam (for my own exam; probably not Brainbench). I figure this exam could cover things like fusion, assembly loading mechanics, CLR internal memory management, identification of core DLLs ( i.e. mscorwks.dll) and other fun topics. I would really like to see "IT" people think MUCH more like CS people; internals and mechanics are VERY good things to know.

Update

Here's a quick update on a few things...



First off the primary feed for this site is now at the below link:





Please change all your references to point to the new link. I'll be removing the old one in a few months.



Secondly, since someone had an aneurysm and decided it would be a great idea to confuse the entire planet, WinFX is now called .NET 3.0. Ergo, I'm changing the name of this blog to NetFX Harmonics for the time being.



Thirdly, I'll probably be posting much more content in the near future. Recently I was at an MSDN event and I was amazed at how little everyone (including the presenter) knew about new technologies. There were people who actually asked what SOA event was. I assumed everyone in the Microsoft technical community would be at least somewhat up to date with WinFX (Uhhhh duhhh .NET 3.0) information. Clearly I was wrong. I guess I should start publishing again!

Breaking the Silence

Well, good news and bad news. I was offered the gig to write the new Brainbench C# 2.0 exam. I've been wanting that for a while, so obviously I took it. Of course three days later I get an offer from an editor for me to write a chapter or two for a soon to be released Ajax book. Ha! The bad news is that they had the exact same time frame (1 to 2 months). That, plus my intensive physical training and skydiving pursuits I found absolutely no time on my (Google) calendar to write a chapter! This is a major lesson in timing for me.



I'm really excited about the C# 2.0 exam though. If you know anything about how I write samples and questions you'll know that I'm BEYOND uptight about strictness to best practices and the official framework design guidelines (thank you Krzysztof Cwalina and Brad Abrams). So, my questions will obviously follow those VERY legalistically.



...and NO I won't have threading questions or web questions on the exam. This is NOT a framework exam! I hate it when test writers put that stuff on those exams. Strictly web people will miss every threading question and strictly Windows people will miss every web question. So, it will be fair... but, no, not easy!



By the way, I know I haven't posted any research in a VERY long time on either of my blogs (this one and my Ajax blog), but I've been rather swamped with non-technical activities for the past few months. I still have many more videos just sitting here that I need to post, but I just need to find the right time.

C# Fundamentals Exam Released!

Awesome! The Brainbench C# Fundamentals exam just went public! Why do I care? Well, because I was the technical editor for the exam! I'm rather excited because this was my first publicly shown work as a technical editor of anything.



I think exam takers will find the exam to be fair. It's not too terribly advanced, but it's not a beginners exam either. It should really test if you know what you're talking about. One thing that I will remind everyone of is that C# is a standardized language, not "some Microsoft language". So, this exam tests your knowledge of the official C# (ECMA-334) language, not your slang usages of it. Also, sadly, this exam is on the older C# 1.0, not 2.0, which is my favorite language.



Currently the exam is available for free at brainbench.com. The full link is below. Enjoy!



3D RSS XAML Demonstration

Here's a short application I wrote for a demo recently. This is a rather simple RSS application, but I created it in 3D in XAML using the February CTP of WinFX. Also, the code is self-sufficient. That is, you can use the below XAML declaration in XAMLPad.



The first thing to notice about this application is that the data is real. That is, the actually RSS information you are seeing on the screen is from a live RSS feed; this demonstrates XAML's XML data-binding capabilities. The next thing to notice is that the entire thing is on an angle. That's because this is all rendered in 3D. So, this also demonstrates using XAML in 3D. You should also notice the background. This is actually just a JPG on my website. There is no C#/VB.NET anywhere... it's all XAML. This demonstrates the power to skin objects. Finally, you should notice that the rendering has different font styles and sizes. This demonstrates how you can style controls... yes, controls. There's nothing fancy here. There isn't really a "3D TextBlock" or anything. A TextBlock is a TextBlock. I just so happen to be using it in 3D.



So, there are many things this demo demonstrates. I actually recorded a short video lesson on 3D XAML programming and I will be releasing it very soon. In the future I may have an entire series on 3D XAML programming.



<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Viewport3D>
<Viewport3D.Resources>
<XmlDataProvider x:Key="xmlData" Source="http://fxfeeds.mozilla.com/rss20.xml">
</XmlDataProvider>
<Style x:Key="rssTitle" TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="24"/>
<Setter Property="TextBlock.Foreground">
<Setter.Value>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<LinearGradientBrush.GradientStops>
<GradientStop Color="Blue" Offset="0"/>
<GradientStop Color="Green" Offset="1"/>
</LinearGradientBrush.GradientStops>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="rssText" TargetType="{x:Type TextBlock}">
<Setter Property="FontSize" Value="12"/>
<Setter Property="Foreground" Value="Gray"/>
</Style>
</Viewport3D.Resources>
<Viewport3D.Camera>
<PerspectiveCamera
Position="2.5,2.5,5"
LookDirection="-.5,-.5,-1"
FieldOfView="45"
UpDirection="1,0,0"
>
</PerspectiveCamera>
</Viewport3D.Camera>
<ModelVisual3D>
<ModelVisual3D.Content>
<Model3DGroup>
<AmbientLight Color="White"></AmbientLight>
<GeometryModel3D>
<GeometryModel3D.Geometry>
<MeshGeometry3D
Positions="-1, -1, 0 1, -1, 0 -1, 1, 0 1, 1, 0"
TriangleIndices="2 0 1 3 2 1"
TextureCoordinates="1 1 1 0 0 1 0 0"
Normals="0,0,1 0,0,1 0,0,1 0,0,1">
</MeshGeometry3D>
</GeometryModel3D.Geometry>
<GeometryModel3D.Material>
<DiffuseMaterial>
<DiffuseMaterial.Brush>
<VisualBrush>
<VisualBrush.Visual >
<StackPanel>
<ListBox ItemsSource="{Binding Source={StaticResource xmlData}, XPath=rss/channel/item}">
<ListBox.Background>
<ImageBrush ImageSource="http://davidbetz.net/kansas/xamlimage.jpg"></ImageBrush>
</ListBox.Background>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding XPath=title}" Style="{StaticResource rssTitle}"></TextBlock>
<TextBlock Text="{Binding XPath=description}" Style="{StaticResource rssText}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
</VisualBrush.Visual>
</VisualBrush>
</DiffuseMaterial.Brush>
</DiffuseMaterial>
</GeometryModel3D.Material>
</GeometryModel3D>
</Model3DGroup>
</ModelVisual3D.Content>
</ModelVisual3D>
</Viewport3D>
</Page>