<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Christian Nagel's OneNotes</title><link>http://blogs.thinktecture.com/cnagel/default.aspx</link><description>.NET Training, Consulting, Coaching &amp; Development</description><dc:language>en-US</dc:language><generator>CommunityServer 1.1 (Build: 1.1.0.50615)</generator><item><title>Windows 7 Installation Experience</title><link>http://blogs.thinktecture.com/cnagel/archive/2009/02/17/415269.aspx</link><pubDate>Tue, 17 Feb 2009 16:15:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415269</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415269.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415269</wfw:commentRss><description>Now I'm running Windows 7 on several systems. I'm now running the Beta version on my major system.&lt;p /&gt;
The installation experience and stability depends on the hardware. Of course, that's a usual experience with a Beta version.&lt;p /&gt;
The best experience is with my newest tablet PC: &lt;b&gt;Fujitsu Siemens Lifebook T5010&lt;/b&gt;.&lt;br /&gt; Installation (upgrade from Windows Vista) was smooth, every device is available, so far no major issues. I could also run Microsoft OneCare after telling the application it's running on Windows Vista.
&lt;p /&gt;
With a slightly older model (&lt;b&gt;Lifebook T4220&lt;/b&gt;) installation (upgrade as well) was hanging near the end of the installation during a check of the graphics card. After turning off and on again the installation completed without problems. Checking the Windows Experience Index on this system either results in a hang or a blue screen. However, for normal daily operations  this system doesn't have issues.&lt;p /&gt;
On a old notebook (&lt;b&gt;HP Compaq NX7000&lt;/b&gt;) a new installation of Windows 7 was running fine. For the graphics card just a standard driver was installed during installation. With an update the driver for ATI Mobility Radeon 9000 was installed, and as a result the screen on the display flickered. The display on an external monitor is ok. Rollback the driver. The standard driver just has a Windows Experience Index of 1, but the system is fine for non-display related tasks. I checked the HP Website for drivers, but only Windows XP drivers are offered for this notebook. I used this system for Windows Server 2003 which was fine. It's great that Windows 7 is running on this system as well!&lt;p /&gt;
Here is a link for the experience with other systems:
&lt;a href="http://www.vistablog.at/stories/34363/"&gt;Sammelpost: Erfahrungsberichte zu Windows 7 Beta&lt;/a&gt;
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415269" width="1" height="1"&gt;</description></item><item><title>3. Software Development Day in Wien</title><link>http://blogs.thinktecture.com/cnagel/archive/2009/02/08/415267.aspx</link><pubDate>Sun, 08 Feb 2009 17:51:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415267</guid><dc:creator>CNagel</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415267.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415267</wfw:commentRss><description>Bereits zum dritten mal gibt es den Software Development Day, zum zweiten mal im Euro Plaza! 
Auch diesmal wieder mit Einblicken in die Zukunft aber auch Informationen über Technologien die bereits jetzt eingesetzt werden sollten!&lt;p /&gt;
&lt;a href="http://blogs.msdn.com/knom/"&gt;Max Knor&lt;/a&gt;, &lt;a href="http://blogs.msdn.com/blackgate/"&gt;Andreas Pollak&lt;/a&gt;, Georg Drogny und Christian Nagel über &lt;b&gt;Windows Azure&lt;/b&gt;, &lt;b&gt;Live Mesh&lt;/b&gt;, &lt;b&gt;Silverlight&lt;/b&gt;, &lt;b&gt;Windows 7&lt;/b&gt;, &lt;b&gt;ADO.NET Data Services&lt;/b&gt;, &lt;b&gt;.NET 4.0&lt;/b&gt;, &lt;b&gt;C# 4.0&lt;/b&gt; und vieles mehr! &lt;p /&gt;
Dienstag, 24. Februar 2009&lt;br /&gt;
Konferenzzentrum Euro Plaza in Wien&lt;br /&gt;
Details und Anmeldung hier: 
&lt;a href="http://www.globalknowledge.at/neuigkeiten/veranstaltungen/3_software_development_day.aspx"&gt;3. Development Day in Wien&lt;/a&gt;
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415267" width="1" height="1"&gt;</description></item><item><title>Separation of Algorithms and Containers (Collections)</title><link>http://blogs.thinktecture.com/cnagel/archive/2009/02/02/415266.aspx</link><pubDate>Mon, 02 Feb 2009 10:47:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415266</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415266.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415266</wfw:commentRss><description>The C++ Standard Template Library (STL) separates algorithms from containers. C++ algorithms are defined within the header file  can be used with containers depending on the iterator that is needed by the algorithm and the iterator supported by the container. search, search_n, reverse, rotate, copy, count, count_if, find, find_first_of, for_each, max, min, merge are just a few of the algorithms. These are global functions that accept iterators from container classes to iterate all elements.&lt;p /&gt;
With .NET 3.5 algorithms are separated from collections as well. Static methods such as Count, Max, Min, First, Skip… are implemented by the Enumerable class. These methods are all extension methods based on the IEnumerable interface and thus can be used with every collection.&lt;p /&gt;
Let’s compare the implementation of C++ accumulate with .NET Aggregate. Both have several overloads, but I just want to compare just one. The others are very similar.&lt;p /&gt;
C++ aggregate is a template function with four parameters. The first two parameters mark the begin and end of the iteration. This algorithm requires an Input Iterator that implements the operators !=, ++, and *. The third parameter is used as initialization of the aggregation, and the last parameter accepts a function object that has two parameters (BinaryOperation). 
With a for loop every element that is enumerated is accessed, the binary operation invoked, and the result of the operation accumulated.&lt;p /&gt;
&lt;pre&gt;
template
Type accumulate(InputIterator _First, InputIterator _Last, Type _Val, BinaryOperation _Binary_op) 
{
   for (; _First != _Last; ++_First)
      _Val = _Binary_op(_Val, *_First);
   return (_Val);
}
&lt;/pre&gt;
Using the accumulate method a binary function can be defined that is invoked by accumulate, e.g. a simple multiplier.
&lt;pre&gt;
int action(int x, int y)
{
   return x * y;
}
&lt;/pre&gt;
&lt;br /&gt;
Calling the accumulate function requires the begin and end for the iteration that is returned from the begin and end methods of the vector class. For multiplying every integer in a vector, the initial value is set to 1, and the address of the action function is passed:
int result = accumulate(v1.begin(), v1.end(), 1, action);
The .NET version of the C++ accumulate does not differ a lot. Instead of having a begin and end of an iterator, here the IEnumerable interface is used. With C++ iterators just a naming convention is used to give the requirements of the iterator. C++ differentiates input, output, forward, bidirectional, and random access iterators that define what operators must be implemented. With .NET it’s clearly defined what methods must be implemented by the collection by the definition of the IEnumerable interface. The initial value that is passed is similar to the C++ implementation. The last parameter defines the signature of the method that is invoked by Aggregate: a method with two input parameters and a result. Instead of a for loop, .NET makes use of the foreach loop that is converted by the compiler to use the methods of the IEnumerable interface.&lt;br /&gt;
&lt;pre&gt;
public static TAccumulate Aggregate(this IEnumerable source,  
   TAccumulate seed, Func func)
{
   TAccumulate local = seed;
   foreach (TSource local2 in source)
   {
      local = func(local, local2);
   }
   return local;
}
&lt;/pre&gt;
&lt;br /&gt;
Because the Aggregate method is an extension method, it can be invoked like a member of the collection class to aggregate all values from the collection. The functionality that is invoked with every instance can be implemented by using a Lambda expression.&lt;br /&gt;
&lt;pre&gt;
int result = coll.Aggregate(1, (x, y) =&gt; x * y);
&lt;/pre&gt;&lt;br /&gt;
C++ and .NET have very similar implementations to separate the algorithms from containers. Lambda expressions are not yet available with C++, but will be with a future version C++0x. Algorithms that are available in one place (e.g. C++) can easily be implemented in the other (e.g. .NET).&lt;p /&gt;
Christian
&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415266" width="1" height="1"&gt;</description></item><item><title>Thoughts about 2009</title><link>http://blogs.thinktecture.com/cnagel/archive/2009/01/31/415263.aspx</link><pubDate>Sat, 31 Jan 2009 14:26:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415263</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415263.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415263</wfw:commentRss><description>It's nearly February, I'm a little late for my thoughts about the year 2009. Still I'm writing down what I'm expecting, my thoughts about important things to come.&lt;p /&gt;
In the first month of the New Year I've already covered a lot of different technologies in the first workshops: &lt;b&gt;Team Foundation Server&lt;/b&gt;, &lt;b&gt;WPF&lt;/b&gt;, &lt;b&gt;ASP.NET AJAX&lt;/b&gt;, and &lt;b&gt;C++&lt;/b&gt;.&lt;p /&gt;
What are the most important products I'm working on in the New Year? The first on my list of course is &lt;b&gt;Windows 7&lt;/b&gt;, the successor of Windows Vista. I'm running the Beta already on several of my systems. Depending on the hardware used there are some small issues (e.g. on an old HP Compaq NX7000 with the graphics driver, some issues on a Fujitsu Siemens Tablet T4220 in regard to the graphics card as well), but of course that's usual with a Beta product. In summary I'm really happy with &lt;b&gt;Windows 7&lt;/b&gt;.&lt;br /&gt;Primarily it's based on the code from Windows Vista with some good enhancements. Because the code is based primarily on Windows Vista and not a complete rewrite we can expect that it’s really running stable this is already the experience from many Beta testers. I expect shorter Beta cycles which I’m also reading out from &lt;a href="http://blogs.msdn.com/e7/archive/2009/01/30/our-next-engineering-milestone.aspx"&gt;Our Next Engineering Milestone&lt;/a&gt;. RC will be the next version for download. Windows 7 has a great new calculator (hey, is there a problem the &lt;a href="http://blogs.thinktecture.com/cnagel/archive/2004/03/25/95814.aspx"&gt;calculator is included with the operating system&lt;/a&gt;?). WordPad has the ribbon controls! Even more important – WordPad can save OOXML and ODT.  The new toolbar is really cool. There are many more great features... I’m already running Windows Vista from the early beginnings (of course Beta editions). Now I’m expecting many companies to move from Windows XP to Windows 7. Do you wait until SP1 or do the move earlier? Now is the time to not only find out if your applications run on Windows Vista (which was already done by most companies) because of the UAC, but also what advantages the application can get by running on Windows Vista and Windows 7. I offer a Workshop on this :-)&lt;p /&gt;
Another product I’m spending a lot of time with is &lt;b&gt;Windows Azure&lt;/b&gt;. Paying just for the resources that are needed can be a big improvement for startup companies. How many systems should we add to the Web server so the users get acceptable performance? Twitter, why don’t you just increment this configuration value instead of returning errors? I don’t think Windows Azure is just for startup companies. I would like to access my data from everywhere; I would like to use some CPU and disk resources just for specified time frames (e.g. the registration process for a conference). In current different economy times it might be a good decision to outsource some IT management and just pay for what’s needed.&lt;p /&gt;
Since the end of last year I’m running &lt;b&gt;Windows Home Server&lt;/b&gt;. Every home should have one. It’s really easy to configure that and all your PC’s are backed up, data on network shares is duplicated on different hard disks, and the data is even accessible from the road.
Easy to use systems and applications are important! I remember the days where I had to change some switches and jumpers before I could put a module inside a system. The Micro PDP 11 made things a lot easier – a lot easier to configure than PCs at that time. Now I’m adding hardware to systems by connecting them to the USB. No more configurations necessary, no search for drivers… Windows Media Center is – in my opinion – a lot easier to use than getting to know how to use several different remote controls to turn on and switch to the correct mode with Receiver, TV, and a DVD/hard disk recorder. Many users are lost to find the correct settings with that many remote controls. It’s still getting easier. &lt;b&gt;Silverlight&lt;/b&gt; brings completely new user interfaces to Web applications. Rich client experience that can be completely different to the experience we had with Web applications that have been used before - Silverlight for Web applications; &lt;b&gt;WPF&lt;/b&gt; for Windows applications. The user can be knowledgeable of its problem domain but no longer need to know how to use a Windows application. Not every person is a Word and Excel user.&lt;p /&gt;
Of course I’m not forgetting &lt;b&gt;Visual Studio 2010&lt;/b&gt; and &lt;b&gt;.NET 4.0&lt;/b&gt;. These are the products I’m using on my main system during this year so my customers can use my experience with this technology as soon as they need it. I’m already working for some time on the next edition of the Professional C# book: &lt;b&gt;Professional C# 4.0 and .NET 4.0&lt;/b&gt;. .NET 4.0 gives a lot to cover with the next edition!  I just received the Chinese version of Professional C# 2008. You can start the next translation early next year :-)&lt;p /&gt;
&lt;b&gt;Windows 7&lt;/b&gt;, &lt;b&gt;Windows Azure&lt;/b&gt;, &lt;b&gt;Visual Studio 2010&lt;/b&gt;, &lt;b&gt;.NET 4.0&lt;/b&gt;, &lt;b&gt;Silverlight 3.0&lt;/b&gt;... I still didn’t mention my most important... I can give you the expected arrival date: 3-June-2009. It can arrive a little earlier or later. Around that time I don’t do any travel, expecting a baby girl with my girlfriend Angela. This is going to be a really great year :-D
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415263" width="1" height="1"&gt;</description></item><item><title>Windows Azure bei der .NET User Group Austria</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/11/10/415216.aspx</link><pubDate>Mon, 10 Nov 2008 21:39:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415216</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415216.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415216</wfw:commentRss><description>Aktuellste Informationen von &lt;br /&gt;Peter Koen, Senior Program Manager bei Microsoft &lt;br /&gt;bei der &lt;a href="http://usergroups.at/blogs/dotnetusergroupaustria/archive/2008/11/03/845.aspx"&gt;.NET User Group Austria: &lt;br /&gt;Microsoft Windows Azure und Cloud Computing!&lt;/a&gt;
&lt;br /&gt;
11.11.2008, 18 Uhr&lt;br /&gt;
und mehr als 30 angemeldete Teilnehmer!&lt;p /&gt;
Christian
&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415216" width="1" height="1"&gt;</description></item><item><title>PDC 2008 - XAML with .NET 4.0</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/31/415211.aspx</link><pubDate>Fri, 31 Oct 2008 00:54:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415211</guid><dc:creator>CNagel</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415211.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415211</wfw:commentRss><description>from #pdc2008: XAML enhancements!&lt;br /&gt;
XAML nowadays is used with the UI (WPF, Silverlight), Workflows (WF), and Electronic Paper (XPS).&lt;br /&gt; XPS is just going to be an ECMA standard!&lt;p /&gt;
With all these uses XAML is going into a language evolution. Goals of this is to make XAML faster and easier to use.&lt;p /&gt;
The XAML language extensions are defined by this list:
&lt;ul&gt;
&lt;li&gt;improved named references&lt;/li&gt;
&lt;li&gt;support for built-in types&lt;/li&gt;
&lt;li&gt;full generics support&lt;/li&gt;
&lt;li&gt;support for arbitrary dictionary values&lt;/li&gt;
&lt;li&gt;declarative events without compiling&lt;/li&gt;
&lt;li&gt;declarative definition of types&lt;/li&gt;
&lt;li&gt;arguments for non-default constructors&lt;/li&gt;
&lt;li&gt;factory methods&lt;/li&gt;
&lt;/ul&gt;
The notepad for XAML, XAMLPad, has been enhanced. Besides the XML and object box it now gives a DOM box to display the DOM model. With the F12 key, a visual representation of the XAML type is shown.
&lt;p /&gt;
For reading/writing/processing XAML, .NET 4.0 includes the System.Xaml.dll assembly. It contains XamlXmlReader, XamlXmlWriter, BamlReader, BamlWriter, DomReader, DomWriter, ObjectReader, ObjectWriter. Now it's easier to develop e.g. a SVG conversion. To convert from SVG to XAML, the SVGReader and XamlXmlWriter come into play. For creating objects on the fly out of SVG, SVGReader and ObjectWriter are used.&lt;br /&gt;
The System.Xaml assembly will be available here: &lt;a href="http://go.microsoft.com/fwlink/?LinkId=132499"&gt;http://go.microsoft.com/fwlink/?LinkId=132499&lt;/a&gt;&lt;p /&gt;
In the early days of XAML and WPF, simple applications have been shown that just need XAML code but no code-behind. Now it is possible to write an application that makes use of WPF, WF, and WCF purely using XAML.
&lt;p /&gt;
Christian
&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415211" width="1" height="1"&gt;</description></item><item><title>PDC 2008 - Parallel Extensions to the .NET Framework</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/29/415209.aspx</link><pubDate>Wed, 29 Oct 2008 20:10:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415209</guid><dc:creator>CNagel</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415209.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415209</wfw:commentRss><description>From #pdc2008, Parallel extensions to the .NET Framework are part of .NET 4.0!&lt;p /&gt;
The thread pool has been enhanced with great new features. The new features can be accessed from the Task API. The Task API can be used similar to the Thread class and offers some advanced features. For the tasks to queue up, the pool now not only includes a global queue but also a local queue for every thread in the pool. This can enhance performance because of data cached in the CPU.&lt;br /&gt;
With the new API, other than starting tasks some more features: tasks can be started in a parent/child relationship, it is possible to suspend/continue/wait/cancel tasks, and get results from the task (using the Future class). This class might be renamed to Task as well (in the future).&lt;p /&gt;
Tasks are well integrated into Visual Studio 2010. For debugging tasks new windows Parallel Tasks and Parallel Stacks are available.&lt;p /&gt;
A common pattern is using threads in a loop to perform some actions on a list of items. The Parallel class gives an implementation of this pattern. Parallel.ForEach offers several overloads to do several actions in parallel with the thread pool.&lt;p /&gt;
Declarative data parallelism allows LINQ queries to run in parallel. This feature is for LINQ to objects thus collections that implement IEnumerable. All that needs to be done is to invoke the AsParallel method that does nothing more than casting the IEnumerale interface to IParallelEnumerable. The class ParallelEnumerable then offers extension methods for the IParallelEnumerable interface to call the LINQ operators using threads from the pool. 
&lt;p /&gt;
Christian
&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415209" width="1" height="1"&gt;</description></item><item><title>PDC2008 - Type System Changes with CLR 4.0</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/29/415208.aspx</link><pubDate>Wed, 29 Oct 2008 15:25:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415208</guid><dc:creator>CNagel</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415208.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415208</wfw:commentRss><description>From #pdc2008: the CLR type system is changed regarding "type embedding" and "type equivalence". The primary idea was easier use of COM interop, but the features are also useful with pure managed code.&lt;p /&gt;
An issue that we have today regarding COM interop is the deployment of Primary Interop Assemblies (PIO). An application that uses Excel 2007, the primary interop assembly required by the application requires 1.2 MB. In reality you need to install the Office 2007 PIA Redist that requires 6.3 MB. And this is just for Office 2007. The next version requires another PIA redist install.&lt;br /&gt;
This is one of the issues solved with the new type embedding feature.&lt;p /&gt;
With type embedding PIAs are no longer required. Type embedding is possible by the new CLR and a new compiler switch.&lt;p /&gt;
The second feature for the CLR type system is type equivalence. Type equivalence is useful both with COM objects and .NET managed code. Interfaces marked with an GUID attribute are treated equivalent if the same GUID is used. Multi-targeting through interfaces. Does this influence System.AddIn? I've to try this out!&lt;p /&gt;

Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415208" width="1" height="1"&gt;</description></item><item><title>PDC 2008 - C# Futures</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/28/415205.aspx</link><pubDate>Tue, 28 Oct 2008 00:58:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415205</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415205.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415205</wfw:commentRss><description>Again, Anders Hejlsberg had a great session at #pdc2008. This time about C# 4.0 and C# 5.0!
&lt;p /&gt;
C# 1.0 was the core about OO, C# 2.0 added generics. With C# 3.0 is the first version with new language features - LINQ, and this is expands with the future versions.
C# is a multi-paradigm language. Of course, it's an OO language (since 1.0), since 3.0 it can also be used as functional language.

