<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8608814577609167003</id><updated>2011-10-09T20:55:35.370+06:00</updated><category term='dataobjects.net'/><category term='linq'/><category term='opensource'/><category term='fp'/><category term='postsharp'/><category term='oracle'/><title type='text'>Crazy Development</title><subtitle type='html'>Denis Krjuchkov's blog about programming</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-5092744681808460645</id><published>2010-05-23T20:44:00.000+06:00</published><updated>2010-05-23T20:44:38.586+06:00</updated><title type='text'>blog-&gt;restart()</title><content type='html'>Hello, all. As you may see, the blog has changed drastically (new name, new look &amp; new address). Rules changed, now it's my very personal blog, that has no relation with DataObjects.Net. All DO stuff will be written in its own blog. My personal thoughts and opinions about programming will go here. Enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-5092744681808460645?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/5092744681808460645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/05/blog-restart.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5092744681808460645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5092744681808460645'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/05/blog-restart.html' title='blog-&gt;restart()'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-505916689569957688</id><published>2010-03-06T01:26:00.001+05:00</published><updated>2010-03-06T01:28:59.630+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><title type='text'>LINQ</title><content type='html'>Some people, when confronted with a problem, think “I know, I'll use LINQ.” Now they have two problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-505916689569957688?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/505916689569957688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/03/linq.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/505916689569957688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/505916689569957688'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/03/linq.html' title='LINQ'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-344237430259005053</id><published>2010-02-27T22:15:00.001+05:00</published><updated>2010-03-01T02:16:12.831+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dataobjects.net'/><title type='text'>Unified storage level exceptions</title><content type='html'>&lt;p&gt;With previous versions of DataObjects.Net v4.x there was no way to handle database errors in one fashion. All ADO.NET exceptions (like &lt;code&gt;SqlException&lt;/code&gt; for SQL Server or &lt;code&gt;NpgsqlException&lt;/code&gt; for PostgreSQL) were passed to user code simply wrapped in &lt;code&gt;StorageException&lt;/code&gt;. These times have gone. Upcoming DataObjects.Net v4.2 will support a nice new feature. We called it &amp;quot;unified storage level exceptions&amp;quot;. As the name suggests all ADO.NET errors are now unified.&lt;/p&gt;  &lt;p&gt;Here are the exceptions you could expect. They are naturally grouped by cause of error.&lt;/p&gt;  &lt;p&gt;&lt;code&gt;StorageException&lt;/code&gt; is the base exception for all storage errors.&lt;/p&gt; &lt;em&gt;Constraint violations:&lt;/em&gt;   &lt;ul&gt;   &lt;li&gt;&lt;code&gt;ConstraintViolationException&lt;/code&gt; is the base exception for SQL constraint violations. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;CheckConstraintViolationException&lt;/code&gt; denotes violation of a &lt;code&gt;check&lt;/code&gt; or &lt;code&gt;not null &lt;/code&gt;constraint. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;ReferentialContraintViolationException&lt;/code&gt; denotes a violation of a &lt;code&gt;foreign key&lt;/code&gt; constraint. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;UniqueConstraintViolationException&lt;/code&gt; denotes a violation of a &lt;code&gt;unique&lt;/code&gt; or &lt;code&gt;primary key&lt;/code&gt; constraint. &lt;/li&gt; &lt;/ul&gt; &lt;em&gt;Concurrent access errors:&lt;/em&gt;   &lt;ul&gt;   &lt;li&gt;&lt;code&gt;ReprocessableException&lt;/code&gt; is the base exception for &lt;code&gt;TransactionSerializationFailureException&lt;/code&gt; and &lt;code&gt;DeadlockException&lt;/code&gt; &lt;/li&gt;    &lt;li&gt;&lt;code&gt;DeadlockException&lt;/code&gt; will surely be used very often, it’s thrown when you got into a deadlock with other transaction working on the same data. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;TransactionSerializationFailureException&lt;/code&gt; denotes any concurrent access problem except deadlock. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;em&gt;General errors:&lt;/em&gt; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;code&gt;ConnectionErrorException&lt;/code&gt; is thrown when there is something wrong with the database connection. &lt;/li&gt;    &lt;li&gt;&lt;code&gt;SyntaxErrorException&lt;/code&gt; is thrown when RDBMS was not satisfied with the supplied SQL query :-) &lt;/li&gt;    &lt;li&gt;&lt;code&gt;OperationTimeoutException&lt;/code&gt; is thrown when server spent too much time executing your query and ADO.NET client decided it can not wait any longer :-) This exception probably denotes a live lock.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;There are other descendants of &lt;code&gt;StorageException&lt;/code&gt; but they are not related with database communication and are not shown here.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-344237430259005053?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/344237430259005053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/unified-storage-level-exceptions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/344237430259005053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/344237430259005053'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/unified-storage-level-exceptions.html' title='Unified storage level exceptions'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-7389788527346550882</id><published>2010-02-26T23:14:00.008+05:00</published><updated>2010-03-01T23:07:15.569+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><category scheme='http://www.blogger.com/atom/ns#' term='postsharp'/><title type='text'>PostSharp is going closed source</title><content type='html'>&lt;p&gt;&lt;a href="http://www.sharpcrafters.com/blog/post/PostSharp-Going-Commercial-Introducing-SharpCrafters.aspx"&gt;Here&lt;/a&gt; is the original post. After many years being open source famous &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;AOP&lt;/a&gt; library for .NET is going to be proprietary. It is sad. I guess fork of GPL/LGPL licensed 1.x branch will be created soon by enthusiasts who can’t live with proprietary PostSharp. It’s going to be an interesting battle :-)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-7389788527346550882?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/7389788527346550882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/postsharp-is-going-closed-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/7389788527346550882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/7389788527346550882'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/postsharp-is-going-closed-source.html' title='PostSharp is going closed source'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-5902254327594489951</id><published>2010-02-26T13:12:00.006+05:00</published><updated>2010-02-27T01:04:53.898+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fp'/><title type='text'>Practice of functional programming</title><content type='html'>&lt;p&gt;&amp;quot;Practice of functional programming&amp;quot; is young but very interesting Russian online magazine about functional programming. Despite its name it covers theoretical aspects as well. Recently, a new issue has been published so unless you are not familiar with Russian language, &lt;a href="http://fprog.ru/2010/issue4/"&gt;download&lt;/a&gt; a copy and start reading. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-5902254327594489951?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/5902254327594489951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/pratice-of-functional-programming.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5902254327594489951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5902254327594489951'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/pratice-of-functional-programming.html' title='Practice of functional programming'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-6520928275293300052</id><published>2010-02-25T15:46:00.025+05:00</published><updated>2010-02-27T00:50:22.390+05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dataobjects.net'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle challenge</title><content type='html'>&lt;p&gt;During DataObjects.Net development I've faced a very annoying Oracle &amp;quot;feature&amp;quot;. It is a well-known fact that Oracle implements a multiversion concurrency model. It keeps old versions of modified data (in so called &amp;quot;undo segments&amp;quot;) for transactions that need them. I'm omitting the explanation of Oracle MVCC concepts as they are described in details in appropriate books. The rest of the post assumes you are familiar with them. I'm going to tell you about one not so common pitfall when using Oracle.    &lt;br /&gt;    &lt;br /&gt;Here is the &amp;quot;feature&amp;quot;: sometimes during &lt;a href="http://en.wikipedia.org/wiki/B-tree"&gt;index&lt;/a&gt; restructuration undo data becomes unavailable. Transaction that runs in &lt;code&gt;serializable&lt;/code&gt; isolation level and requests data that is somehow related to such index gets &lt;code&gt;ORA-08177: can't serialize access for this transaction&lt;/code&gt; error. A good explanation can be found in &lt;a href="http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:7636765105002"&gt;this&lt;/a&gt; thread. This can even happen when only one session is accessing database.     &lt;br /&gt;    &lt;br /&gt;What is the solution? Recent versions of Oracle supports &lt;code&gt;rowdependencies&lt;/code&gt; clause for &lt;code&gt;create table&lt;/code&gt; statement. By default Oracle retains &lt;a href="http://wiki.oracle.com/page/SCN"&gt;SCN&lt;/a&gt; for each data block. So all rows in the block have the same SCN. &lt;code&gt;rowdependencies&lt;/code&gt; clause slightly changes structure of the table preserving SCN for each row independently. Using &lt;code&gt;rowdependencies&lt;/code&gt; clause decreases chance of getting &lt;code&gt;ORA-08177&lt;/code&gt;.&lt;/p&gt;  &lt;p&gt;However, I'm still getting this error during heavy inserts, so I'm forced to use &lt;code&gt;read committed&lt;/code&gt; isolation level instead. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-6520928275293300052?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/6520928275293300052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/oracle-challenge.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/6520928275293300052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/6520928275293300052'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/oracle-challenge.html' title='Oracle challenge'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8608814577609167003.post-5556095336158616948</id><published>2010-02-20T16:33:00.006+05:00</published><updated>2010-02-20T18:38:20.343+05:00</updated><title type='text'>Yep, I'm here</title><content type='html'>Hello, all. My name is Denis Krjuchkov. I am one of the developers in &lt;a href="http://dataobjects.net/"&gt;DataObjects.Net&lt;/a&gt; team. This is my personal blog about software programming in general and DataObjects.Net in particular. &lt;a href="http://blog.alexyakunin.com/"&gt;Alex Yakunin&lt;/a&gt;, &lt;a href="http://dmitrimaximov.blogspot.com/"&gt;Dmitri Maximov&lt;/a&gt; and &lt;a href="http://alex-kofman.blogspot.com/"&gt;Alex Kofman&lt;/a&gt; write mainly about using DataObjects.Net. I'm going to write more about how DataObjects.Net is designed and implemented. Have fun reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8608814577609167003-5556095336158616948?l=deniskrjuchkov.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://deniskrjuchkov.blogspot.com/feeds/5556095336158616948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/yep-im-here.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5556095336158616948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8608814577609167003/posts/default/5556095336158616948'/><link rel='alternate' type='text/html' href='http://deniskrjuchkov.blogspot.com/2010/02/yep-im-here.html' title='Yep, I&apos;m here'/><author><name>Denis Krjuchkov</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
