<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Marius Gheorghe</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/default.aspx</link><description>public class Developer : TableMetadata</description><dc:language>en-US</dc:language><generator>CommunityServer 1.0 (Build: 1.0.1.50214)</generator><item><title>This blog has moved to www.voidsoft.ro/blog/</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2006/04/17/136831.aspx</link><pubDate>Mon, 17 Apr 2006 14:03:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:136831</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/136831.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=136831</wfw:commentRss><description>This blog has moved to www.voidsoft.ro/blog/&amp;nbsp; . Please update your bookmarks.&lt;br&gt;Bye bye DotNetJunkies and thanks for all the fish :).&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=136831" width="1" height="1"&gt;</description></item><item><title>Karmencita 0.6 released</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2006/03/23/136311.aspx</link><pubDate>Thu, 23 Mar 2006 10:58:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:136311</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/136311.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=136311</wfw:commentRss><description>&lt;P&gt;&lt;FONT&gt;I have finally released the latest version. &amp;nbsp;&lt;A href="http://www.voidsoft.ro/karmencita.html"&gt;&lt;B&gt;Karmencita&lt;/B&gt;&lt;/A&gt;&amp;nbsp;is a high level object query language for .NET . It's purpose is to allow easy querying from in memory structured data. &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;B&gt;Features : &lt;/B&gt;&lt;BR&gt;&lt;BR&gt;- easy, SQL like language. &lt;BR&gt;&lt;BR&gt;- common, slim API used for querying data. &lt;BR&gt;&lt;BR&gt;- supports any IEnumerable data source, DataTables and XmlDataDocuments. &lt;BR&gt;&lt;BR&gt;- extensible implementation &lt;BR&gt;&lt;BR&gt;- common API but still get results depending on the data source. (for instance when querying XmlDataDocuments we get back XmlElement[]. But if we query a DataTable we get back a DataRow[]). &lt;BR&gt;&lt;BR&gt;- supports IComparable for custom type implementation.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;Samples :&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;STRONG&gt;&lt;SPAN&gt;-query a generic list of Customers : &lt;/SPAN&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;SPAN&gt;//get a list of customers &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN&gt;List&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;Customer&lt;/SPAN&gt;&amp;gt; list = ……… &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;Customer&lt;/SPAN&gt;&amp;gt; oq = &lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;Customer&lt;/SPAN&gt;&amp;gt;(); &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;string&lt;/SPAN&gt; query = “Name=[Marius Gheorghe] and IsMale=true and Age &amp;gt; 10”; &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;Customer&lt;/SPAN&gt;[] custom = (&lt;SPAN&gt;Customer&lt;/SPAN&gt;[]) oq.Select(list, query); &lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;FONT&gt;&lt;STRONG&gt;- &lt;SPAN&gt;query a DataTable (the Northwind database products table) &lt;/SPAN&gt;&lt;BR&gt;&lt;/STRONG&gt;&lt;BR&gt;&lt;SPAN&gt;//load the DataTable from the database &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN&gt;DataTable&lt;/SPAN&gt; dt = ……… &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;DataTable&lt;/SPAN&gt;&amp;gt; oq = &lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;DataTable&lt;/SPAN&gt;&amp;gt;(); &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;string&lt;/SPAN&gt; query = “Name=[Salted Pork Meat] and Discontinued = false and UnitPrice &amp;gt; 12”; &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;DataRow&lt;/SPAN&gt;[] rows = (&lt;SPAN&gt;DataRow&lt;/SPAN&gt;[]) oq.Select(dt, query); &lt;BR&gt;&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;FONT&gt;&lt;STRONG&gt;- &lt;SPAN&gt;query a XmlDataDocument &lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;SPAN&gt;//load the XmlDataDocument &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN&gt;XmlDataDocument&lt;/SPAN&gt; dt = ……… &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;XmlDataDocument&lt;/SPAN&gt;&amp;gt; oq = &lt;SPAN&gt;new&lt;/SPAN&gt; &lt;SPAN&gt;ObjectQuery&lt;/SPAN&gt;&amp;lt;&lt;SPAN&gt;XmlDataDocument&lt;/SPAN&gt;&amp;gt;(); &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;string&lt;/SPAN&gt; query = “Name=[Salted Pork Meat] and Discontinued = false and UnitPrice &amp;gt; 12”; &lt;BR&gt;&lt;BR&gt;&lt;SPAN&gt;XmlElement&lt;/SPAN&gt;[] rows = (&lt;SPAN&gt;XmlElement&lt;/SPAN&gt;[]) oq.Select(dt, query); &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;The web site is located at &lt;/FONT&gt;&lt;A href="http://www.voidsoft.ro/karmencita.html"&gt;&lt;FONT&gt;www.voidsoft.ro/karmencita.html&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;This is free software (LGPL).&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=136311" width="1" height="1"&gt;</description></item><item><title>Quick tip : Scroll sync multiple DataGridViews</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2006/02/25/135597.aspx</link><pubDate>Sat, 25 Feb 2006 13:38:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:135597</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/135597.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=135597</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;Here is a way to synchronize scrolling in multiple DataGridViewes . Add in the scroll event of the DataGridView:&lt;/P&gt;
&lt;P&gt;private void dataGridViewFirst_Scroll (object sender, ScroolEventArgs e)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.dataGridViewSecond.FirstDisplayedScroolingRowIndex = this.dataGridView.FirstDisplayedScroolingRowIndex;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PS: Does anyone knows how to configure BlogJet to work with a DotNetJunkies account ?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;FONT&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=135597" width="1" height="1"&gt;</description></item><item><title>Impressions about Beyond Java book</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2006/01/02/134530.aspx</link><pubDate>Mon, 02 Jan 2006 12:48:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:134530</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/134530.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=134530</wfw:commentRss><description>&lt;P&gt;First of all.....Happy New Year everyone.&lt;/P&gt;
&lt;P&gt;I'm quite dissapointed by this one. It's so bad it's not even funny. The so called "purpose" of the book is to "open the eyes" of the Java programmers about Ruby and ROR. First of all the book's name is wrong. It should be something like "Beyond Java : Choose Ruby and don't look for something else". Practically the book is a HUGE, shameless,"in you face" RoR advertisment. The only good thing from the book is a presentation of Java strengths as a "enterprise application" language.&lt;/P&gt;
&lt;P&gt;Here are some things i thought were particulary bad about the book :&lt;/P&gt;
&lt;P&gt;- "C# is effectively a Java clone". You'll find this 4 times in the book. So either the books is badly edited or the author is flaming away without the slightest knowledge about the subject.&lt;/P&gt;
&lt;P&gt;- it says that the JVM made the Virtual Machines popular : this is hilarioulsy wrong. Languages like LISP and Smalltalk&lt;BR&gt;were running under VMs long before Java. The sad part is that, from a technical point of view, the JVM doesn't have any &lt;BR&gt;advantage above other VMs.&lt;/P&gt;
&lt;P&gt;- the author indulges himself with the ideea that he is a pragmatic programmer and always uses the best tool/language for the job. But :&lt;BR&gt;&amp;nbsp;1. It suggests that open source is "the one true way" which is soooooooooo lame. I had expected a technical book not&lt;BR&gt;&amp;nbsp;some open source zealot chants.&lt;BR&gt;&amp;nbsp;2. "Finally, the next language needs to be politically safe (think Ruby, not C#), so standards can emerge without&amp;nbsp; the&amp;nbsp; constant bickering that can get in the way ".&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; After reading the above paragraph i was asking myself : is this guy for real ? How the heck a ISO/ECMA standardized &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; language is NOT "politically safe" ?! How the heck Java is MORE politically safe than C# ?!!! How the heck is Ruby&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; more politically "safe" then C# ?! Just because is "open source" ? What the heck is an open source "language" ?!&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; But people DO HAVE ACCESS to 2 different compiler source code for C#.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;- in a few pages the author tries to find "suitors" for Java :&amp;nbsp; Python, Ruby , Groovy (WTF ?!!!), C#/VB.NET and Smalltalk.&lt;BR&gt;Each "suitor language" is described in just a few lines. No in depth comparations between languages. &lt;/P&gt;
&lt;P&gt;- it presents ROR like is the "one true answer" to the web application + RDMBS problem. But....hmmm....NO other framework&lt;BR&gt;is presented !?!!! Only ROR...so how the heck is this guy expected to be taken seriously ?!&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;After reading this i have only 2 things to say :&lt;/P&gt;
&lt;P&gt;- i regret to have wasted my time to read this.&lt;BR&gt;- a big thumb down to O'Reilly for publishing this flame fest.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=134530" width="1" height="1"&gt;</description></item><item><title>Software construction analogy</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/12/19/134388.aspx</link><pubDate>Mon, 19 Dec 2005 09:56:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:134388</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/134388.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=134388</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://www.jamesshore.com/Blog/That-Damned-Construction-Analogy.html"&gt;http://www.jamesshore.com/Blog/That-Damned-Construction-Analogy.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This guys really hits the nail. I have always hated that stupid analogy. And the "software arhitect" thing......what&amp;nbsp;THE HECK is that suppose to mean ?!!! The software suffers from title inflation....BAD.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=134388" width="1" height="1"&gt;</description></item><item><title>Karmencita (object query language for .NET) released as open source project</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/12/12/134274.aspx</link><pubDate>Mon, 12 Dec 2005 21:04:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:134274</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/134274.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=134274</wfw:commentRss><description>I'm very happy to announce the first release of Karmencita, an minimalist &lt;BR&gt;object query language for .NET 2.0 . It's purpose is to allow a hassles free&lt;BR&gt;object querying from “in memory” data sources. It was developed as part of the&lt;BR&gt;DataBlock Object Relational Mapper ( www.voidsoft.ro/DataBlock/) and now released&lt;BR&gt;as a open source project (licensed under GPL) by me. &lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp; Here is a very simple query sample :&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; //get an array of running processes&lt;BR&gt;&amp;nbsp; Process[] proc = Process.GetProcesses();&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; //initialize Karmencita&amp;nbsp; with the type of object which will be queried&lt;BR&gt;&amp;nbsp; ObjectQuery&amp;lt;Process&amp;gt; oq = new ObjectQuery&amp;lt;Process&amp;gt;();&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; string query = “BasePriority &amp;gt; 3 and Responding=true and MainWindowTitle Like C%”;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; //run the query&lt;BR&gt;&amp;nbsp; Process[] pc = oq.Select(proc, query);&lt;BR&gt;&lt;BR&gt;The project webpage is located at www.voidsoft.ro/karmencita.html&amp;nbsp;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=134274" width="1" height="1"&gt;</description></item><item><title>Run unit tests for both NUnit and VSTS</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/12/06/134169.aspx</link><pubDate>Tue, 06 Dec 2005 16:48:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:134169</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/134169.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=134169</wfw:commentRss><description>&lt;P&gt;Here is a quick tip if you want to run the same unit test from VSTS and NUnit. If the code is witten for VSTS you can add these declarations :&lt;/P&gt;
&lt;P&gt;using TestClass = NUnit.Framework.TestFixtureAttribute;&lt;BR&gt;using TestInitialize = NUnit.Framework.SetUpAttribute;&lt;BR&gt;using TestMethod = NUnit.Framework.TestAttribute;&lt;BR&gt;using TestCleanup = NUnit.Framework.TearDownAttribute; &lt;/P&gt;
&lt;P&gt;and run it under NUnit.&amp;nbsp;&amp;nbsp;Reverse the declarations if the code is written for NUnit and you want to run it in VSTS.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=134169" width="1" height="1"&gt;</description></item><item><title>Quick COM interop tip</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/11/14/133729.aspx</link><pubDate>Mon, 14 Nov 2005 09:47:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:133729</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/133729.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=133729</wfw:commentRss><description>&lt;P&gt;In .NET 2.0 use Marshal.FinalReleseComObject&amp;nbsp; to "dispose" a COM object. This method sets the object's reference counting to 0.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=133729" width="1" height="1"&gt;</description></item><item><title>The Krypton Toolkit has been released for .NET 2.0</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/11/14/133728.aspx</link><pubDate>Mon, 14 Nov 2005 09:44:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:133728</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/133728.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=133728</wfw:commentRss><description>&lt;P&gt;&lt;FONT&gt;The Krypton Toolkit has been released&lt;BR&gt;It provides user interface controls for Windows Forms&lt;BR&gt;It is targeted at Visual Studio 2005 and .NET Framework 2.0&lt;BR&gt;It is free for commercial use&lt;BR&gt;A link to &lt;/FONT&gt;&lt;A href="http://www.componentfactory.com/downloads.php"&gt;&lt;FONT&gt;http://www.componentfactory.com/downloads.php&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=133728" width="1" height="1"&gt;</description></item><item><title>Opeth - The ghost reveries</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/30/133005.aspx</link><pubDate>Fri, 30 Sep 2005 07:02:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:133005</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/133005.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=133005</wfw:commentRss><description>&lt;P&gt;Listened to latest Opeth last night. Very good album. Wholeheartedly recommended. Also...music related...i'm going to a Nightwish concert tonight in Bucharest. It should &lt;STRONG&gt;&lt;FONT&gt;ROCK.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;FONT&gt;&lt;/FONT&gt;&lt;/STRONG&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=133005" width="1" height="1"&gt;</description></item><item><title>What's wrong with DLinq</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/29/132985.aspx</link><pubDate>Thu, 29 Sep 2005 09:49:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132985</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/132985.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=132985</wfw:commentRss><description>&lt;P&gt;&amp;nbsp; I wrote a comment to the DLinq PM blog (&lt;A href="http://blogs.msdn.com/dinesh.kulkarni"&gt;http://blogs.msdn.com/dinesh.kulkarni&lt;/A&gt;) couple of days ago with some critics to Dlinq mapping. It seems to me that Microsoft employees don't take critics too well because my comment got deleted. So i have decided to write them here. So here they are :&lt;/P&gt;
&lt;P&gt;Attribute based mapping. Atrribute based mapping has a few disadvantages :&lt;BR&gt;- it's slow. Due to heavy usage of the Reflection API it's slower than Xml based mapping&lt;BR&gt;and , of course, a heck of a lot slower then direct mapping calls.&lt;BR&gt;- it needs a separate API that you need to learn to extend DLinq. &lt;BR&gt;- the mapping atrributes need to be cached for further reuse. Now imagine&lt;BR&gt;what happens when mapping attributes of 100 database tables are cached....the working set goes to the roof.&lt;/P&gt;
&lt;P&gt;There are basically 3 ways to map database schema info : attribute mapaping, xml mapping and direct mapping (which&lt;BR&gt;we used in DataBlock). With attribute based mapping MS made the worst choice between those 3.&lt;/P&gt;
&lt;P&gt;Database specific attributes mapping :&lt;BR&gt;&amp;nbsp; This pretty much by itself should give us a clue that MS doesn't want DLinq to play nice with other RDBMS vendors.&lt;BR&gt;It saves Sql Server specific types&amp;nbsp; in the attributes mapping. If you want to create a RDBMS independent O/RM that's &lt;BR&gt;definitely a no no. Another problem with their mapping is that it doesn't support type which are not supported by Sql Server.&lt;BR&gt;How would i map a PostgreSql Point type with Dlinq ? &lt;/P&gt;
&lt;P&gt;DataContext&lt;BR&gt;So the DataContext itself it pretty much a database connection. In a database independent O/RM a database connection&lt;BR&gt;is pretty much described by 3 attributes :&lt;BR&gt;- connection string&lt;BR&gt;- database server type (Sql Server or PostgreSql for instance).&lt;BR&gt;- provider used to connect to the database. This may not be useful if you're working with SqlServer only but &lt;BR&gt;it's very useful when working with 3rd party RDBMS.&lt;BR&gt;&amp;nbsp; DataContext uses only a connection string. So it seems that there is no way for Dlinq that allows you to use a different&lt;BR&gt;database server then Sql Server.&amp;nbsp; In the documentation it's mentioned a "strong typed connection" using a class which&lt;BR&gt;derives form DataContext.&amp;nbsp; The downside of this approach is that you HAVE TO ADD THE mapped objects to the DataContext !!!!&lt;BR&gt;Why ?! Why ? A mapped object...it's just that....a object. A POCO (Plain Old CLR Object). Why do you constrain me to &lt;BR&gt;associate it with a typed DataContext ?&lt;BR&gt;&amp;nbsp; Another problem with their DataContext approach is that is too low level. In a business application you usually have business&lt;BR&gt;objects to whom you pass these mapped objects and , from there, they go to the database. With a DataContext i'm sure there&lt;BR&gt;will be plenty of people who will update the database from the event handler in the GUI. That's bad...&lt;/P&gt;
&lt;P&gt;So there you go....this is what i think it's wrong with the current architecture of DLinq&amp;nbsp;so far.&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132985" width="1" height="1"&gt;</description></item><item><title>Is C# heading into the wrong direction?</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/22/132875.aspx</link><pubDate>Thu, 22 Sep 2005 10:47:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132875</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>1</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/132875.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=132875</wfw:commentRss><description>&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; I've read the C# 3.0 specs last night and ....well i'm a bit puzzled. I think the C# team is taking the language into&lt;BR&gt;a wrong direction.The design of C# 1.0 was pretty good. Despite making a few small mistakes mr Helsjberg &amp;amp; co clearly were aware&lt;BR&gt;that code is written once and read many times. Little things...like putting ref / out&amp;nbsp;at the function call site showed&lt;BR&gt;that readability is a key point for them&amp;nbsp;in the design of a language. &lt;BR&gt;&amp;nbsp; In my opinion in the design of C# 1.0 they screwed up by adding domain specific functionality in the core language definition.&lt;BR&gt;Domain specific functionality is handled in libraries (in which is easier to deprecate / improve) then the core language itself.&lt;BR&gt;This domain specific functionality i'm talking about is threading. C# includes 2 keywords (volatile and lock) which deal with threading&lt;BR&gt;directly from the language instead of the libraries (never mind that lock "maps" to a Monitor). Adding these functionality in&lt;BR&gt;the language definition is bad because :&lt;/P&gt;
&lt;P&gt;- they don't belong there&lt;BR&gt;- it bloats unnecessary the language&amp;nbsp; &lt;BR&gt;- their functionality already exists in the library&lt;BR&gt;- it harder for them to "evolve" the language when they are adding new keywords.&lt;BR&gt;- a small fixed core is always better&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; Despite this i think the design of C# 1.0 was very good.&amp;nbsp; With C# 2.0 they added again domain specific functionality into the&lt;BR&gt;language definition. You can argue but a nullable type is used mainly in the context of a database operation. In fact nullable&lt;BR&gt;types are implemented in mscorlib like any other type but the made the mistake of trying to add sintactic sugar in the language&lt;BR&gt;definition for nullable types (with the ? and ?? operators). Don't know about you but Nullable x is way more comprehensive&lt;BR&gt;to me than int? x. I guess after all it's just a matter of taste. I have mixed feelings about the rest of the C# 2.0 features.&lt;BR&gt;Were they REALLY necessary ? I guess the C# team think they are in some kind of competition with the Java guys...think about it..&lt;BR&gt;why the heck they added that half assed template implementation in Java ? I am willing to bet my socks that at least 50% of the reason&lt;BR&gt;is because C# will have generics. To me it seems that the C# team is just adding things because they think they have to compete with Java&lt;/P&gt;
&lt;P&gt;and because C# must be cool (Ruby style)....without really asking themselves if we REALLY need them. Do they ONESTLY think that the programmer's productivity is increased by introducing lamdbda functions ? What happened to the much (in C# 1.0) touted simplicity ?! (please don't gimme the "don't use them if you don't like them" line). I mean...there is already out there a language that pretty much tries to be everything to everyone. And failed. Do we really want C# to follow the same route ?&lt;BR&gt;&amp;nbsp; We really don't need the things added to C# 3.0 ( or should i say LISP wanna be ?). And also it seems to me that at least some of them&lt;BR&gt;were added to simply allow for LINQ implementation. Not because we want them / need them.&lt;BR&gt;&amp;nbsp; So...C# team...what happened to the balance between simplicity and power ?&lt;/P&gt;
&lt;P&gt; &lt;BR&gt;PS : Also....why the HECK var ? It's not like C# is Pascal. Why not remove the var entirely and just let the name of the variable? It makes&lt;/P&gt;
&lt;P&gt;way more sense than var.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132875" width="1" height="1"&gt;</description></item><item><title>Linq. And DLinq</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/14/132569.aspx</link><pubDate>Wed, 14 Sep 2005 08:52:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132569</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>2</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/132569.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=132569</wfw:commentRss><description>&lt;P&gt;Linq. And DLinq.&lt;/P&gt;
&lt;P&gt;I'm going to go straight to the point. I think Linq is a good thing done the wrong way.&lt;BR&gt;Let me backtrack and explain. Linq's main usage will be to query the "in memory" representation&lt;BR&gt;of a list/array/data structure of business objects. ( Karmencita....our solution for this will be available&lt;BR&gt;next month with DataBlock v1.3) That's it. &lt;BR&gt;&amp;nbsp;&amp;nbsp; The problem with Microsoft is that you don't have business objects. And here is DLinq comes. It&lt;BR&gt;seems that with DLinq they *tried* to create a mini O/RM . (finaly indirectly Microsoft &lt;BR&gt;admited that ADO.NET pretty much blows chuncks for writing data access code). &lt;BR&gt;So they seems to combine a code generator which based on the databse schema generates a mapping class.&lt;BR&gt;Nothing out of the ordinary....we've been doing this (we...as in the O/RM writers) for some time.&lt;BR&gt;But still MS manages to screw it in a couple of ways :&lt;/P&gt;
&lt;P&gt;- DLinq generated code is database specific (Sql Server only).&lt;/P&gt;
&lt;P&gt;- It seems it's not extensible. So bye bye PostgreSql extensions for instance.&lt;/P&gt;
&lt;P&gt;- The mapping information is held in attributes. As a O/RM writter i can tell you that IT WON'T SCALE.&lt;BR&gt;It works with a couple of tables but it will NOT scale for a enterprise application with 30-40 tables.&lt;/P&gt;
&lt;P&gt;- only querying. What about CREATE, DELETE, UPDATE ?!&lt;/P&gt;
&lt;P&gt;If this is the descendant of ObjectSpaces then (ok....i might be a little mean here) i think every O/RM vendor can relax.&lt;BR&gt;Linq is not a solution to write some serious database independent datababase access code.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132569" width="1" height="1"&gt;</description></item><item><title>DataBlock screencast</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/13/132533.aspx</link><pubDate>Tue, 13 Sep 2005 09:57:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132533</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/132533.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=132533</wfw:commentRss><description>&lt;P&gt;I have recorded last night a screencast with DataBlock. It's a simple introduction which shows you how to generate the mapping files for the database entity and how to do simple CRUD operations in a Windows Forms application. You can view at &lt;A href="http://www.voidsoft.ro/downloads/screencasts/data_block.html"&gt;http://www.voidsoft.ro/downloads/screencasts/data_block.html&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The purpose of the screencast is to show you how SIMPLE is to get started with DataBlock in .NET 2.0 No mapping files, no hassles.&lt;/P&gt;
&lt;P&gt;Just&amp;nbsp;generate the files and use the business objects.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132533" width="1" height="1"&gt;</description></item><item><title>Karmencita - a object query language for DataBlock</title><link>http://www.dotnetjunkies.com/WebLog/gmarius/archive/2005/09/07/132402.aspx</link><pubDate>Wed, 07 Sep 2005 17:48:00 GMT</pubDate><guid isPermaLink="false">58df7014-fd75-437c-9641-150997716d1c:132402</guid><dc:creator>Gheorghe Marius</dc:creator><slash:comments>0</slash:comments><comments>http://www.dotnetjunkies.com/WebLog/gmarius/comments/132402.aspx</comments><wfw:commentRss>http://www.dotnetjunkies.com/WebLog/gmarius/commentrss.aspx?PostID=132402</wfw:commentRss><description>&lt;P&gt;&lt;FONT&gt;Karmencita is&amp;nbsp;a object query language for DataBlock (and in the future it will also support POCO, DataTables and XMLDocuments) which allows us to query "in memory" data structures. It has a simple and straighforward SQL like syntax . Here is a small snippet :&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;Let's say we have a entity like this&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;public class Author : TableMetadata&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; public int AuthorId;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; public string Name;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; public DateTime DateOfBirth;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; public bool Manager;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; public decimal Salary;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;We retrieve it from database with DataBlock;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;Author[] authors =&amp;nbsp; perst.GetTableMetadata();&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;and now we can manipulate it with Karmencita :&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;ObjectQuery&amp;lt;Author&amp;gt; oq = new ObjectQuery&amp;lt;Author&amp;gt;(); // notice that ObjectQuery is a generic class&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;Author[] selectedData = &amp;nbsp;oq.Select(authors, " AuthorId &amp;gt; 67 and Name like Stan* and Manager = true");&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;We can also have math operations on data;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New"&gt;decimal totalSalary = oq.Sum(authors, " Manager = true and AuthorID &amp;gt; 60);&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;More details (also some bits about implementation) are available in the following paper : &lt;/FONT&gt;&lt;A href="http://www.voidsoft.ro/downloads/karmencita.pdf"&gt;&lt;FONT&gt;www.voidsoft.ro/downloads/karmencita.pdf&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;Karmecita will be available in DataBlock v1.3 in the October 2005 timeframe.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;FONT&gt;PS: The "Write a review and get a DataBlock license for free" contest is still available.&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://www.dotnetjunkies.com/WebLog/aggbug.aspx?PostID=132402" width="1" height="1"&gt;</description></item></channel></rss>