<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Artem&#039;s blog</title>
	<atom:link href="http://artemgolubev.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://artemgolubev.com</link>
	<description>Thoughts on software</description>
	<lastBuildDate>Tue, 20 Apr 2010 18:20:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>What is cloud computing? Cloud computing main idea explained</title>
		<link>http://artemgolubev.com/what-is-cloud-computing-cloud-computing-main-idea-explained/</link>
		<comments>http://artemgolubev.com/what-is-cloud-computing-cloud-computing-main-idea-explained/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 04:39:10 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[clouds]]></category>
		<category><![CDATA[clouds architecture]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/what-is-cloud-computing-cloud-computing-main-idea-explained/</guid>
		<description><![CDATA[The cloud computing is the style of computing which is linearly scalable over network.
There are at least 2 variations of concept:

Client-side cloud computing, which is client-based software which is at the same time client and server to many other instances. Examples are:  Skype, BitTorrent, SETI@home.
Server-side cloud computing, which is automatically scalable systems like Amazon S3 [...]]]></description>
			<content:encoded><![CDATA[<p>The <em>cloud computing</em> is the style of computing which is linearly scalable over network.</p>
<p>There are at least 2 variations of concept:</p>
<ol>
<li>Client-side cloud computing, which is client-based software which is at the same time client and server to many other instances. Examples are:  <a href="http://www.skype.com/" target="_blank" title="Skype">Skype</a>, <a href="http://www.bittorrent.com/" target="_blank" title="BitTorrent">BitTorrent</a>, <a href="http://setiathome.ssl.berkeley.edu/" target="_blank" title="SETI@home">SETI@home</a>.</li>
<li>Server-side cloud computing, which is automatically scalable systems like <a href="http://aws.amazon.com/s3/" target="_blank" title="Amazon S3">Amazon S3</a> or <a href="http://code.google.com/appengine/" target="_blank" title="Google Apps Engine">Google Apps Engine</a>  or <a href="http://www.salesforce.com/" target="_blank" title="Salesforce">Salesforce</a> which provide services on their own platform and hardware and just platforms such as <a href="http://www.appistry.com/" target="_blank" title="Appistry">Appistry</a> for deployment on your own hardware.</li>
</ol>
<p>We will focus on questions and concerns about server-side case.</p>
<p>Server-side cloud computing is when the parts of the stack where your application is running is cloned on demand if load is increasing and freed on load decrease. This is of course mostly about web and business-logic parts of the stack but also for databases. I.e. if you can automatically get more computing resources and/or more scaled database.</p>
<p>This is all, of course, is nothing new and could be implemented with &#8220;old&#8221; software technologies, but usually all cloud providers supply their own API optimized for cloud computing. Currently most of clouds implementations supports databases, distributed caching and transactions.</p>
<h3>Concerns</h3>
<p>The main concern is, of course, security, since for cloud-services providers your software is deployed on other-company&#8217;s servers. Another concern is that this architecture have issues with short high spikes loads, when it starts to scale after spike.</p>
<h3>When to use</h3>
<ol>
<li>If you don&#8217;t know what load is going to be for your application;</li>
<li>When you don&#8217;t want to invest in your new hardware, clouds will be able to reuse your existing resources or you can rent the service, which will charge you only for used resources;</li>
</ol>
<p><a href="http://www.niallkennedy.com/blog/2009/03/cloud-computing-stack.html" target="_blank" title="The anatomy of cloud computing">The anatomy of cloud computing</a> is another good resource on this subject.</p>
<p><a href="http://www.techonline.com/learning/techpaper/213001678" target="_blank" title="Berkeley's view on the subject">Berkeley&#8217;s view on the subject.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/what-is-cloud-computing-cloud-computing-main-idea-explained/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why do I need inheritance in OOP? Real-world examples.</title>
		<link>http://artemgolubev.com/why-do-i-need-inheritance-in-oop-real-world-examples/</link>
		<comments>http://artemgolubev.com/why-do-i-need-inheritance-in-oop-real-world-examples/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 02:22:18 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OOP]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/why-do-i-need-inheritance-in-oop-real-world-examples/</guid>
		<description><![CDATA[The problem in general is that it is sometimes unclear from books why do we need some particular technology. In this case we are going to discuss why do you need inheritance and where it is used in real-life applications.
Let us at first remind what is inheritance (samples in Java):
public class Pet {
  public [...]]]></description>
			<content:encoded><![CDATA[<p>The problem in general is that it is sometimes unclear from books why do we need some particular technology. In this case we are going to discuss why do you need inheritance and where it is used in real-life applications.</p>
<p>Let us at first remind what is inheritance (samples in Java):</p>
<pre>public class Pet {
  public void say() { }
}

public class  Dog extends Pet {
  public void say() { System.out.println("I am a dog."); }
}

public class  Cat extends Pet {
  public void say() { System.out.println("I am a cat."); }
}

public class Test{
  public static void main(String[] args) {
    Pet pet1 = new Dog();
    Pet pet2 = new Cat();
    pet1.say();
    pet2.say();
  }
}</pre>
<p>This  programm will output:</p>
<p>I am a dog.</p>
<p>I am a cat.</p>
<p>The idea is very simple: despite pet1 and pet2 are of type Pet, pet1 is pointing to object of class Dog and pet is pointing  to object of class Cat.</p>
<p>The common question which is usually raised is: why we don&#8217;t have just  Dog pet1 = new Dog(); and Cat pet2 = new Cat(); ? Whe do we need to access it via Pet?</p>
<p>Let me give you some real-world examples where do we need it:</p>
<p>1. Servlets. When we create a servlet we inherit base servlet class and override method  doGet() or doPost()to add our functionality to the servlet. The server (for example Tomcat) have list of our servlet classes deployed, and as soon as it gets request for our servlet it loads our class, create an object and call doGet() or doPost() on it. As soon as server have no idea what classes do we have it address object of our class via variable of type HttpServlet.</p>
<p>2. The similar idea was used in early versions of Struts library.</p>
<p>3. In .NET as well as in Java you override Exception class or one of it&#8217;s successors to create exception specific to your application. The system (Java or .NET)  knows only how to work with Exception (and RuntimeException specificly in Java) and works with all your exceptions uniformaly.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/why-do-i-need-inheritance-in-oop-real-world-examples/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>2 eggs and a K-floors building puzzle</title>
		<link>http://artemgolubev.com/2-eggs-and-a-k-floors-building-puzzle/</link>
		<comments>http://artemgolubev.com/2-eggs-and-a-k-floors-building-puzzle/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 08:48:34 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[puzzle]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/2-eggs-and-a-k-floors-building-puzzle/</guid>
		<description><![CDATA[You have absolutely identical 2 eggs and empty K-story building. You can throw eggs from any floor and see if it was broken or not. If not, you can reuse it again momentarily. You need to identify the lowest floor, starting from which eggs is broken if thrown (&#8221;breaking floor&#8221;) in minimum possible steps in [...]]]></description>
			<content:encoded><![CDATA[<p>You have absolutely identical 2 eggs and empty K-story building. You can throw eggs from any floor and see if it was broken or not. If not, you can reuse it again momentarily. You need to identify the lowest floor, starting from which eggs is broken if thrown (&#8221;breaking floor&#8221;) in minimum possible steps in worst case.</p>
<p>Solution is here: <a title="the-problem-of-eggs-and-a-building.pdf" href="http://artemgolubev.com/wp-content/uploads/2009/07/the-problem-of-eggs-and-a-building1.pdf">the-problem-of-eggs-and-a-building.pdf</a></p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/2-eggs-and-a-k-floors-building-puzzle/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Secret question as the Big Security Issue and some solutions</title>
		<link>http://artemgolubev.com/secret-question-as-the-big-security-issue-and-some-solutions/</link>
		<comments>http://artemgolubev.com/secret-question-as-the-big-security-issue-and-some-solutions/#comments</comments>
		<pubDate>Wed, 08 Apr 2009 23:53:50 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Mathematics]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[security issue]]></category>
		<category><![CDATA[security question]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/secret-question-as-the-big-security-issue-and-some-solutions/</guid>
		<description><![CDATA[Here I&#8217;m going to discuss problems with security question for software architects.
Problem description
What is the way for hackers to access data of user&#8217;s account. It&#8217;s easy nowadays to let users use only cryptosecure passwords.  You can use this password meter if you want to tell them that their password is insecure and use the same [...]]]></description>
			<content:encoded><![CDATA[<p>Here I&#8217;m going to discuss problems with security question for software architects.</p>
<h3>Problem description</h3>
<p>What is the way for hackers to access data of user&#8217;s account. It&#8217;s easy nowadays to let users use only cryptosecure passwords.  You can use <a href="http://www.geekwisdom.com/dyn/passwdmeter" title="Password Meter">this password meter</a> if you want to tell them that their password is insecure and use the same code on server side to not to let user to set it. So let us assume that user&#8217;s password is already secure. But you probably want user to have a chance to reset her/his password if she/he has forgotten it. And here comes most of the issues. In my experience your security question either assume insecure answer or hard to use for users since they could have more than one correct answer for the security question. In any case this answer is far less cryptosecure then regular password, which makes it a security hole if used directly for show/change password. In my understanding show password is never should be used, for the following reasons:</p>
<ol>
<li>It makes you as a developer store it (even encrypted) in your storage (usually database). This approach is VERY bad since if some hacker will get access to the database she/he will get all password for all users. It is similar issue as storing credit card in your database and could be even worse, since users tend to use the same password everywhere. Best practice here is to store only hash of the password and check hash on login;</li>
<li>It provides password for user as a text, so user could save it somewhere, or someone could see it on user&#8217;s monitor.</li>
</ol>
<p>There <a href="http://www.computerworld.com/securitytopics/security/story/0,,99628,00.html" title="The curse of the secret question">are recommendations</a> for users how to use security question in more secure way, but I doubt many follows it. Change the password will not show hacker old password but still it is easy way to get to the system.</p>
<p>One more huge issue is that answer for security question is stored in database as text or slightly encripted text (instead of hash). This opens up the same issue as discussed earlier.</p>
<h3>Problem solutions</h3>
<p>Ideally, if you can afford yourself not to use security question at all it could be a solution (although, I don&#8217;t think it is possible nowadays) . Since even the following solution will be limited by security of user&#8217;s email account.</p>
<p>The only you could do here is the following:</p>
<ol>
<li>Use more than one security question and use them either randomly and/or more than one at the same time;</li>
<li>Or after security question(s) send the link to change password to user&#8217;s email (but not to show this email to user). In this case you will depend on security of user&#8217;s email. But if you don&#8217;t send link by email and just let user to change password this means that you providing access to user&#8217;s account secured only by secure questions which are far less cryptosecure. Alternatevely you can just show user&#8217;s hint for password, not the password itself.</li>
<li>This change password link should expire and contain some random token to check you don&#8217;t allow anyone else to use the same link to change password, and this token should expire immediately after password is changed and surely should be specific to the user (but should not be generated using any user&#8217;s information). The link itself must also not contain any information about the user;</li>
<li>Attempts to access user&#8217;s account with incorrect password or incorrect security question answer should be limited (say to 5 a day or some other way);</li>
<li>Each attempt to access security question and change password must be used along with <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">captcha</a>;</li>
<li>All communications with security question and changing password must be done over SSL (HTTPS);</li>
<li>Always notify user about failed attempts to access her/his account and about password change on the account. Attempt must be considered as failed here even if only  <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">captcha</a> test fails;</li>
<li>Treat answers to security questions as alternative passwords and work with them the same way, i.e. use password input to enter an answer first time and to input it from the user on password reset process. Store only HASH of the answer not the answer itself. This is, possibly, not very convenient for the user, but will help to keep her/his secret is you database is compromised, so I would call it understandable inconvenience.</li>
</ol>
<p>Pay attention to 5 which is usually forgotten.  <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">Captcha</a> here, I would say playing not only it&#8217;s primary role, but also makes path to change password this way uncomfortable for user, which make her/him to use password security versus security question access. It is, I would say,  administrative way of making users not to use this way. I would also do a multi-step change password procedure.</p>
<h3>Note on password change process</h3>
<p>The procedure of password change should be the following:</p>
<ol>
<li>After user answered security questions correctly and passed  <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">captcha</a> test, some token should be generated using (ideally completely) random information and stored in database in users table or some other 1:1 table pointing to user along with date and time when it was generated, mark user&#8217;s account as being updated (you can treat not null token as this flag). Link to change account should be generated like this: https://yoursite.com/secure/passupdt?t=&lt;NEWLY_GENERATED_TOKEN&gt;   For example it could be https://yoursite.com/secure/passupdt?t=dh678sHGs8Kjhksdflkj69387Ljhdfkjh&amp;899872320870HKJjhsfjhlsdf  This link should be sent to user&#8217;s email along with instruction how to copy/paste it in browser&#8217;s address line;</li>
<li>When user follows the link your code should read token, find user&#8217;s account based on this token. Make sure token is not expired (you can, for example, check that it was generated not earlier than 24 hours ago).  Here you can show a link to password change form of the form itself (don&#8217;t forget about <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">captcha</a> on the form);</li>
<li>After user passed <a href="http://en.wikipedia.org/wiki/Captcha" title="captcha">captcha</a> test and provided new password you must check token, flag and expiration time again and only then update the user&#8217;s password hash in your system, and remove the token and flag that account is being updated and send user an email notification that password was updated (this notification must not contain neither old nor new password itself and even should not contain information about the user).</li>
</ol>
<p>There is a possibility that user will try to access her/his account regular way (with regular password) after step 1 or step 2. There two possibilities: if this attempt was successful or not.</p>
<ul>
<li>If it was successful (means that user remind her/his password and successfully login) you must immediately clear token and token flag in login action and notify user that there was an attempt to change account&#8217;s password;</li>
<li>If it was not successful I don&#8217;t see anything you can do for change password process  (except regular login limitations and captcha starting form second failed attempt). Just notify user about one more failed attempt.</li>
</ul>
<p>There is one more thing here. If user selects to change password link but he always had successful login before &#8211; this means that this activity should be considered as suspicious and user should be asked for her/his password before proceeding. If password was correct then user should be logged in and redirected to regular first-after-login page, if password was incorrect then user should be notified (by email/SMS) and only then proceed to security questions. It is clear that hackers more likely will attempt to attack security questions and not password. One other way for you to avoid it could be not to provide access to forget_password link before user try to access account regular way and fail.</p>
<p>Again as an alternative instead of a link with token to change a password you can send temporary password to the user, who will have to change it on first login.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/secret-question-as-the-big-security-issue-and-some-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BlazeDS vs Granite DS vs WebORB vs LiveCycle DS for business applications on Flex and Java</title>
		<link>http://artemgolubev.com/blazeds-vs-graniteds-vs-weborb-vs-livecycleds-for-business-applications-on-flex-and-java/</link>
		<comments>http://artemgolubev.com/blazeds-vs-graniteds-vs-weborb-vs-livecycleds-for-business-applications-on-flex-and-java/#comments</comments>
		<pubDate>Sun, 26 Oct 2008 16:11:15 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[BlazeDS]]></category>
		<category><![CDATA[GraniteDS]]></category>
		<category><![CDATA[LiveCycleDS]]></category>
		<category><![CDATA[WebORB]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/blazeds-vs-graniteds-vs-weborb-vs-lifecycleds-for-business-applications-on-flex-and-java/</guid>
		<description><![CDATA[Here is the table of features I managed to find:


Feature
BlazeDS
Granite DS
WebORB
LiveCycle DS


Data management Services


Client-Server synchronization
-
+
+
+


Conflict resolution
-
-
+
+


Data paging
-
+
+
+


SQL adapter
-
-
+
+


Hibernate adapter
-
+
+
+


Document Services


LiveCycle remoting
-
-
+
+


RIA-to-PDF conversion
-
-
+(plugin)
+


Enterprise-Class Flex application services


Data access/remoting
+
+
+
+


Proxy service
+
+
+
+


Automated testing support
-
-
+(through RIA AppPuncher –coming soon)
+


Software clustering
+
+
+
+


Web tier compiler
-
+
+
+


Flex code generation
-
+
+
-


Enterprise Integration


WSRP generation
-
-
-
+


Ajax data services
+
-
+
+


Flex-Ajax bridge
+
-
-
+


Runtime configuration
+
-
+
+


Open adapter architecture
+
-
-
+


JMS adapter
+
+
+
+


Server-side component framework integration
+
+
+
+


Stateful services (session scope for Java [...]]]></description>
			<content:encoded><![CDATA[<p>Here is the table of features I managed to find:</p>
<table>
<tr>
<th>Feature</th>
<th>BlazeDS</th>
<th>Granite DS</th>
<th>WebORB</th>
<th>LiveCycle DS</th>
</tr>
<tr>
<td><strong>Data management Services</strong></td>
</tr>
<tr>
<td>Client-Server synchronization</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Conflict resolution</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Data paging</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>SQL adapter</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Hibernate adapter</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td><strong>Document Services</strong></td>
</tr>
<tr>
<td>LiveCycle remoting</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>RIA-to-PDF conversion</td>
<td>-</td>
<td>-</td>
<td>+(plugin)</td>
<td>+</td>
</tr>
<tr>
<td><strong>Enterprise-Class Flex application services</strong></td>
</tr>
<tr>
<td>Data access/remoting</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Proxy service</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Automated testing support</td>
<td>-</td>
<td>-</td>
<td>+(through RIA AppPuncher –coming soon)</td>
<td>+</td>
</tr>
<tr>
<td>Software clustering</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Web tier compiler</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Flex code generation</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
</tr>
<tr>
<td><strong>Enterprise Integration</strong></td>
</tr>
<tr>
<td>WSRP generation</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>+</td>
</tr>
<tr>
<td>Ajax data services</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Flex-Ajax bridge</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
</tr>
<tr>
<td>Runtime configuration</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Open adapter architecture</td>
<td>+</td>
<td>-</td>
<td>-</td>
<td>+</td>
</tr>
<tr>
<td>JMS adapter</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Server-side component framework integration</td>
<td>+</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Stateful services (session scope for Java objects)</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>?</td>
</tr>
<tr>
<td>Singleton services (application scope for Java objects)</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>?</td>
</tr>
<tr>
<td>Server-to-client method invocation</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>?</td>
</tr>
<tr>
<td>ColdFusion integration</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Service browser<br />
displaying POJOs,<br />
Spring beans, EJBs and<br />
a list of deployed JAR<br />
files</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>-</td>
</tr>
<tr>
<td><strong>Offline Application Support</strong></td>
</tr>
<tr>
<td>Offline data cache</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Local message queuing</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td><strong>Real &#8211; Time Data</strong></td>
</tr>
<tr>
<td>Publish and Subscribe messaging</td>
<td>+</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>Real -time data quality of service</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td>RTMP tunneling</td>
<td>-</td>
<td>-</td>
<td>+</td>
<td>+</td>
</tr>
<tr>
<td><strong>Frameworks build-in integration</strong></td>
</tr>
<tr>
<td>Spring</td>
<td>-</td>
<td>+</td>
<td>+</td>
<td>-</td>
</tr>
<tr>
<td>EJB3</td>
<td>-</td>
<td>+</td>
<td>?</td>
<td>-</td>
</tr>
</table>
<p>I used the following articles:</p>
<p><a href="http://sujitreddyg.wordpress.com/2008/01/31/blazeds-and-lcds-feature-difference/">http://sujitreddyg.wordpress.com/2008/01/31/blazeds-and-lcds-feature-difference/ </a></p>
<p><a href="http://www.infoq.com/news/2008/02/granite-data-services"> http://www.infoq.com/news/2008/02/granite-data-services</a></p>
<p><a href="http://www.themidnightcoders.com/weborb/java/product_editions.shtm">http://www.themidnightcoders.com/weborb/java/product_editions.shtm</a></p>
<p><a href="http://mcoderkat.wordpress.com/2009/02/08/weborb-for-java-vs-blazeds-vs-lcds/">http://mcoderkat.wordpress.com/2009/02/08/weborb-for-java-vs-blazeds-vs-lcds/</a></p>
<p><a href="http://www.graniteds.org/confluence/display/DOC/1.1.+What+is+Granite+Data+Services">http://www.graniteds.org/confluence/display/DOC/1.1.+What+is+Granite+Data+Services </a></p>
<p><a href="http://www.adobe.com/products/livecycle/dataservices/features.html"><br />
http://www.adobe.com/products/livecycle/dataservices/features.html </a></p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/blazeds-vs-graniteds-vs-weborb-vs-livecycleds-for-business-applications-on-flex-and-java/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Patterns mess: Abstract Factory versus Factory Method versus Builder, Adapter versus Bridge versus Composite versus Decorator versus Facade versus Proxy, etc.</title>
		<link>http://artemgolubev.com/patterns-mess-abstract-factory-versus-factory-method-versus-builder-adapter-versus-bridge-versus-composite-versus-decorator-versus-facade-versus-proxy-etc/</link>
		<comments>http://artemgolubev.com/patterns-mess-abstract-factory-versus-factory-method-versus-builder-adapter-versus-bridge-versus-composite-versus-decorator-versus-facade-versus-proxy-etc/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 20:44:13 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Design Patterns]]></category>
		<category><![CDATA[GoF]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/patterns-mess-abstract-factory-versus-factory-method-versus-builder-adapter-versus-bridge-versus-composite-versus-decorator-versus-facade-versus-proxy-etc/</guid>
		<description><![CDATA[Patterns mess: Abstract Factory versus Factory Method versus Builder, Adapter versus Bridge versus Composite versus Decorator versus Facade versus Proxy, etc.
At first I would like to mention that there is difference between all patterns I mentioned, but my point is that this difference is so insignificant that it wasn&#8217;t worse dividing all these patterns.I think [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Patterns mess: Abstract Factory versus Factory Method versus Builder, Adapter versus Bridge versus Composite versus Decorator versus Facade versus Proxy, etc.</strong></p>
<p>At first I would like to mention that there is difference between all patterns I mentioned, but my point is that this difference is so insignificant that it wasn&#8217;t worse dividing all these patterns.I think that Abstract Factory, Method, and Builder are all about the same: constructing objects with some method(s) and using inheritance technique to build different types (families) of object. The same is about Adapter, Bridge, Decorator, Facade, and Proxy in terms of GoF. I would reserve Proxy term for remote proxy in distributed environment, as it used now. Again for me all these patterns as presented by GoF are about intensive use of encapsulation. I personally think that existance of such amount of similar patterns is misleading.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/patterns-mess-abstract-factory-versus-factory-method-versus-builder-adapter-versus-bridge-versus-composite-versus-decorator-versus-facade-versus-proxy-etc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kazan State University Alumni group on LinkedIn</title>
		<link>http://artemgolubev.com/kazan-state-university-alumni-group-on-linkedin/</link>
		<comments>http://artemgolubev.com/kazan-state-university-alumni-group-on-linkedin/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 01:37:06 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Kazan State University]]></category>
		<category><![CDATA[KSU]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/kazan-state-university-alumni-group-on-linkedin/</guid>
		<description><![CDATA[I was surprised, but I did not find any linkedin group for Kazan State University on the linkedin.
So I had to create my own: http://www.linkedin.com/e/gis/985697
I will be happy to transfer managerial rights to enthusiasts.
]]></description>
			<content:encoded><![CDATA[<p>I was surprised, but I did not find any linkedin group for Kazan State University on the linkedin.</p>
<p>So I had to create my own: <a href="http://www.linkedin.com/e/gis/985697">http://www.linkedin.com/e/gis/985697</a></p>
<p>I will be happy to transfer managerial rights to enthusiasts.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/kazan-state-university-alumni-group-on-linkedin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sun Certified Enterprise Architect (SCEA) for Java Platform, Enterprise Edition 5</title>
		<link>http://artemgolubev.com/sun-certified-enterprise-architect-scea-for-java-platform-enterprise-edition-5/</link>
		<comments>http://artemgolubev.com/sun-certified-enterprise-architect-scea-for-java-platform-enterprise-edition-5/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 01:35:19 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[SCEA]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/sun-certified-enterprise-architect-scea-for-java-platform-enterprise-edition-5/</guid>
		<description><![CDATA[Finally found time for passing exam, and now I am a
Sun Certified Enterprise Architect (SCEA) for Java Platform, Enterprise Edition 5

I wonder how many people have this title?
I&#8217;d like to mention, that exam is  composed very good. It includes multiple choice exam, assignment and essay. Multiple choice is as usual, but assignment is good idea. [...]]]></description>
			<content:encoded><![CDATA[<p>Finally found time for passing exam, and now I am a</p>
<p>Sun Certified Enterprise Architect (SCEA) for Java Platform, Enterprise Edition 5</p>
<p><img src="http://artemgolubev.com/wp-content/uploads/2008/10/java_cert_ent_arch_cmyk1.png" alt="SCEA logo" /></p>
<p>I wonder how many people have this title?</p>
<p>I&#8217;d like to mention, that exam is  composed very good. It includes multiple choice exam, assignment and essay. Multiple choice is as usual, but assignment is good idea. It&#8217;ll allow examiners to see how you can handle regular architect tasks, and essay is just to check that you did you task by yourself.</p>
<p>If you interested in getting the title I would recommend visiting <a href="http://www.sun.com/training/catalog/java/architect.xml">Sun&#8217;s site</a>  and buying their Sun certified Enterprise Architect Study Guide and, of course, Core J2EE Patterns books, assuming that you already read GoF. It appeared to me that these books helps the most, despite they are quite old and do not reflect latest JEE5 features. On this features I would recommend reading Enterprise JavaBeans 3.0 (5th Edition) <span class="ptBrand">by Bill Burke and Richard Monson-Haefel and of course The Java EE5 Tutorial which is sometimes much more brief than Bill and Richard&#8217;s book.</span></p>
<p>The interesting thing among all of this is that Sun guys are pushing own terminology for enterprise patterns  which is not always the same as in already classical Patterns of Enterprise Application Architecture by Martin Fowler.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/sun-certified-enterprise-architect-scea-for-java-platform-enterprise-edition-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Конек-горбунок Porsche 911 Carrera S Cabriolet</title>
		<link>http://artemgolubev.com/konek-gorbunok-porsche-911-carrera-s-cabriolet/</link>
		<comments>http://artemgolubev.com/konek-gorbunok-porsche-911-carrera-s-cabriolet/#comments</comments>
		<pubDate>Thu, 31 Jul 2008 00:47:45 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[inRussian]]></category>
		<category><![CDATA[911]]></category>
		<category><![CDATA[Cabriolet]]></category>
		<category><![CDATA[porsche]]></category>
		<category><![CDATA[Porsche 911 Carrera S Cabriolet]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/konek-gorbunok-porsche-911-carrera-s-cabriolet/</guid>
		<description><![CDATA[Я всегда мечтал иметь Porsche.  Думал буду жить в своем домике и ездить на работу на этом средстве передвижения. И вот недавно взяли экземплярчик Porsche 911 Carrera S Cabriolet (997) с автоматической коробкой покататься.
По традиции, тех характеристики с сайта Porsche:

лошадок: 355;
крутящий момент: 400 на 4600 оборотах;
разгон до 100 км/ч: 5.4 сек;
расход 98 бензина на 100 км: 17.9/8.4 [...]]]></description>
			<content:encoded><![CDATA[<p>Я всегда мечтал иметь Porsche. <a href="http://artemgolubev.com/wp-content/uploads/2008/07/img_98321.JPG" title="img_9832.JPG"><img src="http://artemgolubev.com/wp-content/uploads/2008/07/img_98321-150x150.jpg" alt="img_9832.JPG" /></a> Думал буду жить в своем домике и ездить на работу на этом средстве передвижения. И вот недавно взяли экземплярчик Porsche 911 Carrera S Cabriolet (997) с автоматической коробкой покататься.</p>
<p>По традиции, тех характеристики с <a href="http://www.porsche.com/russia/models/911/911-carrera-s-cabriolet/featuresandspecs/">сайта Porsche</a>:</p>
<ul>
<li>лошадок: 355;</li>
<li>крутящий момент: 400 на 4600 оборотах;</li>
<li>разгон до 100 км/ч: 5.4 сек;</li>
<li>расход 98 бензина на 100 км: 17.9/8.4 в городе/за городом.</li>
</ul>
<p>Ну а теперь, что есть на самом деле. Ощущение такое, что там не 355 лошадок, а 355 нахрапистых взбесившихся коньков-горбунков, которые живут своей совершенно самостоятельной жизнью. Если не переключаться в ручной режим коробки передач, то при нажатии на газ горбунки с причитающейся секундной паузой сначала нехотя, а потом вдруг резко, начинают рваться вперед так, что даже мне жутко становится. Может, порше - это машинка исключительно для ручной коробки? Или ручного режима, чтобы ездить громко и быстро? На неровностях дороги коньки ведут себя тоже совершенно непредсказуемо. Могут прыгнуть куда им захочется. Хотя общая плавность хода вполне даже себе замечательная. Мне показалась лучше, чем на BMW. Ну а о шумоизоляции в салоне можно просто забыть. Это не для Porsche. Даже если едешь по трассе на 5-й передаче, на низких оборотах звук такой, как был у моего папы на 7-ке (ВАЗ, не бимер), когда у него глушак отвалился. Серьезно. Просто дежавю. А если отключить поршевскую фирменную систему стабилизации, то ездить быстро становится просто страшно. </p>
<p>Интересно также отношение порше к посадочной формуле 2+2. Если в бимере, <a href="http://artemgolubev.com/bmw-328i-convertible/">на котором мы катались в Los Angeles-е</a>, сзади совершенно спокойно умещались 2 пассажира, то в порше это возможно только при открытой крышке. Когда ее закрываешь, там не только невозможно сидеть не нагнувшись, но и вылезти проблематично. Если не производить хитрых махинаций с передними седлушками, они (седлушки, ес-но) просто не откинутся &#8211; крышу задевают (без шуток). Так что 2+2 по версии порше - это 2 пассажира и 2 сумочки :) Да и вообще, сегодня у любой самой дешевой мазды есть управление автомагнитолкой с руля. А конкретно, обычно можно регулировать громкость и переключать дорожки/файлы. В порше ничего такого нет. На месте этих переключалок стоят переключатели передач. Т.е. на руле только переключатели передач и бибикалка. Все, больше ничего. Типа слушайте, ребятки, моторчеГ, а не музычку.</p>
<p>Теперь про расход на 100. Все враки. Я ездил 80% времени по трассе, лишь слегка принажимая газок, и расход получился более 18 литров на 100. А вовсе не 8,5 и даже не 17,9! Но самый большой шок у меня вызвал прецедент, когда нам надо было остановиться, чтобы закрыть крышу, потом отъехать назад, чтобы попасть на полосу разгона, и после перестроения на дорогу коробку заклинило на 4-й передаче. Я чуть не поседел. Не помогало ничего, ни перевод в ручной режим, ни шелчки переключателя, ни переход на нейтралку. На самой же 4 по трассе ехать было очень некомфортно, т.к. оборотов было за 5000, и двигатель орал так, как будто мы не едем как все в потоке, а несемся с нереальной скоростью по автобану. Вот, кстати, 1 из преимуществ порше перед бимером это то, что крышку можно закрывать (чуть не написал &#8220;заколачивать&#8221;) <a href="http://www.porsche.com/russia/models/911/911-carrera-4s-cabriolet/indetail/comfort/">на скорости до 50 км в час</a>, а для того, чтобы проделать такой же фокус на бимере, надо полностью остановиться. Я помню, мы как-то ехали по трассе и пошел дождик, так мы проезжали мимо одного дядьки на бимере, который стоял на обочине и поднимал крышку. :)</p>
<p>Кстати, порше эта та машинка, про которую нельзя сказать &#8220;355 лошадок под капотом&#8221; и не из-за того, что у нее вместо лошадок бешенные горбунки, а из-за того, что под капотом у нее багажник<a href="http://artemgolubev.com/wp-content/uploads/2008/07/img_98491.JPG" title="img_9849.JPG"><img src="http://artemgolubev.com/wp-content/uploads/2008/07/img_98491-150x150.jpg" alt="img_9849.JPG" /></a> :) Натуральный такой багажник. А движок сзади.<a href="http://artemgolubev.com/wp-content/uploads/2008/07/img_98601.JPG" title="img_9860.JPG"><img src="http://artemgolubev.com/wp-content/uploads/2008/07/img_98601-150x150.jpg" alt="img_9860.JPG" /></a> </p>
<p>Из приятных моментов в голове отложился только разгон. Все просто отдыхали далеко позади, когда я нажимал на газок посильнее. Машинка рвала так, что мало не покажется. Правда именно поэтому в остальное время приходилось очень аккуратно дозировать нажатие, иначе болид, взревев моторищем, шустро разгонялся. И при включенной системе сталибизации машинка изображала из себя трамвай. Ну и, конечно же, зависть пролетариата. Афро-американские братья ограничивались обычно просто &#8220;look at this motherfucking car!&#8221;, а какой-то белый после разглядывания машинки в шутку заявил &#8220;so beautiful car!&#8221;,<a href="http://artemgolubev.com/wp-content/uploads/2008/07/img_98941.JPG" title="img_9894.JPG"><img src="http://artemgolubev.com/wp-content/uploads/2008/07/img_98941-150x150.jpg" alt="img_9894.JPG" /></a> &#8220;I hate you! I&#8217;ll kill you!&#8221;, обязался выйграть в лотерею такую же. :)</p>
<p>В общем, порше &#8211; это спортивный автомобильчик с минимумом удобств; если ездить на таком на работу &#8211; будешь приезжать уже уставшим, а вот как 2-я или 3-я машинка в гараже вполне даже ничего. Покататься с ветерком в свое удовольствие, показать пролетариату, кто есть кто :) Ну а для ежедневных поездок я бы выбрал драндулет поудобнее. Перед работой на дороге надо отдыхать! Так что у меня стресс &#8211; я думаю, что я уже совсем постарел для ежедневного порша.<a href="http://artemgolubev.com/wp-content/uploads/2008/07/img_98911.JPG" title="img_9891.JPG"><img src="http://artemgolubev.com/wp-content/uploads/2008/07/img_98911-150x150.jpg" alt="img_9891.JPG" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/konek-gorbunok-porsche-911-carrera-s-cabriolet/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BMW для алкашей</title>
		<link>http://artemgolubev.com/bmw-dlya-alkashej/</link>
		<comments>http://artemgolubev.com/bmw-dlya-alkashej/#comments</comments>
		<pubDate>Wed, 30 Jul 2008 00:27:29 +0000</pubDate>
		<dc:creator>Artem</dc:creator>
				<category><![CDATA[inRussian]]></category>
		<category><![CDATA[bmw]]></category>

		<guid isPermaLink="false">http://artemgolubev.com/bmw-dlya-alkashej/</guid>
		<description><![CDATA[Судя по рекламе BMW она позиционирует свою тройку для алкашей и наркоманов. У них на сайте в разделе видео есть клип 328i sedan, события в катором развиваются следующим образом: показывают что-то типа психушки или диспансера для алкаголиков, вокруг здания бегает мужичек. По нему сразу видно, что бухает. И причем серьезно так бухает, и, судя по [...]]]></description>
			<content:encoded><![CDATA[<p>Судя по рекламе BMW она позиционирует свою тройку для алкашей и наркоманов. У них <a href="http://www.bmwusa.com/Standard/Content/Vehicles/2008/3/335xiSedan/335xiSedanMediaGallery.aspx">на сайте</a> в разделе видео есть клип 328i sedan, события в катором развиваются следующим образом: показывают что-то типа психушки или диспансера для алкаголиков, вокруг здания бегает мужичек. По нему сразу видно, что бухает. И причем серьезно так бухает, и, судя по довольной роже, с утра уже принял. Затем он из фужеров для вина распивает с какой-то наркоманического вида женщиной жидкость непонятного содержания. Затем они вместе садятся в бимер и куда-то едут. Причем, половину клипа показывают, как их мотает по дороге, как они пересекают сплошную и как они с трудом вписываются в повороты. Типа бимер насолько прост в управлении, что даже в зюзю упитый алконавт с ним стправится.</p>
]]></content:encoded>
			<wfw:commentRss>http://artemgolubev.com/bmw-dlya-alkashej/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