The main areas of enhancements are in these areas:
&lt;ul&gt;
&lt;li&gt;declarative &lt;/li&gt;
&lt;li&gt;dynamic &lt;/li&gt;
&lt;li&gt;concurrent&lt;/li&gt;
&lt;/ul&gt;
&lt;p /&gt;
Microsoft is doing a shift in regard to C# and VB to recognize reality. Features from C# are brought into VB, and features from VB into C# - because the demand is here!
&lt;p /&gt;
C# 4.0 adds &lt;b&gt;dynamic&lt;/b&gt; programming. With this it is easy to call not only .NET objects but also easily COM objects, JavaScript, Python...
&lt;br /&gt;
The enhancements can be grouped into these areas:
&lt;ul&gt;
&lt;li&gt;dynamic keyword&lt;/li&gt;
&lt;li&gt;optional and named parameters&lt;/li&gt;
&lt;li&gt;co- and contra variance&lt;/li&gt;
&lt;/ul&gt;
&lt;p /&gt;
With the new &lt;b&gt;dynamic&lt;/b&gt; keyword, a variable can be declared in C# that references a object that is created during runtime, e.g. from COM or JavaScript. 
&lt;pre&gt;
dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);
&lt;/pre&gt;
Every method that is invoked on a dynamic object returns a dynamic result that is dynamically cast to the type the return variable is declared (e.g. an int in the example). A great feature here is the syntax looks the same, no matter if the calculator is a COM object, JavaScript, Python or Ruby. Binders for each of these variants are available, and custom binders can be written as well.&lt;br /&gt;
Using C# it is also possible to create dynamic runtime-objects by implementing the interface IDynamicObject or deriving from the base class DynamicObject. 
&lt;p /&gt;
A many times requested feature that is available with C# 4.0 is optional and named parameters. Instead of defining several overloads, optional parameters can be defined:&lt;br /&gt;&lt;pre&gt;
StreamReader OpenTextFile(
   string path,
   Encoding encoding = null,
   bool detectEncoding = true,
   int bufferSize = 1024);
