tag:blogger.com,1999:blog-343006322009-07-09T16:37:32.651+06:00Xtensive – News BlogNews, ideas and plans.Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.comBlogger78125tag:blogger.com,1999:blog-34300632.post-44467200860251680102009-07-07T14:19:00.006+06:002009-07-07T15:35:14.150+06:00Help Server 2.1 is releasedNew features:<br />- <a href="http://help.dataobjects.net/##DataObjects.Net_4-Essentials.chm/html/AllMembers_T_Xtensive_Core_Box_1.htm">Custom TOC icons</a>.<br />- Localization. Language is detected automatically, currently English and Russian are supported. If you'd like to provide its localization for your own language, please send us <span style="color: rgb(51, 51, 255);"><installationfolder>[InstallationFolder]\Web\WebResources\WebResources.xx.resx</installationfolder></span> file for it.<br />- Configuration is fully based on Web.config file now.<br /><br />Full list of changes is published in <a href="http://help.x-tensive.com/Default.aspx##HelpServer/External/Revision%20History.htm">Revision History</a>. Updated installers are already available in <a href="http://www.x-tensive.com/Downloads/?Path=">Downloads section</a>.<span style="font-style: italic;"><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-4446720086025168010?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-28405622426233705602009-07-02T21:21:00.009+06:002009-07-02T22:18:24.602+06:00ADO.NET Data Services (Astoria) sample for DO4Here it is: <a href="http://www.x-tensive.com/Downloads/Default.aspx?Path=DataObjects.Net%5CSamples">http://www.x-tensive.com/Downloads/Default.aspx?Path=DataObjects.Net\Samples</a><br /><br />What's there:<br />- Simple Customer-Order model<br />- Astoria service sharing it<br />- WindowsForms client consuming it<br />- Silverlight client consuming it.<br /><br />Silverlight client screenshots:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_niouYlmVT4c/SkzbnyVLrXI/AAAAAAAAHHM/EG0Qs_c5LQM/s1600-h/AstoriaSample_SLC1.png"><img style="cursor: pointer; width: 320px; height: 218px;" src="http://1.bp.blogspot.com/_niouYlmVT4c/SkzbnyVLrXI/AAAAAAAAHHM/EG0Qs_c5LQM/s320/AstoriaSample_SLC1.png" alt="" id="BLOGGER_PHOTO_ID_5353895533608676722" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_niouYlmVT4c/Skzb1qsYpzI/AAAAAAAAHHU/qJzMlKUjUIA/s1600-h/AstoriaSample_SLC2.png"><img style="cursor: pointer; width: 320px; height: 218px;" src="http://1.bp.blogspot.com/_niouYlmVT4c/Skzb1qsYpzI/AAAAAAAAHHU/qJzMlKUjUIA/s320/AstoriaSample_SLC2.png" alt="" id="BLOGGER_PHOTO_ID_5353895772076681010" border="0" /></a><br /><br />WindowsForms client screenshots:<br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_niouYlmVT4c/Skzb2C15N7I/AAAAAAAAHHc/QRyOv5cAHVI/s1600-h/AstoriaSample_WFC1.png"><img style="cursor: pointer; width: 320px; height: 239px;" src="http://4.bp.blogspot.com/_niouYlmVT4c/Skzb2C15N7I/AAAAAAAAHHc/QRyOv5cAHVI/s320/AstoriaSample_WFC1.png" alt="" id="BLOGGER_PHOTO_ID_5353895778559014834" border="0" /></a> <a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_niouYlmVT4c/Skzb2HDEkkI/AAAAAAAAHHk/G4yEHtmIc_s/s1600-h/AstoriaSample_WFC2.png"><img style="cursor: pointer; width: 320px; height: 239px;" src="http://3.bp.blogspot.com/_niouYlmVT4c/Skzb2HDEkkI/AAAAAAAAHHk/G4yEHtmIc_s/s320/AstoriaSample_WFC2.png" alt="" id="BLOGGER_PHOTO_ID_5353895779688026690" border="0" /></a><br /><br /><span style="font-weight: bold;">Installation & running:</span><br /><br /><span style="color: rgb(0, 102, 0); font-weight: bold;">SilverlightClient.Web:</span><br /><br />0. Install Silverlight Tools and Silverlight 2.0.<br /><br />1. Create web site with IIS Manager, home directory must be SilverlightClient.Web<br />2. Add Default.aspx to default pages (Web site properties -> Documents page)<br />3. Set ASP.NET Version to 2.x.x (Web site properties -> ASP.NET page -> ASP.NET version)<br />4. Add MIME type with extension: .xap and MIME type: application/x-Silverlight-app<br /> (Web site properties -> HTTP Header page -> MIME Types button)<br />5. Enable anonymous access, disable "Integrated Windows authentication"<br /> (Web site properties -> Directory Security page -> Authentication and access control,<br /> Edit button)<br />6. Grant NTFS read permission to Everyone group for SilverlightClient.Web folder<br />6. Restart IIS.<br />7. Open http://localhost/[YourWebSite] in browser<br /><br /><span style="font-weight: bold; color: rgb(0, 102, 0);">WinFormsClient:</span><br /><br />1. Run Server<br />2. Run WinFormsClient.<br /><br /><span style="font-style: italic;">Please ask any questions related to this sample in comments to this post.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-2840562242623370560?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-46887521643536571842009-07-02T04:33:00.006+06:002009-07-02T04:41:26.471+06:00DataObjects.Net v4.0.2 is releasedLinks:<br />- <a href="http://www.x-tensive.com/Downloads/?Path=">Download it</a><br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=1&q=Milestone%3ARelease4.0.2&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&x=priority&y=milestone&cells=tiles">View list of implemented issues</a>.<br /><br /><span style="font-weight: bold;font-size:130%;" >What's new:</span><br /><br /><span style="font-weight: bold;">1. Improved installer</span><br /><br />I hope we've fixed the last "big bugs" there. The most annoying ones are:<br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=228">228</a>: "Add\remove programs" issue on installing both DO4 and Xtensive.MSBuildTasks<br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=232">232</a>: DO 4.0.1 installer doesn't update assemblies located in PostSharp directory<br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=233">233</a>: Projects created by project template are bound to specific installation path of DO4<br /><br />Because of 228 & 232, the recommended upgrade path to v4.0.2 is:<br /><span style="color: rgb(153, 0, 0);">- Uninstall DO4. </span><span style="font-style: italic;">If the item absents in "Add\Remove programs", just remove its folder C:\Program Files\X-tensive.com (or the installation path you've chosen).</span><br /><span style="color: rgb(153, 0, 0);">- Uninstall Xtensive.MSBuildTasks</span>, if you have installed it. <span style="font-style: italic;">If the item absents in "Add\Remove programs", just remove its folders from C:\Program Files\MSBuild and C:\Program Files\X-tensive.com (or the installation path you've chosen).</span><br /><span style="color: rgb(153, 0, 0);">- Uninstall all other components previously required by DO4, including Unity, Parallel Extensions, MSBuild Community Tasks and PostSharp.</span><br /><span style="color: rgb(153, 0, 0);">- Install new DO4.</span> <span style="font-style: italic;">It will suggest to install just PoshSharp. Everything else is optional now; all Unity and Parallel Extensions assemblies are installed into GAC automatically.</span><br /><br />Other changes include the following ones:<br />- <span style="color: rgb(0, 153, 0);">Installer automatically detects & requires to uninstall old version of DO4.</span><br /><span style="color: rgb(0, 153, 0);">- All required assemblies are now installed into GAC.</span> If you're worried about this, there are .bat files allowing to get rid of them with ease.<br /><span style="color: rgb(0, 153, 0);">- There are new project templates (Console, Model, UnitTests, WebApplication, WPF).</span> But they're only for C# for now.<br /><span style="color: rgb(0, 153, 0);">- New Build.bat files build new DO </span><span style="color: rgb(0, 153, 0);">automatically </span><span style="color: rgb(0, 153, 0);">performing all "before first build" steps.</span> So it's really easy now to make its custom build.<br /><br />Useful links:<br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=1&q=Milestone%3ARelease4.0.2+Component%3AInstaller&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&x=priority&y=milestone&cells=tiles">Full list of installer-related issues</a><br />- <a href="http://wiki.dataobjects.net/index.php?title=Installation">New installation instruction</a><br />- <a href="http://wiki.dataobjects.net/index.php?title=Building_DataObjects.Net">New "Building DataObjects.Net" instruction</a><br /><br /><span style="font-weight: bold;">2. LINQ</span><br /><br />As you might remember, two weeks ago we didn't support 2 LINQ features:<br /><span style="color: rgb(0, 153, 0);">- Group joins</span><br /><span style="color: rgb(0, 153, 0);">- First\Single(OrDefault) in subqueries</span> (btw, as far as I remember, Single in subqueries isn't supported in EF at all)<br /><br />Both features are supported now. So now we're fully ready to compare our LINQ implementation with others - a set of articles about this will appear here soon.<br /><br />Useful links:<br />- <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=1&q=Milestone%3ARelease4.0.2+Component%3AStorage.Linq&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&x=priority&y=milestone&cells=tiles">LINQ-related issues</a>.<br /><br /><span style="font-weight: bold;">3. Breaking changes in attributes</span><br /><br />We've refactored our mapping attributes once more. Now there are:<br /><span style="color: rgb(0, 153, 0);">- Separate <a href="http://help.dataobjects.net/Default.aspx##DataObjects.Net_4-Essentials.chm/html/AllMembers_T_Xtensive_Storage_AssociationAttribute.htm">[Association]</a> attribute for associations</span><br /><span style="color: rgb(0, 153, 0);">- Separate <a href="http://help.dataobjects.net/Default.aspx##DataObjects.Net_4-Essentials.chm/html/AllMembers_T_Xtensive_Storage_MappingAttribute.htm">[Mapping]</a> attribute allowing to specify mapping names.</span><br /><span style="color: rgb(0, 153, 0);">- No more [Entity] attribute</span> - it was necessary just to specify mapping name, but now this is handled by a separate attribute.<br /><br />Earlier their functions were distributed over <a href="http://help.dataobjects.net/Default.aspx##DataObjects.Net_4-Essentials.chm/html/AllMembers_T_Xtensive_Storage_FieldAttribute.htm">[Field]</a> and old abstract MappingAttribute.<br /><br />We think new version is better: specific (and, actually, more rarely necessary) features require specific attributes.<br /><br /><span style="font-weight: bold;">4. Schema upgrade</span><br /><br />We've added <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=147">Change</a><a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=147">FieldType</a><a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=147">Hint</a>. So <a href="http://help.dataobjects.net/Default.aspx##DataObjects.Net_4-Essentials.chm/html/N_Xtensive_Storage_Upgrade.htm">schema upgrade hint set</a> is ideal now ;)<br /><br /><span style="font-weight: bold;">5. Documentation</span><br /><br />We're slowly updating it. As you may find, we restructured our <a href="http://wiki.dataobjects.net/index.php?title=Main_Page">wiki</a>. <a href="http://wiki.dataobjects.net/index.php?title=Manual">Manual</a> is organized in step-by-step studying fashion now. Among other new articles, there is new <a href="http://wiki.dataobjects.net/index.php?title=Schema_upgrade">Schema upgrade article</a> - check it out.<br /><br /><span style="font-weight: bold;">6. ADO.NET Data Services (Astoria) sample</span><br /><br /><span style="color: rgb(0, 102, 0);">We've implemented <a href="http://en.wikipedia.org/wiki/ADO.NET_Data_Services">ADO.NET Data Services (Astoria)</a> sample on DO4.</span> We decided to publish it separately:<br />- It isn't really polished yet<br />- It depends on Silverlight Tools, so we must decide if this additional dependency is acceptable.<br /><br />It shows an Astoria service sharing entities via <a href="http://en.wikipedia.org/wiki/RESTful">RESTful</a> API, as well as WindowsForms and Silverlight clients consuming this service, showing and allowing to change the entities it gets.<br /><br /><span style="color: rgb(0, 102, 0);">What does this mean?</span> You can share DO4 Entities using ADO.NET Data Services, query the service from the client using LINQ, update the entities on the client and send back the changes. Since Astoria client operates on Silverlight as well, you can implement Silverlight client utilizing DO4 on the server.<br /><br />Btw... We disappointed in Astoria client features. You should do lots of tasks manually there, including registering of new entities, changed associations and so on. From the point of usability it's much worse than what is offered by DO4. So in general, upcoming <a href="http://wiki.dataobjects.net/index.php?title=Synchronization">sync</a> will be much more attractive option for DO4 users. But on the other hand, Astoria allows to implement really simple RESTful integration API with almost zero coding.<br /><br />The sample will be available @ our <a href="http://www.x-tensive.com/Downloads/?Path=">downloads section</a> today.<br /><br /><span style="font-weight: bold;">7. Bugfixes</span><br /><br />We've got really good results here. <a href="http://blog.dataobjects.net/2009/07/v402-is-on-way-to-you.html">Earlier I wrote</a> there are <span style="color: rgb(0, 153, 0);">just few failing tests from about 1000 tests for Storage.</span> Imagine:<br />- <span style="color: rgb(0, 153, 0);">About 600 tests are related to our LINQ implementation, and indirectly - RSE implementation.</span><br /><span style="color: rgb(0, 153, 0);">- All the tests produce the same results - even on Memory storage.</span> This means our RSE execution & optimization engine works as expected.<br /><br /><span style="color: rgb(153, 0, 0);">So the version we have now seems really stable. Good luck trying it ;)</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-4688752164353657184?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-57969169854220682742009-06-18T11:00:00.008+06:002009-06-18T22:49:42.857+06:00June and summer discounts: join DO4 camp!<div>We're ready to start DataObjects.Net promotional campaign, and as frequently happens, it starts from pricing. Read this post till the end - we're providing <b>huge</b> discounts in June, but expect your involvement in exchange.<div><br /></div><div><div><b>Price & licensing policy changes</b></div><div><br /></div><div>This summer <a href="http://wiki.dataobjects.net/index.php?title=License">prices</a>:</div><div><span style="color: rgb(0, 102, 0);">- Personal license: </span><b><span style="color: rgb(0, 102, 0);">299</span></b><span style="color: rgb(0, 102, 0);"> USD (no changes)</span></div><div><div><span style="color: rgb(0, 102, 0);">- Internal license: </span><b><span style="color: rgb(0, 102, 0);">495</span></b><span style="color: rgb(0, 102, 0);"> USD (-100 USD)</span></div><div><div><span style="color: rgb(0, 102, 0);">- SMB license: </span><b><span style="color: rgb(0, 102, 0);">995</span></b><span style="color: rgb(0, 102, 0);"> USD (-1000 USD)</span></div><div><span style="color: rgb(0, 102, 0);">- Enterprise license: </span><b><span style="color: rgb(0, 102, 0);">please request a qoute</span></b><span style="color: rgb(0, 102, 0);">.</span></div><div><span style="color: rgb(0, 102, 0);">- Upgrade subscription: 50% of the license cost.</span> To order it, you must order the original license with <span style="color: rgb(0, 102, 0);">DOUPGRADE</span> discount coupon code. Note that it's applicable only if your exising subscription isn't expired - it expires in 1 year form the first purchase; each purchased upgrade subscription adds 1 more year.</div><div><span style="color: rgb(0, 102, 0);">- Support subscription: </span><b><span style="color: rgb(0, 102, 0);">now included into the cost of license</span></b><span style="color: rgb(0, 102, 0);">.</span></div><div><span style="color: rgb(0, 102, 0);">- Implementation assistance and general consulting: </span><b><span style="color: rgb(0, 102, 0);">320</span></b><span style="color: rgb(0, 102, 0);"> USD/day.</span></div><div><br /></div><div><span style="font-weight: bold;"><span style="font-size:large;">Discounts in June</span></span></div><div><div><br /></div><div>First of all, <span style="color: rgb(204, 0, 0);">we provide 50% discount on </span><i><span style="color: rgb(204, 0, 0);">almost </span></i><i><span style="color: rgb(204, 0, 0);">anything</span></i><span style="color: rgb(204, 0, 0);"> related to DO4,</span> including:</div><div><span style="color: rgb(204, 0, 0);">- Licenses: they cost </span><b><span style="color: rgb(204, 0, 0);">150/248/498</span></b><span style="color: rgb(204, 0, 0);"> USD in June.</span> Quote for Entrprise license is provided by request.</div><div><span style="color: rgb(204, 0, 0);">- Upgarde subscriptions: </span><b><span style="color: rgb(204, 0, 0);">90/149/299</span></b><span style="color: rgb(204, 0, 0);"> USD in June</span> (so here the discount is 40%)</div><div><span style="color: rgb(204, 0, 0);">- Implementation assistance and consulting: </span><b><span style="color: rgb(204, 0, 0);">160</span></b><span style="color: rgb(204, 0, 0);"> USD/day!</span> This price will be definitely left intact till the end of summer.</div><div><br /></div><div><span><span>Coupon code: <b><span style="color: rgb(153, 0, 0);">JDDO4</span></b> - right now it is already included into all <a href="http://wiki.dataobjects.net/index.php?title=License">order pages</a>.</span></span><span style=";font-family:Verdana;font-size:11;" ></span></div><div><br /></div><div><div><b><span style="font-size:large;">Huge discounts for the people helping us</span></b></div><div><div><div><br /></div><div><span style="color: rgb(0, 102, 0);">The conditions listed in this section will remain intact at least till the end of summer.</span></div><div><div><span style="color: rgb(0, 102, 0);"><br /></span></div></div></div></div><div><b>1. Promotion help discount: additional 50%.</b></div><div>Applicable to new license purchases only. You promise us to statisfy <i>one</i> of the following requirements <i>during 1 month</i> after your purchase:</div><div><br /></div><div><span style="color: rgb(204, 0, 0);">1) You start or join, and further - maintain <b>3</b> different discussions</span> on such developer's web site or forum as <a href="http://stackoverflow.com/">stackoverflow.com</a> (it must be for .NET developers, and be well-known either worldwide or in your country).</div><div><br /></div><div>The duscussions must be related to DO4 - its particular or upcoming features. We don't expect it must be fully positive - it must be simply honest. And there should be links to our <a href="http://wiki.x-tensive.com/">wiki</a>, <a href="http://blog.dataobjects.net/">blog</a> or <a href="http://www.x-tensive.com/Products/DO">DO4 section on our web site</a>.</div><div><br /></div><div>2) If you maintain a well-known blog (well-known - of course, relatively - e.g. in your city; ideally, there must be >100 subscribers), you can <span style="color: rgb(204, 0, 0);">publish 2 posts related to DO4 in it</span><i>.</i> Again, with your honest opinion and with links to us.</div><div><br /></div><div>Please send the links to such discussions or posts to us - at least, as a proof you accomplished your part of contract ;) We'll join the discussion, if it will be necessary.</div><div><br /></div><div>If you already did something similar, please notify us, and if we'll confirm the conditions listed here are satisfied, feel free to use the coupon code for this dicount.</div><div><br /></div><div><span style="color: rgb(0, 153, 0);">As you see, we provide additional 50% discount (= 75% now) in exchange for several hours of your help.</span> The final prices with this discount are:</div><div><span style="color: rgb(204, 0, 0);">- Licenses: <b>75</b></span><span style="color: rgb(204, 0, 0);"><b>/124/244</b></span><span style="color: rgb(204, 0, 0);"> USD in June, or <span style="color: rgb(0, 0, 0);"><b><span style="color: rgb(204, 0, 0);">150/248/498</span></b><span style="color: rgb(204, 0, 0);"> USD later<span style="color: rgb(0, 0, 0);"><span style="color: rgb(204, 0, 0);">.</span> Coupon code:<span><span><b><span style="color: rgb(153, 0, 0);">JDDO4POSTER</span></b>. Note that you can use it right now, but this implies your agree with the above conditions.</span></span><span style=";font-family:Verdana;font-size:11;" ></span></span></span></span></span></div><div><br /></div><div><span style="font-weight: bold;">2. Contributor licenses: free SMB \ Enterprise licenses with lifetime upgrade and support</span></div><div>We're ready to provide free licenses, if you'd like to help us to develop or promote the product. What can be done to get a free license:</div><div><br /></div><div><span style="color: rgb(204, 0, 0);">a) Significantly help us to develop some part of DO</span> - for example:</div><div><span style="color: rgb(0, 153, 0);">- SQL DOM / storage provider</span> for the database we don't support yet, or some notable part of it</div><div><span style="color: rgb(0, 153, 0);">- Sample application</span> (currently we'd prefer good samples for ASP.NET or ADO.NET data services / Silverlight) or some notable part of it</div><div><span style="color: rgb(0, 153, 0);">- Useful tool</span> (anything you miss ;) ) or some notable part of it</div><div><span style="color: rgb(0, 153, 0);">- Some other part</span> we're planning to implement.</div><div><span style="color: rgb(153, 51, 0);"><br /></span></div><div><span style="color: rgb(153, 51, 0);"></span></div><span><span><span style="color: rgb(0, 102, 0);">Expected complexity:</span> if it took more than 10 full-time days, and we accepted the result, we'll definitely provide such a license. But other cases are discussable - we're ready for any proposals like this.</span></span></div><div><span><span><br />Obviously, it's necessary to <span style="color: rgb(0, 102, 0);">discuss your plan with us</span> before starting the implementation.</span></span><div><span style="color: rgb(153, 102, 51);"></span></div><div><br /></div><div><span style="color: rgb(204, 0, 0);">b) Promote DO4 at your local .NET, ALT.NET or similar user group</span> - by making 1.5 hour overview of it there. You can choose any particular part you want, but ideally it should be based on our videos or on our own presentation of DO (will appear in June).</div><div><br /></div><div><span style="color: rgb(204, 0, 0);">c) Do anything you want comparable to a) or b) by its effect.</span> In fact, we expect you'll spend ~ 1-2 weeks on this, and the result of this will be attractive for DO users.</div><div><br /></div><div><div><b><span style="font-size:large;">Remarks</span></b></div><div><br /></div><div><div>As you may find, <span style="color: rgb(204, 0, 0);">our goal for this summer is to grow up the community around DO4.</span> Prices and earnings don't really matter for us.</div><div><br /></div><div>But you may ask:</div><div><br /></div><div><span style="color: rgb(0, 153, 0);">Why are you asking to pay something at all?</span> The reason is simple: <i>paid money is one of factors making things precious for you.</i> We expect they'll make our simple "promo agreements" more important for both sides.</div><div><br /></div><div><span style="color: rgb(0, 153, 0);">Why now?</span> Because we feel the product is fully ready to be shown to much wider audience. Right now it can do more than e.g. currently available version of Entity Framework. But I hope by the end of summer it will be capable to simply smash it by the set of its built-in features.</div><div><br /></div><div>Ok, of course I fully understand it won't be easy to compete with EF. <i>But imagine, if EF would be shipped by someone else rather than Microsoft.</i> I admit it would be really hard to get a big niche on ORM scene with its design. Really, they're providing features almost identical to NHibernate, but packed into "Microsoft way" box. It's really hard to identify what's new there. I'd also say this is dangerous for NHibernate as well.</div><div><br />I feel we're combining something very good both from open source and commercial development by running this campaign. I hope it will help to involve the people. Our purely commercial promo campaign will follow shortly - we'll be spending almost 5 times more on advertisements starting from the next week (I'm waiting for completion of a set of vital changes on our web site & Wiki). But your help is more important - just rumors, posts and articles make such products really famous.</div><div><br /></div><div><b><span style="color: rgb(153, 0, 0);">So I suggest you to join our community right now.</span></b> Together we'll go forward much faster. Ask yourselves:</div><div><span style="color: rgb(0, 153, 0);">- What commercial ORM is as open as DO4?</span> We'd say even non-commercial are less open. Open source, availability under GPL, public issue tracker, open plans, Wiki that can be edited by you, possibility to contribute.</div><div><span style="color: rgb(0, 153, 0);">- Do you expect EF will ever run on open source platform?</span> DO4 will definitely run on Mono in observable future.</div><div><span style="color: rgb(0, 153, 0);">- Is there any chance of getting DO4 development stopped during the nearest years,</span> if we were ready to spend 2.5 years on developing this new version?</div><div><span style="color: rgb(0, 153, 0);">- Does DO4 differ from competitors?</span> Even the current feature set shows it is. Architecturally it's completely new. Such schema upgrade layer, support for index storages, built-in IMDB, integrated query engine, upcoming sync - who else have these features?</div><div><span style="color: rgb(0, 153, 0);">- What features are expected in near future?</span> There are tons of them on the way. You may find the product you see now, although being solid, shows a huge foundation for upcoming features. And that's cool, because the baby is just 2 week old! Ok, I know, but the pregnancy was long ;)</div><div><div>- <span style="color: rgb(0, 153, 0);">Are we devoted to DO4?</span> You must feel it worth much more than just money for us. It is a part of our image and reputation.</div><div><span style="color: rgb(0, 153, 0);">- Can you rely on it and on us?</span> I hope, yes - taking into account above, as well as the experience (including support incidents) we've got during previous years of work on 1.X-3.X.</div><div><br /></div><div><b><span style="color: rgb(153, 0, 0);">Join DO4 camp!</span></b></div><div><br /></div><div>P.S. Even if you already have a license, think about writing something good about us ;)<br /><br /><span style="font-size:85%;">[The post is copied from <a href="http://blog.dataobjects.net/">DataObjects.Net Team Blog</a>]</span><br /></div></div></div></div></div></div></div></div></div></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-5796916985422068274?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-64396795615124571412009-06-15T15:12:00.002+06:002009-06-15T15:17:50.685+06:00Help Server 2.0.5 is out<a href="http://en.wikipedia.org/wiki/Gzip_compression">GZip compression</a> and <a href="http://www.google.com/analytics/">Google Analytics</a>-like trackers support are among other new features. Full list of changes is published in <a href="http://help.x-tensive.com/Default.aspx##HelpServer/External/Revision%20History.htm">Revision History</a>.<br /><br />Updated installers are already available in <a href="http://www.x-tensive.com/Downloads/?Path=">Downloads section</a>.<span style="font-style: italic;"><br /></span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6439679561512457141?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-35586244962997037472009-06-15T15:09:00.003+06:002009-06-15T15:19:01.126+06:00DataObjects.Net v4.0.1 is outIt is purely a bugfixing release. Full list of fixes we've made is <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=1&q=Milestone%3ARelease4.0.1&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&x=priority&y=milestone&cells=tiles">available in DataObjects.Net issue tracker</a>.<br /><br />Updated installers are published in <a href="http://www.x-tensive.com/Downloads/?Path=">Downloads section</a>.<br /><br /><span style="font-style: italic;">P.S. We recommend you to subscribe to <a href="http://blog.dataobjects.net/">DataObjects.Net Team Blog</a> - now it is updated almost daily.</span><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-3558624496299703747?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-49890407303344017002009-06-09T05:56:00.013+06:002009-06-09T22:38:19.497+06:00DataObjects.Net v4.0 final is released<div>DataObjects.Net v4.0 final is published in <a href="http://www.x-tensive.com/Downloads/Default.aspx?Path=DataObjects.Net_4">downloads section</a> of our web site.<div><br /></div><div>Most important changes we've made last month include:</div><div><br /></div><div><b>1. Schema upgrade API.</b> Shortly it will be fully described @ <a href="http://wiki.dataobjects.net/">wiki</a>, for now you can try out Upgrade Sample. There are 3 applications representing different versions of the same one. They must be run <i>sequentially</i> except the first one (it recreates the database), although you can try running them in order.</div><div><br /></div><div>Upgrade API is <i>really</i> simple. To gracefully handle an upgrade, you must:</div><div>- Add <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/T_Xtensive_Storage_Upgrade_AssemblyInfoAttribute.htm">AssemblyInfo</a> attribute to AssemblyInfo.cs file: <span style="color: rgb(0, 0, 153);">[assembly: AssemblyInfo("MyAssembly", "2.0")]</span></div><div>- Extend <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/AllMembers_T_Xtensive_Storage_Upgrade_UpgradeHandler.htm">UpgradeHandler</a> in each changed model assembly - it will assist to upgrade its structures.</div><div>- If necessary, override its <a href="http://help.x-tensive.com/Content.aspx/DataObjects.Net%20v4.0//html/M_Xtensive_Storage_Upgrade_UpgradeHandler_AddUpgradeHints.htm">AddUpgradeHints</a> method and add instances of <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0/html/T_Xtensive_Storage_Upgrade_UpgradeHint.htm">UpgradeHint</a> ancestors there: <a href="http://www.blogger.com/RenameFieldHint">RenameFieldHint</a>, <a href="http://help.x-tensive.com/Content.aspx/DataObjects.Net%20v4.0/html/T_Xtensive_Storage_Upgrade_CopyFieldHint.htm">CopyFieldHint</a>, <a href="http://help.x-tensive.com/Content.aspx/DataObjects.Net%20v4.0/html/T_Xtensive_Storage_Upgrade_RenameTypeHint.htm">RenameTypeHint</a>. Note that upgrade hints are model-level hints, not schema-level.</div><div>- If necessary, apply <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0/html/T_Xtensive_Storage_Upgrade_RecycledAttribute.htm">[Recycled]</a> attribute to some of your types and fields and override it <a href="http://help.x-tensive.com/Content.aspx/DataObjects.Net%20v4.0//html/M_Xtensive_Storage_Upgrade_UpgradeHandler_OnUpgrade.htm">OnUpgrade</a> method to implement custom data migration logic from recycled structures there.</div><div><br /></div><div>All these steps are shown in upgrade sample.</div><div><br /></div><div>As you may find, <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/AllMembers_T_Xtensive_Storage_Upgrade_UpgradeHandler.htm">UpgradeHandler</a> offers more extension points, and there are schema-level upgrade hints as well. Normally they shouldn't be used - we translate our model-level hints to schema-level hints automatically. But some of them can be useful - for example, <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/T_Xtensive_Modelling_Comparison_Hints_IgnoreHint.htm">IgnoreHint</a> instructing schema comparison layer to skip the specified schema object.</div><div><br /></div><div><b>2. Refactored LINQ translator.</b> Almost no differences outside (it passes just few more new tests), but a huge set of them inside. Faster, much simpler and eaisier to extend. Did I mention we're going to support <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=93">custom LINQ extensions</a>? Well, this version allows us to implement this gracefully.</div><div><br /></div><div><b>3. Refactored mapping attributes.</b> Since we've been shipping final, this became rather important. Details can be found <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=89">here</a>; new samples reflect this. Wiki will be updated in accordance shortly.</div><div><br /></div><div><b>4. Improved installer & documentation</b></div><div>- Regular build installer now contains all downloadable prerequisites integrated</div><div>- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=61">VS.NET project template now contains much less references</a></div><div>- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=138">Brief version of class reference</a> is provided @ <a href="http://help.x-tensive.com/">help.x-tensive.com</a> and installed as .Chm. Full version (.HxS) is integrated into VS.NET help collection.</div><div><i><br /></i></div><div><i><div><b>Other important changes:</b></div><div>- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=22">Domain & Session events</a></div></i></div><div>- Improved <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/T_Xtensive_Integrity_Aspects_PropertyConstraintAspect.htm">PropertyConstraintAspect</a> - now custom error message can be specified right in the attribute declaration</div><div>- <a href="http://code.google.com/p/dataobjectsdotnet/issues/detail?id=164">New validators</a>. See inheritors of <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0//html/T_Xtensive_Integrity_Aspects_PropertyConstraintAspect.htm">PropertyConstraintAspect</a>.</div><div>- We decided to get rid of VistaDB support. Earlier it was easy because of its good compatibility with SQL Server, but now it becomes more and more complex. There are actually many differences - normally acceptable for humans, but making much more complex machine translation for it. Our LINQ implementation and schema upgrade API provide very high level of compatibility between different RDBMS, and this compatibility costs a lot. So we'll focus on more frequently used RDBMS (Oracle, MySQL); furthermore, presence of our own memory provider and upcoming file system provider makes support of embedded databases much less necessary.</div><div><br /></div><div><b>Public issue tracker is open</b></div><div>And finally, during the last month we've been using <a href="http://code.google.com/p/dataobjectsdotnet/issues/list">issue tracker on Google code</a> (btw, it is really good). So all we did is easy to expose now: check out <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=1&q=Status%3ADone+Milestone%3ARelease4.0&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&sort=&mode=grid&y=Milestone&x=Type&cells=tiles&nobtn=Update">"Done" grid for v4.0 final</a>. Previous changes are related to "Pre4.0" milestone, so they aren't shown here. Quicks statistics:</div><div>- 25 defects</div><div>- 14 new features</div><div>- 9 enchancements</div><div>- 9 refactorings</div><div>- 9 non-coding tasks.</div><div>Total: 66 issues.</div><div><br /></div><div>If you're interested in near future, take a look at <a href="http://code.google.com/p/dataobjectsdotnet/issues/list?can=2&q=Milestone%3ARelease4.1&colspec=ID+Type+Summary+Milestone+Priority+Status+Component+Owner+Reporter&sort=&mode=grid&y=Type&x=Priority&cells=tiles&nobtn=Update">similar grid for v4.1</a>. Some features mentioned here (mainly, fixes & tasks) will be separated to v4.0.5, which will be available in ~ 2 weeks.</div><div><br /></div><div>And as I mentioned, from this point we're switching to monthly release cycle. So v4.1 can be expected in the first half of July.</div></div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-4989040730334401700?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com7tag:blogger.com,1999:blog-34300632.post-16379912569858899362009-06-06T03:29:00.006+06:002009-06-06T03:41:30.178+06:00Help Server 2.0 is out<div>Please refer to <a href="http://help.x-tensive.com/Default.aspx##HelpServer/External/Revision%20History.htm">Revision history</a> for the complete list of changes (it's short, but all items are really important). You can download it <a href="http://www.x-tensive.com/Downloads/Default.aspx?Path=HelpServer">here</a>.</div><div><br /></div><div><div><span class="Apple-style-span" style="color:#990000;">Note: we decreased help topic limit to </span><b><span class="Apple-style-span" style="color:#990000;">100</span></b><span class="Apple-style-span" style="color:#990000;"> for Express Edition.</span></div><div><span class="Apple-style-span" style="color:#990000;"><br /></span></div></div><div><a href="http://www.x-tensive.com/Products/HS/">Its pages on our web site</a> aren't updated yet (will be done next week), so there are no "Buy upgrade" links. But its <a href="http://help.x-tensive.com/Default.aspx##HelpServer/External/User%20Guide.htm">User Guide</a> is already updated, and all <a href="http://help.x-tensive.com/Default.aspx##HelpServer/External/User%20Guide.htm">"Buy now" links</a> are correct there.</div><div><br /></div><div>P.S. I published first relatively big post @ <span><span><a href="http://blog.dataobjects.net">blog.dataobjects.net</a></span></span>.</div><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-1637991256985889936?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-39673668642047380702009-06-01T17:19:00.002+06:002009-06-01T17:32:46.248+06:00Announcement: Help Server 2.0<span style="color: rgb(0, 102, 0);">Hi everyone! We're glad to announce </span><span style="color: rgb(0, 102, 0);">we're ready to release</span><span style="font-weight: bold; color: rgb(0, 102, 0);"> Help Server v2.0</span><span style="color: rgb(0, 102, 0);">. This will happen <span>on this week</span>.</span><br /><br />What's new:<br />- Full .HxS format support<br />- <a href="http://incubator.apache.org/lucene.net/">Lucene.Net</a> based full-text search<br />- Faster startup. Full-text and keyword indexes are built in background now.<br />- Improved Index tab<br />- New URL-based query APIs: now you can invoke <span style="font-style: italic;">full-text search</span> and <span style="font-style: italic;">index lookup</span> using special URLs. Both these features are designed to integrate your class reference with conceptual description, manual or Wiki. <a href="http://wiki.dataobjects.net/index.php?title=Validation">Check out how index lookup works at wiki.dataobjects.net</a>.<br /><br /><span style="color: rgb(0, 102, 0); font-weight: bold;">Note:</span> <a href="http://help.x-tensive.com">help.x-tensive.com</a> is running on one week old build. We're aware there are some issues. In particular:<br />- Many pages aren't covered by full-text search<br />- Index lookup doesn't open the queried page. It should do this, if there is just one candidate.<br /><br />Certainly these issues will be resolved before release.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-3967366864204738070?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com2tag:blogger.com,1999:blog-34300632.post-87128863084547597752009-06-01T17:16:00.002+06:002009-06-01T17:19:00.900+06:00DataObjects.Net gets its own blogGo to <a href="http://blog.dataobjects.net">http://blog.dataobjects.net</a>. The detailed description is <a href="http://blog.dataobjects.net/2009/06/welcome.html">there</a> now.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-8712886308454759775?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-20453381910907535332009-05-24T21:35:00.005+06:002009-05-28T20:35:51.013+06:00New video covering DO4 Console SampleToday we've published a new <a href="http://wiki.dataobjects.net/index.php?title=Video">video</a> covering <a href="http://wiki.dataobjects.net/index.php?title=Xtensive.Storage.Samples.Console">Console Sample</a> of DO4. It concentrates on such features as:<br />- <a href="http://wiki.dataobjects.net/index.php?title=Database_schema">Database schema</a> building<br />- Metadata.Type, Metadata.Assembly and Metadata.Extension tables<br />- Batched key generation<br />- <a href="http://wiki.dataobjects.net/index.php?title=LINQ">LINQ</a> to SQL translation<br />- Running on built-in in-memory database (<a href="http://wiki.dataobjects.net/index.php?title=IMDB">IMDB</a>)<br />- LINQ to query execution plan translation (executable <a href="http://wiki.dataobjects.net/index.php?title=RSE">RSE providers</a>).<br /><br />Take a look at it - hopefully you'll enjoy it. Any comments are welcome.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-2045338191090753533?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-85747888153651957002009-05-24T20:54:00.011+06:002009-05-24T23:48:14.511+06:00The future of DO4After writing a short announcement related to the upcoming release, I understood I definitely should provide much more detailed information related to its future. So let's start:<br /><br /><span style="font-weight: bold;font-size:130%;" >Nearest plans</span><br /><br />With <span style="font-weight: bold;">v4.0 final</span> we want to:<br />- Deliver a version that <span style="font-style: italic;">really</span> includes all the basic features developers need.<br />- Show it is <span style="font-style: italic;">fully stable</span>.<br />- <span style="font-style: italic;">Terminate the long-long chain of "[not yet working] v4.0 is updated [but is still not yet fully ready for production]" posts in this blog and get back to to the road of real releases</span>.<br /><br />And in addition, after releasing v4.0 final,<br />- We'll carefully plan each subsequent release. Its new features and delivery date will be precisely known.<br />- All the future updates will be logged in revision history. Actually we already switched to a <a href="http://code.google.com/p/dataobjectsdotnet/issues/list">public DataObjects.Net v4.0 issue tracker</a> nearly one month ago.<br />- I expect further development will go faster. Luckily, now I don't see such big castles to storm as <a href="http://wiki.dataobjects.net/index.php?title=LINQ">LINQ</a> - at least, in observable future (6 months or so).<br /><br />Btw, here is the answer on one of the frequent questions I heard during last months: <span style="font-weight: bold;font-size:100%;" >are LINQ and schema upgarde really worth 9 months of work?</span><br /><br />Yes.<br /><br />I really hoped we reached this point in September-October, but was wrong. Frankly speaking, I really thought our internal <a href="http://wiki.dataobjects.net/index.php?title=RSE">RSE</a> queries will be enough usable to start, or we'll be able to make them usable enough. But they were not, and all our ideas on how to make them better were looking pale in comparison with LINQ implementation. Moreover, it was supported by some of competitors. As you know, finally we've made a decision to get LINQ support ASAP. This was in the end of November. And from this moment we've been putting more and more resources on getting this done: initial implementation (certainly, quite lacky) made by a single person turned into ~ 4*4 man-months spent on the final implementation.<br /><br />Comparison with some close competitors (<a href="http://www.llblgen.com/">LLBLGen Pro</a>, <a href="http://www.hibernate.org/343.html">NHibernate</a>) shows this is definitely not the worst case we could get. Good LINQ implementation requires really lots of time, and for now only few products may claim they support LINQ well enough. In our case LINQ implementation was even more complex: as you might know, our LINQ to RSE translation layer produces real query plans, when it translates LINQ queries for index engines. For example, it automatically uses secondary indexes based on query criterias and statistics.<br /><br />Another complex part (it costs about 20% of LINQ implementation) was upgrade, and v4.0 implements it really almost perfectly - now you can do <span style="font-style: italic;">all you want without SQL</span>. To migrate your storage to the next version, you need just our upgrade hints and, optionally, your own "recycled" persistent types with all the features they integrate. This ensures your upgrade will be both simple and storage-independent. This is one of the most impressive advantages of new DO. I'm going to create a brief video overview of this feature, it will be available until the release.<br /><br /><span style="font-weight: bold;font-size:130%;" >Summer goals</span><br /><br />#1: <span style="font-style: italic;">Number one <span style="font-weight: bold;">RAD framework</span> for database application development on .NET.</span><br /><br />This summer we're going to show how to build full-featured WPF and ASP.NET applications (e.g. an issue tracker) on DataObjects.Net <span style="font-weight: bold;">in 30 minutes or less</span>.<br /><br />DataObjects.Net, starting from its first version, was explicitly positioned as RAD tool for database application developers. Now we're going to show it really is such a RAD tool again - but certainly, much more powerful and much less limiting.<br /><br />#2: <span style="font-style: italic;">Number one <span style="font-weight: bold;">RAD framework </span>for<span style="font-weight: bold;"> </span><span style="font-weight: bold;">N-tier</span> database application development</span>.<br /><br />The nearest feature we'll bring is integrated storage synchronization. It must <span style="font-style: italic;">dramatically</span> simplify the development of N-tier database applications. Moreover, this summer we'll show file system provider for DataObjects.Net. In fact, a regular database implemented as our indexing engine. It will be initially positioned to be used mainly on the client side, but in future - who knows...<br /><br />#3: <span style="font-style: italic;">Support the biggest part of RDBMS market.</span><br /><br />We'll implement Oracle and MySQL support. Together with already supported RDBMS, they cover more than 90% of the market.<br /><br /><span style="font-weight: bold;font-size:130%;" >Media activities</span><br /><br />This is one of our most annoying lacks. I understand we advertise ourselves quite bad from this point. Almost no articles, rather complex documentation and so on. Why?<br /><span style="font-style: italic;">a)</span> Frankly speaking, until this moment we had nothing we could honestly write about. "We have really perfect ORM + IMDB, but unfortunately it can't be used in production because it <span style="font-style: italic;">destroys everything on any launch</span>" - LOL, OMG and so on ;)<br /><span style="font-style: italic;">b)</span> None of us, including me, are good article writers. At least in English.<br /><br />Everything else seems a consequence of two above facts. No good articles on our web site = no articles on other sites = no exposure. But:<br />- v4.0 final fully eliminates <span style="font-style: italic;">a)</span><br />- <span style="font-style: italic;">b)</span> can be eliminated only if we'll make ourselves to do this well.<br /><br />If we'll really get <span style="font-style: italic;">b)</span> resolved, we have a good chance to initiate a chain reaction. If not, it doesn't matter how cool is the tool we develop at all. It will sink unknown.<br /><br />So what we'll do:<br />- Get #1 goal (full-featured application done in less than 30 minutes) implemented ASAP. This must be really impressive.<br />- Publish good <a href="http://wiki.dataobjects.net/index.php?title=Video">video</a> covering <a href="http://wiki.dataobjects.net/index.php?title=Samples">samples</a> and features of DO4. I hope to finally get the production rate of our "home video" to one file per week at least.<br />- Eliminate most of the "red links" in our <a href="http://wiki.dataobjects.net/">Wiki</a>.<br />- Publish short articles covering interesting topics lying around ORM tools. For example, comparison of ORM framework performance, implemented LINQ features, discussion of verious features and approaches. Certainly, we'll be mostly on our own side. But if someone of our customers will decide to use the material to write and and publish an article e.g. at the <a href="http://www.codeproject.com/">CodeProject.com</a>, we'll definitely favor this.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-8574788815365195700?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com2tag:blogger.com,1999:blog-34300632.post-72941499997006559122009-05-24T19:36:00.010+06:002009-05-24T21:48:56.112+06:00Announcement: DO4.0 final<span style="color: rgb(0, 102, 0);">Hi everyone! We're glad to announce we've finally reached the point when we can</span><span style="color: rgb(0, 102, 0);"> <span style="font-style: italic;">fully honestly</span> say we're ready to release</span><span style="font-weight: bold; color: rgb(0, 102, 0);"> DataObjects.Net v4.0 final</span><span style="color: rgb(0, 102, 0);">. This will happen <span style="font-weight: bold;">on the first week of this summer</span>.</span><br /><br />v4.0 final will include:<br />- All you can see in the currently available preview<br />- Almost ideal <a href="http://wiki.dataobjects.net/index.php?title=LINQ">LINQ</a> implementation<br />- Almost ideal schema upgrade API<br />- Providers for Microsoft SQL Server, PostgreSQL and our built-in in-memory database.<br /><br />Everything else, including sync, additional providers, UI related tools, full-text indexing and search and so on will be released as the set of subsequent minor updates (v4.1, v4.2 and so on).<br /><br />See the next post for further details.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-7294149999700655912?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-64793537004574477772009-05-05T18:33:00.006+06:002009-05-07T17:50:09.428+06:00LiveUI.net 0.4 releaseWe are glad to announce first preview of LiveUI.net, which is our new product targeted to simplify web application development. This product is on early development stage now, but it is ready to get first impression. Its source code, live demo and documentation are available at <a href="http://liveui.net/">http://liveui.net</a>. For now it is absolutely free.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6479353700457447777?l=blog.x-tensive.com'/></div>Alex Ilyinhttp://www.blogger.com/profile/13553194641939208996alexandr.ilyin@gmail.com0tag:blogger.com,1999:blog-34300632.post-52041531697347677872009-05-02T07:38:00.012+06:002009-05-03T15:10:50.709+06:00DataObjects.NET v4.0 got LINQ and upgrade APIOnly quick info for now, details will follow tomorrow:<br />- <span style="font-style: italic;">Almost complete </span><a style="font-style: italic;" href="http://wiki.dataobjects.net/index.php?title=LINQ_%28Language_Integrated_Query%29">LINQ</a><span style="font-style: italic;"> support.</span> Now only 12 tests out of almost 700 for LINQ are falling (~ about 15 are ignored), so we consider this part is 90% done. List of currently existing issues and lacks will be published shortly. See updated <span style="font-weight: bold;">Console Sample</span> - now it executes a bit more complex queries.<br />- <span style="font-style: italic;">First working version of our cool </span><a style="font-style: italic;" href="http://wiki.dataobjects.net/index.php?title=Schema_evolution">upgrade API</a><span style="font-style: italic;">.</span> There are much more issues for now - e.g. it works only on SQL Server, understands results of our schema comparison layer only partially (for now it can't translate move or rename actions for columns and tables) and so on. But there is working <span style="font-weight: bold;">Upgrade Sample</span> utilizing this part of API, including IUpgradeHandler. We bet you dreamed about nearly this feature in v3.9 ;)<br />- <span style="font-style: italic;">We've started to work on our query optimizer for indexing storages.</span> You can see what it already can do in <span style="font-weight: bold;">Consile Sample</span> - take a look on RSE queries it dumps on In-memory Storage, and you'll find we already automatically utilize secondary indexes! So if you even dreamed about storing indexed objects in memory and use LINQ to query them, we've just brought this to you. Obviously index access optimization isn't the only one we run - right now we support nearly the same optimizations as <a href="http://www.sqlite.org/optoverview.html">SQLite</a> can do.<br />- <span style="font-style: italic;">There are some other new features</span>, e.g. <span style="font-weight: bold;">CachedQuery</span>. To get some query cached, just wrap it into CachedQuery.Execute(() =>[YouOriginalQuery])<your>. Btw, we implemented this pattern better than in EF - we don't require you to write a parameterized lambda here, and thus allow to use cached queries "in place".<br /><br />That's all the brief description. Have a nice weekend!<br /><br />P.S. Installers are already updated.<br /></your><div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-5204153169734767787?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-88594414657107165332009-04-02T15:10:00.008+06:002009-04-02T17:27:43.909+06:00DataObjects.Net v4.0: status updateBriefly, we're still fighting with schema evolution and LINQ support, but the end is near.<br /><br /><span style="font-weight: bold;">LINQ support</span><br /><br />Currently we have the following set of issues that must be implemented to consider LINQ provider implementation project is finished:<br /><br /><table border="0" cellpadding="4" cellspacing="0"><tbody><tr><td style="font-weight: bold; color: rgb(102, 102, 102);"><span style="font-size:85%;">Priority</span></td><td style="font-weight: bold; color: rgb(102, 102, 102);"><span style="font-size:85%;">Category</span></td><td style="font-weight: bold; color: rgb(102, 102, 102);"><span style="font-size:85%;">Implementation level</span></td><td style="font-weight: bold; color: rgb(102, 102, 102);"><span style="font-size:85%;">Task</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Type mapping</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Enum</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Type mapping</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Nullable<t> vs NULL ternary logic in SQL</t></span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Type mapping</span></td><td><span style="font-size:85%;">RSE to SQL translator</span></td><td><span style="font-size:85%;">Implicit numeric casts</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">"is" operator</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">Both</span></td><td><span style="font-size:85%;">Concat LINQ method</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">Both</span></td><td><span style="font-size:85%;">Union LINQ method</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">Both</span></td><td><span style="font-size:85%;">Except LINQ method</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">Both</span></td><td><span style="font-size:85%;">Intersect LINQ method</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">GroupBy with aggreagates</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">GroupJoin</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">First, Single, Last, *OrDefault as subquery result (including .Select(x => new {x, x.Customers.First}) )</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Issue</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">EntitySet.Count property & EntitySet.Contains method</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Issue</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">EntitySet as IQueryable</span></td></tr><tr><td><span style="font-size:85%;">1</span></td><td><span style="font-size:85%;">Issue</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Correct column order for OrderBy</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type mapping</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Byte array</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">OfType<t> LINQ method</t></span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Cast<t> LINQ method</t></span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">"as", (T) cast operators for type downcasting</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">"as" cast operator for type upcasting</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Type cast</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">(T) cast operator for type upcasting must lead to an error on query translation</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Optimization</span></td><td><span style="font-size:85%;">RSE optimizer</span></td><td><span style="font-size:85%;">SQL APPLY rewriting</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Optimization</span></td><td><span style="font-size:85%;">RSE optimizer</span></td><td><span style="font-size:85%;">Redundant join remover</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Optimization</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Join first selected subquery returning * in .Select projections (including .Select(x => new {x, x.Customers}) )</span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Optimization</span></td><td><span style="font-size:85%;">RSE optimizer</span></td><td><span style="font-size:85%;">Index access optimization: pi.Filter(...) -> si1.Range(...).Union(si2.Range(...)) .Union(...).Join(pi, ...) .Select(...).Filter(...) </span></td></tr><tr><td><span style="font-size:85%;">2</span></td><td><span style="font-size:85%;">Issue</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Take, Skip after OrderBy</span></td></tr><tr><td><span style="font-size:85%;">3</span></td><td><span style="font-size:85%;">LINQ methods</span></td><td><span style="font-size:85%;">LINQ to RSE translator</span></td><td><span style="font-size:85%;">Contains, Any, All for parameters of collection (IEnumerable<t>) type</t></span></td></tr></tbody></table><br />Most part of tasks of priority 1 are in development now, as well as Index access optimization (priority is 2). We're planning to finish with priority 1 queue during the next week. Priority 2 & 3 queue will require 1.5-2 more weeks, but must of these features aren't really necessary now. We're working on all of them mainly to get all our LINQ tests passing.<br /><br />Btw, most likely it's a very important question: how do we test our LINQ implementation? You may find that now there are ~ 470 different tests for LINQ. Some of them are written by us, but a significant part of them was imported from the following projects:<br />- <a href="http://www.codeplex.com/IQToolkit">IQToolkit (The LINQ IQueryable Toolkit)</a><br />- <a href="http://blogs.msdn.com/adonet/archive/2007/03/13/101-linq-samples-updated.aspx">ADO.NET Team's 101 LINQ Samples</a>.<br /><br />That's why we're pretty sure we'll cover all aspects of LINQ in the end.<br /><br /><br /><span style="font-weight: bold;">Schema evolution</span><br /><br />The progress here is not as good as with LINQ - from the point of end users nothing works here yet. But we already implemented the following parts of the framework:<br />- Generic modelling framework (Xtensive.Modelling) - a set of abstract base classes allowing to describe any models similar to SQL metadata.<br />- Update actions support for models. Basically, we can track & pass only the changes made to some model, rather then model itself to a remote server.<br />- Differential comparison support for models. Allows to create hierarchical difference structure taking into account comparison hits (such as node rename), as well as convert it to a set of update actions. This part isn't fully finished yet (some bugs still exist).<br />- Xtensive.Storage.Indexing.Model - an implementation of indexign storage model based on Xtensive.Modelling<br />- Converter of SQL DOM model to Indexing model (partially done: some bugs exist)<br />- Converter of Xtensive.Storage.Model model (Storage model) to Indexing model (in development).<br /><br />What's left:<br />- Translation of differences to SQL update actions (for SQL storages)<br />- Translation of differences to index structure update actions (for indexing storages)<br />- Integration of all this stuff into Domain.Build pipeline.<br /><br />Hopefully first version of our schema evolution layer will be available by the end of the next week.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-8859441465710716533?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com1tag:blogger.com,1999:blog-34300632.post-62698105462669359702009-03-23T04:01:00.017+05:002009-03-23T06:04:09.977+05:00LINQ in DataObjects.Net v4.0: details, issues and news, part 2<span style="font-weight: bold;">3. Support for common LINQ workarounds for SQL syntax</span><br /><br />I really like how LINQ is designed - its syntax is so unified, but still more natural and flexible than SQL. And because of this some SQL features looks quite differently in it - although more naturally. Let's see how LEFT OUTER JOIN may look like:<br /><br /><span style="font-weight: bold;">Version 1:</span><br /><span style="font-style: italic;">from p in Products</span><span style="font-style: italic;"><br />from nonEmptyC in (from c in Categories where c.CategoryID==p.CategoryID select c).DefaultIfEmpty()</span><br /><span style="font-style: italic;">select new {nonEmptyC, p}</span><br /><br />The same, but in extension method calls:<br /><span style="font-style: italic;">Products.SelectMany (</span><br /><span style="font-style: italic;"> p => Categories.Where (c => c.CategoryID == p.CategoryID).DefaultIfEmpty(), </span><br /><span style="font-style: italic;"> (p, nonEmptyC) => new { nonEmptyC, p } )</span><br /><br /><span style="font-weight: bold;">Version 2:</span><br /><span style="font-style: italic;">from p in Products</span><br /><span style="font-style: italic;"> join c in Categories on p.CategoryID equals c.CategoryID into jc</span><br /><span style="font-style: italic;">from nonEmptyC in jc.DefaultIfEmpty()</span><br /><span style="font-style: italic;">select new {nonEmptyC, p}</span><br /><br />The same, but in extension method calls:<br /><span style="font-style: italic;">Products</span><span style="font-style: italic;"><br />.GroupJoin(</span><span style="font-style: italic;">Categories, </span> <span style="font-style: italic;"> p => p.CategoryID, </span> <span style="font-style: italic;"> c => c.CategoryID, </span> <span style="font-style: italic;"> (p, jc) => new {p, jc} </span> <span style="font-style: italic;"> )</span><span style="font-style: italic;"><br />.SelectMany (</span> <span style="font-style: italic;"> tmp => tmp.jc.DefaultIfEmpty(), </span> <span style="font-style: italic;"> (tmp, nonEmptyC) => new {nonEmptyC, tmp.p} </span> <span style="font-style: italic;"> )</span><br /><br />So as you see, there are at least two different ways to implement the same LEFT OUTER JOIN in LINQ. And we must recognize both.<br /><br /><br /><span style="font-weight: bold;">4. Optimization of RSE queries for indexing providers</span><br /><br />As far as you might know, we translate any query into <a href="http://wiki.dataobjects.net/index.php?title=RSE">RSE query</a> first. RSE uses indexes as lowest level abstraction of data sources. But there are two types of indexes:<br />- Primary indexes - in our case they have the same meaning as table in SQL (because we always have primary keys an any tables).<br />- Secondary indexes - they allow to locate primary keys by values of other columns from primary indexes they are bound to.<br /><br />Our LINQ translation layer (as well as any other pat of DO40) "thinks" of primary indexes as of tables they're bound to - if it needs a data from some table, it queries corresponding primary index. <span style="font-style: italic;">Sexondary indexes are ignored at all by LINQ translator.</span> Why? Because LINQ translator's goal is to produce the <span style="font-style: italic;">crudest</span> query plan (RSE query). In particular, this plan:<br />- Uses only primary indexes<br />- Uses only <a href="http://wiki.dataobjects.net/index.php?title=Index_scan">index scans</a>. <a href="http://wiki.dataobjects.net/index.php?title=Index_seek">Index seeks</a> (<a href="http://wiki.dataobjects.net/index.php?title=RSE#Supported_operations">RecordSet.Seek and RecordSet.Range</a> operations) aren't used at all.<br /><br />Further this plan (RSE query) is either:<br />- Passed directly to RSE compiler - this happens in underlying execution engine supports query optimization. In fact, this happens for <a href="http://wiki.dataobjects.net/index.php?title=SQL_providers">SQL providers</a>.<br />- <span style="font-style: italic;">Optimized</span> and passed to RSE compiler - this happens for <a href="http://wiki.dataobjects.net/index.php?title=Indexing_providers">indexing providers</a>.<br /><br /><span style="font-weight: bold;">So we perform query plan optimization. </span>That's what any good SQL server does. And the most interesting quersion here is what exactly our query optimizer can do, and how our query optimizer can be compared with others. Brief answer:<br />1) For now we're mainly working on index usage related optimizations - e.g. replacement of <span style="font-style: italic;">PrimaryIndex.Filter(...)</span> chain to <span style="font-style: italic;">SecondaryIndex1.Range(...) .Union(SecondaryIndex2.Range(...)) .Union(...) .Join(PrimaryIndex, ...) .Select(...).Filter(...)</span> chain. We hope this will be working in the beginning of April.<br />2) Further plans include operation reordering, join sequence and aggregate calculation optimizations (earlier I wrote we already maintain some additive aggregates in indexes, so that's how we'll use them).<br />3) If part 1) will be implemented well, we'll "beat" many embedded database engines right on start - e.g. <a href="http://www.sqlite.org/">SQLite</a> (its query optimizer implements this part, but with quite serious limitations). Btw, we're seriously considering implement query plan branching here - this will allow us to gracefully handle queries like <span style="font-style: italic;">"Select ID, Value from Simplest where (ID=@P1) or (@P2=1)"</span> - most of RDBMS (including Microsoft SQL Server) can't do this now. If you don't see anything suspecious in this query, <a href="http://wiki.dataobjects.net/index.php?title=SQL_is_dying#Internally_database_must_be_quite_simple">check out the description here</a>.<br /><br />So we hope our query optimizer will be good enough for embedded databases almost from scratch. It should provide expected optimization results for 95% of relatively simple queries and possibility to write a query translated to any desirable execution plan, if optimizer can't help.<br /><br /><br /><span style="font-weight: bold;">LINQ team short term goals</span><br /><br />We must show:<br />- DO perfectly works with regular databases - in particular, this means we must provide full LINQ support for them<br />- Embedded databases provided by DO are reliable and fast as well. Initially "fast" means "typical LINQ queries are executed without unnecessary index scans".<br /><br />That's it.<br /><br />P.S. This month I feel myself quite devoted to development - last week I worked overnight for few times. That's because I feel the progress, and thus feel myself much more happier ;) In September we switched a part of DO4 team to a new project that was requiring this to be completed in time, and now these guys are back. Moreover, we've hired few new developers after NY, and for now they joined DO4 team as well. So right now there are 7 developers + me working on DO4 - that's much more then 3 developers + me before. This pushes the development forward quite fast.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6269810546266935970?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com3tag:blogger.com,1999:blog-34300632.post-61932584310669615242009-03-10T20:56:00.009+05:002009-03-23T05:54:03.049+05:00LINQ in DataObjects.Net v4.0: details and issuesI think it's right time to give some details on implementation of LINQ in new DO. Let's start from issues:<br /><br /><span style="font-weight: bold;">1. Correlated subqueries.</span> LINQ allows us to write generally anything in <span style="font-style: italic;">from</span> clause (<span style="font-style: italic;">collectionSelector</span> expression in <span style="font-style: italic;">SelectMany</span>) - e.g. a correlated subquery: <span style="font-style: italic;">from a in MainQuery from b in Subquery select new {a, b}</span> (translated by C# to <span style="font-style: italic;">MainQuery.SelectMany(a => Subquery, (a, b) => new { a = a, b = b } )</span>). Note that Subquery is generally any <span style="font-style: italic;">IQueryable</span>, including e.g. <span style="font-style: italic;">AnotherQuery.Where(a.X==...)</span>.<br /><br />Standard SQL doesn't allow to do the same - you can't use correlated subqueries in <span style="font-style: italic;">from</span> clause there. Quite strange, because generally this doesn't significantly affect on anything. But:<br />- SQL Server 2005 supports this via <a href="http://msdn.microsoft.com/en-us/library/ms175156.aspx"><span style="font-style: italic;">Cross / Outer apply</span></a> statement.<br />- We also suppport this in RSE by <span style="font-style: italic;">ApplyProvider</span>.<br /><br />It's easy to implement its executable counterpart, but its translation to SQL is rather tricky: we've added this statement to SqlDom, although now we can complile it only for SQL Server 2005. We hope it will be possible to do this without serious limitations for Oracle and PostgreSQL as well, although we aren't going to rely on this: we'll translate correlated subqueries (actually this is possible for the most frequently used part of them) to RSE using <span style="font-style: italic;">JoinProvider</span> or <span style="font-style: italic;">PredicateJoinProvider</span> - in fact, we expect correlated subquery looks like <span style="font-style: italic;">NonCorrelatedSubquery.Where(correlatedExpression)</span> in this case. In other cases we'll use <span style="font-style: italic;">ApplyProvider</span>.<br /><br />Btw, EF and LinqToSql behave the same (nearly - e.g. there is no RSE behind them ;) ).<br /><br /><span style="font-weight: bold;">2. DateTime and TimeSpan handling.</span> Unfortunately, SQL Server doesn't support <span style="font-style: italic;">interval</span> (or similar) data type, but many others do, so functions dealing with dates are quite different. We did a lot to handle this:<br />- First of all, we implemented corresponding abstraction layer in SqlDom.<br />- Secondly, we implemented unified method call translation framework - so-called <span style="font-style: italic;">MemberCompilerProvider</span> - a base class in <span style="font-style: italic;">Xtensive.Core.Linq</span> providing compilers (methods) for specified members and allowing to invoke them fast during the translation process. Now it allows us (and you!) to define compilers operating at any desirable translation layer (in this case, at RSE to SQL translation layer) for generally any invoked members. See sources in <span style="font-style: italic;">Xtensive.Storage.Providers.Sql.Mappings.FunctionMappings</span> namespace (internal!) for many many examples. Here is just one:<br /><br /><span style="font-style: italic;">[Compiler(typeof(DateTime), "Year", TargetKind.PropertyGet)]</span><br /><span style="font-style: italic;">public static SqlExpression DateTimeYear(SqlExpression this_)</span><br /><span style="font-style: italic;">{</span><br /><span style="font-style: italic;"> return SqlFactory.Extract(SqlDateTimePart.Year, this_);</span><br /><span style="font-style: italic;">}</span><br /><br />... To be continued.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6193258431066961524?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-7882207413154945792009-03-10T15:38:00.010+05:002009-03-10T17:55:19.710+05:00DataObjects.Net v4.0: status update<span style="font-weight: bold;">Installer:</span> finally this part is almost fully finished. The newest installer (check out <a href="http://www.x-tensive.com/Downloads/?Path=DataObjects.Net_4">the latest nightly build</a>) downloads and installs all you need to either use or even compile new DataObjects.Net. The only feature we should add is test database creation (although this isn't necessary for running samples on IMDB), but this is for some later time.<br /><br /><span style="font-weight: bold;">LINQ support:</span> in the end of February we've started to refactor our implementation of LINQ translator for the third time. First attempt was too crude - mainly for testing. We've finished with it in december. The second one was good, but not simple enough (i.e. too complex to deal with it further). Finally we've come to an approach allowing us to get enough simple unified implementation. <span style="font-style: italic;">This should lead LINQ translation project to completion by the end of March. </span>Obviously, expect query optimizer for index storages - this part will be in development for few more months, but as it was mentioned, absence of this feature for now won't lead to any troubles.<br /><br /><span style="font-weight: bold;">Schema evolution:</span> unfortunately, we're just starting this part. But the good news is that we decided to switch to index-based schema comparison rather then SqlDom-based. This must simplify everything a lot (index model is much simpler then SqlDom database model), and we anyway need this part developed till the launch of our upcoming file system storage provider. But on the other hand, this implies we will need to use a set of workarounds to make schema evolution layer fully compatible with the general SQL database. But for now the implementation speed is more important then internal unification - <span style="font-style: italic;">we still want to deliver this feature till the end of March.</span><br /><br /><span style="font-weight: bold;">Nightly builds:</span> now they're live for DO4. The file with empty name <a href="http://www.x-tensive.com/Downloads/?Path=DataObjects.Net_4">here</a> is nightly build of DO4 - for now our website improperly recognizes its display name, since we've switched to different naming pattern (to be fixed today).<br /><br /><span style="font-weight: bold;">Other features:</span> almost untouched yet, mainly because of complexities with LINQ translation. It goes much slower then we initially planned, but in comparison to other known implementations we're rather far from reaching the averages - e.g. LLBLGen team spent 6 months on this. And I really don't want to reach this border.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-788220741315494579?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-75225185694441976842009-02-09T16:39:00.006+05:002009-02-09T17:03:02.146+05:00DataObjects.NET v4.0 is updatedBrief list of new features:<br />- Partial <a href="http://wiki.dataobjects.net/index.php?title=LINQ_%28Language_Integrated_Query%29">LINQ</a> support. As you might know, LINQ is work in progress for us, so for now its implementation is really partial. For example, you can't use left loins, SelectMany and so on. But it already works. Further details on this will be published <a href="http://wiki.dataobjects.net/index.php?title=LINQ_%28Language_Integrated_Query%29">here</a> shortly.<br />- All the <a href="http://wiki.dataobjects.net/index.php?title=Samples">samples</a> are "ported" to LINQ.<br />- New <a href="http://wiki.dataobjects.net/index.php?title=Installation">installer</a>. It is capable of downloading and installing all the dependencies required by DO (for example, <a href="http://wiki.dataobjects.net/index.php?title=PostSharp">PoshSharp</a>) and installs <a href="http://blog.x-tensive.com/2008/12/dataobjectsnet-4-project-template.html">DataObjects.Net Project Template</a>. It can't install source code for now - we have rather limited time on it. But shortly it will.<br />- Many other changes, mainly in <a href="http://wiki.dataobjects.net/index.php?title=Storage_project">Storage project</a>. AFAIK almost all the bugs reported to us are fixed.<br /><br />Happy <a href="http://www.x-tensive.com/Downloads/?Path=DataObjects.Net_4">downloading</a>! Hopefully our server won't fall... Ironical laughting :}<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-7522518569444197684?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-50055272049630032812009-02-02T13:03:00.005+05:002009-02-02T20:56:01.033+05:00DataObjects.NET v4.0: development plan update<span style="font-weight: bold;">This week:</span> release <a href="http://wiki.dataobjects.net/">DO40</a> with basic <a href="http://wiki.dataobjects.net/index.php?title=LINQ_%28Language_Integrated_Query%29">LINQ</a> support. We'll support most necessary Queryable methods. Support of ElementAt, Except, Intersect, Union, SequenceEqual, SkipWhile, TakeWhile, OfType, Reverse and correlated subqueries will be either limited or unavailable.<br /><br /><span style="font-weight: bold;">This month (February 2009):</span> almost complete implementation of LINQ, <a href="http://wiki.dataobjects.net/index.php?title=Schema_evolution">scheme evolution</a> and basic <a href="http://wiki.dataobjects.net/index.php?title=Synchronization">synchronization</a>.<br /><br /><span style="font-weight: bold;">Next month (March 2009):</span> improvements in usability and stability of above features. Quite likely - something else, e.g. <a href="http://wiki.dataobjects.net/index.php?title=Full-text_indexing_and_search">full-text indexing and search</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-5005527204963003281?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com2tag:blogger.com,1999:blog-34300632.post-67676812993726227142009-01-26T09:45:00.017+05:002009-01-30T18:07:20.939+05:00From 2008 to 2009: results and plansI'm reader of Joel Spolsky blog. <a href="http://www.joelonsoftware.com/items/2009/01/08.html">One of the latest posts</a> there exposes the goals of his company for the next year. I instantly understood we should return back to writing such an article once per year - as you might know, we did this before. And it's a good idea to provide a brief overview of what was done in previous year - our activities, results and so on. So let's start. <span style="font-weight: bold;"><br /><span style="font-size:130%;"><br /><br />Done in 2008</span><br /><br />We showed DataObjects.Net 4.0 - frankly speaking, alpha.</span><span> Although its currently available version isn't practically usable (no schema evolution & LINQ), it shows how it will finally look like. Unfortunately we didn't reach a good progress in sales yet - all the income generated by DO now is mainly based on upgrade subscriptions, and frankly speaking, it isn't comparable </span><span>well </span><span>to our outsourcing business. So the cost of ~ 2 year pause in its development (i.e. a cost of its complete redesign) is really high. Returning these investments is one of Y2009 goals.<br /><br /><span style="font-weight: bold;">Both MEScontrol.net and custom software solutions departments grew up</span> - most part of our income is generated by these teams now. We're developing projects with <a href="http://www.mesware.be/">MESware</a>, <a href="http://www.ustu.ru/">Urals State Techincal University (USTU)</a>, </span><span><a href="http://www.dc.ru/">Data-Center</a> (for <a href="http://www.severstal.com/eng/">SeverStal</a>) and </span><span><a href="http://www.izenda.com/">Izenda</a></span><span>.<br /><br /><span style="font-weight: bold;">We launched new <a href="http://www.x-tensive.com/">X-tensive.com</a> and <a href="http://www.mescontrol.ru/">MEScontrol.ru</a> web sites</span> - so we've got a completely new look. <a href="http://web.archive.org/web/20071016115349/http://x-tensive.com/">Old x-tensive.com</a> was serving us well for a long time, but its time had come.<br /><br /><span style="font-weight: bold;">We started to promote MEScontrol.net in Russia.</span> This must help to built a new business for us in the next year.<br /><br /><span style="font-weight: bold;">Financially</span> this year was also successful - we've got ~ 120% growth in income.<br /><br /><span style="font-weight: bold;">We've got much better local exposure</span> - I admit rare .NET developer here knows nothing about us now. Partially - because of sessions on .NET User Group we run. I became the leader of Urals .NET User Group as well.<br /></span><span style="font-weight: bold;"><span style="font-size:130%;"></span></span><span style="font-weight: bold;"><br /></span><span><span style="font-weight: bold;"></span></span><span><span style="font-weight: bold;">Unfortunately we discarded the idea to bring LiveObjects.Net</span></span><span style="font-weight: bold;"> live, at least for now.</span><span> Li</span><span>veObjects</span><span>.Net is <a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller">MVC</a> framework and control library for <a href="http://en.wikipedia.org/wiki/ASP.NET">ASP.NET</a> utilizing <a href="http://extjs.com/">ExtJS</a> (<a href="http://en.wikipedia.org/wiki/AJAX">AJAX</a>). We've been using it internally to build all the projects for </span><span><a href="http://www.ustu.ru/">USTU</a></span>. I'll provide more details further.<br /><span style="font-weight: bold;"><br /><br /></span><span style="font-size:130%;"><span style="font-weight: bold;">Goals for 2009</span></span><br /><span style="font-weight: bold;"><br />Really polished </span><a style="font-weight: bold;" href="http://www.dataobjects.net/">DataObjects.Net v4.0</a> will be delivered by the middle of this year. This includes at least:<br />- <a href="http://wiki.dataobjects.net/index.php?title=LINQ">LINQ</a> support - that's what we're working on right now<br />- <a href="http://wiki.dataobjects.net/index.php?title=Schema_evolution">Schema evolution</a> - the next critical feature we'll deliver<br />- <a href="http://wiki.dataobjects.net/index.php?title=Synchronization">Synchronization</a> - obviously, it is also one of the most critical ones<br />- <a href="http://wiki.dataobjects.net/index.php?title=Full-text_indexing_and_search">Full-text indexing and search</a> - also an important one<br />- <a href="http://wiki.dataobjects.net/index.php?title=File_system_provider">Transactional file system storage</a> - in fact, our own implementation of RDBMS<br />- Early preview of <a href="http://wiki.dataobjects.net/index.php?title=Distributed_storage_provider">distributed storage provider</a>. Its complete implementation must be ready till the end of Y2009. Why so late? We decided to implement all the other features first, and show distributed storage only in some simple form - as a preview. This must be enough to convince most of developers (you) it will really be delivered further, so you can rely on its features. But for now (i.e. in development) you can start using new DO with some other provider instead of it.<br /><br /><span style="font-weight: bold;">First real projects based on v4.0</span>:<br />- The first one will be developed by our Software Solutions team, but for (or with) some other company - right now we're beginning to explore the opportunities here. A part of this team finishes its current contract with <span><a href="http://www.ustu.ru/">USTU</a></span> in March; moreover, in March <a href="http://wiki.dataobjects.net/">DO 4</a> will get its final shape, so it's a good moment to seek for the next project. The next post in our blog will describe this more precisely.<br />- We also hope to show our own service using <a href="http://wiki.dataobjects.net/">DO 4</a>, but it's difficult to say if we'll be able to get its showable version till the end of 2009, taking into account that our R&D team will be mainly busy with DO during nearest 6-8 months.<br /><br /><span style="font-weight: bold;">MEScontrol.net implementations on Russian plants \ factories:</span> as it was mentioned, we're going to apply a lot of efforts related to local <a href="http://www.mescontrol.ru/">MEScontrol.net</a> promotion this year based on a background created for this in 2008.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6767681299372622714?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com3tag:blogger.com,1999:blog-34300632.post-40955893738874412302009-01-20T22:30:00.002+05:002009-01-20T22:35:03.243+05:00DataObjects.Net v3.X is updatedIt is a minor update - there is nothing else except bugfixes. But one of issues it resolves is important: full-text rank ("{FullTextRank}") in order by clause was <span style="font-style: italic;">ignored at all</span> because of bug in one of recent v3.9 updates, so full-text search results were unordered.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-4095589373887441230?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-36092599921147151312008-12-18T18:45:00.023+05:002009-02-09T17:06:43.191+05:00DataObjects.Net 4 project template<b>Project template location</b><br /><p><span style="font-weight: bold;">Update:</span> now project template is installed by <a href="http://www.x-tensive.com/Downloads/?Path=DataObjects.Net_4">DataObjects.Net installer</a> automatically.<br /><br /></p><b>Installation</b><br /><p>The installation is simple: just double-click on downloaded "DataObjects.Net_4_Project.vsi" file and follow the installer instructions.</p><p>Be sure that DataObjects.Net 4 is installed in the right folder <nobr>("C:\Program Files\X-tensive.com\DataObjects.Net 4.0\").</nobr><br />If no, the simplest way to fix it is to copy DataObjects.Net 4 into the specified folder.</p><br /><br /><b>Solution for geeks and advanced users </b><br /><ol><li>Find <nobr>"DataObjects.Net 4.0 Project.zip"</nobr> in Visual Studio 2008 custom project template folder (<nobr>"%My Documents%\Visual Studio 2008\Templates\ProjectTemplates\Visual C#\"). </nobr></li><li>Unzip contents, open <nobr>"DataObjects.Net 4.0 Project.vstemplate"</nobr>, set $DataObjectsDotNet4Path$ variable to desired path, save file and pack it back.</li></ol><br /><br /><b>Usage</b><br /><p>To create new project based on DataObjects.Net 4 framework open Visual Studio, click "New" -> "Project" and select "DataObjects.Net 4 Project" as it is shown on the image: </p><br /><a href="http://3.bp.blogspot.com/_iHnCjIZdGL8/SUpe9CWOYgI/AAAAAAAAABI/8z500MHL-1U/s1600-h/NewProjectWindow.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 219px;" src="http://3.bp.blogspot.com/_iHnCjIZdGL8/SUpe9CWOYgI/AAAAAAAAABI/8z500MHL-1U/s320/NewProjectWindow.JPG" alt="New project dialog" id="BLOGGER_PHOTO_ID_5281137915740447234" border="0" /></a><br /><p><br />After clicking "OK" simple C# project will be created. It will contain one persistent class "Person", a set of references to required assemblies and PersistentAttribute will be applied in AssemblyInfo.cs file. Remember to synchronize PersistentAttribute parameters if you are going to rename assembly with your persistent model.<br /></p><br /><a href="http://2.bp.blogspot.com/_iHnCjIZdGL8/SUplrVHsK4I/AAAAAAAAABY/5TKm4tWgqVU/s1600-h/ProjectStructure.JPG"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 219px;" src="http://2.bp.blogspot.com/_iHnCjIZdGL8/SUplrVHsK4I/AAAAAAAAABY/5TKm4tWgqVU/s320/ProjectStructure.JPG" alt="Project structure" id="BLOGGER_PHOTO_ID_5281145308123507586" border="0" /></a><br />Any comments and suggestions are welcome.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-3609259992114715131?l=blog.x-tensive.com'/></div>Dmitri Maximovhttp://www.blogger.com/profile/07143844311415529548noreply@blogger.com0tag:blogger.com,1999:blog-34300632.post-65574293646473310022008-11-25T16:34:00.003+05:002008-11-25T16:43:05.081+05:00Minor DataObjects.Net 4.0 updateWe've just updated v4.0 installer - the updated version resolves some issues related to compilation of <a href="http://help.x-tensive.com/Default.aspx##DataObjects.Net%20v4.0/html/T_Xtensive_Storage_Rse_Providers_Compilable_AggregateProvider.htm">AggregateProvider</a> in <a href="http://wiki.dataobjects.net/index.php?title=RSE">RSE</a>.<br /><br />Other good news: shortly we'll migrate DataObjects.Net code to <a href="http://code.google.com/p/dataobjectsdotnet/">Google Code</a>. The reason is obvious: really open source project must be hosted on really open source servers ;)<br /><br />From now <a href="http://code.google.com/p/dataobjectsdotnet/issues/list">DataObjects.Net 4.0 issue tracker is already there</a>.<div class="blogger-post-footer"><img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34300632-6557429364647331002?l=blog.x-tensive.com'/></div>Alex Yakuninhttp://www.blogger.com/profile/13800929290476802273noreply@blogger.com0