<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Web development blog</title>
	<atom:link href="http://gusiev.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gusiev.com</link>
	<description>How to make your web application</description>
	<pubDate>Sun, 24 Jan 2010 11:04:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Advanced SQL and named scopes stack with ActiveRecord</title>
		<link>http://gusiev.com/2010/01/sql-queries-activerecord-rails-named-scopes-stack/</link>
		<comments>http://gusiev.com/2010/01/sql-queries-activerecord-rails-named-scopes-stack/#comments</comments>
		<pubDate>Sun, 24 Jan 2010 11:02:51 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[ActiveRecord]]></category>

		<category><![CDATA[named_scope]]></category>

		<category><![CDATA[query]]></category>

		<category><![CDATA[rails]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=30</guid>
		<description><![CDATA[If you ever work with rails application that is a little bit more complex then a simple CRUD you would know that some of the ActiveRecord magic doesn&#8217;t work for complex SQL queries. I am primary talking about named scopes stack feature.



Let&#8217;s review the following named_scope that suppose to be usable in different combinations with [...]]]></description>
			<content:encoded><![CDATA[If you ever work with rails application that is a little bit more complex then a simple CRUD you would know that some of the ActiveRecord magic doesn&#8217;t work for complex SQL queries. I am primary talking about named scopes stack feature.<br/>
<span id="more-30"></span>

<hr/>
Let&#8217;s review the following named_scope that suppose to be usable in different combinations with others:
<code>named_scope :network_of, lambda {|user|
{
:select => "u.*"
:from => "users u, followings f1, followings f2",
:conditions => "f1.follower_id = #{user.id} AND " + 
"f1.followed_id = f2.follower_id AND " +
"f2.followed_id = u.id"
}</code>
It suppose to returns all people that are followed by people that are followed by the given person.
From the SQL point of view that is the simpliest and fastest way to do that with a plain SQL.
But this solution will have some issues with Active Record named scopes stack magic.
See that User.network_for(current_user).all(:limit =>5) will result in SQL exception primary because (:limit => 5) doesn&#8217;t know about the table alias &#8220;users u&#8221;.
We can not use it in fact.<br/>
The second problem comes to the foreground when we will try to use ActiveRecord features like
User.network_for(current_user).all(:include => :orders). ActiveRecord handles :include in the very different ways and in some cases you will see the SQL exception here as well.<br/>
The problem is that :include sometimes appends some joins to the query that is concatenated to the last table in the :from parameter. To solve that we should make &#8220;users&#8221; table to be the last one declared in :from parameter.
<code>:select => "users.*"
:from => "followings f1, followings f2, users",
:conditions => "f1.follower_id = #{user.id} AND " + 
"f1.followed_id = f2.follower_id AND " +
"f2.followed_id = users.id"</code>
Summary I would say that using :joins instead of :from/:conditions would give more flexibility and stackability to your named scopes but sometimes :from is more clear and here you got the tip how to use it.
]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2010/01/sql-queries-activerecord-rails-named-scopes-stack/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Vim as IDE - new development era for me</title>
		<link>http://gusiev.com/2009/12/vim-as-ruby-on-rails-ide-development-perfomanc/</link>
		<comments>http://gusiev.com/2009/12/vim-as-ruby-on-rails-ide-development-perfomanc/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 22:12:38 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[perfomance]]></category>

		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=29</guid>
		<description><![CDATA[I was using Vim to do the minor editing in config files for ages. Vim is advanced on basic navigation and editing operations. However I was always prefer IDE for programming because of it&#8217;s specific to language navigation(&#8217;go to definition&#8217; feature is awesome!), integrated debugger. But while gaining the experience I noticed that all advanced [...]]]></description>
			<content:encoded><![CDATA[I was using Vim to do the minor editing in config files for ages. Vim is advanced on basic navigation and editing operations. However I was always prefer IDE for programming because of it&#8217;s specific to language navigation(&#8217;go to definition&#8217; feature is awesome!), integrated debugger. But while gaining the experience I noticed that all advanced features began to be less important then basic ones. And you should try Vim if you feel the same.<br/>
<span id="more-29"></span>

<hr/>

The basic concept of vim is that: Vim think in the same way as you do. For example: I want to delete &#8216;d&#8217; everything inside &#8216;i&#8217; brackets &#8216;)&#8217; and vim understands my command: di) <br/>
You shouldn&#8217;t type a dozen of button to move cursor around and finally delete the selected fragment. 
It&#8217;s hard to adapt because people are use to think in the way that there text editor do. Vim does vice versa. Some people are saying that they don&#8217;t like vim because it make them think a lot. That&#8217;s wrong! Vim is trying to make you free from thinking about editing and concentrate on the content.<br/>

General editing in Vim considered up to every small details. Ask yourself if there is some usual task that I am doing inefficiently and search the Vim feature to optimize that in 3-5 keys. And in ninety nine percent of cases you will find it as built in vim command or a plugin.

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/12/vim-as-ruby-on-rails-ide-development-perfomanc/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Objects behaviour inheritance with RSpec</title>
		<link>http://gusiev.com/2009/10/objects-behaviour-inheritance-with-rspec/</link>
		<comments>http://gusiev.com/2009/10/objects-behaviour-inheritance-with-rspec/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 19:51:06 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[behaviour]]></category>

		<category><![CDATA[inheritance]]></category>

		<category><![CDATA[rspec]]></category>

		<category><![CDATA[ruby]]></category>

		<category><![CDATA[test]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=28</guid>
		<description><![CDATA[About half of a year ago I was writing about object interface and Liskov Substitution Princeple. In short: Any class instance that extends the base class should pass all unit tests behaviour tests written for base class instance. It was a surprise for me that this concept has already been implemented in RSpec.


My previous article [...]]]></description>
			<content:encoded><![CDATA[About half of a year ago I was writing about <a href="http://gusiev.com/2009/05/what-do-you-expect-from-interface/">object interface and Liskov Substitution Princeple</a>. In short: Any class instance that extends the base class should pass all <span style="text-decoration: line-through;">unit tests</span> behaviour tests written for base class instance. It was a surprise for me that this concept has already been implemented in RSpec.<br/><br/>

<span id="more-28"></span>
My previous article was primary inspired by Java programming language and it&#8217;s interface concept. Unlike Java, Ruby does not have interfaces, but behaviour inheritance is still actual for both languages. RSpec seems the first testing framework that provide the ability to validate LSP and behavior inheritance with &#8216;it_should_behave_like&#8217;. <br/>
With Ruby modules(mixins) feature we can build reusable code and include it in different classes<a href="http://ruby-doc.org/core/classes/Module.html">(read more)</a>. With RSpec we can bundle the tests as well.<br/>

<br/>

Let&#8217;s review the following module that uses one of the Rails callback and adds some logging:<br/>

<div class="bordered">
<code>
module LoggedModel
  def after_save
    super
    handle_logging
  end
end
</code>
</div>

and the some tests group for this module:<br/>

<div class="bordered"><code>
describe LoggableModel
  it "should be loggable" do
    LoggableModel.should ...
  end
end
</code>
</div>

Now, we have a tested code that is going to be used in many cases like this:<br/>

<div class="bordered"><code>class MyModel
  include LoggableModel
  def after_save
    do_some_other_thing
  end
end
</code>
</div>

OK, let&#8217;s see what we have: after_save in MyModel overwrites after_save in LoggableModel and breaks the logging. This is simplest example when the behavior inheritance may be broken. Rspec shared examples groups allows you to ensure that the code in LoggableModel is used correctly from any inherited class. Let&#8217;s change the definithin of LoggableModel tests.<br/>

<div class="bordered">
<code>
shared_examples_for "logged model" do
  it "should be loggable" do
    subject.should...
  end
end
</code>
</div>

&#8216;Subject&#8217; is the ultimate RSpec magic that let us make a simple abstraction with the tested class and reuse these shared examples in MyModel spec:

<div class="bordered">
<code>describe MyModel do
  it_should_behave_like 'loggable model'
end</code>
</div>

In this way we will rerun the LoggableModel examples for MyModel and make sure that it&#8217;s behavior wasn&#8217;t broken.
]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/10/objects-behaviour-inheritance-with-rspec/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Computer science ain&#8217;t as good as it should be</title>
		<link>http://gusiev.com/2009/07/computer-science-programming-criticism-object-database-design/</link>
		<comments>http://gusiev.com/2009/07/computer-science-programming-criticism-object-database-design/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 10:25:06 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[IT-related]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[criticism]]></category>

		<category><![CDATA[database]]></category>

		<category><![CDATA[oop]]></category>

		<category><![CDATA[science]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=26</guid>
		<description><![CDATA[When I start studying computer science in the University class I truly believe that it is all I need to get started writing good programs. Algorithms > Functional programming > OOP > Databases > MVC is a step-by-step path of all people that learn programming of the web application. But&#8230;


Programming basics like conditions, variables, cycles [...]]]></description>
			<content:encoded><![CDATA[When I start studying computer science in the University class I truly believe that it is all I need to get started writing good programs. Algorithms > Functional programming > OOP > Databases > MVC is a step-by-step path of all people that learn programming of the web application. But&#8230;
<span id="more-26"></span>
<br/><br/>
Programming basics like conditions, variables, cycles and functions are mandatory for everyone just like writing and speaking for a baby.<br/> 

But more advanced knowledge are less useful and optional. All of these:

<ul>
	
<li>Object hierarchy</li>

	
<li>Normalized database model</li>

</ul>

are turned into dust by more important

<ul>
	
<li>Do it as fast as possible</li>

	
<li>Customer wants!</li>

</ul>

Each framework declare it&#8217;s own way to organize the application Classes. If you are working on CRUD(create-read-update-delete) data application you don&#8217;t need to think about object hierarchy yourself anymore. All you need to do is understand where you need place the function that handle data processing. And the principles a well declined in the framework manual. 
Normalized database is only a myth in a real world application. In 80% of cases the database design is evident to the developer. In other 20% the database couldn&#8217;t be normalized at all.<br/>
<br/>

When you start learning programming try to let your knowledge be &#8220;moved to production&#8221; as fast as possible. In other words: Have a programming practice as fast as possible and you will understand what kind of programming theory you really need. Concentrate your education on all cases you met and avoid learning things that you could possible come across.   

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/07/computer-science-programming-criticism-object-database-design/feed/</wfw:commentRss>
		</item>
		<item>
		<title>When BDD user stories is productive</title>
		<link>http://gusiev.com/2009/06/bdd-user-stories-productive-tdd-criticism/</link>
		<comments>http://gusiev.com/2009/06/bdd-user-stories-productive-tdd-criticism/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 13:13:39 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[IT-related]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[application]]></category>

		<category><![CDATA[bdd]]></category>

		<category><![CDATA[behavior]]></category>

		<category><![CDATA[criticism]]></category>

		<category><![CDATA[tdd]]></category>

		<category><![CDATA[test]]></category>

		<category><![CDATA[user story]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=25</guid>
		<description><![CDATA[When you are skilled Unit tests writer it is not very easy to estimate the potential of BDD. Moreover in most cases BDD is used as a human-readable wrapper for unit tests. Do you really think that programmers need such abstract layer? Of course not&#8230; Users needs them.




Saying Users I mean every non technical person [...]]]></description>
			<content:encoded><![CDATA[When you are skilled Unit tests writer it is not very easy to estimate the potential of BDD. Moreover in most cases BDD is used as a human-readable wrapper for unit tests. Do you really think that programmers need such abstract layer? Of course not&#8230; Users needs them.<br/>
<span id="more-25"></span>

<hr/>

Saying Users I mean every non technical person who will treat to application quality some how.
Featured innovation of BDD is <strong>User Stories</strong> - a human-readable bit of specification with technical test implementation behind it. <br/>
Let&#8217;s review the following example from the blog specification:

<div class="bordered">
<code>
  Given I signed up as Author
    When I write article "TDD and BDD"
    And text of article is "BDD is ...."
    And I post article
    Then I should see "Article is created"
    And I should see article title "TDD and BDD"
</code>
</div>

As you can see unlike TDD human readability is the term that was brought to the high priority in BDD. But that is not yet a BDD story.<br/>
We need the programming implementation for each phrase in the story, like this:

<div class="bordered">
<code>
"I signed up as Author":
     signInAsAuthor();
</code>
</div>

Programmer&#8217;s task is to chose the implementation that will validate described behavior. User doesn&#8217;t know about any programming back end of the story. When the test failed he just knows that some behavior of the application is not working properly any more. <br/>
From this point of view the key principle of user story implementation is that it should <strong>guarantee</strong> with the most high probability that the user can complete described actions.<br/> 

Therefore user stories are the most productive when the implementation is done using <strong>GUI Robots</strong> like SWT bot, Selenium.

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/06/bdd-user-stories-productive-tdd-criticism/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Pragmatic review of Google Wave technology</title>
		<link>http://gusiev.com/2009/06/pragmatic-review-view-google-wave-criticism-technolog/</link>
		<comments>http://gusiev.com/2009/06/pragmatic-review-view-google-wave-criticism-technolog/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 07:34:31 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
		
		<category><![CDATA[IT-related]]></category>

		<category><![CDATA[criticism]]></category>

		<category><![CDATA[review]]></category>

		<category><![CDATA[technology]]></category>

		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=24</guid>
		<description><![CDATA[Have a good time watching the Google Wave presentation video. Looks like an excellent open technology that will make our life easier. I like the overall idea. It is really awesome. But I personally admit some things that seems useless to me&#8230;



Starting from the very beginning I need to say: Wow! Now we can organize [...]]]></description>
			<content:encoded><![CDATA[Have a good time watching the <a href="http://www.youtube.com/watch?v=v_UyVmITiYQ">Google Wave presentation video</a>. Looks like an excellent open technology that will make our life easier. I like the overall idea. It is really awesome. But I personally admit some things that seems useless to me&#8230;<br/>
<span id="more-24"></span>

<hr/>
Starting from the very beginning I need to say: Wow! Now we can organize all communication threads to the widespread object called <strong>Wave</strong> that will be readable and editable by any other application. No more browsing dozen of sites and tracking all changes around - all interested waves can be reorganized in the way you want.<br/>
Let&#8217;s review the features now:<br/>

<ul>
	
<li> Act as Wiki. Wiki can be handled via Waves too, but not sure about parallel editing. That looks sexy on presentation but has no sense in action.</li>

	
<li>Translation to another languages. I would like to have that on my desktop. Don&#8217;t think it would be useful then doing the real time communication. Machine translation never was good enough.</li>

	
       
<li> Spell checker based on language model. Many people around worked on language model and no one has built it strong enough to handle automatic spell check. Let&#8217;s wait for release and see if Google guys reach the success here.</li>

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/06/pragmatic-review-view-google-wave-criticism-technolog/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Double select from a single table in complex SQL query.</title>
		<link>http://gusiev.com/2009/06/avoid-nested-select-double-single-table-complex-query/</link>
		<comments>http://gusiev.com/2009/06/avoid-nested-select-double-single-table-complex-query/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 10:55:32 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[nesting]]></category>

		<category><![CDATA[query]]></category>

		<category><![CDATA[select]]></category>

		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=23</guid>
		<description><![CDATA[When I start learning SQL I have to write a lot of nested queries when working on complex select statements from a single table. Now, I feel more comfortable with it and show how to avoid nesting. There are cases when you have to compare one row of the table with all others to get [...]]]></description>
			<content:encoded><![CDATA[When I start learning SQL I have to write a lot of nested queries when working on complex select statements from a single table. Now, I feel more comfortable with it and show how to avoid nesting. There are cases when you have to compare one row of the table with all others to get the result:

<ul>
	
<li>Select next  element to current by the value of some field</li>

	
<li>Select records that are unique by some complex expression</li>

	
<li>Select all records that have the same parameter as given record.</li>

</ul>

You can get rid of nesting in all above cases. Let&#8217;s review the example.
<span id="more-23"></span>

<hr />Let&#8217;s say we have the list of elements in `elements` table and we have the id of some element in this table. Now we have to get the next element from the list ordered by `sort_field`.
That could be easily done with the nested select statement:

<div class='bordered'>
<code>select * from elements e 
where e.sort_field >= 
            (select * from elements where element_id = #value#) and
         e.element_id != #value#
order by e.sort_field limit 1;
</code>
</div>

Looks not very cool.
Let&#8217;s do the select statement from `element` table twice to avoid nesting:

<div class='bordered'>
<code>-- The e1 is the result row and e2 is a helper row 
--that was picked up using nested select previously.
select e1.* from elements e1, elements e2
--conditional statement will look like
where e1.sort_field >= e2.sort_field and 
     e1.element_id != e2.element_id and 
     e2.element_id = #value#
-- and the end of the query remains almost the same
order by e1.sort_field limit 1
</code>
</div>

Do not scare of double select from single table. That is the same technique as if they were different tables.

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/06/avoid-nested-select-double-single-table-complex-query/feed/</wfw:commentRss>
		</item>
		<item>
		<title>How to choose a sexy title for your article</title>
		<link>http://gusiev.com/2009/05/how-to-choose-a-good-sexy-title-for-your-article/</link>
		<comments>http://gusiev.com/2009/05/how-to-choose-a-good-sexy-title-for-your-article/#comments</comments>
		<pubDate>Wed, 13 May 2009 08:57:39 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[Uncategorized]]></category>

		<category><![CDATA[article]]></category>

		<category><![CDATA[author]]></category>

		<category><![CDATA[howto]]></category>

		<category><![CDATA[idea]]></category>

		<category><![CDATA[reader]]></category>

		<category><![CDATA[title]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=20</guid>
		<description><![CDATA[Most of the people will not spend a minute reading your article if they wouldn&#8217;t get interested from the very beginning. What resides at the beginning of any article? It is the title of course.
That is why choose a good title is very important for every content posted in the net.




Title should not reflect the [...]]]></description>
			<content:encoded><![CDATA[Most of the people will not spend a minute reading your article if they wouldn&#8217;t get interested from the very beginning. What resides at the beginning of any article? <strong>It is the title of course.</strong>
That is why choose a good title is very important for every content posted in the net.
<span id="more-20"></span>

<hr/>

Title should not reflect the overall idea of your article, let it <b>just be cool</b>. Attracting users attention is more important. It should be the key point of what are you righting about<br/> 
<br/>

Here is my idea: <strong>Title looks cool for the reader if it is close to his thoughts. </strong><br/>
Reader should feel himself close to the topic you are going to speak about.
Let&#8217;s find out and see what do our mind filled in and describe some title choosing principles:

<h4>Emotions</h4>

Emotions acts like a catalyst. Expressing strong emotion in the title will give you the most effective result. People are getting interested not only when your emotion correspond to their but also vice versa.<br/>
Example: <a href="/2009/05/jboss-seam-usage-makes-the-application-code-crazy/">JBoss Seam usage makes the application code crazy!</a>

<h4>Questions</h4>

In most cases the reader is somebody who want to know more about the world. Put a question in the title and it will engage everybody who wants to know the answer. <br/>
Like this one: <a href="/2009/05/what-do-you-expect-from-interface/">What do you expect from the interface?</a> 

<h4>Famous topics</h4>

<ul>
	
<li>Humor is top theme on every forum, every blog, every site all the time. Joking title is a good way to awake the interest.</li>

	
<li>Sex. You noticed the title of this article, right?</li>

	
<li>Weather</li>

	
<li>Politics</li>

	
<li>Sports</li>

	
        
<li>etc.</li>

</ul>

<br/>
Making a slight reference in the title to one of above mentioned topics will attract much more attention to your article<br/>
I hope this information was helpful. Thanks for reading.

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/05/how-to-choose-a-good-sexy-title-for-your-article/feed/</wfw:commentRss>
		</item>
		<item>
		<title>What do you expect from the interface?</title>
		<link>http://gusiev.com/2009/05/what-do-you-expect-from-interface/</link>
		<comments>http://gusiev.com/2009/05/what-do-you-expect-from-interface/#comments</comments>
		<pubDate>Tue, 05 May 2009 09:58:55 +0000</pubDate>
		<dc:creator>Bogdan Gusiev</dc:creator>
		
		<category><![CDATA[IT-related]]></category>

		<category><![CDATA[Ideas]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[idea]]></category>

		<category><![CDATA[interface]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[LSP]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=19</guid>
		<description><![CDATA[Read a great article today -  Liskov Substitution Principle (LSP). It let me understand that Interface is not just a list of methods.



Let&#8217;s review the following utility function:


public static void processList(List list) {
          list.clear();
          list.add(new Object());
}


It [...]]]></description>
			<content:encoded><![CDATA[Read a great article today - <a href="http://www.google.com.ua/url?sa=t&#038;source=web&#038;ct=res&#038;cd=3&#038;url=http%3A%2F%2Fwww.objectmentor.com%2Fresources%2Farticles%2Flsp.pdf&#038;ei=xjb_Sbi-EJbItge-ocmSDA&#038;usg=AFQjCNFnNI0DmzofjWDQEGILAT-W1L8Mtw&#038;sig2=okCh8NuqsQslKMTSWOlaTw"> Liskov Substitution Principle (LSP)</a>. It let me understand that Interface is not just a list of methods.<br/>
<span id="more-19"></span>

<hr/>
Let&#8217;s review the following utility function:

<div class="bordered">
<code>public static void processList(List list) {
          list.clear();
          list.add(new Object());
}</code>
</div>

It accepts the object that implements <em>java.utils.List</em> interface as the parameter.
What do you expect to receive in result? The list with one element, right?<br/>
But does the result really meet your expectation? Who knows, the object that implements list interface do not guarantee you &#8216;Act as container&#8217; behavior. It just implements all the methods of the interface and nothing else.<br/>
Actually all methods of the interface <strike>should have</strike> have a notation of their usage. If you do not follow these notations - you should not inherit your object from the interface even if the object has all the methods of the interface.<br/>
<br/>
<strong>Idea:</strong> Maybe one day programming languages will have unit tests as part of interface and validate each instance that implements this interface with them.

]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/05/what-do-you-expect-from-interface/feed/</wfw:commentRss>
		</item>
		<item>
		<title>JBoss Seam usage makes the application code crazy!</title>
		<link>http://gusiev.com/2009/05/jboss-seam-usage-makes-the-application-code-crazy/</link>
		<comments>http://gusiev.com/2009/05/jboss-seam-usage-makes-the-application-code-crazy/#comments</comments>
		<pubDate>Mon, 04 May 2009 07:19:52 +0000</pubDate>
		<dc:creator>Bogdan</dc:creator>
		
		<category><![CDATA[IT-related]]></category>

		<category><![CDATA[programming]]></category>

		<category><![CDATA[criticism]]></category>

		<category><![CDATA[java]]></category>

		<category><![CDATA[jboss]]></category>

		<category><![CDATA[seam]]></category>

		<guid isPermaLink="false">http://gusiev.com/?p=18</guid>
		<description><![CDATA[Seam Application has a number of good innovations but let&#8217;s find out if we lose some advantages that we had before. I started application development with JBoss Seam one year ago. With the code base growth I have had more and more problems in workflow development .


 
I noticed that there are many problems which [...]]]></description>
			<content:encoded><![CDATA[Seam Application has a number of good innovations but let&#8217;s find out if we lose some advantages that we had before. I started application development with JBoss Seam one year ago. With the code base growth I have had more and more problems in workflow development .
<span id="more-18"></span>

<hr/> 
I noticed that there are many problems which we have not had before, for example: 

<ul>
	
<li>Utility methods calls are not straight and clear now.</li>

	
<li>Find all usages IDE has feature became useless because of mass EL calls.</li>

	
<li>There is much of the meta programming in such a severe OOP language as Java.</li>

	
<li>It is impossible to debug JSF templates</li>

	
<li>Seam Exceptions look so unclear.</li>

</ul>

Programming with Seam has all disadvantages of script languages like PHP or Ruby.
 I definitely admit that some features like Conversations and Native AJAX support made a big step forward. There is a lot of information in the net about How cool is seam but I tried to reveal the underside.<br/>
<br/>
Think twice before switching to Seam. 
]]></content:encoded>
			<wfw:commentRss>http://gusiev.com/2009/05/jboss-seam-usage-makes-the-application-code-crazy/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