&lt;/pre&gt;
this can be called wih only the mandatory parameter:
&lt;pre&gt;OpenTextFile("foo.txt");&lt;/pre&gt;
and also with named arguments:
&lt;pre&gt;OpenTextfile("foo.txt", bufferSize : 4096);&lt;/pre&gt;
Of course, named arguments must be after the mandatory parameters.
&lt;p /&gt;
Optional and named parameters have a great COM Interop story. No more ref missing parameters. "It took 10 years to get back where we were".
&lt;p /&gt;
Covariance and contra-variance is another new feature. co-variance or contra-variance information can be added to generics, e.g.  and .  means that T can be used only in output positions,  only in input positions.  Existing interfaces and delegates such as IEnumerably and IComparable are changed to the new notation.
A blog entry with samples about this feature follows here!
&lt;p /&gt;
Anders also demonstrated C# 5.0 features. C# 5.0 opens up the compiler to offer modern ways for meta-programming - compiler as a service!&lt;p /&gt;

More information about C# futures:&lt;a href="http://code.msdn.microsoft.com/csharpfuture"&gt;http://code.msdn.microsoft.com/csharpfuture&lt;/a&gt; 
&lt;p /&gt;
Christian
&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415205" width="1" height="1"&gt;</description></item><item><title>LINQ in Norway</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/25/415203.aspx</link><pubDate>Sat, 25 Oct 2008 04:07:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415203</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415203.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415203</wfw:commentRss><description>15 to 17 December 2008 I'm doing a LINQ training in Norway:
&lt;ul&gt;
&lt;li&gt;C# 3.0&lt;/li&gt;
&lt;li&gt;LINQ to Objects&lt;/li&gt;
&lt;li&gt;LINQ to XML&lt;/li&gt;
&lt;li&gt;LINQ to SQL&lt;/li&gt;
&lt;li&gt;ADO.NET Entity Framework&lt;/li&gt;
&lt;li&gt;ADO.NET Data Services&lt;/li&gt;
&lt;/ul&gt;
&lt;p /&gt;
Are you there?
&lt;p /&gt;Detailed information is here:&lt;br /&gt;&lt;a href="http://www.programutvikling.no/kurskalenderoversikt.aspx?mid_1=1352&amp;mid=1535&amp;id=347240"&gt;www.programutvikling.no&lt;/a&gt;
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415203" width="1" height="1"&gt;</description></item><item><title>ADC08</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/10/13/415199.aspx</link><pubDate>Mon, 13 Oct 2008 12:33:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415199</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415199.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415199</wfw:commentRss><description>Thinktecture and post-Thinktecture sessions at the &lt;a href="http://www.adc08.de"&gt;ADC 08&lt;/a&gt; in Germany:
&lt;ul&gt;
&lt;li&gt;Christian Weyer, WCF - Kommunikationsmuster illustriert&lt;/li&gt;
&lt;li&gt;Christian Nagel, C# 3.0 in LINQ&lt;/li&gt;
&lt;li&gt;Christian Nagel, Threading und Synchronization&lt;/li&gt;
&lt;li&gt;Neno Loje, Windows-Anwendungen ohne Kopfschmerzen verteilen: mit ClickOnce&lt;/li&gt;
&lt;li&gt;Christian Weyer, WCF und WF gemeinsam einstzen&lt;/li&gt;
&lt;li&gt;Jörg Neumann, Erweiterbare Anwendungen mit dem Managed Add-In Framework&lt;/li&gt;
&lt;li&gt;Ingo Rammer, .NET Production Debugging - Erste Schritte&lt;/li&gt;
&lt;li&gt;Dominick Baier, Autorisierung und Identität in Service-orientierten Anwendungen&lt;/li&gt;
&lt;li&gt;Ingo Rammer, .NET Production Debugging - Tips und Fortgeschrittenes&lt;/li&gt;
&lt;li&gt;Dominick Baier, Advanced IIS 7 Development&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
And that's just the first day
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415199" width="1" height="1"&gt;</description></item><item><title>WPF TextBlock Strikethrough</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/06/01/415158.aspx</link><pubDate>Sun, 01 Jun 2008 18:46:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415158</guid><dc:creator>CNagel</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415158.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415158</wfw:commentRss><description>&lt;a href="http://twitter.com/shanselman/statuses/824462773"&gt;Scott Hanselman&lt;/a&gt; is looking for WPF TextBlock with stroke text.&lt;br /&gt;
With WPF this is a really easy and flexible task to do. What needs to be done is to set the Decorations of the TextBlock:&lt;p /&gt;
&amp;lt;TextBlock FontSize="18"&amp;gt;&lt;br /&gt;
  &amp;lt;TextBlock.TextDecorations&amp;gt;&lt;br /&gt;
    &amp;lt;TextDecoration Location="Strikethrough"&amp;gt;&lt;br /&gt;
      &amp;lt;TextDecoration.Pen&amp;gt;&lt;br /&gt;
        &amp;lt;Pen Brush="Red" /&amp;gt;&lt;br /&gt;
      &amp;lt;/TextDecoration.Pen&amp;gt;&lt;br /&gt;
    &amp;lt;/TextDecoration&amp;gt;&lt;br /&gt;
  &amp;lt;/TextBlock.TextDecorations&amp;gt;&lt;br /&gt;
  Sample&lt;br /&gt;
