<?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">Software Architecture and more...</title><subtitle type="html" /><id>http://blogs.msdn.com/memilavi/atom.xml</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/default.aspx" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/memilavi/atom.xml" /><generator uri="http://communityserver.org" version="2.1.61025.2">Community Server</generator><updated>2007-09-03T21:19:00Z</updated><entry><title>The lazier the better</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2008/05/19/the-lazier-the-better.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2008/05/19/the-lazier-the-better.aspx</id><published>2008-05-19T15:06:00Z</published><updated>2008-05-19T15:06:00Z</updated><content type="html">&lt;P&gt;A couple of days ago I gave a presentation to one of my customers, in which I stated that "A good programmer is a lazy programmer."&lt;/P&gt;
&lt;P&gt;This led to some heated discussion afterwards, in which I explained what I meant. I want to summarize this:&lt;/P&gt;
&lt;P&gt;I would prefer to work with programmers that when facing a problem will try to think of the solution that will make their work the shortest the possible. If there is a 3rd part product that solves it - they will use it. If there is a solution which involves writing 100 lines of code instead of 1000 - they'll go for it. When tackled with a routine task - they will try to automate it because they will get bored by it quickly.&lt;/P&gt;
&lt;P&gt;I want programmer that understand that if they'll finish their task in half the time - they can go to the sea, or home, or basketball, or whatever they want. I don't want them in the office at 8pm. I want them out by 5pm, after their work is done.&lt;/P&gt;
&lt;P&gt;Will super-geeks accomplish that? I suppose they can. Will they want to accomplish that? I'm not sure. But&amp;nbsp;lazy programmers will do their best to be out as early as possible, and so will do their work as efficiently as possible. &lt;/P&gt;
&lt;P&gt;And that's the reason I believe that a good programmer is a lazy programmer.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8518963" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>Wanna meet me?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2008/03/21/wanna-meet-me.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2008/03/21/wanna-meet-me.aspx</id><published>2008-03-21T17:39:32Z</published><updated>2008-03-21T17:39:32Z</updated><content type="html">&lt;p&gt;Then come to &lt;a title="http://www.microsoft.com/israel/teched2008/index.aspx" href="http://www.microsoft.com/israel/teched2008/index.aspx"&gt;TechEd Israel&lt;/a&gt;! I'm going to be there, and I'll be glad to meet you and discuss whatever interests you in software architecture, technologic trends and more.&lt;/p&gt; &lt;p&gt;Use the &lt;a href="http://www.face2facemeeting.com/teched/"&gt;meeting application&lt;/a&gt; or drop me a mail (&lt;a href="mailto:memil@microsoft.com"&gt;memil@microsoft.com&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;See you there!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8329325" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>DataReader vs DataSet - The real question</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2008/02/18/datareader-vs-dataset-the-real-question.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2008/02/18/datareader-vs-dataset-the-real-question.aspx</id><published>2008-02-18T10:52:04Z</published><updated>2008-02-18T10:52:04Z</updated><content type="html">&lt;p&gt;Once in a while I stumble across a post that tries to decide between DataReader and DataSet. The last one I saw was &lt;a href="http://weblogs.asp.net/joelevi/archive/2008/02/12/asp-net-datareader-vs-dataset.aspx"&gt;this&lt;/a&gt;, and it even came with the regular performance comparison graph.&lt;/p&gt; &lt;p&gt;I think it's time for someone to stand up and shout: "Stop these comparisons and start comparing apples to apples!". There is really no point comparing these two objects, since they are used for completely different purposes.&lt;/p&gt; &lt;p&gt;The DataReader is great for reading data from the database. It's doing it fast and efficiently. Problem is, it comes with an open connection, which means - you can't carry it with you to the UI layer of your app. You know what - you better won't take it to your BL layer as well.&lt;/p&gt; &lt;p&gt;The DataSet is great for carrying data around. It is disconnected, serializable, generic, can be queried, and has no connection to the database whatsoever. &lt;/p&gt; &lt;p&gt;Do you know how data is inserted into the DataSet when using DataAdapter? That's right - using DataReader!&lt;/p&gt; &lt;p&gt;So in fact, DataReader and DataSet are not competitors - they are complementary! You grab the data using DataReader and put it in a DataSet!&lt;/p&gt; &lt;p&gt;So what the real question is? When asking about DataReader vs DataSet the real question usually is this: &lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Can I write a data-carrying object which is more efficient that DataSet? Can I improve its serialization, performance, size or anything else?&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now this is a real question, with many answers. This is the place where ORM tools get into the picture and where Entity Framework start to shine, but that's a really different story.&lt;/p&gt; &lt;p&gt;So please - start comparing apples to apples.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7769374" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>So why do I need a software architect?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2008/02/06/so-why-do-i-need-a-software-architect.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2008/02/06/so-why-do-i-need-a-software-architect.aspx</id><published>2008-02-07T00:14:43Z</published><updated>2008-02-07T00:14:43Z</updated><content type="html">&lt;p&gt;I was asked the question above by a few of my customers.&lt;/p&gt; &lt;p&gt;Usually the question goes like this: "So why do I need a software architect? I have a .NET guru with quintillion years experience, who knows the internals of every class library you can imagine."&lt;/p&gt; &lt;p&gt;I won't lay the long answer here, but the short one is very simple:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;".NET guru knows what &lt;em&gt;&lt;strong&gt;can&lt;/strong&gt;&lt;/em&gt; be done in .NET. Software architect knows what &lt;strong&gt;&lt;em&gt;should&lt;/em&gt;&lt;/strong&gt; be done in .NET".&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;What do you think of it?&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7498469" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>XPerience Vista</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2008/01/14/xperience-vista.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2008/01/14/xperience-vista.aspx</id><published>2008-01-14T13:03:13Z</published><updated>2008-01-14T13:03:13Z</updated><content type="html">&lt;p&gt;One of my colleagues (not a Microsoft employee) told me yesterday he had downgraded from Vista to XP. I asked him why, and he told me that, although Vista is a really innovative OS features-wise, he had major performance problems, his hard drive was spinning endlessly, startup took about 15 minutes and so on.&lt;/p&gt; &lt;p&gt;Actually, I must confess I had the same experience with Vista when I just got my new machine. I tried everything, including some angry internal mails.to no avail.&lt;/p&gt; &lt;p&gt;But then, while doing some routine maintenance, one of our OTG guys told me I had a major problem with my hard drive. It's not that the HD had a defect. It was simply not built for the high speeds Vista required. He told me also that this HD is no longer sold together with the laptop I'm using, and there is a new one.&lt;/p&gt; &lt;p&gt;The day after my HD was replaced with a new, shiny one and voila - all the problems have gone! As simple as that. My HD is no longer revving itself to death, applications start instantly, startup time had degraded from 10 minutes to less than 2 minutes, and so on. Actually, I showed these performance to some XP fanatics I know, and they were really overwhelmed.&lt;/p&gt; &lt;p&gt;So, before you consider downgrading, take a look at the HD. Perhaps all your problems are lying there.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=7106180" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>Sync Services + N-Tier + Oracle + Conflict Detection</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/12/24/sync-services-n-tier-oracle-conflict-detection.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/12/24/sync-services-n-tier-oracle-conflict-detection.aspx</id><published>2007-12-25T01:55:08Z</published><updated>2007-12-25T01:55:08Z</updated><content type="html">&lt;p&gt;I've been following the &lt;a href="http://msdn2.microsoft.com/en-us/sync/default.aspx"&gt;Synchronization Services&lt;/a&gt; for a few months now, and I really liked what I saw. &lt;/p&gt; &lt;p&gt;One of the best places to get a head start in this technology is Rafik Robeal's site, &lt;a href="http://www.syncguru.com/"&gt;SyncGuru&lt;/a&gt;. This site contains a lot of Sync Services demos, and provides a really good explanations and How-To's&amp;nbsp; for using the Sync Services advanced capabilities, such as &lt;a href="http://www.syncguru.com/projects/SyncServicesDemoWebService.aspx"&gt;N-Tier architecture&lt;/a&gt;, &lt;a href="http://www.syncguru.com/projects/SyncServicesDemoConflictHandling.aspx"&gt;Conflicts Detection&lt;/a&gt;, and &lt;a href="http://www.syncguru.com/projects/SyncServicesDemoOracle.aspx"&gt;using Oracle as a backend database.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;A few days ago I was invited by Oracle in Israel to present in an event called &lt;a href="http://oracleweek.com/"&gt;OracleWeek&lt;/a&gt; (Note: Hebrew site), and I wanted to demonstrate the most advanced capabilities of Sync Services. I wanted to be able to demonstrate:&lt;/p&gt; &lt;p&gt;- Oracle as a backend database (naturally...)&lt;/p&gt; &lt;p&gt;- Using N-Tier architecture (because most of the modern apps are built this way)&lt;/p&gt; &lt;p&gt;- Conflicts detection (because, after all, this is what really matters)&lt;/p&gt; &lt;p&gt;But I wanted all this in a single application.&lt;/p&gt; &lt;p&gt;So, after much work and some obstacles, I created the demo and presented it in the event. The feedback was quite positive,so I decided to upload the demo here, so everyone can see how this can be done.&lt;/p&gt; &lt;p&gt;So, here I am, proudly presenting the SNOC (take a look at the title, you'll understand...). The attached ZIP file contains the full SNOC demo, which demonstrates all the features mentioned above.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Demo Description&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The demo simulates a typical scenario of a central database (Oracle Express) and two client applications. The communication between the client and the server is done via WCF using basic SOAP/HTTP protocol.&lt;/p&gt; &lt;p&gt;The demo allows the user to insert or update records (no support for deletes, sorry. Lack of time...), save them locally (into the SQL CE), and synchronize them with the server database. When a conflict is detected (the demo uses conflict detection on the client, not the server), an appropriate message is displayed, and the user can choose to overwrite the local values or abort the sync process.&lt;/p&gt; &lt;p&gt;This demo does by no means cover all the Sync Services goodies. Issues like deletes, transaction management, batch management, statistics, progress indicator and more are not demonstrated, but I believe it can still help to get a good idea of how this should work.&lt;/p&gt; &lt;p&gt;In addition, the code is far from perfect. It is not optimized, contains no minimal error checking and can definitely be built better. Its only purpose is to demonstrate the Sync Services features, and not coding best practices.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Software Prerequisites&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Visual Studio 2008 RTM (Actually, this may work also in VS2005 with &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=7849B34F-67AB-481F-A5A5-4990597B0297&amp;amp;displaylang=en"&gt;SQL CE and Sync Services installed&lt;/a&gt;, but I didn't try)&lt;/p&gt; &lt;p&gt;Oracle Express 10g (can be downloaded &lt;a href="http://www.oracle.com/technology/software/products/database/xe/index.html"&gt;here&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Folders Description&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;There are 4 folders in the ZIP file:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;OracleSyncDemo2&lt;/strong&gt; - Contains the master solution file and the source code of the client apps.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;WebServiceFolder - &lt;/strong&gt;Contains the project of the server side. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Demo2Clients&lt;/strong&gt; - Contains two folders, each one containing a single exe and a config file. These exe's are exactly the same, and they simulate the two clients.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;ClientDBBiDi - &lt;/strong&gt;Contains the two SQL CE files, file for every client , pre-populated with the "customers" table. &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;&lt;/u&gt;&lt;/strong&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Installation Instructions&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1. Copy all the contents of the ZIP file to a folder in your hard drive.&lt;/p&gt; &lt;p&gt;2. Create a new user in Oracle. Call it whatever you want (I called mine "offlinesync").&lt;/p&gt; &lt;p&gt;3. In the Oracle admin site, log in as the new user.&lt;/p&gt; &lt;p&gt;3. Load the file &lt;strong&gt;offlinedemo.sql&lt;/strong&gt;, found under "OracleSyncDemo2\OracleSyncDemo2\Setup", in the Oracle admin site. This file creates a "customers" table, and add some triggers to it in order to track the changes occurred to it.&lt;/p&gt; &lt;p&gt;4. In the &lt;strong&gt;web.config&lt;/strong&gt; file, found under "WebServiceFolder\SyncWS", modify the "OracleExpress" connection string to point to your oracle database and user.&lt;/p&gt; &lt;p&gt;5. Open both the &lt;strong&gt;config&lt;/strong&gt; files in the &lt;strong&gt;Demo2Clients&lt;/strong&gt; folder. Note that:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;- They have a different "ClientID" value (under appSettings). This is to differentiate them visually. This value is displayed in the window title.&lt;/p&gt; &lt;p&gt;- There is a single connection string which points to the local database location. Change the location to the folder in which you copied the two client databases.&lt;/p&gt; &lt;p&gt;- There is a service reference which points to http://localhost:1256/Service1.asmx. This shouldn't be a problem as the server project is set to use a fixed port.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;OK, time to take off...&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;u&gt;Usage Instructions&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1. Open the &lt;strong&gt;OracleSyncDemo2.sln&lt;/strong&gt; file found under "OracleSyncDemo2" folder. This should open Visual Studio 2008.&lt;/p&gt; &lt;p&gt;2. Note there are two projects in the solution. Make sure they are both successfully loaded.&lt;/p&gt; &lt;p&gt;3. Run the solution. Note that the solution is preconfigured to execute only the server side project. If everything is OK, you should see an IE window opens, pointing to the web service in the server project.&lt;/p&gt; &lt;p&gt;4. Execute both the executables in the &lt;strong&gt;Demo2Clients&lt;/strong&gt; folder. If everything is all right, you should see something like that:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/1.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="205" alt="Two empty clients" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/1_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;5. Enter some data in the first row of "Client 1", move the cursor to the second row and click "Save Client Data". You should see the following:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/2.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="Client 1 saved locally" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/2_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Right now we inserted a new row to the local SQL CE of Client 1. You can create a new connection in Server Explorer pointing to this file to see it changes in live.&lt;/p&gt; &lt;p&gt;6. Click "Synchronize" in Client 1. The first time may take a few seconds. you should see a message box stating that 1 record was uploaded successfully. Note: You may see that the total changes updated is more than 1. I'm not sure why this happens and I need to dig into it more. It will happen on the first synchronization only. &lt;/p&gt; &lt;p&gt;This action uploaded the new row to the backend database. Again, it might be a good idea to create a new connection in Server Explorer which will point to the Oracle to make sure everything is fine.&lt;/p&gt; &lt;p&gt;7. Click "Synchronize" in Client 2. Again, this might take a few seconods, afterwards you should see the record you inserted in Client 1 appears in Client 2. &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/3.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="208" alt="After first synchronization" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/3_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;8. Let's try a more complex sync. Add a new row in Client 2 and, in addition,&amp;nbsp; modify the first row in Client 2. Click "Save Client Data", and you should see the following message:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/4.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="205" alt="Two changes saved" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/4_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;9. Now, click "Synchronize" in Client 2 (you should see a message saying that 2 rows were uploaded) and in Client 1 (2 rows were downloaded). The windows should look like that:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/5.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="205" alt="Sync two changes" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/5_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;10. OK, let's conflict! Change the customer name in row 2 in Client 1, and click "Save Client Data". Do the same, &lt;strong&gt;with different customer name&lt;/strong&gt;, in Client 2. You should see this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/6.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="205" alt="Change two clients" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/6_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;11. Now, click "Synchronize" on Client 1. Remember: After synchronizing, the row in the Oracle is different than the one in Client 2. &lt;/p&gt; &lt;p&gt;12. Change the Sync Direction in Client 2 to "DownloadOnly". This is required since the conflict detection in this demo occurs in the client, and not the server.&lt;/p&gt; &lt;p&gt;13. Click "Synchronize" in Client 2. You should see the following message:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/7.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="206" alt="Conflict Message" src="http://blogs.msdn.com/blogfiles/memilavi/WindowsLiveWriter/SyncServicesNTierOracleConflictDetection_CAE/7_thumb.jpg" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can choose whether to go on with the synchronization and overwrite the local values or abort it.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;OK, that's all folks. I hope this demo did a good job in demonstrating how to use Sync Services with Oracle, using N-Tier architecture and conflicts detection. I didn't talk about the code at all because:&lt;/p&gt; &lt;p&gt;1. This post is already too long&lt;/p&gt; &lt;p&gt;2. The code is basically a merge of the samples posted in &lt;a href="http://www.syncguru.com/"&gt;SyncGuru&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;If you do want me to explain the code in later posts, please leave a comment.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;If you find all this interesting, please &lt;a href="http://cid-b3a9ee1c4e43657e.skydrive.live.com/self.aspx/Public/SyncDemo.zip"&gt;download&lt;/a&gt; the demo and start synchronizing!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6855894" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>ASP.NET and Scott's</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/12/23/asp-net-and-scott-s.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/12/23/asp-net-and-scott-s.aspx</id><published>2007-12-23T10:20:00Z</published><updated>2007-12-23T10:20:00Z</updated><content type="html">&lt;p&gt;Found &lt;a href="http://geekswithblogs.net/AzamSharp/archive/2007/12/22/117937.aspx"&gt;this one&lt;/a&gt; today:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Who is the most inspiring person in the ASP.NET community?  &lt;p&gt;1) Scott Guthrie &lt;p&gt;2) Phil Hack &lt;p&gt;3) Scott Hanselman &lt;p&gt;4) Scott Mitchell&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Now this made me think: Did you notice that three of the four candidates are "Scott"s? Is being "Scott"ish a pre-requisite for influential position in the ASP.NET world?&lt;/p&gt; &lt;p&gt;And what about WPF? What name will ensure you getting fame and fortune in the WPF world?&lt;/p&gt; &lt;p&gt;Well, first day at work, a lot of time to think of really important issues...&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6842720" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>We're Hiring!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/12/16/we-re-hiring.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/12/16/we-re-hiring.aspx</id><published>2007-12-16T10:30:00Z</published><updated>2007-12-16T10:30:00Z</updated><content type="html">&lt;P&gt;Do you:&lt;/P&gt;
&lt;P&gt;1. Live in Israel?&lt;/P&gt;
&lt;P&gt;2. Want to work in Microsoft?&lt;/P&gt;
&lt;P&gt;3. Have a long and satisfying experience in developing and architecting&amp;nbsp;enterprise applications using Microsoft technologies?&lt;/P&gt;
&lt;P&gt;4. Consider yourself a nice person?&lt;/P&gt;
&lt;P&gt;We are looking for you!&lt;/P&gt;
&lt;P&gt;The MCS group in Microsoft Israel is currently looking for new architects \ consultants. &lt;/P&gt;
&lt;P&gt;Want to become one of us? Leave a comment or send me email directly: &lt;A href="mailto:memil@microsoft.com" mce_href="mailto:memil@microosft.com"&gt;memil@microsoft.com&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6781812" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>Will the real Multi Platform Technology please stand up?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/10/31/will-the-real-multi-platform-technology-please-stand-up.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/10/31/will-the-real-multi-platform-technology-please-stand-up.aspx</id><published>2007-10-31T18:02:00Z</published><updated>2007-10-31T18:02:00Z</updated><content type="html">&lt;P&gt;An interesting thought occured to me today, after reading some angry posts (&lt;A class="" title="Angry Post" href="http://www.theserverside.com/news/thread.tss?thread_id=47375" target=_blank mce_href="http://www.theserverside.com/news/thread.tss?thread_id=47375"&gt;here&lt;/A&gt;, &lt;A class="" title="Angry Post" href="http://www.javalobby.org/java/forums/t102936.html" target=_blank mce_href="http://www.javalobby.org/java/forums/t102936.html"&gt;here&lt;/A&gt; and &lt;A class="" title="Angry Post" href="http://forum.java.sun.com/thread.jspa?threadID=5229615&amp;amp;tstart=0" target=_blank mce_href="http://forum.java.sun.com/thread.jspa?threadID=5229615&amp;amp;tstart=0"&gt;here&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;Looks like the multi-platform story starts to turn around. Let's see:&lt;/P&gt;
&lt;P&gt;Java 6 can run on:&lt;/P&gt;
&lt;P&gt;Windows&lt;/P&gt;
&lt;P&gt;Linux / Unix&lt;/P&gt;
&lt;P&gt;&amp;nbsp;.NET 3.0 can run on:&lt;/P&gt;
&lt;P&gt;Windows (heh...)&lt;/P&gt;
&lt;P&gt;Linux / Unix (with &lt;A class="" title=Mono href="http://www.mono-project.com/Main_Page" target=_blank mce_href="http://www.mono-project.com/Main_Page"&gt;Mono&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Mac OS/X (with Mono)&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;But wait - it's getting even better...&lt;/P&gt;
&lt;P&gt;Don't want to use Mono? Use &lt;A class="" title=Silverlight href="http://silverlight.net/" target=_blank mce_href="http://silverlight.net/"&gt;Silverlight&lt;/A&gt;! As you probably know, SL 1.1 will be released next year with built-in CLR.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Well, That's what I call multi-platform...&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5799715" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author><category term=".NET 3.0" scheme="http://blogs.msdn.com/memilavi/archive/tags/.NET+3.0/default.aspx" /></entry><entry><title>Can a SOA app use TCP transport?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/09/20/can-a-soa-app-use-tcp-transport.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/09/20/can-a-soa-app-use-tcp-transport.aspx</id><published>2007-09-20T11:26:00Z</published><updated>2007-09-20T11:26:00Z</updated><content type="html">&lt;P&gt;Yesterday I was reading some posts regarding WCF, and found the &lt;A class="" title="WCF Communication" href="http://geekswithblogs.net/claraoscura/archive/2007/05/28/112799.aspx" mce_href="http://geekswithblogs.net/claraoscura/archive/2007/05/28/112799.aspx"&gt;following&lt;/A&gt;:&lt;/P&gt;
&lt;P&gt;"In my opinion, &lt;STRONG&gt;netTcpBinding&lt;/STRONG&gt; is a very good option for us given its good performance and security options. On the other hand, it does not respect the tenets of SOA"&lt;/P&gt;
&lt;P&gt;This made me think. Why using a TCP transport is considered a violation of the SOA tenets? Let's take a look again at those tenets (can be found &lt;A class="" title="SOA Tenets" href="http://msdn.microsoft.com/msdnmag/issues/04/01/Indigo/default.aspx" mce_href="http://msdn.microsoft.com/msdnmag/issues/04/01/Indigo/default.aspx"&gt;here&lt;/A&gt;) and see what happen if we'll take an HTTP-based app and convert it to a&amp;nbsp;TCP one:&lt;/P&gt;
&lt;P&gt;1. &lt;STRONG&gt;Boundaris are explicit&lt;/STRONG&gt;: When the service's boundaries are well defined, changing the protocol won't make any difference. We'll still need to send messages when we did it before, and where there were no messages at all - there won't be with TCP either.&lt;/P&gt;
&lt;P&gt;2. &lt;STRONG&gt;Services are autonomous: &lt;/STRONG&gt;If the service can stand-alone using HTTP, it will still have this capability using TCP.&lt;/P&gt;
&lt;P&gt;3. &lt;STRONG&gt;Services share schema and contract, not class&lt;/STRONG&gt;: Now, this is where we might have a problem. When using HTTP, we obviuosly share schema - simply put a monitor on the channel and the XML message will shine thrught it, all readable and clear. Now that what I call a schema! With TCP this is obviously not the case. It&amp;nbsp;is using&amp;nbsp;a binary format which is unreadable and can't be visualised (not easily, anyway). So, does this violates the 3rd tenet? Not necessarily. SOA should allow two (or more)&lt;U&gt;applications&lt;/U&gt; to talk to each other, not application and human. The fact that we cannot understand the message does not mean it's invalid. It is just encoded in a different way, a way that, by chance, our inferior human brain can't fathom. But it is still schema nonetheless.&lt;/P&gt;
&lt;P&gt;4. &lt;STRONG&gt;Service compatibility is determined based on policy&lt;/STRONG&gt;: Here, also, the fact that we are using TCP instaed of HTTP has no impact. &lt;/P&gt;
&lt;P&gt;We have grown to the perception that a valid SOA system must use SOAP over HTTP. It is more "Open", more "Stanndard", more "Understandable". Actually, all these may be true, but that's not make them a mandatory for a SOA application. There are many inherent advantages to using TCP instaed of HTTP, and using it will not make our app any less SOA-ish,&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5009201" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>Silverlight here we come!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/09/06/silverlight-here-we-come.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/09/06/silverlight-here-we-come.aspx</id><published>2007-09-06T11:41:00Z</published><updated>2007-09-06T11:41:00Z</updated><content type="html">&lt;P&gt;Wow, I didn't see &lt;A class="" title="Silverlight on Linux" href="http://weblogs.asp.net/scottgu/archive/2007/09/04/silverlight-1-0-released-and-silverlight-for-linux-announced.aspx" mce_href="http://weblogs.asp.net/scottgu/archive/2007/09/04/silverlight-1-0-released-and-silverlight-for-linux-announced.aspx"&gt;this&lt;/A&gt; coming...&lt;/P&gt;
&lt;P&gt;Now, that silverlight will support Linux, I have a new citizen in my "UI Alternatives" talk. Until now, Silverlight was usually not an option for web-based applictions. Most geovernmental organizations demand a real cross platform solution, and that's something&amp;nbsp;Silverlight pre-v1.0 just couldn't deliver. Of course, the Mac support is really nice, but Win+Mac is simply not eough.&lt;/P&gt;
&lt;P&gt;But now it changes, and for good. I think the addition of Linux support is no less than revolution in the way we see web-based application. With .Net support, Linux support and some more controls, I believe that in the long run Silverlight will become the first choice for web applications. I mean, who would prefer to see plain-old-boring HTML when he can see &lt;A class="" title="Halo 3" href="http://halo3.msn.com/videosHD.aspx" mce_href="http://halo3.msn.com/videosHD.aspx"&gt;this&lt;/A&gt; instead?&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4782421" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author></entry><entry><title>Entity Framework - another OR/M?</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/09/04/entity-framework-another-or-m.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/09/04/entity-framework-another-or-m.aspx</id><published>2007-09-05T00:23:00Z</published><updated>2007-09-05T00:23:00Z</updated><content type="html">&lt;P&gt;There is some controversy going on regarding the need for &lt;A class="" title="Download Entity Framework" href="http://www.microsoft.com/downloads/details.aspx?familyid=f1adc5d1-a42e-40a6-a68c-a42ee11186f7&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?familyid=f1adc5d1-a42e-40a6-a68c-a42ee11186f7&amp;amp;displaylang=en"&gt;Entity Framework&lt;/A&gt; when &lt;A class="" title="LINQ to SQL" href="http://msdn2.microsoft.com/en-us/library/bb425822.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/bb425822.aspx"&gt;LINQ to SQL&lt;/A&gt; provides much of its functionality.&lt;/P&gt;
&lt;P&gt;Now, I'm far from being a fanboy of OR/M products, and usually I tend to stick to the good-ol' dataset (and that's another story), but actually I do see a strong case for EF over the other tools. LINQ to SQL is a real OR/M product, just like &lt;A class="" title=NHibernate href="http://www.hibernate.org/343.html" mce_href="http://www.hibernate.org/343.html"&gt;NHibernate&lt;/A&gt; et al., while EF is, simply put, not.&lt;/P&gt;
&lt;P&gt;An OR/M tool actually tells you: "Listen, bro. You just tell me what your database looks like and who is its vendor, I'll take care of the rest. Oh, and if you want to change the vendor - don't worry, you won't need to change a single line of (compiled) code&amp;nbsp; for this.". Some tools deliver this promise better, some worse, &amp;nbsp;but that is the main idea.&lt;/P&gt;
&lt;P&gt;And that is exactly NOT the main idea of the EF. What it tells you is something else: "Listen, bro (this part is the same). I really don't mind what your database looks like. I want to know what you want your object model to look like. You take care of this first, and then we will handle the database." The database in EF is almost an afterthought, Something that should be taken care of because our object model should be saved somewhere, but its structure does not affect our model. I believe this is the right approach even though the tools may mislead you - they allow you to generate the entities right from the database, and not vice versa, but again - we're only&amp;nbsp;on Beta 2.&lt;/P&gt;
&lt;P&gt;So in OR/M the database starts it all, while in EF its role begins after the actual design ends. Of course, this does not mean that the DBAs should start revising their CV. There is&amp;nbsp;a lot of work to be done in the database, only this work belongs now to what the database really should do - handle the data fast, securely and reliably, and not dictating how our objects look like.&lt;/P&gt;
&lt;P&gt;Here is an actual example that will help clarify my point of view: I'm currently involved in a large project which utilizes Oracle 10g and SQL Server 2005. The application will work in the following 4&amp;nbsp;years with the Oracle, and then switch to the SQL (presumably 2008 by then). The ERD of these databases has some differences. Using EF, we can design our application with database-agnostic approach, define the mapping according to the Oracle ERD, and when time comes switch only the mapping files (actually, there is no mapping-dedicated file, it all resides in the same XML, but you've got the idea...) without modifying the application. Convenient, he?&lt;/P&gt;
&lt;P&gt;Well, yes it is, but there are two caveats to this approach:&lt;/P&gt;
&lt;P&gt;1. There is not yet an Oracle provider for EF. There will be, they even said that &lt;A class="" title="Oracle Provider for EF" href="http://blogs.msdn.com/adonet/archive/2007/06/15/database-vendors-discuss-the-entity-framework-and-linq-at-teched.aspx" mce_href="http://blogs.msdn.com/adonet/archive/2007/06/15/database-vendors-discuss-the-entity-framework-and-linq-at-teched.aspx"&gt;here&lt;/A&gt;, but I don't know when.&lt;/P&gt;
&lt;P&gt;2. There is no go-live license for EF.&lt;/P&gt;
&lt;P&gt;Since both those problems are temporary (I hope, at least...), I think it will be really interesting to test this in the field.&lt;/P&gt;
&lt;P&gt;BTW - The opinions expressed here are solely mine. I'm not pretend to represent the official Microsoft position on this subject.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4750127" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author><category term="Entity Framework" scheme="http://blogs.msdn.com/memilavi/archive/tags/Entity+Framework/default.aspx" /></entry><entry><title>One.... One Two.... One Two Three...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/memilavi/archive/2007/09/03/one-one-two-one-two-three.aspx" /><id>http://blogs.msdn.com/memilavi/archive/2007/09/03/one-one-two-one-two-three.aspx</id><published>2007-09-03T23:19:00Z</published><updated>2007-09-03T23:19:00Z</updated><content type="html">&lt;P&gt;Well, hello everybody.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;My name is Memi Lavi, and I'm an architect in the MCS group in Microsoft Israel.&lt;/P&gt;
&lt;P&gt;I decided to open this blog so I can share some thoughts about software architectue - what is it exactly? who is an architect? what he should know? and so on.&lt;/P&gt;
&lt;P&gt;In addition, I would like to post a series of posts about what I call "Architecture's Usability". These are some rules of thumb for creating a usable architecture which I try to implement whenever I begin a new project. &lt;/P&gt;
&lt;P&gt;What I'll definitely will try to do is to have fun. The moment I won't enjoy writing this blog will be the last moment of this blog.&lt;/P&gt;
&lt;P&gt;I'll be more than happy to hear your opinions about what I'm going to say. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4728410" width="1" height="1"&gt;</content><author><name>MemiLavi</name><uri>http://blogs.msdn.com/members/MemiLavi.aspx</uri></author><category term="Architecture's Usability" scheme="http://blogs.msdn.com/memilavi/archive/tags/Architecture_2700_s+Usability/default.aspx" /></entry></feed>