<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Franci Penov</title><subtitle type="html">Notes from the Microsoft campus</subtitle><id>http://blogs.msdn.com/francip/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/francip/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2005-03-16T17:37:00Z</updated><entry><title>IServiceProvider vs. IServiceProvider</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2008/05/20/iserviceprovider-vs-iserviceprovider.aspx" /><id>http://blogs.msdn.com/francip/archive/2008/05/20/iserviceprovider-vs-iserviceprovider.aspx</id><published>2008-05-20T13:18:00Z</published><updated>2008-05-20T13:18:00Z</updated><content type="html">I've been using the COM IServiceProvider interface for a while now, mostly through extensions to the ATL's IServiceProviderImpl and BEGIN_SERVICE_MAP. Last week, I've been writing some managed code where I wanted to use the same pattern based on the System.IServiceProvider interface. Unfortunately, it turned out that it's not exactly the same interface. On the first glance, the two interfaces look sufficiently similar. Both interfaces have only one method - QueryService() (QS) in the unmanaged version...(&lt;a href="http://blogs.msdn.com/francip/archive/2008/05/20/iserviceprovider-vs-iserviceprovider.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8522492" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="COM" scheme="http://blogs.msdn.com/francip/archive/tags/COM/default.aspx" /></entry><entry><title>Sky's the limit...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2008/02/21/sky-s-the-limit.aspx" /><id>http://blogs.msdn.com/francip/archive/2008/02/21/sky-s-the-limit.aspx</id><published>2008-02-21T22:42:00Z</published><updated>2008-02-21T22:42:00Z</updated><content type="html">...or rather, 5GB is the limit on SkyDrive. :-) Plus, it's now available in 38 markets. Oh, and I should probably mention it's not a Beta anymore. For more details, head on the the SkyDrive team blog ....(&lt;a href="http://blogs.msdn.com/francip/archive/2008/02/21/sky-s-the-limit.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7841385" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="Windows Live" scheme="http://blogs.msdn.com/francip/archive/tags/Windows+Live/default.aspx" /></entry><entry><title>Enablilng dragging in Canvas, v3.5 edition</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2008/02/07/enablilng-dragging-in-canvas-v3-5-edition.aspx" /><id>http://blogs.msdn.com/francip/archive/2008/02/07/enablilng-dragging-in-canvas-v3-5-edition.aspx</id><published>2008-02-08T08:21:00Z</published><updated>2008-02-08T08:21:00Z</updated><content type="html">About a year ago I posted a class implemented couple of dependency properties you could attach to a Canvas and it's children and allowed dragging. The DPs were working quite well with any visual element inside the Canvas, including the standard controls like Button. Unfortunately, with .Net v3.5 the attached behavior was broken due to new behavior of some of the controls. For example, the Button control now supports three different OnClick behaviors - on hover, on press and on release. My DP code...(&lt;a href="http://blogs.msdn.com/francip/archive/2008/02/07/enablilng-dragging-in-canvas-v3-5-edition.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7534601" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="WPF" scheme="http://blogs.msdn.com/francip/archive/tags/WPF/default.aspx" /></entry><entry><title>Yahoo! Mail Web Service - interesting business model</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/03/30/yahoo-mail-web-service-interesting-business-model.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/03/30/yahoo-mail-web-service-interesting-business-model.aspx</id><published>2007-03-30T10:15:00Z</published><updated>2007-03-30T10:15:00Z</updated><content type="html">Dare posted some thoughts on the limitations of the new Yahoo! Mail Web Service . One thing he missed to mention though, is how that Web Service ties into Yahoo! Mail subscription model: "Yahoo! Mail offers an incentive for developers to build applications using the full functionality available for premium Yahoo! Mail accounts. Specifically, Yahoo! Mail provides a commission of $10.00 for every new Yahoo! Mail Plus account referred by developers." It would be interesting to see how many developers...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/03/30/yahoo-mail-web-service-interesting-business-model.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1992897" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="Software" scheme="http://blogs.msdn.com/francip/archive/tags/Software/default.aspx" /></entry><entry><title>IObjectWithBrowserSiteImpl - base template for IE BHO or toolbars</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/02/28/iobjectwithbrowsersiteimpl-base-template-for-ie-bho-or-toolbars.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/02/28/iobjectwithbrowsersiteimpl-base-template-for-ie-bho-or-toolbars.aspx</id><published>2007-03-01T07:55:00Z</published><updated>2007-03-01T07:55:00Z</updated><content type="html">If you want to extend IE with a browser helper object or a toolbar , you need to implement IObjectWithSite interface. ATL has a basic IObjectWithSiteImpl&amp;lt;&amp;gt; template that helps a bit. Most BHOs and toolbars also subscribe to the browser events. ATL has a helper template for that as well - IDispEventImpl&amp;lt;&amp;gt;. Thus, pretty much any IE extension implemented with ATL inherits both templates. So, I've decided to implement a new template - IObjectWithBrowserSite&amp;lt;&amp;gt;, that besides storing the...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/02/28/iobjectwithbrowsersiteimpl-base-template-for-ie-bho-or-toolbars.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1777262" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="IE Extensions" scheme="http://blogs.msdn.com/francip/archive/tags/IE+Extensions/default.aspx" /><category term="COM" scheme="http://blogs.msdn.com/francip/archive/tags/COM/default.aspx" /></entry><entry><title>Enabling dragging in Canvas, part 2</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/02/28/enabling-dragging-in-canvas-part-2.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="2448" href="http://blogs.msdn.com/francip/attachment/1776385.ashx" /><id>http://blogs.msdn.com/francip/archive/2007/02/28/enabling-dragging-in-canvas-part-2.aspx</id><published>2007-03-01T02:36:00Z</published><updated>2007-03-01T02:36:00Z</updated><content type="html">Update: There were some bugs in the code, which caused funny behavior with elements that have a render transform applied to them. I've updated the code below to fix these. In part 1 we covered how the dragging behavior will be attached to the Canvas object. Let's take a look now at the actual dragging code. Before we get to the actual code, we'll need some data members to keep some state between the events. These are mostly self explanatory, with the exception of _canvasLeft and _canvasTop. We'll...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/02/28/enabling-dragging-in-canvas-part-2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1776385" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="WPF" scheme="http://blogs.msdn.com/francip/archive/tags/WPF/default.aspx" /></entry><entry><title>Incoming posts</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/02/22/incoming-posts.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/02/22/incoming-posts.aspx</id><published>2007-02-23T09:27:00Z</published><updated>2007-02-23T09:27:00Z</updated><content type="html">Here's short list of topics I am planning to write about in the next month after I finsh the CanvasDragHelper (and if I can find the time). I am going to use this post as a simple survey to see what people would like to see first. Of course, I might not get to some of these. 1. (COM/CLR/WPF) Scriptable WPF application - a sample WPF aplication that exposes automation objects and runs as a local COM server. 2. (COM/IE) IObjectWithBrowserSiteAndDispEventImpl - an ATL-like template that implements IObjectWithSite...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/02/22/incoming-posts.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1745706" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author></entry><entry><title>Enabling dragging in canvas</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/02/22/Enabling-dragging-in-canvas.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/02/22/Enabling-dragging-in-canvas.aspx</id><published>2007-02-22T12:20:00Z</published><updated>2007-02-22T12:20:00Z</updated><content type="html">When developing UI, most of the time we want the controls nicely sized, ordered and aligned automatically. But sometimes it's just fun to put them free floating and be able to push them around. The Canvas panel allows for absolute positioning of the controls on it; however, there's nothing in WPF that would allow us to interact with the control position on it. Since the Canvas layout is using absolute positioning and we only want to allow changing of the position of, there is no need to implement...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/02/22/Enabling-dragging-in-canvas.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1473115" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="WPF" scheme="http://blogs.msdn.com/francip/archive/tags/WPF/default.aspx" /></entry><entry><title>Windows Live Toolbar build 130</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/02/22/windows-live-toolbar-build-130.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/02/22/windows-live-toolbar-build-130.aspx</id><published>2007-02-22T11:08:00Z</published><updated>2007-02-22T11:08:00Z</updated><content type="html">We just released the latest build of Windows Live Toolbar. There are no new features in this release, it's fucosed mostly on stability and performance improvements. If you use the toolbar, I'd suggest you upgrade. And if you're not using WLT, well, be a chap and give it a test drive, would you? :-) You can grab the bits from the WLT web page . After the install, you should be running version 03.01.0000.0130. You can check your toolbar version on the General page of the Settings dialog....(&lt;a href="http://blogs.msdn.com/francip/archive/2007/02/22/windows-live-toolbar-build-130.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1740179" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="Software" scheme="http://blogs.msdn.com/francip/archive/tags/Software/default.aspx" /><category term="Windows Live" scheme="http://blogs.msdn.com/francip/archive/tags/Windows+Live/default.aspx" /></entry><entry><title>ASP.NET Ajax 1.0 RTW</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/01/23/asp-net-ajax-1-0-rtw.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/01/23/asp-net-ajax-1-0-rtw.aspx</id><published>2007-01-23T21:02:00Z</published><updated>2007-01-23T21:02:00Z</updated><content type="html">ASP.NET Ajax 1.0 (formerly "Atlas") has been released to the web. You can read more about the framework and the control toolkit at http://ajax.asp.net (including some really nice viedeo demos), or grab the bits from here and the toolkit from here ....(&lt;a href="http://blogs.msdn.com/francip/archive/2007/01/23/asp-net-ajax-1-0-rtw.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1516080" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="Software" scheme="http://blogs.msdn.com/francip/archive/tags/Software/default.aspx" /></entry><entry><title>Goodbye, Max!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2007/01/11/goodbye-max.aspx" /><id>http://blogs.msdn.com/francip/archive/2007/01/11/goodbye-max.aspx</id><published>2007-01-11T15:16:00Z</published><updated>2007-01-11T15:16:00Z</updated><content type="html">This is a long overdue post. Couple of months ago Microsoft Max was closed. I was too busy with the transition to the new stuff I am working currently, though, so I neglected to post anything about this. The time I spent on Max was full of fun (great team!) and excitement (awesome new platform!...) mixed with some frustration (...still being developed...). I've learned a lot about WPF and got to play in the declarative UI land. I got to work and play with bunch of smart, hard-working and passionate...(&lt;a href="http://blogs.msdn.com/francip/archive/2007/01/11/goodbye-max.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1450442" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author></entry><entry><title>Windows Live Writer Beta announced</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2006/08/13/697853.aspx" /><id>http://blogs.msdn.com/francip/archive/2006/08/13/697853.aspx</id><published>2006-08-13T21:19:00Z</published><updated>2006-08-13T21:19:00Z</updated><content type="html">Grab the bits from here . For more details go to Writer Zone . Posted using Windows Live Writer (Beta)...(&lt;a href="http://blogs.msdn.com/francip/archive/2006/08/13/697853.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=697853" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author><category term="Blogging" scheme="http://blogs.msdn.com/francip/archive/tags/Blogging/default.aspx" /></entry><entry><title>Goodbye, Indigo! Hello, Max!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2006/01/04/509343.aspx" /><id>http://blogs.msdn.com/francip/archive/2006/01/04/509343.aspx</id><published>2006-01-04T23:24:00Z</published><updated>2006-01-04T23:24:00Z</updated><content type="html">&lt;P&gt;The three years I worked on WCF were a fun ride, but it's time for me to move on to other challenges. Starting tomorrow I am leaving the Indigo team and moving on to the &lt;A href="http://www.microsoft.com/max"&gt;Max&lt;/A&gt; team as a dev.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=509343" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author></entry><entry><title>Endpoints configuration</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2005/03/18/398931.aspx" /><id>http://blogs.msdn.com/francip/archive/2005/03/18/398931.aspx</id><published>2005-03-19T02:20:00Z</published><updated>2005-03-19T02:20:00Z</updated><content type="html">&lt;p&gt;When you write self-hosted &lt;a title="Official Indigo website" href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; application, you need to define your endpoints yourself. You can do this through your code; however, every time you decide to change your binding or add new endpoint, you'll have to recompile your application. Or you can do it through your config file.&lt;/p&gt; &lt;p&gt;Here's a sample self-hosted &lt;a title="Official Indigo website" href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; application. To keep the post shorter, I skipped over the service contract and the service implementation.&lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;ServiceHost&amp;lt;TestService&amp;gt; testService = null;&lt;br /&gt;testService = new ServiceHost&amp;lt;TestService&amp;gt;();&lt;br /&gt;testService.BaseAddresses.Add(new Uri("&lt;/font&gt;&lt;a href="http://localhost/TestService"&gt;&lt;font face="Courier New" size="2"&gt;http://localhost/TestService&lt;/font&gt;&lt;/a&gt;&lt;font face="Courier New" size="2"&gt;"));&lt;br /&gt;testService.BaseAddresses.Add(new Uri("net.tcp://localhost/TestService"));&lt;br /&gt;testService.Open();&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Note that I add two base addresses for my service host. This is not necessary to get your endpoints to work, so forget about these for now. Here's how to define your endpoint in the config file:&lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;system.serviceModel&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;services&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;service serviceType="TestService"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;endpoint address="http://localhost/Test/Service" bindingSectionName="basicProfileBinding" contractType="ITestService" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/service&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/services&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/system.serviceModel&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;This will add one endpoint to your service listening at &lt;a href="http://localhost/Test/Service"&gt;http://localhost/Test/Service&lt;/a&gt; using the BP 1.0 binding. If you want to add different bindings, you can add more endpoints:&lt;/p&gt; &lt;blockquote dir="ltr" style="MARGIN-RIGHT: 0px"&gt; &lt;p&gt;&lt;font face="Courier New" size="2"&gt;&amp;lt;endpoint address="WSProfile" bindingSectionName="wsProfileBinding" contractType="ITestService" /&amp;gt;&lt;br /&gt;&amp;lt;endpoint address="TCPTransport" bindingSectionName="netProfileTcpBinding" contractType="ITestService" /&amp;gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now your service will listen on multiple endpoints with different bindings for each of them.&lt;/p&gt; &lt;p&gt;Notice that for the last two endpoints, I didn't specify full address. Instead,&amp;nbsp;I specified relative address. &lt;a title="Official Indigo website" href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; will match the transport defined by the endpoint binding to the base addresses I added in the code that use the same protocol scheme. Thus, the WSProfile endpoint will listen at &lt;a href="http://locahost/TestService/WSProfile"&gt;http://locahost/TestService/WSProfile&lt;/a&gt; address and the TCPTransport endpoint will listen at net.tcp://localhost/TestService/TCPTransport address.&lt;/p&gt; &lt;p&gt;That's enough for this post. Go ahead and experiment with your endpoint config. And in the next post I'll show you how to configure your service behavior through config.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=398931" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author></entry><entry><title>Indigo CTP is out there!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/francip/archive/2005/03/16/397186.aspx" /><id>http://blogs.msdn.com/francip/archive/2005/03/16/397186.aspx</id><published>2005-03-17T00:37:00Z</published><updated>2005-03-17T00:37:00Z</updated><content type="html">&lt;p&gt;&lt;a title="Official Indigo website" href="http://msdn.microsoft.com/Longhorn/understanding/pillars/Indigo/default.aspx" target="_blank"&gt;Indigo&lt;/a&gt; CTP is out there! Well, at least for the MSDN subscribers. Go grab the bits from &lt;a href="http://msdn.microsoft.com/subscriptions/default.aspx"&gt;http://msdn.microsoft.com/subscriptions/default.aspx&lt;/a&gt;. If you also want documentation and samples, you'll need the WinFX SDK - &lt;a href="http://winfx.msdn.microsoft.com/"&gt;http://winfx.msdn.microsoft.com/&lt;/a&gt;&amp;nbsp;as well.&lt;/p&gt; &lt;p&gt;Go play with your new toys and don't forget to tell us what you do like, what you don't like and what plain sucks.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=397186" width="1" height="1"&gt;</content><author><name>FranciP</name><uri>http://blogs.msdn.com/members/FranciP.aspx</uri></author></entry></feed>