&amp;lt;/TextBlock&amp;gt;
        
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415158" width="1" height="1"&gt;</description></item><item><title>Twitter</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/06/01/415157.aspx</link><pubDate>Sun, 01 Jun 2008 18:33:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415157</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415157.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415157</wfw:commentRss><description>I thought this is nothing for me. Instead I should write more entries to my blog. &lt;br /&gt;
However, I give it a try: &lt;a href="http://twitter.com/ChristianNagel"&gt;http://twitter.com/ChristianNagel&lt;/a&gt;.&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415157" width="1" height="1"&gt;</description></item><item><title>XPS Printing</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/05/24/415155.aspx</link><pubDate>Sat, 24 May 2008 11:26:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415155</guid><dc:creator>CNagel</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415155.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415155</wfw:commentRss><description>I've stored an invoice from the Internet as XPS for later printing. Now printing with the XPSViewer.exe fails with an exception because it demands permission for UnmanagedCode.
&lt;br /&gt;
Instead trying to find a fix for the application I've written a small program to print XPS:
&lt;p /&gt;
&lt;font face="Courier New"&gt;
PrintDialog dlg = new PrintDialog();&lt;br /&gt;
if (dlg.ShowDialog() == true)&lt;br /&gt;
{&lt;br /&gt;
   XpsDocument doc = new XpsDocument(fileName, System.IO.FileAccess.Read);&lt;br /&gt;
   dlg.PrintDocument(doc.GetFixedDocumentSequence().DocumentPaginator, "Test");&lt;br /&gt;
   }
