<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><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>Just code - Tamir Khason : Microsoft</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx</link><description>Tags: Microsoft</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>New year – new blog or how to migrate Community Server to any other engine, supports XML-RPC</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2009/01/01/new-year-new-blog-or-how-to-migrate-community-server-to-any-other-engine-supports-xml-rpc.aspx</link><pubDate>Fri, 02 Jan 2009 02:33:04 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:205248</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Please update your bookmarks, because the new url of this blog is &lt;a href="http://khason.net/"&gt;http://khason.net/&lt;/a&gt; (you have not update RSS feeds, it will be done automatically). Why I did it? Why I decided to go to “stand-alone”… Well. there are some reasons. Generally, I do not want to explain all those here, but trust me, there are some. The main reason is, that there is no responsible person in charge for this blog platform in Microsoft Israel. This why, if your blog is popular and you have a respect to your blog visitors, you cannot host it here… Take a look into new comments notifications in my inbox. Would you answer your readers with such “small amount” of SPAM and capcha, that cannot be fixed already for three years in this platform? This how my inbox looks like for last three years. So now, you should not ask me, why I not answered your email or comments. Aren’t you? :)&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="Capture" border="0" alt="Capture" src="http://blogs.microsoft.co.il/blogs/tamir/Capture_1D7350A7.jpg" width="354" height="397" /&gt; &lt;/p&gt;  &lt;p&gt;Currently, all comments in this blog are disabled, so if you want to comment, please use new url of posts (this will appear shortly in the beginning of each post). Also, this post will not be syndicated in RSS.&lt;/p&gt;  &lt;p&gt;So, this post is the last. I loved this platform, and loved people started it. But, unfortunately, it seemed, that bloggers community is not important enough for new platform managers. &lt;/p&gt;  &lt;p&gt;Also, If you want to learn &lt;a target="_blank" href="http://khason.net/dev/how-to-migrate-from-cs2007-to-wordpress-movable-type-or-any-other-blog-engine-supports-xml-rpc-with-c/"&gt;how to use C# and XML-RCP to migrate from CS2007, used in this platform, visit my new home&lt;/a&gt; :)&lt;/p&gt;  &lt;p&gt;Have a great year and, as always, be good people. This post marked with all possible tags automatically. Sorry.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=205248" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/soft/default.aspx">soft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+tools/default.aspx">blogging tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+crossbow/default.aspx">WPF crossbow</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Mobile/default.aspx">Mobile</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/help/default.aspx">help</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Gadgets/default.aspx">Windows Gadgets</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/thoughts/default.aspx">thoughts</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tools/default.aspx">tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/events/default.aspx">events</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/demos/default.aspx">demos</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF_2F00_E/default.aspx">WPF/E</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/jobs/default.aspx">jobs</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Accessibility/default.aspx">Accessibility</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Blogging+rules/default.aspx">Blogging rules</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/fun/default.aspx">fun</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx">Vista Battery Saver</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SkyDrive/default.aspx">SkyDrive</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Live+Writer/default.aspx">Windows Live Writer</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+Live/default.aspx">Windows Live</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Dell/default.aspx">Dell</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DevAcademy2/default.aspx">DevAcademy2</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+quiz/default.aspx">WPF quiz</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/x64/default.aspx">x64</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SVG/default.aspx">SVG</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XPS/default.aspx">XPS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TechedIsrael2008/default.aspx">TechedIsrael2008</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/teched/default.aspx">teched</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XNA/default.aspx">XNA</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/PLINQ/default.aspx">PLINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/LINQ/default.aspx">LINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Micro+Framework/default.aspx">Micro Framework</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/SAP/default.aspx">SAP</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XLINQ/default.aspx">XLINQ</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DirectX/default.aspx">DirectX</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Linux/default.aspx">Linux</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Mono/default.aspx">Mono</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DevAcademy3/default.aspx">DevAcademy3</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Math/default.aspx">Math</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/GIS/default.aspx">GIS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Algorithms/default.aspx">Algorithms</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Charity/default.aspx">Charity</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Capturing and streaming sound by using DirectSound with C#</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/12/25/capturing-and-streaming-sound-by-using-directsound-with-c.aspx</link><pubDate>Thu, 25 Dec 2008 23:48:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:201052</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>3</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/capturing-and-streaming-sound-by-using-directsound-with-c/"&gt;http://khason.net/blog/capturing-and-streaming-sound-by-using-directsound-with-c/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;I already wrote a little about &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/02/17/sound-tone-and-dtmf-generation-by-using-managed-directsound-and-c-and-sine-tone-detection-with-pure-managed-goertzel-algorithm-implementation.aspx"&gt;managed way to use DirectX DirectSound&lt;/a&gt;. Today we’ll speak about how to get sound from your microphone or any other DirectSound capturing device (such as &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/12/12/reading-and-decoding-rds-radio-data-system-in-c.aspx"&gt;FM receiver&lt;/a&gt;) and stream it out to your PC speakers and any other DirectSound Output device. So, let’s start creating our first echo service by using managed DirectX.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_13541F81.png" width="225" height="229" /&gt; &lt;/p&gt;  &lt;p&gt;First of all we should decide what Wave format we want to use for capturing and recording. So, let’s choose anything reasonable :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var format = new WaveFormat {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SamplesPerSecond = 96000,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; BitsPerSample = 16,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Channels = 2,      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FormatTag = WaveFormatTag.Pcm      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, we should calculate block align and average byte per second value for this format. I’m wondering why it cannot be done automatically…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;format.BlockAlign = (short)(format.Channels * (format.BitsPerSample / 8));     &lt;br /&gt;format.AverageBytesPerSecond = format.SamplesPerSecond * format.BlockAlign;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next step is to set the size of two buffers – one for input and other for output. Generally those buffers are circular, and capturing one should be twice bigger, then output. Why? Because we choose two channels to use. Also, we should decide about chunk size of the buffer, we want to signal when filled.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;_dwNotifySize = Math.Max(4096, format.AverageBytesPerSecond / 8);     &lt;br /&gt;_dwNotifySize -= _dwNotifySize % format.BlockAlign;      &lt;br /&gt;_dwCaptureBufferSize = NUM_BUFFERS * _dwNotifySize;      &lt;br /&gt;_dwOutputBufferSize = NUM_BUFFERS * _dwNotifySize / 2;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Next step is to create CaptureBufferDescriptor and actual capturing buffer. We’ll enumerate all devices and choose one, satisfies given string (captureDescriptor) – for example “Mic” :)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var cap = default(Capture);     &lt;br /&gt;var cdc = new CaptureDevicesCollection();      &lt;br /&gt;for (int i = 0; i &amp;lt; cdc.Count; i++) {      &lt;br /&gt;&amp;#160;&amp;#160; if (cdc[i].Description.ToLower().Contains(captureDescriptor.ToLower())) {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; cap = new Capture(cdc[i].DriverGuid);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; break;      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt;}      &lt;br /&gt;var capDesc = new CaptureBufferDescription {      &lt;br /&gt;&amp;#160;&amp;#160; Format = format,      &lt;br /&gt;&amp;#160;&amp;#160; BufferBytes = _dwCaptureBufferSize      &lt;br /&gt;};      &lt;br /&gt;_dwCapBuffer = new CaptureBuffer(capDesc, cap);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Then we’ll create output device and buffer. To simplify program, we will use default speakers to output, however, you can choose output device the same way we did for capturing. Also, because DirectSound uses any window as it’s message pump, we have to use SetCooperativeLevel method. In my case (windowless application), I’ll use desktop window as message broker. This why you will have to add Windows.Forms as reference for your project, even if it console application. Also, do not forget to set GlobalFocus value to True, if you want to play echo, even if desktop window is not focused.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var dev = new Device();     &lt;br /&gt;dev.SetCooperativeLevel(Native.GetDesktopWindow(), CooperativeLevel.Priority); &lt;/p&gt;    &lt;p&gt;var devDesc = new BufferDescription {     &lt;br /&gt;&amp;#160;&amp;#160; BufferBytes = _dwOutputBufferSize,      &lt;br /&gt;&amp;#160;&amp;#160; Format = format,      &lt;br /&gt;&amp;#160;&amp;#160; DeferLocation = true,      &lt;br /&gt;&amp;#160;&amp;#160; GlobalFocus = true      &lt;br /&gt;};      &lt;br /&gt;_dwDevBuffer = new SecondaryBuffer(devDesc, dev);&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, we will subscribe to buffer notifications and set autoResetEvent to be fired when it filled up.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;var _resetEvent = new AutoResetEvent(false);     &lt;br /&gt;var _notify = new Notify(_dwCapBuffer);      &lt;br /&gt;//half&amp;amp;half      &lt;br /&gt;var bpn1 = new BufferPositionNotify();      &lt;br /&gt;bpn1.Offset = _dwCapBuffer.Caps.BufferBytes / 2 - 1;      &lt;br /&gt;bpn1.EventNotifyHandle = _resetEvent.SafeWaitHandle.DangerousGetHandle();      &lt;br /&gt;var bpn2 = new BufferPositionNotify();      &lt;br /&gt;bpn2.Offset = _dwCapBuffer.Caps.BufferBytes - 1;      &lt;br /&gt;bpn2.EventNotifyHandle = _resetEvent.SafeWaitHandle.DangerousGetHandle(); &lt;/p&gt;    &lt;p&gt;_notify.SetNotificationPositions(new BufferPositionNotify[] { bpn1, bpn2 });&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Almost done, the only thing we should do is to fire worker thread to take care on messages&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;int offset = 0;     &lt;br /&gt;_dwCaptureThread = new Thread((ThreadStart)delegate {      &lt;br /&gt;&amp;#160;&amp;#160; _dwCapBuffer.Start(true); &lt;/p&gt;    &lt;p&gt;&amp;#160;&amp;#160; while (IsReady) {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _resetEvent.WaitOne();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; var read = _dwCapBuffer.Read(offset, typeof(byte), LockFlag.None, _dwOutputBufferSize);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _dwDevBuffer.Write(0, read, LockFlag.EntireBuffer);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; offset = (offset + _dwOutputBufferSize) % _dwCaptureBufferSize;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _dwDevBuffer.SetCurrentPosition(0);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _dwDevBuffer.Play(0, BufferPlayFlags.Default);      &lt;br /&gt;&amp;#160;&amp;#160; }      &lt;br /&gt;&amp;#160;&amp;#160; _dwCapBuffer.Stop();      &lt;br /&gt;});      &lt;br /&gt;_dwCaptureThread.Start();&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;That’s it. Compile and run. Now if you’ll speak, you can hear your echo from PC speakers. &lt;/p&gt;  &lt;p&gt;Merry Christmas for whom concerns and be good people – do not scare your co-workers with strange sounds – be polite and make the volume lower :) &lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=201052" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DirectX/default.aspx">DirectX</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Hardware/default.aspx">Hardware</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Quick Silverlight (and WPF) tip: How to write program without XAML</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/12/23/quick-silverlight-and-wpf-tip-how-to-write-program-without-xaml.aspx</link><pubDate>Tue, 23 Dec 2008 23:51:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:199696</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/quick-silverlight-and-wpf-tip-how-to-write-program-without-xaml/"&gt;http://khason.net/blog/quick-silverlight-and-wpf-tip-how-to-write-program-without-xaml/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;From the moment, &lt;a href="http://2009.visitmix.com/MIXtify/TenKGallery.aspx"&gt;10K MIX09 contest was launched&lt;/a&gt;, I got more, then 20 people, asking the same question: &lt;b&gt;Is it possible to have Silverlight program up and running without XAML at all?&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.microsoft.co.il/blogs/tamir/image_5432FC95.png" style="border:0px none;display:inline;" title="image" alt="image" width="315" border="0" height="289" /&gt; &lt;/p&gt;  &lt;p&gt;The answer is “&lt;b&gt;YES, IT IS&lt;/b&gt;”. Here is how:&lt;/p&gt;  &lt;p&gt;All you need for run WPF or Silverlight application is &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Class inherited from System.Windows.Application&lt;/li&gt;    &lt;li&gt;Class inherited from System.Windows.Controls.UserControl&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;So, Let’s create new WPF or Silverlight application and delete all files from the project directory. Then add one file, named App.cs (or Foo.cs or Whatever.cs – the length of the file name is not included :) ) and write there :&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;using System.Windows.Controls;     &lt;br /&gt;using System.Windows;&lt;/p&gt;    &lt;p&gt;public class App : Application {public App() {this.Startup += (s, e) =&amp;gt; { this.RootVisual = Foo.M; };}}&amp;nbsp; &lt;br /&gt;class Foo: UserControl {static Foo _b = new Foo();public static Board M { get { return _b; } }&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;We done. F5, be happy. You just wrote first officially smallest Silverlight functional application. Good luck with Mix09 contest.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=199696" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/fun/default.aspx">fun</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>How to P/Invoke VarArgs (variable arguments) in C#? ... or hidden junk in CLR</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/11/19/how-to-p-invoke-varargs-variable-arguments-in-c-or-hidden-junk-in-clr.aspx</link><pubDate>Wed, 19 Nov 2008 11:44:10 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:170664</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>1</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/how-to-pinvoke-varargs-variable-arguments-in-c-or-hidden-junk-in-clr/"&gt;http://khason.net/blog/how-to-pinvoke-varargs-variable-arguments-in-c-or-hidden-junk-in-clr/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Recently I &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/20/p-invoke-cheat-sheet.aspx"&gt;wrote a cheat sheet for pinvoking in .NET&lt;/a&gt;. Shortly after I got a question in comments about how to deal with variable arguments, when it&amp;#39;s more, then one parameter. Also what to do if those arguments are heterogeneous? &lt;/p&gt; &lt;p&gt;Let&amp;#39;s say, that we have following method in C:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;int VarSum(int nargs, ...){&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_list argp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_start( argp, nargs );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int sum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( int i = 0 ; i &amp;lt; nargs; i++ ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg = va_arg( argp, int );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum += arg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; va_end( argp );  &lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;We can expose this method to C# as following:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[System.Runtime.InteropServices.DllImportAttribute(&amp;quot;unmanaged.dll&amp;quot;, EntryPoint = &amp;quot;VarSum&amp;quot;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern int VarSum(int nargs,int arg1); &lt;p&gt;[System.Runtime.InteropServices.DllImportAttribute(&amp;quot;unmanaged.dll&amp;quot;, EntryPoint = &amp;quot;VarSum&amp;quot;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern int VarSum(int nargs,int arg1,int arg2);&lt;/p&gt; &lt;p&gt;[System.Runtime.InteropServices.DllImportAttribute(&amp;quot;unmanaged.dll&amp;quot;, EntryPoint = &amp;quot;VarSum&amp;quot;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern int VarSum(int nargs,int arg1,int arg2,int arg3);&lt;/p&gt; &lt;p&gt;etc...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And it will work. However, if you&amp;#39;ll try to expose it as int array, marshaller will fail to understand how to align things&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[System.Runtime.InteropServices.DllImportAttribute(&amp;quot;unmanaged.dll&amp;quot;, EntryPoint = &amp;quot;VarSum&amp;quot;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern int VarSum(int nargs,int[] arg);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This in spite of the fact, that this method will work properly with another signature&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;int ArrSum(int* nargs) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int sum = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for( int i = 0 ; i &amp;lt; 2; i++ ) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum += nargs[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return sum;&lt;br /&gt;}&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;So what to do? The &lt;u&gt;official&lt;/u&gt; answer is - &lt;strong&gt;you have nothing to do, rather then override all possibilities&lt;/strong&gt;. This is very bad and absolutely not flexible. So, there is small class in C#, named ArgIterator. This one is similar to params object[], but knows to marshal into varargs. The problem is, that you have no way to add things inside. It&amp;#39;s &amp;quot;kind-of-read-only&amp;quot;. &lt;/p&gt; &lt;p&gt;Let&amp;#39;s look into reflected version of ArgIterator. We&amp;#39;ll see there something, named &lt;strong&gt;__arglist and __refvalue&lt;/strong&gt;. OMG, isn&amp;#39;t it good old stuff similar to &amp;quot;__declspec(dllexport) int _stdcall&amp;quot; etc.? It is! But can we use it in C#? We can! Just sign your method as Cdecl and you have working signature for &amp;quot;...&amp;quot;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[System.Runtime.InteropServices.DllImportAttribute(&amp;quot;unmanaged.dll&amp;quot;, EntryPoint = &amp;quot;VarSum&amp;quot;, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CallingConvention=System.Runtime.InteropServices.CallingConvention.Cdecl)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public static extern int VarSum(int nargs, __arglist);&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Yes, looks strange, and absolutely not CLR compliant. However, this is the only way to expose varargs to CLR via P/Invoke. How to use it? Simple:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;c = VarSum(2, __arglist(5, 10));&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Have a nice day and be good people. Also, my question to Microsoft is why this stuff is not in MSDN and we, as developers, have no way to get rid of it. &lt;/p&gt; &lt;p&gt;Is not it very good practices to use non-compliant methods? Give us another way to do it!&lt;br /&gt;Is not it very good practices to use variable arguments in unmanaged method signatures? So why you want dynamic types in C# 4?&lt;/p&gt; &lt;p&gt;&lt;a href="http://cid-4e39ecd492e4eec1.skydrive.live.com/self.aspx/Public/VarArgsMarshaller.zip%20"&gt;Source code for this article&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=170664" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Interop/default.aspx">Interop</category></item><item><title>Consultants for charity</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/11/12/consultants-for-charity.aspx</link><pubDate>Wed, 12 Nov 2008 21:50:38 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:165049</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>6</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/consultants-for-charity/"&gt;http://khason.net/blog/consultants-for-charity/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;As you, probably, know, &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/08/19/i-m-leaving-consulting-field-joined-new-project-for-full-time.aspx"&gt;I left consulting field&lt;/a&gt;. However, it does not mean, that I quit helping developers community with client application development. Also, every day I&amp;#39;m getting between 50 and 300 emails with questions (I&amp;#39;m trying to answer all of those) and sometimes proposals for consulting. Currently I&amp;#39;m refusing all those, because I do not want to engage to it. However, there are too much people, who really need professional developers help and there are very few good development consultants in our area. Thus I decided &lt;strong&gt;to keep consulting&lt;/strong&gt;, but this time &lt;strong&gt;only for charity&lt;/strong&gt;. &lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/Consultantsforcharity_14F3F/image_f5fe52c8-df4c-4a91-b48a-ffba7b736822.png" width="506" height="337" /&gt; &lt;br /&gt;&lt;font size="1"&gt;© &lt;/font&gt;&lt;a target="_blank" href="http://www.thecolorblindphotographer.com/"&gt;&lt;font size="1"&gt;ColorBlind photographers&lt;/font&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;How does it work?&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;You want me to help you with your development. &lt;/li&gt; &lt;li&gt;I have free time for it. &lt;/li&gt; &lt;li&gt;We decide together about the fee.&lt;/li&gt; &lt;li&gt;You get consulting and you are happy with it.&lt;/li&gt; &lt;li&gt;I tell you what charity organization to transfer &lt;u&gt;all&lt;/u&gt; amount, you should pay (except TBL, if there are).&lt;/li&gt; &lt;li&gt;You transfer it.&lt;/li&gt; &lt;li&gt;We made the world a bit better!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;To clarify things: &lt;/p&gt; &lt;ol&gt; &lt;li&gt;It&amp;#39;s not charity foundation - you will transfer the money directly to organization, that need it&lt;/li&gt; &lt;li&gt;I&amp;#39;m not doing it for free - I feel, that finally I&amp;#39;m able to do something really big for those, who need it&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;strong&gt;So, if you are one of those, who want me to consult, &lt;/strong&gt;&lt;strong&gt;contact&lt;/strong&gt; &lt;strong&gt;me via &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/contact.aspx"&gt;this form&lt;/a&gt; or &lt;a target="_blank" href="http://twitter.com/tamir"&gt;Twitter&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;If you&amp;#39;re good consultant and want to join me, &lt;/strong&gt;&lt;strong&gt;&lt;strong&gt;contact&lt;/strong&gt; &lt;strong&gt;me via &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/contact.aspx"&gt;this form&lt;/a&gt; or &lt;a target="_blank" href="http://twitter.com/tamir"&gt;Twitter&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;and we&amp;#39;ll make the world better together.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I still had no chance to speak with my ex-engagement manager, however I believe, that he will not have a problem with this kind of payment to me. If so (and you have open PO in Microsoft Israel with him), you&amp;#39;ll be able to use it.&lt;/p&gt; &lt;p&gt;&lt;em&gt;Spear the world with this news!&lt;/em&gt; Post in your blogs, &lt;a target="_blank" href="http://twitter.com/home/?status=Consultants%20for%20charity%20http%3A//tinyurl.com/5btbsv%20via%20@tamir"&gt;twitters&lt;/a&gt;, &lt;a target="_blank" href="http://www.facebook.com/share.php?u=http%3A//blogs.microsoft.co.il/blogs/tamir/archive/2008/11/12/consultants-for-charity.aspx"&gt;facebook&lt;/a&gt;, any other community stuff or just join me :)&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=165049" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/thoughts/default.aspx">thoughts</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Charity/default.aspx">Charity</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category></item><item><title>Programming for Windows 7</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/11/09/programming-for-windows-7.aspx</link><pubDate>Sun, 09 Nov 2008 17:12:38 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:163503</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>3</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/programming-for-windows-7/"&gt;http://khason.net/blog/programming-for-windows-7/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Well, Windows 7 is going to be released by the end of next year. This is great news, because it seemed, that Microsoft finally understand how to get the best of Windows Vista and make it to work not only on &lt;a href="http://www.top500.org/"&gt;monster machines&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;&lt;img style="border-bottom:0px;border-left:0px;border-top:0px;border-right:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/ProgrammingforWindows7_10DE0/image_3.png" width="600" height="397" /&gt; &lt;/p&gt; &lt;p&gt;It even works on new brandy my wife&amp;#39;s pinky machine. And if it works there and my wife is happy with it, this OS going to be very impressive.&lt;/p&gt; &lt;p&gt;&lt;img border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/ProgrammingforWindows7_10DE0/image_58bf6973-bdc1-44d9-8649-f24e6255e65f.png" width="529" height="397" /&gt; &lt;/p&gt; &lt;p&gt;But from the other hand, we, as developers should be ready today to developer Windows 7 ready application (by the way, &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx"&gt;Vista Battery Saver&lt;/a&gt; works for Windows 7 as well as for Windows Vista, in spite of the fact, that power management in Windows 7 was improved dramatically). So let&amp;#39;s start!&lt;/p&gt; &lt;p&gt;First thing we need is to read big &lt;a target="_blank" href="http://code.msdn.microsoft.com/Win7DeveloperGuide/Release/ProjectReleases.aspx"&gt;Windows 7 Developer Guide&lt;/a&gt;. This document will explain most of new features for developers to build applications right. What is includes?&lt;/p&gt; &lt;h3&gt;Windows Driver Kit (WDK) 3.0&lt;/h3&gt; &lt;p&gt;Basically, Windows 7 works with Vista drivers, however, hibernation, power management, networking, PREfast will work much better. You also will have new WMI access for reliability monitors and ACPI. &lt;/p&gt; &lt;h3&gt;Management and deployment&lt;/h3&gt; &lt;p&gt;By default Windows 7 uses PowerShell 2.0 and Windows Installer. For PowerShell it includes enhanced cmdlets to manage Active Directory, IIS, etc. For Windows Installer, you finally can build &amp;quot;chainers&amp;quot; by yourself (the same approach, used for latest deployment of Microsoft products such as &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx"&gt;Silverlight&lt;/a&gt;, &lt;a target="_blank" href="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx"&gt;Visual Studio 2008 SP1&lt;/a&gt; etc.) Also, you can get advantage by using Windows Filtering Platform (Firewall) and User Account Control (UAC) from inside your application by using new APIs. &lt;/p&gt; &lt;h3&gt;Performance&lt;/h3&gt; &lt;p&gt;The most significant change in Windows 7 for end-user point of view is improved performance. Windows 7 kernel is much smaller, that kernel of Windows Vista. Also it uses specific patterns to decrease background activities on low power, based on system triggers. New user-mode and kernel-mode APIs are used by Windows Drivers Foundation much more efficiently. Also system services are much smarter. For example, DCIA starts only when you connect new hardware. After drivers were installed the service shuts down. The same approach used by domain join, GP changes, new IP fetching etc. Windows 7 knows to run and stop services, based on system events, which decreases average work load and enhances whole system performance. &lt;/p&gt; &lt;h3&gt;Multi-touch gestures and Interia API and used interface in general&lt;/h3&gt; &lt;p&gt;Yes, you can use this API for your applications. Finally we can have more, then just mouse. And it is not only about multiple mouse devices. We can use single finder panning, raw touch input data, internal multitouch ink recognition, which is also supports math. Also it uses build-in MathML export feature. &lt;/p&gt; &lt;p&gt;There are a lot of other enhancements, such as smart bars, windows&amp;#39; stacking, gadget desktop (it does not eat battery as external process anymore), system ribbon menu integration. etc&lt;/p&gt; &lt;h3&gt;Graphics&lt;/h3&gt; &lt;p&gt;Direct 11, new Direct2D, DirectWrite (we can turn text anti-aliasing for small fonts, hurrah!), improved WIC, DX/GDI interoperability on system level with automatic fallback for weak hardware (yes, you should not be worry about it anymore). Also new video and audio format support with &lt;u&gt;human readable interfaces&lt;/u&gt;. Yes, no more DirectDraw hacks. We can use new high level interfaces such as MFPlay to manage playbacks, Source Reader for decoding, Sink Writer for transcoders and re-coding compressions.&lt;/p&gt; &lt;h3&gt;Web and communication&lt;/h3&gt; &lt;p&gt;WCF is inside, as well as distributed routing table for peer-to-peer operations. BranchCache - new technology to reduce WAN traffic and latency. &lt;/p&gt; &lt;p&gt;Also Windows 7 is compatible with &lt;a target="_blank" href="http://www.opensearch.org"&gt;OpenSearch&lt;/a&gt; (I told, that Microsoft does not know to build search engines). Sharepoint integration and environment sensors platform, that can be used either for desktop and web applications. &lt;/p&gt; &lt;p&gt;There are much more features, that makes Windows 7 to pretend to be very good operation system. If you want to learn more about all those Windows 7 new features, I highly advice you to &lt;a target="_blank" href="http://code.msdn.microsoft.com/Win7DeveloperGuide/Release/ProjectReleases.aspx"&gt;download and read this document&lt;/a&gt;. It includes most of new features of new OS with explanations and screenshots to make your learn and understand what can your future application do with all those new features.&lt;/p&gt; &lt;p&gt;Have a nice day and be good people.&lt;/p&gt; &lt;p&gt;BTW, if you have PDC version of Windows 7 and want to unlock it for using of some cool features, &lt;a target="_blank" href="http://channel9.msdn.com/pdc2008/KYN02/"&gt;introduced during keynotes&lt;/a&gt;, it worth &lt;a target="_blank" href="http://www.withinwindows.com/2008/11/02/flashy-windows-7-bits-protected-by-elaborate-scheme-workaround/"&gt;to visit here&lt;/a&gt; and learn how to :)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Download &lt;/strong&gt;&lt;a href="http://code.msdn.microsoft.com/Win7DeveloperGuide"&gt;&lt;strong&gt;Windows 7 Developer Guide&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; and start programming.&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=163503" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/demos/default.aspx">demos</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Vista+Battery+Saver/default.aspx">Vista Battery Saver</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/XPS/default.aspx">XPS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DirectX/default.aspx">DirectX</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>P/Invoke cheat sheet</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/20/p-invoke-cheat-sheet.aspx</link><pubDate>Mon, 20 Oct 2008 20:02:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:155503</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>9</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/pinvoke-cheat-sheet/"&gt;http://khason.net/blog/pinvoke-cheat-sheet/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;I’m working a lot with p/invoke, and know how it’s hard to produce correct signature for unmanaged method. So, today I decided to publish basic cheat sheet for methods, parameters and attributes you should use in order to invoke unmanaged methods from managed code without a lot of problems. We start with data type translations. Here the table to understand it.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;Data type from unmanaged signature&lt;/td&gt;        &lt;td valign="top"&gt;Data type in managed signature&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;int&lt;/td&gt;        &lt;td valign="top"&gt;int         &lt;br /&gt;          &lt;br /&gt;&lt;em&gt;the same with all other simple types such as double, uint, etc or private objects&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;void*&lt;/td&gt;        &lt;td valign="top"&gt;IntPtr&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;int*&lt;/td&gt;        &lt;td valign="top"&gt;ref int         &lt;br /&gt;          &lt;br /&gt;&lt;em&gt;the same with all other simple types such as double, uint, etc &lt;em&gt;or private objects&lt;/em&gt; &lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;char**&lt;/td&gt;        &lt;td valign="top"&gt;ref IntPtr         &lt;br /&gt;          &lt;br /&gt;&lt;em&gt;later, you should get ascii string by using System.Runtime.InteropServices.Marshal.PtrToStringAnsi() method&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;wcar_t**&lt;/td&gt;        &lt;td valign="top"&gt;ref IntPtr         &lt;br /&gt;          &lt;br /&gt;&lt;em&gt;later, you should get ascii string by using System.Runtime.InteropServices.Marshal.PtrToStringUni() method&lt;/em&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;const int*&lt;/td&gt;        &lt;td valign="top"&gt;ref int&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;const char*&lt;/td&gt;        &lt;td valign="top"&gt;[System.Runtime.InteropServices.In()] [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPWStr)] string&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;… &lt;em&gt;(variable argument)&lt;/em&gt;&lt;/td&gt;        &lt;td valign="top"&gt;[System.Runtime.InteropServices.In()] [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.AsAny)] object&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;em&gt;You can use either System.Runtime.InteropServices.In or System.Runtime.InteropServices.Out attribute to specify how arguments should be used.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Now we done with simple arguments, let’s see what can be done when argument is actually callback or delegate?&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;Unmanaged definition&lt;/td&gt;        &lt;td valign="top"&gt;Managed definition&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;typedef void (*MyCallback)(int Arg)&lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;[System.Runtime.InteropServices.UnmanagedFunctionPointer(System.Runtime.InteropServices.CallingConvention.Cdecl)]delegate void MyCallback(int Arg)           &lt;br /&gt;&lt;em&gt;Caller cleans stack argument is used to assure, that we can call varargs type function, usually used by API provider. It is very similar to C# overrides for methods. Also you can use StdCall (this is default), ThisCall – stores this first and pushes other parameters on the stack, FastCall – not very supported :(&lt;/em&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;To call all those methods, we should know managed equivalents of unmanaged types. Here the table. The rule is simple – know how many bytes unmanaged type has and find managed type with the same number of bytes. Other words, you can marshal int into IntPtr too…&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;Unmanaged type&lt;/td&gt;        &lt;td valign="top"&gt;Managed equivalent&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;bool&lt;/td&gt;        &lt;td valign="top"&gt;bool&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;char&lt;/td&gt;        &lt;td valign="top"&gt;sbyte (signed), byte (unsigned)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;wchar_t&lt;/td&gt;        &lt;td valign="top"&gt;char&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;double&lt;/td&gt;        &lt;td valign="top"&gt;double&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;float&lt;/td&gt;        &lt;td valign="top"&gt;single&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;int, long (signed)&lt;/td&gt;        &lt;td valign="top"&gt;Int32&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;int, long (unsigned)&lt;/td&gt;        &lt;td valign="top"&gt;UInt32&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;__int64 (signed)&lt;/td&gt;        &lt;td valign="top"&gt;Int64&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;__int64&lt;/td&gt;        &lt;td valign="top"&gt;UInt64&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;short (signed)&lt;/td&gt;        &lt;td valign="top"&gt;Int16&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;short (unsigned)&lt;/td&gt;        &lt;td valign="top"&gt;UInt16&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;void&lt;/td&gt;        &lt;td valign="top"&gt;void&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;But not only types are problem in managed/unmanaged transitions. Also structures are aligned differently. For this purpose we can use StructLayout attribute. Even if unmanaged classes are sequential and you used correct managed data types, you can find you with problems in Pack. What “pack” is? Pack is actually slot size in bytes for members of your structure. It can be 0, 1, 2, 4, 8, 16, 32, 64, or 128 and depends on the platform and application setting.&lt;/p&gt;  &lt;p&gt;Now you can see, that it is not very complicated to create managed signatures when you have header of unmanaged assemblies. So go ahead and ask, if I missed something.&lt;/p&gt;  &lt;p&gt;That’s all by now. Have a nice day and be good people.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=155503" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+crossbow/default.aspx">WPF crossbow</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/x64/default.aspx">x64</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Work+process/default.aspx">Work process</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Mono/default.aspx">Mono</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Issues, you reported were fixed</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/11/issues-you-reported-were-fixed.aspx</link><pubDate>Sat, 11 Oct 2008 09:35:46 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:152181</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/issues-you-reported-were-fixed/"&gt;http://khason.net/blog/issues-you-reported-were-fixed/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Hi, folks. And thank you for &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/09/29/for-all-those-who-have-problems-with-running-wpf-performance-profiling-tool-microsoft-cares.aspx" target="_blank"&gt;reporting issues with WpfPerf Performance Profiling tool&lt;/a&gt;. Now &lt;a href="http://blogs.msdn.com/jgoldb/archive/2008/10/10/fixes-to-wpfperf-performance-profiling-tool.aspx" target="_blank"&gt;it was fixed&lt;/a&gt;, so, &lt;a href="http://windowsclient.net/wpf/perf/wpf-perf-tool.aspx" target="_blank"&gt;download and use new and fixed version&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Keep reporting, as you can see, you have the power to change!&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="283" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_17EF7242.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;font size="1"&gt;Imaginary by &lt;/font&gt;&lt;a href="http://www.pixelfoundry.co.za/dare/index.html" target="_blank"&gt;&lt;font size="1"&gt;Malcolm Dare&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=152181" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/soft/default.aspx">soft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tools/default.aspx">tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Silverlight Bidi Controls Library RC0 and movement from Beta 2 to RC0</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/05/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0.aspx</link><pubDate>Sun, 05 Oct 2008 16:31:23 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:150052</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>7</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0/"&gt;http://khason.net/blog/silverlight-bidi-controls-library-rc0-and-movement-from-beta-2-to-rc0/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Finally, I got free minute to convert &lt;a href="http://www.codeplex.com/SilverlightRTL/"&gt;Silverlight BiDi controls&lt;/a&gt; from Silverlight beta 2 to RC0 (you can download SL rc0 tools for VS2008 &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=c22d6a7b-546f-4407-8ef6-d60c8ee221ed&amp;amp;displaylang=en"&gt;here&lt;/a&gt;) and as usual some breaking changes (the full list is &lt;a href="http://download.microsoft.com/download/6/f/e/6fe1f43d-9d0c-4346-ad08-602df9bcb3cf/BreakingChangesBetweenBeta2andRelease.doc"&gt;here&lt;/a&gt;)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Calendar and DatePicker moved from System.Windows.Controls.Extended into System.Windows.Controls – Extended namespace is now deprecated.&lt;/li&gt;    &lt;li&gt;CalendarButton is not inside System.Windows.Controls.Primitives&lt;/li&gt;    &lt;li&gt;TypeConverter.CanConvertFrom(Type sourceType) was changed and now it has new first parameter ITypeDescriptorContext context&lt;/li&gt;    &lt;li&gt;TypeConverter.CanConvertFrom(object value) was changed and now it has new first parameter ITypeDescriptorContext context and second parameter System.Globalization.CultureInfo culture&lt;/li&gt;    &lt;li&gt;TypeConverter.ConvertFromString is not virtual anymore&lt;/li&gt;    &lt;li&gt;TextDecorationCollectionConverter was removed&lt;/li&gt;    &lt;li&gt;generic.xaml should be placed into themes directory (as in WPF)&lt;/li&gt;    &lt;li&gt;VisualTransition.Duration is not VisualTransition.GeneratedDuration&lt;/li&gt;    &lt;li&gt;ContentPresenter has no HorizontalContentAlignment and VerticalContentAlignment. It has HorizontalAlignment and VerticalAlignment now. Also it has no Background, Padding,TextAlignment,TextDecorations and TextWrapping properties&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Those, basically, all changes done in Silverlight RTL support library. So, &lt;a href="http://www.codeplex.com/SilverlightRTL/Release/ProjectReleases.aspx"&gt;you can download and use the latest version&lt;/a&gt; within Silverlight RC0 version&lt;/p&gt;  &lt;p&gt;Have a nice day and be good people.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=150052" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/VSTS/default.aspx">VSTS</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Free Microsoft Expression series video training catalogs</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/10/04/free-microsoft-expression-series-video-training-catalogs.aspx</link><pubDate>Sat, 04 Oct 2008 07:44:55 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:149527</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/free-microsoft-expression-series-video-training-catalogs/"&gt;http://khason.net/blog/free-microsoft-expression-series-video-training-catalogs/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;MSDN download center just published video catalogs, where you can find sample chapters of Total Training’s video series for Microsoft Expression studio. Worth to download and see. Here the breakdown by products&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Expression Blend 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=5c22a9da-8577-4cc8-988f-580a76826407&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=bf1bd842-cb96-40f5-8329-3124c0ae258a&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Encoder 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=90bdea8d-3559-498b-b4d1-b6f9f3b10536&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=70acf5ca-45c4-441a-9b62-249df27dd6d0&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Design 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=ba982ba8-c336-4ff1-b65d-936dace16e24&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=50d5081f-5bf8-4f72-b7b2-04aa1fdbff69&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Media 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=14762326-edbe-43e8-bc52-4dd9ec50d1d3&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=3a50d8d4-a9df-4368-a8f5-0bce1a27bc90&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt;    &lt;li&gt;Expression Web 2 [&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e2528d89-0a58-4f27-b69c-c89951d9810d&amp;amp;displaylang=en&amp;amp;tm"&gt;Windows&lt;/a&gt; / &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=4dc45321-afc4-40c2-9a94-c229197f942d&amp;amp;displaylang=en&amp;amp;tm"&gt;Mac&lt;/a&gt;]&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Also, if you are “in” Office development, it makes sense to take a look in to &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7554f536-8c28-4598-9b72-ef94e038c891&amp;amp;displaylang=en&amp;amp;tm"&gt;Data Connectivity Components for Office 2007 System&lt;/a&gt;. It can be used by non-Microsoft Office applications to read data from Office system files. &lt;/p&gt;  &lt;p&gt;Happy downloading!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=149527" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/soft/default.aspx">soft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tutorial/default.aspx">tutorial</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TECH/default.aspx">TECH</category></item><item><title>For all those, who have problems with running WPF Performance Profiling tool – Microsoft cares</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/09/29/for-all-those-who-have-problems-with-running-wpf-performance-profiling-tool-microsoft-cares.aspx</link><pubDate>Mon, 29 Sep 2008 06:00:50 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:147527</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/for-all-those-who-have-problems-with-running-wpf-performance-profiling-tool-%e2%80%93-microsoft-cares/"&gt;http://khason.net/blog/for-all-those-who-have-problems-with-running-wpf-performance-profiling-tool-%e2%80%93-microsoft-cares/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Three days ago, &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/09/26/the-new-version-of-wpf-performance-profiling-tool-is-available-for-download.aspx"&gt;I announced the new release of WPF Performance Profiling Tool&lt;/a&gt;. A couple hours after this was announced, I got a number of comments from you, readers. It was about issues with running this tool. I checked the issue and forwarded it to development team from Microsoft. The problem was in bad parsing of comma and point characters in this tool, when using it on non-US locale. Dev team took care about it and hopefully they will provide a fix soon.&lt;/p&gt;  &lt;p&gt;Thank you for reading my blog, reporting and your awareness of such issues. This is very important to me and I’m really appreciate your efforts to help us to develop WPF community.&lt;/p&gt;  &lt;p&gt;I’ll update you as soon as the patch will be available.&lt;/p&gt;  &lt;p&gt;Thank you and Shana Tova!&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="318" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_77B73E21.png" width="320" border="0" /&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=147527" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/help/default.aspx">help</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tools/default.aspx">tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/TECH/default.aspx">TECH</category></item><item><title>The new version of WPF Performance Profiling Tool is available for download</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/09/26/the-new-version-of-wpf-performance-profiling-tool-is-available-for-download.aspx</link><pubDate>Fri, 26 Sep 2008 19:07:34 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:145726</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>7</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/the-new-version-of-wpf-performance-profiling-tool-is-available-for-download/"&gt;http://khason.net/blog/the-new-version-of-wpf-performance-profiling-tool-is-available-for-download/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Finally, after a long time of silence, the new version of WPF Performance Profiling Tool is available for download for x32 and x64 OSs.&amp;#160; So, what’s new there?&lt;/p&gt;  &lt;p&gt;Ton of UI improvements for Visual Profiler&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="314" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_7600C96C.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;New search function to quick find elements in visual tree&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="195" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_5C1C6D70.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Hot path (critical path) of CPU usage aside with CPU usage for single element&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="249" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_07BD11A0.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Configuration of tint for overlay windows&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="293" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_1A61E58A.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;Live preview, ability to split columns, slider of graph duration, expanders to have cleaner screen and much much more&lt;/p&gt;  &lt;p&gt;Perforator also got new UI and has history now.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="288" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_3B453264.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;There is new tool, named String allocation profiler&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="318" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_26631417.png" width="351" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;This tool is very useful for viewing and managing strings inside your application (another step toward normal localization support for WPF? Probably)&lt;/p&gt;  &lt;p&gt;There are also some improvements in Event tracing tool. Select process for example :)&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="display:inline;" height="271" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/image_60AE642B.png" width="377" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;And much much more. Great thank to &lt;a href="http://blogs.msdn.com/jgoldb/archive/2008/09/25/updated-wpfperf-performance-profiling-tools-for-wpf.aspx"&gt;Josef and his team&lt;/a&gt; for this great work &lt;/p&gt;  &lt;p&gt;&lt;a href="http://windowsclient.net/wpf/perf/wpf-perf-tool.aspx"&gt;&lt;strong&gt;Download the new version of WPF Performance Profiling Tool &amp;gt;&amp;gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=145726" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF+crossbow/default.aspx">WPF crossbow</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/tools/default.aspx">tools</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Developers academy 3 - vote your choice</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/09/09/developers-academy-3-vote-your-choice.aspx</link><pubDate>Tue, 09 Sep 2008 11:57:09 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:136257</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/developers-academy-3-vote-your-choice/"&gt;http://khason.net/blog/developers-academy-3-vote-your-choice/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;If you&amp;#39;re &amp;quot;in&amp;quot; WPF and/or Silverlight development and want to learn more about high performance programming in WPF or your ability to develop once for WPF and Silverlight, you&amp;#39;re &lt;a href="http://www.dooblo.net/ip_wc/Survey.aspx?Ticket=T6K6OGBN"&gt;invited to vote for my session in Dev Academy 3&lt;/a&gt; and attend it:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;High performance programming with WPF in .NET framework 3.5 SP1&lt;br /&gt;&lt;/strong&gt;.NET 3.5 SP1 (Arrowhead) brings you full power of WPF by taking into account huge performance enhancements for Line-Of-Business by using data virtualization and high graphical applications by access to DirectX surfaces. This session will round up all new features to Arrowhead&lt;br /&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Unified development experience with Windows Presentation Foundation and Silverlight 2.0&lt;br /&gt;&lt;/strong&gt;Two years ago, Microsoft introduced Windows Presentation Foundation (WPF) to provide a unified platform for Rich Windows Client Applications development. A year later Silverlight was introduced as similar platform for Rich Internet Applications. Is it possible to use XAML based approach to share and reuse code for both frameworks? In this session we will learn how to develop reusable code base for productive, usable and well branded Client and Internet applications to wider distribution, demanded today.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Also, you can advice another session, you might be interested in via comments in this post&lt;/p&gt; &lt;p&gt;Thank you and see you there...&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=136257" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/events/default.aspx">events</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/DevAcademy3/default.aspx">DevAcademy3</category></item><item><title>I'm leaving consulting field - joined new project for full time</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/08/19/i-m-leaving-consulting-field-joined-new-project-for-full-time.aspx</link><pubDate>Tue, 19 Aug 2008 18:28:05 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:131487</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>10</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/im-leaving-consulting-field-joined-new-project-for-full-time/"&gt;http://khason.net/blog/im-leaving-consulting-field-joined-new-project-for-full-time/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;Dear readers,&lt;/p&gt; &lt;p&gt;I leaved &lt;a href="http://mprest.com"&gt;mPrest&lt;/a&gt;, the company, I worked for last 5 years and joined the project, that aspires to make the World better. Currently, I cannot disclosure too much, but briefly, I will not consult and manage client&amp;#39;s projects anymore. This does not mean, that I&amp;#39;m quitting Microsoft and it&amp;#39;s technologies, I&amp;#39;m just beginning to develop product(s).&lt;/p&gt; &lt;p&gt;Also, I&amp;#39;ll keep blogging. It will be probably less &amp;quot;problem solutions&amp;quot; and more &amp;quot;how the stuff works&amp;quot;, but actually, I&amp;#39;ll blog less. In addition, I promised to Microsoft, that I&amp;#39;ll contribute some of my time for community activities such as lectures, QnA sessions, presentations and open source activities. But this will be only small part of my time. Mainly, I&amp;#39;ll work to accomplish my project. &lt;/p&gt; &lt;p&gt;All my contact information remains the same, so, if you have urgent questions, you &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/contact.aspx"&gt;can ask&lt;/a&gt;. Also, if you want to be in touch more, you can &lt;a href="http://twitter.com/tamir"&gt;follow me in Twitter&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;img src="http://cache4.asset-cache.net/xc/80578205.jpg?v=1&amp;amp;c=NewsMaker&amp;amp;k=2&amp;amp;d=AEF1002412D959678B6FA49E431160DA" alt="" /&gt;&lt;br /&gt;&lt;font size="1"&gt;© Image copyright by &lt;a href="http://www.nationalgeographic.com/"&gt;National Geographic&lt;/a&gt;, photographer - O. Louis Mazzatenta &lt;/font&gt;&lt;/p&gt; &lt;p&gt;Thank you, and keep reading...&lt;br /&gt;Tamir&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=131487" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/thoughts/default.aspx">thoughts</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/blogging+general/default.aspx">blogging general</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>WPF DataGrid CTP is here. It’s also open source!</title><link>http://blogs.microsoft.co.il/blogs/tamir/archive/2008/08/12/wpf-datagrid-ctp-is-here-it-s-also-open-source.aspx</link><pubDate>Tue, 12 Aug 2008 17:03:42 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:130099</guid><dc:creator>Tamir Khason</dc:creator><slash:comments>2</slash:comments><description>&lt;h3&gt;[This blog was migrated. You will not be able to comment here.&lt;br /&gt;The new URL of this post is &lt;a href="http://khason.net/blog/wpf-datagrid-ctp-is-here-it%e2%80%99s-also-open-source/"&gt;http://khason.net/blog/wpf-datagrid-ctp-is-here-it%e2%80%99s-also-open-source/&lt;/a&gt;]&lt;/h3&gt;&lt;hr /&gt;&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Huge amount of people asked me about DataGrid control in WPF. There are some 3rd parties providing this control for free and not, However, I always adviced them to wait until Microsoft will release it with (or after) &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2008/08/11/net-3-5-sp1-is-rtm-and-available-for-download.aspx"&gt;Arrowhead&lt;/a&gt;. So here comes the King. Some boys and girls from MS WPF dev team have OS initiative and released &lt;a href="http://www.codeplex.com/wpf"&gt;WPF toolkit&lt;/a&gt;. It’s absolutely free and includes all sources. Also it &lt;a href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx"&gt;renewed with WPF DataGrid CTP&lt;/a&gt; and other &lt;a href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx?ReleaseId=14962"&gt;tasty Futures&lt;/a&gt; inside with full source aside.&lt;/p&gt;  &lt;p&gt;Microsoft &lt;a href="http://www.microsoft.com/israel/openup/index.htm"&gt;goes open source&lt;/a&gt;? It &lt;a href="http://www.microsoft.com/opensource/"&gt;does&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;img title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/tamir/WindowsLiveWriter/WPFDataGridCTPishere.Itsalsoopensource_11A19/image_07eb3781-06dd-4020-82bf-713ca32edc32.png" width="482" height="49" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.codeplex.com/wpf/Release/ProjectReleases.aspx"&gt;Download latest WPF toolkit &amp;gt;&amp;gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=130099" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Performance/default.aspx">Performance</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/source/default.aspx">source</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/promo/default.aspx">promo</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/download/default.aspx">download</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://blogs.microsoft.co.il/blogs/tamir/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item></channel></rss>