<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-8718934526199677974</atom:id><lastBuildDate>Sat, 14 Sep 2024 15:14:11 +0000</lastBuildDate><category>dataflow</category><category>dev theory</category><category>google</category><category>startups</category><title>Software, Efficiency, Scalability</title><description>I enjoy software. I just don&#39;t enjoy the slow, sluggish, badly designed software.</description><link>http://opletayev.blogspot.com/</link><managingEditor>noreply@blogger.com (Mikhail Opletayev)</managingEditor><generator>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8718934526199677974.post-8980195017880094904</guid><pubDate>Sat, 05 Dec 2009 23:41:00 +0000</pubDate><atom:updated>2009-12-05T15:41:39.882-08:00</atom:updated><title>Good bye, BlogSpot</title><description>This blog has migrated to &lt;a href=&quot;http://opletayev.wordpress.com/&quot;&gt;http://opletayev.wordpress.com/&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
I apologize for the inconvenience. WordPress is just much easier to work with for me.&lt;div class=&quot;blogger-post-footer&quot;&gt;http://opletayev.blogspot.com
http://dataflow-software.com&lt;/div&gt;</description><link>http://opletayev.blogspot.com/2009/12/good-bye-blogspot.html</link><author>noreply@blogger.com (Mikhail Opletayev)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8718934526199677974.post-7719319697145025592</guid><pubDate>Sat, 05 Dec 2009 18:12:00 +0000</pubDate><atom:updated>2009-12-05T10:12:34.499-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">google</category><category domain="http://www.blogger.com/atom/ns#">startups</category><title>Google acquires AppJet team</title><description>Congratulations to AppJet and &lt;a href=&quot;http://etherpad.com/&quot;&gt;etherpad.com&lt;/a&gt; team!&lt;br /&gt;
&lt;br /&gt;
EtherPad was a great product and it is nice to see the team being rewarded for their hard work. I wish they published more information on their AppJet engine, but it doesn&#39;t seem that it will ever happen.&lt;br /&gt;
&lt;br /&gt;
What is interesting is that right after they announced the acquisition they immediately stopped accepting new customers and creating new free pads. It basically means that Google is not particularly interested in their customers or their user base. All they wanted was the team. &lt;br /&gt;
&lt;br /&gt;
Or, maybe, they wanted to get a competitor product out of the market to clear up the way for Google Wave. But, nah, I mean, Google is not Evil and wouldn&#39;t throw money to shut down the competition, am I right? :)&lt;div class=&quot;blogger-post-footer&quot;&gt;http://opletayev.blogspot.com
http://dataflow-software.com&lt;/div&gt;</description><link>http://opletayev.blogspot.com/2009/12/google-acquires-appjet-team.html</link><author>noreply@blogger.com (Mikhail Opletayev)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8718934526199677974.post-1047272659941575076</guid><pubDate>Fri, 04 Dec 2009 19:05:00 +0000</pubDate><atom:updated>2009-12-05T10:13:27.465-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dev theory</category><title>Anemic Domain Model</title><description>Today I stumbled across a conversation about the&lt;a href=&quot;http://en.wikipedia.org/wiki/Anemic_Domain_Model&quot;&gt; Anemic Domain Model&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
It sounds like a some sort of terrible disease. Martin Fowler &lt;a href=&quot;http://martinfowler.com/bliki/AnemicDomainModel.html&quot;&gt;blasted&lt;/a&gt; it as an anti-pattern. Wikipedia page &lt;a href=&quot;http://en.wikipedia.org/wiki/Anemic_Domain_Model&quot;&gt;states&lt;/a&gt; 1 benefit to 7 liabilities.&lt;br /&gt;
&lt;br /&gt;
Even people that humor it tend to say it is limited to only inexperienced teams and small projects:&lt;br /&gt;
&lt;br /&gt;
Jimmy Bogard &lt;a href=&quot;http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/12/03/persistence-model-and-domain-anemia.aspx&quot;&gt;writes&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;blockquote&gt;Times when you can’t do a full domain model can include situations where you don’t have access to a domain expert, your team isn’t experienced with OO, or time constraints limit the conversations and analysis needed to build a decent domain model.  If the domain isn’t complex, or is largely data-in, data-out, then those are contexts where a full domain model likely isn’t needed as well.&lt;br /&gt;
&lt;/blockquote&gt;Greg Yong &lt;a href=&quot;http://codebetter.com/blogs/gregyoung/archive/2009/07/15/the-anemic-domain-model-pattern.aspx&quot;&gt;writes&lt;/a&gt;:&lt;br /&gt;
&lt;blockquote&gt;Our domain is not extremely complex.... Our team is not highly functional in object oriented design and analysis. When I say this I mean that team members must be highly functional in order to attempt creating a domain model (all other attempts will be doomed to failure, likely as an anemic domain model).&lt;br /&gt;
&lt;/blockquote&gt;Sounds pretty bad, to be honest. Still, somehow I am not convinced. The reason I am not convinced is very simple: &lt;b&gt;complexity&lt;/b&gt;. Look at the quotes above, they both mention ADM being not half as bad for &quot;not so complex&quot; domains. But do you really want to have your domains &lt;i&gt;that&lt;/i&gt; complex?&lt;br /&gt;
&lt;br /&gt;
Complex systems tend to require lots of configuration glue to keep them together. They are hard to learn and require developers to understand the whole thing before they can become fully productive. In the real world, complex projects tend to grow larger and more complex, original designers move on or move up, new features and entities keep being are added, and eventually such projects turn into a &lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;safe=off&amp;amp;tbo=0&amp;amp;q=katamari+ball&amp;amp;btnG=Search&amp;amp;aq=f&amp;amp;oq=&amp;amp;aqi=&quot;&gt;Katamari ball&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Anemic Data Model, on the other hand, means that you have very simple data objects (if they grow too big or too complex it&#39;s a sign that you need to split them) and a set of well defined interfaces for processing these objects. Instead of making your model more complex you separate components and make them interact using interfaces, shifting towards a loosely coupled model from a complex monolithic model.&lt;br /&gt;
&lt;br /&gt;
It&#39;s a bit of an old Unix paradigm: make one component do one thing really well, define it&#39;s &lt;a href=&quot;http://code.google.com/p/protobuf/&quot;&gt;interface&lt;/a&gt;, interact with other components when you need to.&lt;br /&gt;
&lt;br /&gt;
Loosely coupled projects are a lot easier to maintain, evolve, and scale. Simple data structures and simple interfaces allow for just that. If your project is getting too complex, figuring out how to simplify data structures and interfaces might be a better choice than working out a more complex data model.&lt;br /&gt;
&lt;br /&gt;
P.S. This is one of the reasons why protocol buffer messages produced by &lt;a href=&quot;http://www.dataflow-software.com/docs/proto-cs.html&quot;&gt;proto-cs&lt;/a&gt; are declared as &lt;i&gt;sealed&lt;/i&gt;. They are data messages, there is no need to inherit from them.&lt;div class=&quot;blogger-post-footer&quot;&gt;http://opletayev.blogspot.com
http://dataflow-software.com&lt;/div&gt;</description><link>http://opletayev.blogspot.com/2009/12/anemic-domain-model.html</link><author>noreply@blogger.com (Mikhail Opletayev)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-8718934526199677974.post-3697591938884409959</guid><pubDate>Wed, 02 Dec 2009 17:17:00 +0000</pubDate><atom:updated>2009-12-05T10:13:47.652-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">dataflow</category><title>Dataflow Communcation Library v.1.4.0</title><description>Check out the new release of DCL:&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dataflow-software.com/&quot;&gt;http://dataflow-software.com&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/protocolbuffers/&quot; rel=&quot;external&quot;&gt;Google Protocol Buffers&lt;/a&gt; 2.2 compliant compiler for .NET&lt;/li&gt;
&lt;li&gt;Dataflow &lt;a href=&quot;http://www.dataflow-software.com/docs/pbuf-rpc.html&quot;&gt;Protocol Buffer RPC&lt;/a&gt; (PBUF-RPC) implementation&lt;/li&gt;
&lt;li&gt; &lt;a href=&quot;http://json.org/&quot; rel=&quot;external&quot;&gt;JSON&lt;/a&gt; and &lt;a href=&quot;http://www.dataflow-software.com/docs/json-rpc.html&quot;&gt;JSON RPC&lt;/a&gt; support&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dataflow-software.com/docs/ajax-support.html&quot;&gt;AJAX support&lt;/a&gt;, automatically generate JavaScript needed for your web sites &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://silverlight.net/&quot; rel=&quot;external&quot;&gt;Silverlight&lt;/a&gt; support, access your data fast using &lt;a href=&quot;http://www.dataflow-software.com/docs/pbuf-rpc.html&quot;&gt;PBUF RPC&lt;/a&gt; and &lt;a href=&quot;http://www.dataflow-software.com/docs/json-rpc.html&quot;&gt;JSON RPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Microsoft IIS &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa364510%28VS.85%29.aspx&quot; rel=&quot;external&quot;&gt;HTTP API&lt;/a&gt; support, subscribe to HTTP requests from your standalone applications&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.dataflow-software.com/docs/cached.html&quot;&gt;Cached#&lt;/a&gt;: a fast and free MemCached-inspired in-memory cache application&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://mono-project.com/Main_Page&quot; rel=&quot;external&quot;&gt;Mono&lt;/a&gt; support for the client libraries &lt;/li&gt;
&lt;li&gt;Lightweight implementation (client DLL are under 100kb!)&lt;/li&gt;
&lt;li&gt;Lots of new &lt;a href=&quot;http://www.dataflow-software.com/docs/overview.html&quot;&gt;docs&lt;/a&gt; and &lt;a href=&quot;http://www.dataflow-software.com/docs/tutorials.html&quot;&gt;tutorials&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;blogger-post-footer&quot;&gt;http://opletayev.blogspot.com
http://dataflow-software.com&lt;/div&gt;</description><link>http://opletayev.blogspot.com/2009/12/dataflow-communcation-library-v140.html</link><author>noreply@blogger.com (Mikhail Opletayev)</author><thr:total>0</thr:total></item></channel></rss>