&lt;/font&gt;
&lt;p /&gt;
It's really easy to work with XPS. &lt;b&gt;XpsDocument&lt;/b&gt; is part of .NET 3.5 in the assembly &lt;b&gt;ReachFramework&lt;/b&gt;, namespace &lt;b&gt;System.Windows.Xps.Packaging&lt;/b&gt;.
&lt;br /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415155" width="1" height="1"&gt;</description></item><item><title>Twelve Core Processors in 2010</title><link>http://blogs.thinktecture.com/cnagel/archive/2008/05/08/415142.aspx</link><pubDate>Thu, 08 May 2008 09:24:00 GMT</pubDate><guid isPermaLink="false">ff4ed322-7612-4f43-9d7f-220c081c7cfd:415142</guid><dc:creator>CNagel</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.thinktecture.com/cnagel/comments/415142.aspx</comments><wfw:commentRss>http://blogs.thinktecture.com/cnagel/commentrss.aspx?PostID=415142</wfw:commentRss><description>The &lt;a href="http://www.amd.com/us-en/assets/content_type/DownloadableAssets/Roadmap_Update_Fact_Sheet_Final.pdf"&gt;AMD Server Workstation Roadmap&lt;/a&gt; lists processors with 6-core (Istanbul, 2009), and twelve-core (Magny Cours, 2010).
&lt;br /&gt;
Parallel computing is becoming more and more important, e.g. &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163329.aspx"&gt;Parallel LINQ&lt;/a&gt;.
&lt;p /&gt;
Christian&lt;img src="http://blogs.thinktecture.com/aggbug.aspx?PostID=415142" width="1" height="1"&gt;</description></item></channel></rss>