<?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>Waving Furiously &#187; programming</title>
	<atom:link href="http://reflectionsofmind.info/blog/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://reflectionsofmind.info/blog</link>
	<description>About Java and other stuff</description>
	<lastBuildDate>Mon, 05 Oct 2009 09:28:15 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Tests shouldn&#8217;t mirror the application</title>
		<link>http://reflectionsofmind.info/blog/2009/10/05/tests-shouldnt-mirror-the-application/</link>
		<comments>http://reflectionsofmind.info/blog/2009/10/05/tests-shouldnt-mirror-the-application/#comments</comments>
		<pubDate>Mon, 05 Oct 2009 08:51:22 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[FitNesse]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=1025</guid>
		<description><![CDATA[Some time ago I&#8217;ve created a suite of (FitNesse) acceptance tests for the app we are working on. Some of them were of the form of:
Given that a customer exists with customer name "John"
Given that a search results page is displayed for search criteria customer name "John"
Then at least one one customer should be displayed
Our [...]]]></description>
			<content:encoded><![CDATA[<p>Some time ago I&#8217;ve created a suite of (<a href="http://fitnesse.org/">FitNesse</a>) acceptance tests for the app we are working on. Some of them were of the form of:<br />
<code>Given that a customer exists with customer name "John"<br />
Given that a search results page is displayed for search criteria customer name "John"<br />
Then at least one one customer should be displayed</code></p>
<p>Our QA (correctly) noted that this test is far from perfect because it doesn&#8217;t check that the found customer is the one with name &#8220;John&#8221;. On the other hand, there could be more than customer with this name. This means that we should not only verify that <em>all found customers have the name &#8220;John&#8221;</em>, but also that <em>we have found all customers with such name</em>. So we should first look into the database to find out what customers should be in the list and then check that we display only them. Correct? <em>No!</em></p>
<p>The problem with this approach is that the test starts to mirror the application. It queries the database for customers with the name &#8220;John&#8221; &#8211; but isn&#8217;t this what the app does? If we made some mistakes in the app when implementing the query in the app, then who can guarantee that we won&#8217;t make the same mistakes when implementing that same query in the test? </p>
<p>So we limited ourselves with this:<br />
<code>Given that a customer exists with customer id "mock-customer-1" and name "John" and surname "Smith"<br />
Given that a search results page is displayed for search criteria id "mock-customer-1"<br />
Then at least one one customer should be displayed with name "John" and surname "Smith"<br />
And no customers should be displayed that don't have name "John" and surname "Smith"</code></p>
<p>Yes, this test does not verify that we found all the customers we searched for, but the only test that verifies application completely would be the application itself. Tests should be a stabilizing harness, not a copy, otherwise there&#8217;s no point in writing them.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2009/10/05/tests-shouldnt-mirror-the-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some programmer delusions</title>
		<link>http://reflectionsofmind.info/blog/2009/09/27/some-programmer-delusions/</link>
		<comments>http://reflectionsofmind.info/blog/2009/09/27/some-programmer-delusions/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 21:13:21 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=1010</guid>
		<description><![CDATA[It&#8217;s 21st century, but these delusions born in ages when editors were crude are still out there.
Formatting with spaces is better than formatting with tabs.
Because then the text would look the same for all readers in all editors.
I&#8217;ve seen people who use 8 spaces for indentation and I&#8217;ve seen people who say that one space [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s 21st century, but these delusions born in ages when editors were crude are still out there.</p>
<p><b><u>Formatting with spaces is better than formatting with tabs.</u></b></p>
<blockquote><p>Because then the text would look the same for all readers in all editors.</p></blockquote>
<p>I&#8217;ve seen people who use 8 spaces for indentation and I&#8217;ve seen people who say that one space is enough. For me, 4 spaces is optimum. Why should anyone adjust to author&#8217;s aesthetic prefernces when we have such a wonderful tool as tabulation that could be set to any length in modern editors?</p>
<p><b><u>Member variables should be prefixed with &#8220;m&#8221;.</u></b></p>
<blockquote><p>Because then we could see variable kind by looking at its name.</p></blockquote>
<p>Most modern languages already have a way for prefixing member variables with &#8220;this&#8221; &#8211; <code>this.someVar</code>. Why reinvent the wheel?</p>
<p><b><u>It&#8217;s better to comment a part of code than to delete it.</u></b></p>
<blockquote><p>Because it&#8217;s easier to roll back the change later.</p></blockquote>
<p>If it&#8217;s hard to roll back the change, use another version control system or better interface to it. Ease of rollback doesn&#8217;t justify having to struggle through cowardly code where there are more commented code than working just because &#8220;my changes could be wrong and someone could need to easily revert them later&#8221;. If you are not sure in your code, think about it more.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2009/09/27/some-programmer-delusions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>225</title>
		<link>http://reflectionsofmind.info/blog/2008/02/06/225/</link>
		<comments>http://reflectionsofmind.info/blog/2008/02/06/225/#comments</comments>
		<pubDate>Wed, 06 Feb 2008 13:41:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=943</guid>
		<description><![CDATA[А вы знаете, что BEA AquaLogic Data Service Platform использует в своих запросах антисемитские join&#8217;ы?

]]></description>
			<content:encoded><![CDATA[<p>А вы знаете, что BEA AquaLogic Data Service Platform использует в своих запросах антисемитские join&#8217;ы?</p>
<p><span id="more-943"></span><img src="http://reflectionsofmind.info/files/4lj/anti-semi-join.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2008/02/06/225/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>224</title>
		<link>http://reflectionsofmind.info/blog/2008/02/05/224/</link>
		<comments>http://reflectionsofmind.info/blog/2008/02/05/224/#comments</comments>
		<pubDate>Tue, 05 Feb 2008 13:06:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=942</guid>
		<description><![CDATA[Работаю с админкой AquaLogic Service Bus и понимаю, насколько даже самая базовая возможность писать скрипты облегчила бы мне жизнь. Удивительно, что никому в голову еще не пришло сделать админку с возможностью записывать и воспроизводить действия.
]]></description>
			<content:encoded><![CDATA[<p>Работаю с админкой AquaLogic Service Bus и понимаю, насколько даже самая базовая возможность писать скрипты облегчила бы мне жизнь. Удивительно, что никому в голову еще не пришло сделать админку с возможностью записывать и воспроизводить действия.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2008/02/05/224/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>213</title>
		<link>http://reflectionsofmind.info/blog/2008/01/18/213/</link>
		<comments>http://reflectionsofmind.info/blog/2008/01/18/213/#comments</comments>
		<pubDate>Fri, 18 Jan 2008 16:16:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=931</guid>
		<description><![CDATA[Цитата из одного поста:
I&#8217;ve been programming in Java for more than ten years. I have studied a lot of languages, and I keep learning new ones just out of curiosity. I even use some of these exotic languages here and there as the need warrants. Yes, some of these feel really good to program in [...]]]></description>
			<content:encoded><![CDATA[<p>Цитата из <a href="http://beust.com/weblog/archives/000472.html">одного поста</a>:</p>
<p style="margin-left: 12px; padding-left: 12px; border-left: 1px solid black;">I&#8217;ve been programming in Java for more than ten years. I have studied a lot of languages, and I keep learning new ones just out of curiosity. I even use some of these exotic languages here and there as the need warrants. Yes, some of these feel really good to program in (Ruby and Groovy for example)&#8230;</p>
<p>В начале 2008-го называть Ruby экзотическим языком &#8211; по сути, признаваться в отставании от блогосферы года эдак на два. Неудивительно, что Java автору кажется хорошим языком.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2008/01/18/213/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>192</title>
		<link>http://reflectionsofmind.info/blog/2007/11/26/192/</link>
		<comments>http://reflectionsofmind.info/blog/2007/11/26/192/#comments</comments>
		<pubDate>Mon, 26 Nov 2007 08:59:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=911</guid>
		<description><![CDATA[В Eclipse JDT есть такая полезная функция &#8211; автоформатирование по Ctrl+Shift+F. Но с ней связан один недостаток &#8211; в то время как она отлично исправляет отступы, с переносом строк у форматтера проблемы. В частности, регулярно возникает ситуация, когда аргумент а-ля final Object context оказывается разбит на две строки. В результате получается нечитабельный конгломерат вроде:
public IAdvancement.IInstance [...]]]></description>
			<content:encoded><![CDATA[<p>В Eclipse JDT есть такая полезная функция &#8211; автоформатирование по Ctrl+Shift+F. Но с ней связан один недостаток &#8211; в то время как она отлично исправляет отступы, с переносом строк у форматтера проблемы. В частности, регулярно возникает ситуация, когда аргумент а-ля <code>final Object context</code> оказывается разбит на две строки. В результате получается нечитабельный конгломерат вроде:</p>
<pre>public IAdvancement.IInstance instantiate(final Class
        clazz, final ICharacter character, final IHandler
        handler, final Object context) throws
        InapplicableException, CancelledException,
        HandlerException</pre>
<p><span id="more-911"></span>В то же время, если отменить переносы строк, то форматтер разворачивает весь этот текст в одну строку, убегающую далеко за правый край экрана. Недавно нашел способ как заставить форматтер сохранять переносы в тех местах, где я хочу разорвать строку. Для этого нужно сначала отключить переносы строк (т.е., установить максимальную длину строки в скажем, 800 символов), а затем &#8220;помечать&#8221; переносы через <code>//</code>:</p>
<pre>public IAdvancement.IInstance instantiate(final Class clazz, //
        final ICharacter character, final IHandler handler, final Object context) //
        throws InapplicableException, CancelledException, HandlerException</pre>
<p>Конечно, это костыль, но как минимум для собственных проектов, которые гарантированно будут писаться только в Eclipse, &#8211; вполне приемлемое решение.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/11/26/192/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>191</title>
		<link>http://reflectionsofmind.info/blog/2007/11/26/191/</link>
		<comments>http://reflectionsofmind.info/blog/2007/11/26/191/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 22:21:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=910</guid>
		<description><![CDATA[Чем дальше читаю Practical Common Lisp, тем больше понимаю, что он не для меня. Слишком в нем много легаси; Scheme оставил гораздо более приятные впечатления. Поэтому, учитывая, что реальное что-то на лиспе писать шансов у меня немного, остановился на Scheme.
BTW, я понимаю, что семантика важнее синтаксиса, но, тем не менее, программы на лиспе выглядят некрасиво [...]]]></description>
			<content:encoded><![CDATA[<p>Чем дальше читаю <a href="http://www.gigamonkeys.com/book">Practical Common Lisp</a>, тем больше понимаю, что он не для меня. Слишком в нем много легаси; Scheme оставил гораздо более приятные впечатления. Поэтому, учитывая, что реальное что-то на лиспе писать шансов у меня немного, остановился на Scheme.</p>
<p><span id="more-910"></span>BTW, я понимаю, что семантика важнее синтаксиса, но, тем не менее, программы на лиспе выглядят некрасиво и не очень читабельно; не в последнюю очередь из-за &#8216;(синтаксиса для списков). Лично мне приятнее читать, скажем, такое (синтаксис а-ля Template Haskell):</p>
<pre>(defmacro when (condition &#038;rest body)
  &lt;if $condition (progn @body))&gt;</pre>
<p>чем такое (как это есть в Common Lisp):</p>
<pre>(defmacro when (condition &#038;rest body)
  `(if ,condition (progn ,@body)))</pre>
<p>Кстати, говоря о Haskell. Меня он отпугивает отнюдь не академичностью, а тем, как представлены по нему материалы. В частности, я не против читания paper-ов, но я не хочу скачивать их в .tar.gz-архиве, компилировать .ps в .pdf (или искать вменяемый .ps-просмотровщик) и только после этого получать шанс взглянуть на текст в акробат ридере. В чем проблема публиковать копию статьи в HTML? </p>
<p>То же касается и библиотек: &#8220;последнюю версию 0.3.13 вы можете скачать из CVS&#8221;. Лучшее, на что можно надеяться &#8211; что она будет упакована в .tar.gz и датирована (т.к. очень многие проекты &#8211; те, которые с версиями, начинающимися с &#8220;0.&#8221; &#8211; не разберешь, живой он или уже лет пять как нет).</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/11/26/191/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>189</title>
		<link>http://reflectionsofmind.info/blog/2007/11/07/189/</link>
		<comments>http://reflectionsofmind.info/blog/2007/11/07/189/#comments</comments>
		<pubDate>Wed, 07 Nov 2007 09:59:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=908</guid>
		<description><![CDATA[Компании очень любят писать про свои core values, ну там, quality, effectiveness, knowledge sharing, дальше по стандартному списку&#8230; Было бы здорово, если б рядом с этими values писали еще и anti-values. Например, we don&#8217;t care about using modern &#038; effective technologies, we don&#8217;t use an individual approach to every employee and we don&#8217;t strive to [...]]]></description>
			<content:encoded><![CDATA[<p>Компании очень любят писать про свои core values, ну там, quality, effectiveness, knowledge sharing, дальше по стандартному списку&#8230; Было бы здорово, если б рядом с этими values писали еще и anti-values. Например, we don&#8217;t care about using modern &#038; effective technologies, we don&#8217;t use an individual approach to every employee and we don&#8217;t strive to become #1 in the industry. Сразу стало бы ясно, чего ожидать от компании и чего НЕ ожидать.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/11/07/189/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>188</title>
		<link>http://reflectionsofmind.info/blog/2007/10/05/188/</link>
		<comments>http://reflectionsofmind.info/blog/2007/10/05/188/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 13:06:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=907</guid>
		<description><![CDATA[Неужели некоторые люди всерьез думают, что class="height28" &#8211; это лучше, чем style="height: 28px"? Прямо CSS-каргокульт какой-то.
]]></description>
			<content:encoded><![CDATA[<p>Неужели некоторые люди всерьез думают, что <code>class="height28"</code> &#8211; это лучше, чем <code>style="height: 28px"</code>? Прямо CSS-каргокульт какой-то.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/10/05/188/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>187</title>
		<link>http://reflectionsofmind.info/blog/2007/10/05/187/</link>
		<comments>http://reflectionsofmind.info/blog/2007/10/05/187/#comments</comments>
		<pubDate>Fri, 05 Oct 2007 11:43:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=906</guid>
		<description><![CDATA[Нашел эпический тред про С++, быдло, программирование и вообще за жизнь. Рекодмендуется к прочтению всем начинающим программистам. Я лично узнал много нового и даже слегка изменил взгляд на свою профессию :)
]]></description>
			<content:encoded><![CDATA[<p>Нашел <a href="http://www.sql.ru/forum/actualthread.aspx?bid=16&#038;tid=466654&#038;pg=1">эпический тред</a> про С++, быдло, программирование и вообще за жизнь. Рекодмендуется к прочтению всем начинающим программистам. Я лично узнал много нового и даже слегка изменил взгляд на свою профессию :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/10/05/187/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>186</title>
		<link>http://reflectionsofmind.info/blog/2007/09/30/186/</link>
		<comments>http://reflectionsofmind.info/blog/2007/09/30/186/#comments</comments>
		<pubDate>Sat, 29 Sep 2007 22:20:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=905</guid>
		<description><![CDATA[Читаю фак по расширению Java-коллекций от Google; ребята жгут: 
Why build on Java 5, instead of 1.4?
Because we hate Java 1.4. Just kidding (but we do).
]]></description>
			<content:encoded><![CDATA[<p>Читаю фак по <a href="http://code.google.com/p/google-collections">расширению Java-коллекций от Google</a>; ребята <a href="http://code.google.com/p/google-collections/wiki/Faq">жгут</a>: </p>
<p><b>Why build on Java 5, instead of 1.4?</b><br />
Because we hate Java 1.4. Just kidding (but we do).</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/09/30/186/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>182</title>
		<link>http://reflectionsofmind.info/blog/2007/09/03/182/</link>
		<comments>http://reflectionsofmind.info/blog/2007/09/03/182/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 11:31:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=902</guid>
		<description><![CDATA[Вот, давеча походил по собеседованиям в три крупные компании, делюсь впечатлениями.
Luxoft
HR не понравились совершенно. Особенно разозлило, когда утром, выходя на работу, я получил от них звонок, что вот, мол, прямо сейчас у меня должно быть телефонное собеседование с заказчиком, о котором меня вчера должна была предупредить другая HRщица (причем, таки да, я потом откопал в [...]]]></description>
			<content:encoded><![CDATA[<p>Вот, давеча походил по собеседованиям в три крупные компании, делюсь впечатлениями.</p>
<p><a href="http://www.developers.org.ua/company-db/luxoft"><b>Luxoft</b></a></p>
<p>HR не понравились совершенно. Особенно разозлило, когда утром, выходя на работу, я получил от них звонок, что вот, мол, прямо сейчас у меня должно быть телефонное собеседование с заказчиком, о котором меня вчера должна была предупредить другая HRщица (причем, таки да, я потом откопал в телефоне пару пропущенных вызовов). Ну и, как и ожидалось, когда (скорее всего) заказчика не устроили сроки выхода меня на работу, мне не перезвонили.</p>
<p>Техническое собеседование было по телефону, технолог довольно нейтрально и спокойно поспрашивал меня по той части резюме, что относилось к проекту, никаких дискуссий не устраивали, что логично &#8211; по телефону дискутировать неинтересно.</p>
<p>Понравился офис. Комната, отведенная под проект, &#8211; небольшая, уютная, даже с кухонькой. Единственный (и довольно большой) минус &#8211; офис находится черт знает где.</p>
<p>Собеседование с ПМом прошло нормально и дружелюбно, порассказывал как и с чем работал я, послушал как и с чем работают они. В общем, произвели друг на друга впечатление вменяемых людей. :)</p>
<p><a href="http://www.developers.org.ua/company-db/epam-systems/"><b>EPAM Systems</b></a></p>
<p>Дважды был в их офисе: первый раз &#8211; участвовал в <a href="http://books.epam.ua">конкурсе</a>, второй раз &#8211; забирал книгу. Не удержался и спросил, почему не пользуются шансом &#8211; к ним ведь на конкурс далеко не худшие киевские разработчики приходят. Получил приглашение на собеседование :) Очень порадовало удобное расположение офиса в пяти минутах от метро Вокзальная.</p>
<p>HR очень хороший, приветливый и дружелюбный, было очень приятно общаться :)</p>
<p>Техническое собеседование проводили два программиста. Впечатления посредственные, шанса попонтоваться собеседователи не упустили. Но, тем не менее, все было лучше, чем в Componence год назад, где меня сравняли с плинтусом и предложили в два раза ниже, чем я получал :)</p>
<p><a href="http://www.developers.org.ua/company-db/source-valley-bonustec"><b>GlobalLogic</b></a></p>
<p>HR очень корректно созвонились, пригласили, показали презентацию, расспросили по нетехнической части резюме и планах на будущее, ответили на вопросы, представили проджект менеджера.</p>
<p>Собеседование с менеджером оказалось по совместительству и техническим. ПМ спокойно поспрашивал по релевантым технологиям и проектам из резюме, если я чего не знал/забыл &#8211; порассказывал, да и в целом &#8211; вызвал уважение. Жаль, но, похоже, на этот проект я не попаду в любом случае, т.к. туда программист нужен сразу, здесь и сейчас.</p>
<p>Офис расположен почти так же удобно как эпамовский, может быть, даже удобнее, учитывая, что вокруг больше жилых домов и легче будет снять квартиру. Соцпакет, правда, похуже эпамовского будет, но ненамного. В скором времени поеду еще раз, на другой проект собеседоваться.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/09/03/182/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>181</title>
		<link>http://reflectionsofmind.info/blog/2007/08/31/181/</link>
		<comments>http://reflectionsofmind.info/blog/2007/08/31/181/#comments</comments>
		<pubDate>Fri, 31 Aug 2007 15:32:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=901</guid>
		<description><![CDATA[Похоже, идет очередная волна программистской блогосферы. Теперь в фокусе &#8211; Erlang, D и Scala.
]]></description>
			<content:encoded><![CDATA[<p>Похоже, идет очередная волна программистской блогосферы. Теперь в фокусе &#8211; <a href="http://en.wikipedia.org/wiki/Erlang_(programming_language)">Erlang</a>, <a href="http://en.wikipedia.org/wiki/D_(programming_language)">D</a> и <a href="http://en.wikipedia.org/wiki/Scala_(programming_language)">Scala</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/08/31/181/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>180</title>
		<link>http://reflectionsofmind.info/blog/2007/08/22/180/</link>
		<comments>http://reflectionsofmind.info/blog/2007/08/22/180/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 22:25:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=900</guid>
		<description><![CDATA[В догонку к предыдущему посту. Возьмем тот же самый MVC. Очень хороший паттерн, безусловно. Но разве Model, View и Controller &#8211; единственные части, которые стоит разделять? Вот, например, список уровней веб-приложения, которые, по-хорошему, должны быть четко разделены:
1)&#160;Оформление (html, css, js-эффекты)
2)&#160;Разметка (html, css)
3)&#160;Статическое содержимое (html, message bundles)
4)&#160;Динамическое содержимое (html + forms)
5)&#160;Связь клиент-сервер (plain http, ajax)
6)&#160;Система генерации [...]]]></description>
			<content:encoded><![CDATA[<p>В догонку к предыдущему посту. Возьмем тот же самый MVC. Очень хороший паттерн, безусловно. Но разве Model, View и Controller &#8211; единственные части, которые стоит разделять? Вот, например, список уровней веб-приложения, которые, по-хорошему, должны быть четко разделены:</p>
<p>1)&nbsp;Оформление (html, css, js-эффекты)<br />
2)&nbsp;Разметка (html, css)<br />
3)&nbsp;Статическое содержимое (html, message bundles)<br />
4)&nbsp;Динамическое содержимое (html + forms)<br />
5)&nbsp;Связь клиент-сервер (plain http, ajax)<br />
6)&nbsp;Система генерации контента (шаблоны, jsp, whatever)<br />
7)&nbsp;Навигация (action dispatch, page flow)<br />
8)&nbsp;Конверсия<br />
9)&nbsp;Валидация<br />
10)&nbsp;Обработка событий<br />
11)&nbsp;Доступ к объектам-исполнителям (jndi, spring beans, всевозможные ioc-контейнеры, итд)<br />
12)&nbsp;Объекты-исполнители операций<br />
13)&nbsp;Манипуляция данными (plain jdbc, ejb, hibernate)<br />
14)&nbsp;Доступ к данным (jdbc drivers, соединение с БД)<br />
15)&nbsp;Схема хранения данных и операции с данными, реализованные на уровне БД (таблицы, constraints, хранимые процедуры)</p>
<p>Почему же при описании фремворков и других решений обычно говорят только о трех уровнях? На мой взгляд, MVC сам по себе &#8211; это слишком большое упрощение, чтобы использовать его как полноценную основу для проектирования или описания ПО. С другой стороны, для начинающих программистов разделение трех уровней &#8211; неплохое упражнение в анализе.</p>
<p>Пост вызван абзацем из книги Core JSF в стиле &#8220;а вы знаете, JSF тоже построен по MVC!&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/08/22/180/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>179</title>
		<link>http://reflectionsofmind.info/blog/2007/08/22/179/</link>
		<comments>http://reflectionsofmind.info/blog/2007/08/22/179/#comments</comments>
		<pubDate>Tue, 21 Aug 2007 22:07:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=899</guid>
		<description><![CDATA[Преклонение перед дизайн-паттернами порой ставит меня в тупик. То есть, да, это хорошо, если разработчик может организовать свой код в легко понимаемые и расцепленные структуры, но разве ограниченный набор, описанный в GoF (и последователях) &#8211; это предел возможностей? Особенно удивляют долгие рассуждения когда какой паттерн применять и какие у них есть достоинства и недостатки. Не [...]]]></description>
			<content:encoded><![CDATA[<p>Преклонение перед дизайн-паттернами порой ставит меня в тупик. То есть, да, это хорошо, если разработчик может организовать свой код в легко понимаемые и расцепленные структуры, но разве ограниченный набор, описанный в GoF (и последователях) &#8211; это предел возможностей? Особенно удивляют долгие рассуждения когда какой паттерн применять и какие у них есть достоинства и недостатки. Не думаю, что для опытного программиста применение паттерна требует больше интеллектуальных усилий, чем использование цикла или условного оператора.</p>
<p>Кроме того, из базовых кубиков ООП можно лепить самые разные конструкции &#8211; непонятно, почему некоторые из них гордо именуются Паттернами и обязательны к изучению и вспоминанию на собеседованиях, а другие &#8211; нет. Поэтому лично я рассматриваю их исключительно как примеры возможностей ООП и кикстартер для фантазии.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/08/22/179/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>177</title>
		<link>http://reflectionsofmind.info/blog/2007/08/17/177/</link>
		<comments>http://reflectionsofmind.info/blog/2007/08/17/177/#comments</comments>
		<pubDate>Fri, 17 Aug 2007 12:58:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=897</guid>
		<description><![CDATA[Поучаствовал в конкурсе компании Epam, выиграл книжку по JavaServer Faces, читаю. Начинаю ценить, когда фреймворк спроектирован так, чтобы хотя бы не мешать программисту. 
Intershop Enfinity &#8211; глючное убожество.
]]></description>
			<content:encoded><![CDATA[<p>Поучаствовал в <a href="http://books.epam.ua">конкурсе компании Epam</a>, выиграл книжку по JavaServer Faces, читаю. Начинаю ценить, когда фреймворк спроектирован так, чтобы хотя бы <i>не мешать</i> программисту. </p>
<p>Intershop Enfinity &#8211; глючное убожество.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/08/17/177/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>176</title>
		<link>http://reflectionsofmind.info/blog/2007/08/13/176/</link>
		<comments>http://reflectionsofmind.info/blog/2007/08/13/176/#comments</comments>
		<pubDate>Mon, 13 Aug 2007 14:03:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rpg]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=896</guid>
		<description><![CDATA[Каждый ролевик рано или поздно доходит до идеи написания своей системы.
Напрашивается аналогия с haskell и написанием туториала по монадам.
]]></description>
			<content:encoded><![CDATA[<p>Каждый ролевик рано или поздно доходит до идеи написания своей системы.<br />
Напрашивается аналогия с haskell и написанием туториала по монадам.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/08/13/176/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>173</title>
		<link>http://reflectionsofmind.info/blog/2007/06/22/173/</link>
		<comments>http://reflectionsofmind.info/blog/2007/06/22/173/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 08:24:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[rpg]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=893</guid>
		<description><![CDATA[Был .NET 3.0, теперь выходит .NET 3.5&#8230; Microsoft определенно напоминает некоторую другую компанию :)
]]></description>
			<content:encoded><![CDATA[<p>Был .NET 3.0, теперь выходит .NET 3.5&#8230; Microsoft определенно напоминает некоторую другую компанию :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/06/22/173/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>168</title>
		<link>http://reflectionsofmind.info/blog/2007/04/27/168/</link>
		<comments>http://reflectionsofmind.info/blog/2007/04/27/168/#comments</comments>
		<pubDate>Fri, 27 Apr 2007 19:07:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=888</guid>
		<description><![CDATA[Понравилось :) Отсюда.
Sometimes, the test justifies the means
The pupil asked two master programmers:
“I cannot test this code without mocking and violating encapsulation.
What should I do?”
One master programmer answered:
“Mocking is bad, and you should never violate encapsulation.
Rewrite the code so you can test it properly.”
The other master programmer answered:
“Mocking is good and testing trumps encapsulation.”
The pupil, [...]]]></description>
			<content:encoded><![CDATA[<p>Понравилось :) <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=203994">Отсюда</a>.</p>
<p><b><u>Sometimes, the test justifies the means</u></b></p>
<p>The pupil asked two master programmers:<br />
“I cannot test this code without mocking and violating encapsulation.<br />
What should I do?”</p>
<p>One master programmer answered:<br />
“Mocking is bad, and you should never violate encapsulation.<br />
Rewrite the code so you can test it properly.”</p>
<p>The other master programmer answered:<br />
“Mocking is good and testing trumps encapsulation.”</p>
<p>The pupil, confused, went out for a beer.</p>
<p>At the local watering hole he saw the great grand master<br />
programmer drinking beer and eating buffalo wings.</p>
<p>“Great grand master,” said the pupil, “I thought you did not drink.<br />
And aren’t you a vegetarian?”</p>
<p>The great grand master smiled and replied: “Sometimes your thirst is<br />
best quenched by beer and your hunger by buffalo wings.”</p>
<p>The pupil was no longer confused.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/04/27/168/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>153</title>
		<link>http://reflectionsofmind.info/blog/2007/03/19/153/</link>
		<comments>http://reflectionsofmind.info/blog/2007/03/19/153/#comments</comments>
		<pubDate>Mon, 19 Mar 2007 09:45:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=873</guid>
		<description><![CDATA[Очередная статья на dzone про &#8220;красивые&#8221; URL. И в очередной раз &#8211; непонимание принципов работы современного интернета. 
По пунктам:
1. Юзабилити
Когда вы последний раз вручную меняли URL? А тетя-Маша-бухгалтер? Возможность вручную влезть в строку адреса оценят разве что самые маргинальные гики, да и те будут ею пользоваться раз на месяц, т.к. любой вменяемый сайт позволяет аналогичную [...]]]></description>
			<content:encoded><![CDATA[<p>Очередная <a href="http://www.robertnyman.com/2007/03/16/the-importance-of-a-semantic-url/">статья</a> на <a href="http://www.dzone.com">dzone</a> про &#8220;красивые&#8221; URL. И в очередной раз &#8211; непонимание принципов работы современного интернета. </p>
<p>По пунктам:</p>
<p><u><b>1. Юзабилити</b></u></p>
<p>Когда вы последний раз вручную меняли URL? А тетя-Маша-бухгалтер? Возможность вручную влезть в строку адреса оценят разве что самые маргинальные гики, да и те будут ею пользоваться раз на месяц, т.к. любой вменяемый сайт позволяет аналогичную редактированию URL навигацию через ссылки. Более того, большинство юзеров вообще не смотрит на строку адреса.</p>
<p><u><b>2. Поисковая оптимизация</b></u></p>
<p><a href="http://www.google.com.ph/search?q=site:www.yugatech.com&#038;hl=tl&#038;lr=&#038;client=firefox-a&#038;rls=org.mozilla:en-US:official&#038;hs=Mjk&#038;start=10&#038;sa=N">Гугл без проблем читает гет-ссылки</a>. Еще аргументы? :)</p>
<p><u><b>3. Возможность менять движок при сохранении ссылок</b></u></p>
<p>100% движков позволяют тем или иным образом ссылаться на свой контент по цифровым идентификаторам, а символьные имена рассматривают как алиасы. Таким образом, при переходе все равно придется отображать контент старого движка на новый по идентификаторам. Так чем здесь алиасы помогут?</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/03/19/153/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>147</title>
		<link>http://reflectionsofmind.info/blog/2007/03/05/147/</link>
		<comments>http://reflectionsofmind.info/blog/2007/03/05/147/#comments</comments>
		<pubDate>Sun, 04 Mar 2007 22:53:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=867</guid>
		<description><![CDATA[Scala. 25 строк кода. Мне страшно представить, во что бы это вылилось в Java.

object DatabaseSaver
{
    def save(database : Database) = new DatabaseSaver(database).save
}

class DatabaseSaver(database : Database)
{

    def save =
    {
        Logger.debugDive("Saving " + database.size + " artists");
    [...]]]></description>
			<content:encoded><![CDATA[<p>Scala. 25 строк кода. Мне страшно представить, во что бы это вылилось в Java.</p>
<p><span id="more-867"></span>
<pre><code>object DatabaseSaver
{
    def save(database : Database) = new DatabaseSaver(database).save
}

class DatabaseSaver(database : Database)
{

    def save =
    {
        Logger.debugDive("Saving " + database.size + " artists");
        database.foreach(this.writeArtist)
        Logger.debugRise("Saved " + database.size + " artists");
    }

    def writeArtist(artist : ArtistRecord) =
    {
        val similars = artist.similars.getOrElse(Nil)
        val document = &lt;artist name="{artist.name}"&gt;{similars.map(this.similarNode)}&lt;/artist&gt;
        XML.save(artist + ".xml", document, "UTF-8")
    }

    def similarNode(similar : SimilarRecord) = &lt;similar artist="{similar.name}" match="{similar.rate}" /&gt;
}</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/03/05/147/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>145</title>
		<link>http://reflectionsofmind.info/blog/2007/03/04/145/</link>
		<comments>http://reflectionsofmind.info/blog/2007/03/04/145/#comments</comments>
		<pubDate>Sun, 04 Mar 2007 17:21:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=865</guid>
		<description><![CDATA[Пока что лучшее определение для монад в ФП, которое я для себя выработал &#8211; это &#8220;значение, которое знает, как применять к себе функции&#8221;.
]]></description>
			<content:encoded><![CDATA[<p>Пока что лучшее определение для монад в ФП, которое я для себя выработал &#8211; это &#8220;значение, которое знает, как применять к себе функции&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/03/04/145/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>135</title>
		<link>http://reflectionsofmind.info/blog/2007/02/11/135/</link>
		<comments>http://reflectionsofmind.info/blog/2007/02/11/135/#comments</comments>
		<pubDate>Sun, 11 Feb 2007 12:56:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=855</guid>
		<description><![CDATA[Сейчас будет субъективщина. Пишу по личным ощущениям. Когда я только начинал кодить на Java (1-2 года назад), шел (заканчивался, точнее) бум IoC/AOP &#8211; Spring, PicoContainer, Avalon, AspectJ, итд. Ну и Hibernate тоже то и дело вспывал. Чуть позже ненадолго фокус заняли веб-фреймворки. Потом &#8211; динамические языки. А сейчас &#8211; какое-то странное затишье. Наверное, все в [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас будет субъективщина. Пишу по личным ощущениям. Когда я только начинал кодить на Java (1-2 года назад), шел (заканчивался, точнее) бум IoC/AOP &#8211; Spring, PicoContainer, Avalon, AspectJ, итд. Ну и Hibernate тоже то и дело вспывал. Чуть позже ненадолго фокус заняли веб-фреймворки. Потом &#8211; динамические языки. А сейчас &#8211; какое-то странное затишье. Наверное, все в ожидании Java 7 :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/02/11/135/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>133</title>
		<link>http://reflectionsofmind.info/blog/2007/02/08/133/</link>
		<comments>http://reflectionsofmind.info/blog/2007/02/08/133/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 20:25:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=853</guid>
		<description><![CDATA[Сейчас на работе ежедневно сталкиваюсь с такими монструозностями, как Websphere Commerce и Intershop Enfinity. Это такие навороченные веб-магазины, ориентированные на расширение и кастомизацию. Потрясающе поучительные системы &#8211; рассеивают всякие сомнения о том, зачем и как пишут программы Большие Корпорации. Зачем &#8211; ну понятно, чтобы Загребать Бабло. Других причин написания нет. Опенсорс-проекты пишутся чтобы Улучшить Мир. [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас на работе ежедневно сталкиваюсь с такими монструозностями, как Websphere Commerce и Intershop Enfinity. Это такие навороченные веб-магазины, ориентированные на расширение и кастомизацию. Потрясающе поучительные системы &#8211; рассеивают всякие сомнения о том, зачем и как пишут программы Большие Корпорации. Зачем &#8211; ну понятно, чтобы Загребать Бабло. Других причин написания нет. Опенсорс-проекты пишутся чтобы Улучшить Мир.  Какие-нибудь, скажем, JIRA и Confluence &#8211; промежуточный вариант. А здесь же Загребание Бабла &#8211; причина и цель существования этих продуктов.</p>
<p>И второй пункт &#8211; как. Пишут так, чтобы любой идиот, отхлопав ушами курс &#8220;Java для тех, кого выгнали из платной заочки в ПТУ&#8221;, мог туда добавить фичу. ООП? ФП? Слишком сложно! До свиданья 21 век, добро пожаловать в 90-е. Нет, конечно, классы там есть. Только они все уже придуманы IBM. Да-да. Их разработали тринадцать Старших Архитекторов на сто сорока Митингах, и кто ты такой чтобы придумывать свои?! Ты вообще хоть представляешь себе, какая это грандиозная задача &#8211; Придумать Класс?!</p>
<p>Нет, есть у них и позитивные моменты. Во-первых, это навороченность, покрывающая с головой 99% желаний даже самого извращенного клиента. Разгребаясь с фичами начинаешь понимать, как работает вся эта е-коммерс кухня. И во-вторых, хотя это и сложно назвать фичей продукта &#8211; поддержка со стороны IBM. Т.е., если у тебя есть магазин на Websphere Commerce, а написавшая его компания внезапно обанкротилась, то другую фирму для поддержки найти можно будет без проблем. В теории, конечно. В реальности, благодаря легко расширяемой любым индусом архитектуре, появляются JSPшки с джава-секциями длиной в 1000+ строк и реюзаемыми уберглобалами. Но менеджеры об этом не знают, а знают они что IBM &#8211; это стабильность и надежность, в отличии от Ivan Petrov Pradakshens Inc Ltd.</p>
<p>В общем, если будете заказывать себе веб-магазин, не берите решения от крупных корпораций. Вообще не берите программистские решения от крупных корпораций.</p>
<p>PS: Интересно, а в других сферах производства кроме программирования &#8211; такая же ситуация?</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2007/02/08/133/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>110</title>
		<link>http://reflectionsofmind.info/blog/2006/11/08/110/</link>
		<comments>http://reflectionsofmind.info/blog/2006/11/08/110/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 21:53:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=833</guid>
		<description><![CDATA[Цитата из статьи 11 ways to motivate geeks:


11. Offer Free Food&#8230;Intermittently. Never underestimate the power of free food. I can’t offer any rational explanation, but for geeks, even those making sizeable incomes, free food offers major support to motivation development, far more than an equivalent amount of cash.


А ведь он прав!
И правда удивительно :)
Только вот [...]]]></description>
			<content:encoded><![CDATA[<p>Цитата из статьи <a href="http://articles.techrepublic.com.com/5100-10878_11-6131634.html">11 ways to motivate geeks</a>:<br />
<table style="border: 1px solid black; margin: 10px">
<tr>
<td>11. Offer Free Food&#8230;Intermittently. Never underestimate the power of free food. I can’t offer any rational explanation, but for geeks, even those making sizeable incomes, free food offers major support to motivation development, far more than an equivalent amount of cash.</td>
</tr>
</table>
<p>А ведь он прав!<br />
И правда удивительно :)<br />
Только вот intermittently там не в тему.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/11/08/110/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>109</title>
		<link>http://reflectionsofmind.info/blog/2006/11/06/109/</link>
		<comments>http://reflectionsofmind.info/blog/2006/11/06/109/#comments</comments>
		<pubDate>Mon, 06 Nov 2006 19:47:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=832</guid>
		<description><![CDATA[Будь проклято все, что начинается с &#60;% !!! Сегодня видел внутри JSP нечто вроде такого:

&#60;% if (!foo.equals(bar)) { %&#62; &#60;a href="/servlet/Name?param1=&#60;% if (baz == null) { %&#62;text1&#38;param2=&#60;%=foo%&#62;&#60;% }
else { %&#62;text2&#60;% } %&#62;"&#62; &#60;%=linkText%&#62; &#60;/a&#62; &#60;% } %&#62;
Говорите, перл сложно читать?..
Не, я знаю, что Хорошие Программисты так не делают и что у них даже JSP читабельные [...]]]></description>
			<content:encoded><![CDATA[<p>Будь проклято все, что начинается с &lt;% !!! Сегодня видел внутри JSP нечто вроде такого:</p>
<p><span id="more-832"></span>
<pre>&lt;% if (!foo.equals(bar)) { %&gt; &lt;a href="/servlet/Name?param1=&lt;% if (baz == null) { %&gt;text1&amp;param2=&lt;%=foo%&gt;&lt;% }
else { %&gt;text2&lt;% } %&gt;"&gt; &lt;%=linkText%&gt; &lt;/a&gt; &lt;% } %&gt;</pre>
<p>Говорите, перл сложно читать?..</p>
<p>Не, я знаю, что Хорошие Программисты так не делают и что у них даже JSP читабельные и красивые. Да только вот эти программисты все меньше про JSP говорят в пользу каких-то там странных нестандартных слов типа Velocity. А кластерным негрокодерам легче сменить профессию чем выучить что-то новое. И вот JSP накручивают, накручивают&#8230; Специальные таги для обращения к БД! Для вызова вебсервисов! Забудьте об устаревших java-файлах, почувствуйте себя пхпшником! </p>
<p>Я искренне надеюсь, что больше 10 лет такое не протянется. Java EE к тому времени будет динозавром из глубин истории, а проектировщики новых языков больше думают головой чем отделом маркетинга.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/11/06/109/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>107</title>
		<link>http://reflectionsofmind.info/blog/2006/11/06/107/</link>
		<comments>http://reflectionsofmind.info/blog/2006/11/06/107/#comments</comments>
		<pubDate>Sun, 05 Nov 2006 21:38:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=830</guid>
		<description><![CDATA[Sunовские стандарты кодирования для java приводят меня в тихий ужос. Человек, придумавший ставить { на одной строке с оператором, 100% втайне ненавидел программистов. К сожалению, большие корпорации очень часто ведутся на самые идиотские стандарты и это правило просочилось в сановские конвенции. Плюс, нелюбовь сановских программистов к префиксу this породила кучу уродливейших _field, mField, aField, theField [...]]]></description>
			<content:encoded><![CDATA[<p>Sunовские стандарты кодирования для java приводят меня в тихий ужос. Человек, придумавший ставить { на одной строке с оператором, 100% втайне ненавидел программистов. К сожалению, большие корпорации очень часто ведутся на самые идиотские стандарты и это правило просочилось в сановские конвенции. Плюс, нелюбовь сановских программистов к префиксу this породила кучу уродливейших _field, mField, aField, theField и других монструозных именований.</p>
<p>А вот почитал давеча http://blogs.msdn.com/brada/articles/361363.aspx &#8211; стандарты кодирования для C#. Разница налицо. { на новой строке, this рекомендован, case-ы с отступом от switch-а, интерфейсы префиксировать I&#8230; Даже /// выигрывает у /** * */ по читабельности и простоте. XML против @param&#8217;ов &#8211; тоже выгода очевидна.</p>
<p>В такие моменты начинаешь подумывать, а не переметнуться ли на .NET. Пусть там нет такого коммьюнити и опенсорса, зато чисто на уровне кодинга удовольствия буду получать в разы больше, особенно с учетом фишек из 3.0. И никогда-никогда больше не увижу этот abyssal horror that is JSP. Да, темная сторона не сильнее, но зато она легче&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/11/06/107/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>99</title>
		<link>http://reflectionsofmind.info/blog/2006/10/10/99/</link>
		<comments>http://reflectionsofmind.info/blog/2006/10/10/99/#comments</comments>
		<pubDate>Tue, 10 Oct 2006 07:59:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=822</guid>
		<description><![CDATA[Под катом &#8211; пример того, как функциональный стиль хавает мой моск.
Есть лист кнопок. Нужно отфильтровать их по типу. Недолго думая, написал такой вот код:

    final Predicate predicate = new Predicate()
    {
        public boolean evaluate(final Object button)
       [...]]]></description>
			<content:encoded><![CDATA[<p>Под катом &#8211; пример того, как функциональный стиль хавает мой моск.<br />
Есть лист кнопок. Нужно отфильтровать их по типу. Недолго думая, написал такой вот код:
<div style="background-color: #fff; border: 1px solid black;">
<pre><font color="black">    <font color="7F0055"><b>final</b></font> Predicate predicate = <font color="7F0055"><b>new</b></font> Predicate()
    {
        <font color="7F0055"><b>public</b></font> <font color="7F0055"><b>boolean</b></font> evaluate(<font color="7F0055"><b>final</b></font> Object button)
        {
            <font color="7F0055"><b>final</b></font> Button.Type type = ((Button)button).getType();
            <font color="7F0055"><b>return</b></font> PrintingPage.<font color="7F0055"><b>this</b></font>.allowedButtonTypes.contains(type);
        }
    };

    <font color="7F0055"><b>return</b></font> (List&lt;Button&gt;)CollectionUtils.select(
            <font color="7F0055"><b>this</b></font>.buttonDao.getAllButtons(department), predicate);</font></pre>
<p>Остановился. Подумал. Спилил мушку. Исправил на:</p>
<div style="background-color: #fff; border: 1px solid black;">
<pre><font color="black">    <font color="7F0055"><b>final</b></font> List&lt;Button&gt; buttons = <font color="7F0055"><b>new</b></font> ArrayList&lt;Button&gt;();

    <font color="7F0055"><b>for</b></font> (Button button : <font color="7F0055"><b>this</b></font>.buttonDao.getAllButtons(department))
    {
        <font color="7F0055"><b>if</b></font> (PrintingPage.<font color="7F0055"><b>this</b></font>.allowedButtonTypes.contains(button.getType()))
        {
            buttons.add(button);
        }
    }

    <font color="7F0055"><b>return</b></font> buttons;</font></pre>
<p>Надеюсь, в седьмой джаве наконец-то можно будет написать</p>
<div style="background-color: #fff; border: 1px solid black;">
<pre><font color="black">    <font color="7F0055"><b>return</b></font> <font color="7F0055"><b>this</b></font>.buttonDao.getAllButtons(department).filter(
        (<font color="7F0055"><b>void</b></font>) => PrintingPage.<font color="7F0055"><b>this</b></font>.allowedButtonTypes.contains(button.getType()));</font></pre>
<p>или хотя бы</p>
<div style="background-color: #fff; border: 1px solid black;">
<pre><font color="black">    <font color="7F0055"><b>return</b></font> <font color="7F0055"><b>this</b></font>.buttonDao.getAllButtons(department).filter(
        (<font color="7F0055"><b>void</b></font>) => (<font color="7F0055"><b>boolean</b></font>) { <font color="7F0055"><b>return</b></font> PrintingPage.<font color="7F0055"><b>this</b></font>.allowedButtonTypes.contains(button.getType())); });  </font></pre>
<p>потому что оба первых листинга &#8211; уродство.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/10/10/99/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>83</title>
		<link>http://reflectionsofmind.info/blog/2006/09/08/83/</link>
		<comments>http://reflectionsofmind.info/blog/2006/09/08/83/#comments</comments>
		<pubDate>Fri, 08 Sep 2006 04:21:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=806</guid>
		<description><![CDATA[А у нас в квартире газ, а у вас?
Тест Джоэля для компании где я работаю.
 Do you use source control?
 Can you make a build in one step?
 Do you make daily builds?
 Do you have a bug database?
 Do you fix bugs before writing new code?
 Do you have an up-to-date schedule?
 Do you [...]]]></description>
			<content:encoded><![CDATA[<p>А у нас в квартире газ, а у вас?<br />
<a href="http://local.joelonsoftware.com/mediawiki/index.php/Тест_Джоэла:_12_шагов_к_лучшему_коду#.D0.9F.D1.80.D0.BE.D0.B2.D0.BE.D0.B4.D0.B8.D1.82.D0.B5_.D0.BB.D0.B8_.D0.B2.D1.8B_.D0.BA.D0.BE.D1.80.D0.B8.D0.B4.D0.BE.D1.80.D0.BD.D0.BE.D0.B5_.D1.82.D0.B5.D1.81.D1.82.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D1.83.D0.B4.D0.BE.D0.B1.D1.81.D1.82.D0.B2.D0.B0_.D0.B8.D1.81.D0.BF.D0.BE.D0.BB.D1.8C.D0.B7.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.3F">Тест Джоэля</a> для компании где я работаю.</p>
<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_support_vote.svg.png"/> Do you use source control?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_support_vote.svg.png"/> Can you make a build in one step?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do you make daily builds?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_support_vote.svg.png"/> Do you have a bug database?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do you fix bugs before writing new code?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do you have an up-to-date schedule?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_support_vote.svg.png"/> Do you have a spec?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_support_vote.svg.png"/> Do programmers have quiet working conditions?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do you use the best tools money can buy?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/94/Symbol_support_vote.svg/15px-Symbol_support_vote.svg.png"/> Do you have testers?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do new candidates write code during their interview?<br />
<img src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Symbol_oppose_vote.svg/15px-Symbol_oppose_vote.svg.png"/> Do you do hallway usability testing?</p>
<p>Если смотреть оптимистично, то 6 из 12. Если пессимистично, то вычеркнуть source control, spec и schedule. Зато у нас CMMI4, да&#8230; :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/09/08/83/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>82</title>
		<link>http://reflectionsofmind.info/blog/2006/09/07/82/</link>
		<comments>http://reflectionsofmind.info/blog/2006/09/07/82/#comments</comments>
		<pubDate>Thu, 07 Sep 2006 08:53:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=805</guid>
		<description><![CDATA[Некоторые резюме говорят сами за себя. Например, если в резюме на позицию Java-разработчика кандидат пишет &#8220;опыт работы в Windows XP, 2000, 98, 95, 3.1, MS-DOS 6.22, 6.0, 5.0, Linux Mandrake, Linux Gentoo, FreeBSD&#8221;, то он скорее всего или неквалифицирован, или не умеет составлять резюме. 
Если он неквалифицирован, то тут уже ничего не поделаешь. Если же [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые резюме говорят сами за себя. Например, если в резюме на позицию Java-разработчика кандидат пишет &#8220;опыт работы в Windows XP, 2000, 98, 95, 3.1, MS-DOS 6.22, 6.0, 5.0, Linux Mandrake, Linux Gentoo, FreeBSD&#8221;, то он скорее всего или неквалифицирован, или не умеет составлять резюме. </p>
<p>Если он неквалифицирован, то тут уже ничего не поделаешь. Если же кандидат просто наслушался идиотских советов пихать в резюме все, что знает/слышал, то это простительно &#8211; в конце-концов, он же программист, а не специалист по поиску работы.</p>
<p>Но есть и другая сторона &#8211; объявления о работе.</p>
<p><span id="more-805"></span>Первое:</p>
<table style="border: 1px solid black; background-color: #ddd">
<tr>
<td>Java Developer<br />
at Omnidrive, Inc.<br />
Trivandrum, India<br />
Omnidrive is a Silicon Valley-based startup with an office in Trivandrum, India. We are looking to extend our team with some top quality and bright people. Don&#8217;t miss your chance to get involved in the revival of the web and web companies, jump in now with a startup that has the product, idea, backing and team to go far.</p>
<p>You will need to:</p>
<p>* Be experienced Java web applications developer.<br />
* Love coding, solving problems and have previously developed or worked on a cool web-related project.<br />
* Be smart and get things done<br />
* Be highly motivated and be able to bring ideas and introduce efficiencies<br />
* Be confident in using Tomcat and Jakarta<br />
* Be good programming principles, how to test code properly and why using a repository like SVN is a good thing.<br />
* Be a good architect and problem solver.</p>
<p>What would be cool?</p>
<p>* Experience with automated test tools<br />
* You know how to keep data secure using encryption<br />
* You understand how compression works<br />
* Knowledge of UNIX environments (Linux, BSD etc.)<br />
Interested?<br />
If you believe you have skills and motivation to work in a fast-paced startup environment then please apply.</p>
<p>For more information on the company please see our website at: www.omnidrive.com or to apply email jobs@omnidrive.com</td>
</tr>
</table>
<table style="border: 1px solid black; background-color: #ddd">
<tr>
<td>Software development company is looking for professional and talented Java developer to work for a full time basis.</p>
<p>Main responsibilities: Within a team of developers you will contribute to design and development of new functions as well as enhancement on existing software and implement bug fixes. </p>
<p>The potential candidate should meet the following requirements:<br />
• Technical background (MS/BS degree in Computer Science or related field preferred);<br />
• 2+ years of experience in software development is a must;<br />
• Strong Java, J2EE/EJB, Struts/jsp coding experience is a must;<br />
• Expertise required in JBoss/Apache, Oracle/MSSQL;<br />
• Deep understanding of Windows/*nix OS;<br />
• Knowledge of software development life cycle;<br />
• Good level of English both in speech and writing is required;<br />
• Experience of cooperation with foreign clients and company members (e-mail, voice IP) is an advantage.</p>
<p>We offer exciting projects, work within professional IT team, comfortable working environment and competitive compensation based on professional skills and working experience.</p>
<p>If you are interested in this position, please email us your resume with subject “Java developer”. Resumes in English will be given preferences.</td>
</tr>
</table>
<p>В чем же разница?</p>
<table border="1">
<tr>
<th>Omnidrive</th>
<th>Неизвестная компания</th>
</tr>
<tr>
<td>Указывает свое название, где находится и адрес сайта</td>
<td>Не указывает даже названия</td>
</tr>
<tr>
<td>Пишет требования к кандидату как к профессионалу</td>
<td>Как к базе данных + машинке по набиванию кода + извлечению требований из заказчика</td>
</tr>
<tr>
<td>Не упоминает о зарплате</td>
<td>Упоминает о зарплате, но в общих чертах</td>
</tr>
</table>
<p>Итак, что мы имеем? </p>
<p>Omnidrive &#8211; уверенная в себе компания ищет разработчика, который может &#8220;make a difference&#8221;. Компания может отличить хорошего разработчика от среднего и, безусловно, хорошему предложит такую зарплату, которая будет его устраивать. В первую очередь внимание обращается на то, чтобы разработчик был фанат и профи. Эти два качества перекрывают опыт работы и известные технологии (разве может профессионал не интересоваться современными технологиями?). Если к ним придет кандидат с годом опыта, но отличными знаниями и пониманием, его возьмут без проблем.</p>
<p>Незвестная компания &#8211; не дает о себе никакой инфы, так что есть сомнения в легальности. Пишет список технологий и сколько лет опыта. Кто не знает JBoss/Apache &#8211; извините, вам тут не место. А если меньше двух лет опыта &#8211; то вообще не суйтся, мальчик, тут взрослые дяди работают. Очевидно, что нужны не профи, а середнячки-исполнители. Ну и зарплата &#8211; &#8220;competitive compensation&#8221;. Раз уже начали говорить &#8211; так говорите до конца, вилку хотя бы напишите.</p>
<p>Собственно, к чему я это? А к тому, что если кандидат может себе позволить не тратить время на продумывание резюме (ну не его это специализация), то HR-отделу такое непростительно. И, глядя на такое объявление, возникает мысль &#8211; а стоит ли вообще идти в компанию, которая даже привлекательное описание вакансии составить не может?</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/09/07/82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>76</title>
		<link>http://reflectionsofmind.info/blog/2006/08/26/76/</link>
		<comments>http://reflectionsofmind.info/blog/2006/08/26/76/#comments</comments>
		<pubDate>Sat, 26 Aug 2006 00:53:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=799</guid>
		<description><![CDATA[Читаю про Scala. Язык моей мечты. Я долго пытался высмотреть такой вот язык для Java-платформы, но все никак не находил &#8211; то примитивные типы оставались, то еще какая-нибудь гадость. Но и у этого есть один недостаток &#8211; переменные (и все остальное) объявляются не как &#8220;int value&#8221;, а как &#8220;value : int&#8221;. Я привык именовать переменные [...]]]></description>
			<content:encoded><![CDATA[<p>Читаю про <a href="http://scala.epfl.ch/">Scala</a>. Язык моей мечты. Я долго пытался высмотреть такой вот язык для Java-платформы, но все никак не находил &#8211; то примитивные типы оставались, то еще какая-нибудь гадость. Но и у этого есть один недостаток &#8211; переменные (и все остальное) объявляются не как &#8220;int value&#8221;, а как &#8220;value : int&#8221;. Я привык именовать переменные в стиле &#8220;Object object&#8221;, что с Eclipse&#8217;овой подсказкой для имен делается &#8220;Obj[Ctrl-Space][Space][Ctrl-Space]&#8220;. А с такой вот паскалевской записью такие трюки не пройдут. Разве что как-то макросом прописать чтобы имя и тип менялись местами после принятия подсказки для имени. Завтра посмотрю плагин эклипсовый &#8211; может там и есть такая фича.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/08/26/76/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>73</title>
		<link>http://reflectionsofmind.info/blog/2006/08/05/73/</link>
		<comments>http://reflectionsofmind.info/blog/2006/08/05/73/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 22:32:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=797</guid>
		<description><![CDATA[Этот мир определенно общается со мной :) Только запостил пост про джаву и ООП &#8211; сразу же наткнулся на объяснение почему джавовское ООП ацтойное и вообще. Написано много и красиво (я не шучу :)), и основная суть такая &#8211; в Java нельзя передавать функцию как переменную, а в Python можно, и в Ruby можно, а [...]]]></description>
			<content:encoded><![CDATA[<p>Этот мир определенно общается со мной :) Только запостил пост про джаву и ООП &#8211; сразу же наткнулся на <a href="http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html">объяснение</a> почему джавовское ООП ацтойное и вообще. Написано много и красиво (я не шучу :)), и основная суть такая &#8211; в Java нельзя передавать функцию как переменную, а в Python можно, и в Ruby можно, а в Haskell вообще нужно. И как было бы хорошо если бы в Java так тоже можно было.</p>
<p>Во-первых, в Java 7 такое скорее всего будет. А во-вторых, у first-class функции есть один недостаток &#8211; у нее нет состояния. То есть, конечно, есть всякие извраты типа локальных переменных которые сохраняют свои значения между вызовами, но это противоречит принципам функционального программирования, которое защищает автор поста: два вызова функции с одинаковыми параметрами смогут вернуть разные значения.</p>
<p>А раз нету состояния &#8211; то нету и конфигурации. И поэтому
<pre>connection = create_new_connection(url, user_name, password)</pre>
<p>никогда не сможет заменить
<pre>ConnectionFactory factory = new ConnectionFactory(url, userName, password);
Connection connection = factory.newConnection();</pre>
<p>т.к. во втором случае для введения дополнительного параметра, скажем, database, нужно будет изменить класс, сигнатуру конструктора и один вызов конструктора. А в первом &#8211; функцию, сигнатуру и ВСЕ вызовы функции. Это и есть пресловутая инкапсуляция.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/08/05/73/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>71</title>
		<link>http://reflectionsofmind.info/blog/2006/08/05/71/</link>
		<comments>http://reflectionsofmind.info/blog/2006/08/05/71/#comments</comments>
		<pubDate>Fri, 04 Aug 2006 21:37:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[wicket]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=795</guid>
		<description><![CDATA[Я люблю Wicket. В первую очередь за то, что это настоящий, хардкорный ООП, со всевозможными паттернами. Пару месяцев назад у меня состоялся разговор с одногруппником-дельфистом. Тогда я не смог ему объяснить в чем разница между программированием на Java и программированием на Delphi. Да и сейчас не смог бы наверное.
Я попробовал сказать, что он (Java) заставляет [...]]]></description>
			<content:encoded><![CDATA[<p>Я люблю Wicket. В первую очередь за то, что это настоящий, хардкорный ООП, со всевозможными паттернами. Пару месяцев назад у меня состоялся разговор с одногруппником-дельфистом. Тогда я не смог ему объяснить в чем разница между программированием на Java и программированием на Delphi. Да и сейчас не смог бы наверное.</p>
<p>Я попробовал сказать, что он (Java) заставляет использовать ООП и паттерны. Но это неправда. На Java тоже можно  писать в чисто процедурном стиле. Можно сказать, что в нем есть больше ООП-конструкций. Но ООП и в Delphi есть &#8211; фактически в таком же объеме (если не больше). Скорее всего, отличие &#8211; в количестве ОО-hook&#8217;ов для расширения и реюза, но как объяснить что это такое человеку, который на наследование смотрит с уважением, а на паттерны &#8211; с благоговением? :)</p>
<p>Так вот, создатели Wicket правильно уловили суть этого различия. Правда, настолько сильная ОО имеет и свои минусы. Например, &#8211; необходимо думать в больших масштабах, чем один метод или один класс. А как показывает практика, с этим у очень многих программистов проблемы.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/08/05/71/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>58</title>
		<link>http://reflectionsofmind.info/blog/2006/06/17/58/</link>
		<comments>http://reflectionsofmind.info/blog/2006/06/17/58/#comments</comments>
		<pubDate>Fri, 16 Jun 2006 22:15:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=782</guid>
		<description><![CDATA[Только что на JRoller&#8217;e прочел заметку в блоге о кнопке &#8220;Назад&#8221; в браузере. Раньше как-то об этом не думал, а ведь и правда &#8211; в современном вебе эта кнопка устарела. Все (почти) крупные и посещаемые сайты имеют динамический контент, значит просто подгружая из кеша предыдущую страницу юзер получает устаревшую инфу. Правильным было бы определять работу [...]]]></description>
			<content:encoded><![CDATA[<p>Только что на JRoller&#8217;e прочел <a href="http://www.jroller.com/page/galina?entry=breaking_the_back_button">заметку в блоге</a> о кнопке &#8220;Назад&#8221; в браузере. Раньше как-то об этом не думал, а ведь и правда &#8211; в современном вебе эта кнопка устарела. Все (почти) крупные и посещаемые сайты имеют динамический контент, значит просто подгружая из кеша предыдущую страницу юзер получает устаревшую инфу. Правильным было бы определять работу кнопки &#8220;Назад&#8221; через &lt;link rel=&#8221;back&#8221;&#8230;&gt; &#8211; включая возможность ее вообще отключить.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/06/17/58/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebWork и Wicket</title>
		<link>http://reflectionsofmind.info/blog/2006/06/09/webwork-%d0%b8-wicket/</link>
		<comments>http://reflectionsofmind.info/blog/2006/06/09/webwork-%d0%b8-wicket/#comments</comments>
		<pubDate>Thu, 08 Jun 2006 21:08:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=777</guid>
		<description><![CDATA[
Наткнулся на блог-пост про то, как в WebWork устроить разную обработку для разных submit&#8217;ов на форме. И оттуда же ссылочка на то, как это предлагают делать разработчики. Оба решения одно лучше другого. В первом текст на кнопке фигурирует в java-коде, во втором &#8211; в xml-файле. Плюс &#8211; и там, и там &#8211; в самой хтмлке. [...]]]></description>
			<content:encoded><![CDATA[<p><span id="more-777"></span></p>
<p>Наткнулся на <a href="http://www.jroller.com/page/cdaniluk?entry=multiple_submit_buttons_a_better">блог-пост</a> про то, как в WebWork устроить разную обработку для разных submit&#8217;ов на форме. И оттуда же <a href="http://opensymphony.com/webwork/wikidocs/Multiple%20Submit%20Buttons.html">ссылочка</a> на то, как это предлагают делать разработчики. Оба решения одно лучше другого. В первом текст на кнопке фигурирует в java-коде, во втором &#8211; в xml-файле. Плюс &#8211; и там, и там &#8211; в самой хтмлке. Просто замечательные решения, не правда ли? Что нам MVC, интернационализация, нам главное стандарты, да? Я понимаю, что можно придумать способ прописать этот текст в каком-нибудь конфиге один раз, а потом импортить его через ключ, но омг, воркараунд на воркараунде &#8211; разве так должен выглядеть фреймворк, претендующий на СТАНДАРТ?! А ведь на его основе делается Struts Shale.</p>
<p>А в Wicket это оформляется как</p>
<pre>
<b>Java:</b> this.add(new Button("searchButton") { protected void onSubmit() { /* обработка */ } });
<b>HTML:</b> &lt;input wicket:id="searchButton" type="submit" value="Search"/&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/06/09/webwork-%d0%b8-wicket/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>51</title>
		<link>http://reflectionsofmind.info/blog/2006/06/04/51/</link>
		<comments>http://reflectionsofmind.info/blog/2006/06/04/51/#comments</comments>
		<pubDate>Sun, 04 Jun 2006 20:17:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=775</guid>
		<description><![CDATA[У некоторых людей явно превратное представление о том, как должен работать веб. Как минимум, не такое как у меня. Я ожидаю от странички что если я кликнул на ней кнопку, то то что я ввел в поля принялось во внимание и что-то изменилось. Если я кликнул на линку то то что я ввел в поля [...]]]></description>
			<content:encoded><![CDATA[<p>У некоторых людей явно превратное представление о том, как должен работать веб. Как минимум, не такое как у меня. Я ожидаю от странички что если я кликнул на ней кнопку, то то что я ввел в поля принялось во внимание и что-то изменилось. Если я кликнул на линку то то что я ввел в поля во внимание не принялось и мне просто показалась другая страничка.</p>
<p>А вот уже второй раз клиент хочет чтобы веб работал как десктопное приложение. То есть, например, страничка юзер менеджмента &#8211; многостраничная таблица плюс добавление/удаление пользователей, фильтрация по разным параметрам, настройка количества юзеров. Так вот &#8211; изменения должны вступить в силу ТОЛЬКО после того, как юзер кликнет кнопку Apply. В смысле, пока юзер лазит по страницам, я где-то должен все что он там надобавлял/наудалял где-то хранить, и только если он нажмет Apply &#8211; изменять базу данных. Причем навигация между страницами &#8211; по ссылкам [1], [2], итд. Так вот &#8211; если юзер что-то ввел в поле и перешел по ссылке, значения всех полей <i>тоже должны быть сохранены</i> чтобы он их видел когда вернется на эту страницу. То бишь, ссылка уже не ссылка, а просто &lt;a href=&#8221;#&#8221; onclick=&#8221;form.submit()&#8221;&gt;.</p>
<p>С одной стороны я их понимаю &#8211; типа унификация интерфейса десктопа и веба и все такое. А с другой &#8211; не так уж и сложно запомнить что веб работает по-другому. Но, имхо, рано или поздно (лет через 5) html-веб начнет отмирать в пользу тонких и смарт-клиентов.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/06/04/51/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>49</title>
		<link>http://reflectionsofmind.info/blog/2006/06/04/49/</link>
		<comments>http://reflectionsofmind.info/blog/2006/06/04/49/#comments</comments>
		<pubDate>Sun, 04 Jun 2006 08:16:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[thoughts]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=773</guid>
		<description><![CDATA[Смотрю сейчас сайты по поиску работы и сердце кровью обливается. Junior J2EE девелопер &#8211; $1000-$2000!!! Плюс возможность релокации в штаты!!! Омг, ну зачем они постят такие объявы СЕЙЧАС, а не три месяца назад когда я работу искал?! Надо будет обязательно поговорить о повышении зарплаты :)
Кстати, зарплаты java-программистов на сайтах работы растут довольно резво. Полгода назад [...]]]></description>
			<content:encoded><![CDATA[<p>Смотрю сейчас сайты по поиску работы и сердце кровью обливается. Junior J2EE девелопер &#8211; $1000-$2000!!! Плюс возможность релокации в штаты!!! Омг, ну зачем они постят такие объявы СЕЙЧАС, а не три месяца назад когда я работу искал?! Надо будет обязательно поговорить о повышении зарплаты :)</p>
<p>Кстати, зарплаты java-программистов на сайтах работы растут довольно резво. Полгода назад цифры выше $800 проскакивали не так уж и часто, а сейчас &#8211; каждый день что-нить да висит четырехзначное. Не может не радовать :)</p>
<p>А еще мне очень интересно что же будет следующее за Java и .NET. Всякие руби на наследников ну никак не тянут &#8211; ни поддержки у них от солидных игроков, ни коммьюнити развитого. Надо в сторону гугла посматривать почаще &#8211; чую я что как раз оттуда новый монстр появится :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/06/04/49/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>C# 3.0</title>
		<link>http://reflectionsofmind.info/blog/2006/04/15/c-30/</link>
		<comments>http://reflectionsofmind.info/blog/2006/04/15/c-30/#comments</comments>
		<pubDate>Sat, 15 Apr 2006 15:47:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=771</guid>
		<description><![CDATA[C# начинает серьезно обходить Java по удобству программирования. В версии C# 3.0, например, появятся такие фичи:

1) Автотипизация

var i = 5;
var s = "Hello";
var d = 1.0;
var numbers = new[] {1, 2, 3};
var orders = new Dictionary&#60;int,Order&#62;();

&#8230;автоматом превращается в&#8230;

int i = 5;
string s = "Hello";
double d = 1.0;
int[] numbers = new int[] {1, 2, 3};
Dictionary&#60;int,Order&#62; orders [...]]]></description>
			<content:encoded><![CDATA[<p>C# начинает серьезно обходить Java по удобству программирования. В версии C# 3.0, например, появятся такие фичи:</p>
<p><span id="more-771"></span></p>
<p>1) <u>Автотипизация</u><br />
<code><br />
var i = 5;<br />
var s = "Hello";<br />
var d = 1.0;<br />
var numbers = new[] {1, 2, 3};<br />
var orders = new Dictionary&lt;int,Order&gt;();<br />
</code><br />
&#8230;автоматом превращается в&#8230;<br />
<code><br />
int i = 5;<br />
string s = "Hello";<br />
double d = 1.0;<br />
int[] numbers = new int[] {1, 2, 3};<br />
Dictionary&lt;int,Order&gt; orders = new Dictionary&lt;int,Order&gt;();<br />
</code><br />
И, конечно, сразу отовсюду раздались вопли что C# перестанет быть жестким типизированным языком, что такими намерениями вымощена дорога в адЪ и вообще нужно всем программировать на C# 1.0, а то разогнались тут, паимаишь, со своими удобствами-нововведениями. К счастью, ни о какой динамической типизации на самом деле речи не идет, просто тип определяется по инициализатору, таким образом убирая необходимость указывать его явно. Т.е., простое <code>var x;</code> (без инициализатора) вызывает ошибку.</p>
<p>2) <u>Прямая инициализация свойств</u></p>
<pre>
public class Point
{
    int x, y;

    public int X { get { return x; } set { x = value; } }
    public int Y { get { return y; } set { y = value; } }
}

var a = new Point { X = 0, Y = 1 };
</pre>
<p>3) <u>Анонимные типы</u></p>
<p>Комбинация двух предыдущих :)</p>
<pre>
var customer1 = new { Name = "John Smith", age = 23 };
var customer2 = new { Name = "Mary Black", age = 21 };
</pre>
<p>Теперь customer1 и customer2 у нас переменные одного и того же анонимного типа. Т.е., можно написать:</p>
<pre>
customer1 = customer2;
</pre>
<p>4) <u>Методы-расширения</u></p>
<p>Определяем класс таким образом:</p>
<pre>
namespace Acme.Utilities
{
    public static class Extensions
    {
        public static int ToInt32(this string s)
        {
            return Int32.Parse(s);
        }

        public static T[] Slice&lt;T&gt;(<u>this</u> T[] source, int index, int count)
        {
            if (index &lt; 0 || count &lt; 0 || source.Length – index &lt; count)
                throw new ArgumentException(); 

            T[] result = new T[count];
            Array.Copy(source, index, result, 0, count);
            return result;
        }
    }
}
</pre>
<p>И теперь делаем вот так вот:</p>
<pre>
using Acme.Utilities;

string s = "1234";
int i = s.ToInt32(); // Вызывается Extensions.ToInt32(s)

int[] digits = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int[] a = digits.Slice(4, 3);  // Вызывается Extensions.Slice(digits, 4, 3)
</pre>
<p>Т.е., если в object.method(params) метод method в классе Clazz объекта object отсутствует, то комплиятор просматривает все статические классы в поисках статического метода method(this Clazz object, params), и если находит, то инвокает его.</p>
<p>5) <u>Labmda-выражения</u></p>
<p>Определяем функции как:</p>
<pre>
Func&lt;int,int&gt; Square = x =&gt; x*x;
Func&lt;double,string> StringToDouble = double d => String.Format("{0:f}",d);
Func&lt;int,int&gt; Factorial = x =&gt; { int f = 1; for (i=2; i&lt;x; i++) { f *= i; } return f; }
</pre>
<p>&#8230; и используем как делегатов типа Func&lt;Argument,Result&gt;.</p>
<pre>
static Z F&lt;X,Y,Z&gt;(X value, Func&lt;X,Y&gt; f1, Func&lt;Y,Z&gt; f2)
{
    return f2(f1(value));
}

double seconds = F("1:15:30", s =&gt; TimeSpan.Parse(s), t =&gt; t.TotalSeconds);
</pre>
<p>Если бы у .NET было такое же коммьюнити и число открытых библиотек и фреймворков, как у Java, давно перешел бы на него. Но, опять же, если бы у .NET все это было, то они имхо аккуратнее относились бы к новым фичам, разрушающим совместимость :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/04/15/c-30/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wicket</title>
		<link>http://reflectionsofmind.info/blog/2006/04/09/wicket-2/</link>
		<comments>http://reflectionsofmind.info/blog/2006/04/09/wicket-2/#comments</comments>
		<pubDate>Sun, 09 Apr 2006 00:47:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=770</guid>
		<description><![CDATA[ДА!!! ЧЕЛОВЕК ОПЯТЬ ПОБЕДИЛ МАШИНУ!!!
А загвоздка вот в чем была: я связываю страницу MainPage с путем &#8220;/MainPage&#8221; с помощью метода mountBookmarkablePage(&#8221;/MainPage&#8221;, MainPage.class). Таким образом, все ссылки на эту страницу приобретают человеческий вид типа http://localhost:8080/wickettest/app/MainList. Но! Пока я не заменил в web.xml &#60;url-pattern&#62;/app&#60;/url-pattern&#62; на &#60;url-pattern&#62;/app/*&#60;/url-pattern&#62; Tomcat был не в курсе что эту ссылку нужно не самостоятельно [...]]]></description>
			<content:encoded><![CDATA[<p>ДА!!! ЧЕЛОВЕК ОПЯТЬ ПОБЕДИЛ МАШИНУ!!!</p>
<p>А загвоздка вот в чем была: я связываю страницу MainPage с путем &#8220;/MainPage&#8221; с помощью метода <nobr>mountBookmarkablePage(&#8221;/MainPage&#8221;, MainPage.class)</nobr>. Таким образом, все ссылки на эту страницу приобретают человеческий вид типа <nobr>http://localhost:8080/wickettest/app/MainList</nobr>. Но! Пока я не заменил в web.xml <nobr>&lt;url-pattern&gt;/app&lt;/url-pattern&gt;</nobr> на <nobr>&lt;url-pattern&gt;/app/*&lt;/url-pattern&gt;</nobr> Tomcat был не в курсе что эту ссылку нужно не самостоятельно искать, а отдавать Wicket&#8217;у на распарсивание.</p>
<p>Теперь можно делать ссылки типа http://localhost:8080/forum/6/thread/16/post/5/author :)</p>
<p>Вот так вот из-за одной глупой ошибки чуть не забил на прекрасный фреймворк :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/04/09/wicket-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tapestry и Tomcat</title>
		<link>http://reflectionsofmind.info/blog/2006/04/08/tapestry-%d0%b8-tomcat/</link>
		<comments>http://reflectionsofmind.info/blog/2006/04/08/tapestry-%d0%b8-tomcat/#comments</comments>
		<pubDate>Sat, 08 Apr 2006 10:43:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=767</guid>
		<description><![CDATA[Начал писать проект с помощью Tapestry и сразу же наткнулся на странную багу. После деплоя приложения Томкат хватает несколько библиотек (.jar-ы от tapestry и hivemind), делает на них lock и не отпускает даже по команде undeploy. То есть, выгрузить приложение без перезапуска Томката фактически невозможно, т.к. некоторые его файлы &#8211; те самые библиотеки &#8211; попросту [...]]]></description>
			<content:encoded><![CDATA[<p>Начал писать проект с помощью Tapestry и сразу же наткнулся на странную багу. После деплоя приложения Томкат хватает несколько библиотек (.jar-ы от tapestry и hivemind), делает на них lock и не отпускает даже по команде undeploy. То есть, выгрузить приложение без перезапуска Томката фактически невозможно, т.к. некоторые его файлы &#8211; те самые библиотеки &#8211; попросту не удаляются.</p>
<p>Есть один workaround &#8211; указать в context.xml параметр antiResourceLocking &#8211; тогда Томкат будет всегда делать копии библиотек во временную папку и использовать эти копии, а не оригиналы. Но, опять таки, так на 20-м деплоинге Томкат будет держать в памяти уже 20 копий библиотек, а админ будет рвать на себе волосы не понимая почему система так тормозит.</p>
<p>Так что придется взять что-нибудь другое.<br />
Попробую-ка я Wicket.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/04/08/tapestry-%d0%b8-tomcat/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>31</title>
		<link>http://reflectionsofmind.info/blog/2006/02/28/31/</link>
		<comments>http://reflectionsofmind.info/blog/2006/02/28/31/#comments</comments>
		<pubDate>Tue, 28 Feb 2006 20:37:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=755</guid>
		<description><![CDATA[Нашел интересную статейку: http://www.javalobby.org/articles/outofbounds/. Автор рассказывает про ситуацию когда новый разработчик приходит в команду, смотрит на проект и начинает всем рассказывать где и как он сделан неправильно. И рассказывает, в общем-то, правильные вещи, не просто понтуется умными словами. Но проект не вчера и не за один день делался, пережил несколько смен технологий и находится в [...]]]></description>
			<content:encoded><![CDATA[<p>Нашел интересную статейку: http://www.javalobby.org/articles/outofbounds/. Автор рассказывает про ситуацию когда новый разработчик приходит в команду, смотрит на проект и начинает всем рассказывать где и как он сделан неправильно. И рассказывает, в общем-то, правильные вещи, не просто понтуется умными словами. Но проект не вчера и не за один день делался, пережил несколько смен технологий и находится в состоянии когда любые крупные правки означают переписывание с нуля всего включая легаси-библиотеки, для которых исходный код уже не найти.</p>
<p>Так вот, ~полгода назад я примерно так себя и вел :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/02/28/31/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>29</title>
		<link>http://reflectionsofmind.info/blog/2006/02/25/29/</link>
		<comments>http://reflectionsofmind.info/blog/2006/02/25/29/#comments</comments>
		<pubDate>Fri, 24 Feb 2006 23:13:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=753</guid>
		<description><![CDATA[Что мне не нравится в Java:
1) Генериксы через erasure а не reification. С одной стороны, можно понять что Sun жалко миллионов потерянных баксов несчастных пользователей, страдающих от несовместимости, но с другой &#8211; если все такими темпами и продолжать менять, то новые программисты будут просто идти на .net, в котором MS делает все что хочет и [...]]]></description>
			<content:encoded><![CDATA[<p>Что мне не нравится в Java:</p>
<p>1) Генериксы через erasure а не reification. С одной стороны, можно понять что Sun жалко миллионов <strike>потерянных баксов</strike> несчастных пользователей, страдающих от несовместимости, но с другой &#8211; если все такими темпами и продолжать менять, то новые программисты будут просто идти на .net, в котором MS делает все что хочет и плевать хотела на third-party библиотеки.</p>
<p>2) Отсутствие нормальных ссылок на методы (а-ля делегаты в .net или чего-нить подобное). Reflection же, хоть и позволяет использовать методы как переменные, но замедляет программу в сотни раз. Очень приятно было бы также иметь возможность написать methodName.method или fieldName.field по аналогии с ClassName.class. И чтобы это все быстро работало :)</p>
<p>3) Модификаторы доступа. Скорее всего, я чего-то недопонимаю, но предпочел бы чтобы они не были связаны с пакаджами вообще. Просто чтобы private &#8211; только в классе, protected &#8211; в потомках, public &#8211; везде. Плюс чтобы объекты одного класса не имели доступа к приватным и защищенным частям друг друга. Плюс friend для особых случаев. Хотя френдов и обещают вроде сделать к 7-й версии, которая Dolphin.</p>
<p>4) Имя META-INF большими буквами. Выглядит уродливо.</p>
<p>А еще Hibernate меня окончательно заанноил своим неприлично медленным buildSessionFactory() и я его из проекта выкинул, заменив на чистый JDBC. Оно, конечно, не так приятно писать весь этот SQL вручную, зато мне не будет стыдно за то что такая маленькая программка так долго стартует :) Десять секунд для системы учета, написанной одним мной за месяц &#8211; это многовато как ни крути :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/02/25/29/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SWT и AWT</title>
		<link>http://reflectionsofmind.info/blog/2006/01/25/swt-%d0%b8-awt/</link>
		<comments>http://reflectionsofmind.info/blog/2006/01/25/swt-%d0%b8-awt/#comments</comments>
		<pubDate>Tue, 24 Jan 2006 21:19:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=744</guid>
		<description><![CDATA[По зрелом размышлении решил забить на SWT и юзать AWT/Swing. Хотя SWT мне кажется более цельным и продуманным, в нем нету таких нужных фишек, как, например, нормальных WinXP-шных плоских кнопкок и кнопок с рисунком и текстом. То есть, их можно сделать, но это долго и неинтересно :) В Swing, правда, JEditorPane оказался слабенький по части [...]]]></description>
			<content:encoded><![CDATA[<p>По зрелом размышлении решил забить на SWT и юзать AWT/Swing. Хотя SWT мне кажется более цельным и продуманным, в нем нету таких нужных фишек, как, например, нормальных WinXP-шных плоских кнопкок и кнопок с рисунком и текстом. То есть, их можно сделать, но это долго и неинтересно :) В Swing, правда, JEditorPane оказался слабенький по части хтмла (border: 1px solid black не осилил), так что пришлоось влепить через SWT-AWT мост встроенный Shell и в нем SWTшный Browser.</p>
<p>Теперь другая проблема &#8211; не могу понять как правильно закрыть все окна. Есть AWTшный и SWTшный потоки обработки событий. Соответственно, есть AWTшный JFrame и встроенный в него SWTшный Shell с браузером. И что из них dispose&#8217;ить первое &#8211; непонятно, то эксепшены вылетают, то вообще JVM падает. Временно использую System.exit, но это напоминает развязывание узла через разрубание :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/01/25/swt-%d0%b8-awt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java</title>
		<link>http://reflectionsofmind.info/blog/2006/01/22/java/</link>
		<comments>http://reflectionsofmind.info/blog/2006/01/22/java/#comments</comments>
		<pubDate>Sun, 22 Jan 2006 18:48:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=741</guid>
		<description><![CDATA[Проблема возникла.


&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;
&#160;&#160;&#160;&#160;


&#160;
&#160;


&#160;
&#160;


Нужно сделать таблицу такого типа с помощью SWT, или, в крайнем случае, AWT/Swing. То есть, с горизонтальными спанами ячеек. Причем таблица немаленькая &#8211; где-то 60х10 как минимум &#8211; то есть, со скроллингом и подобными делами. Подумав немного, решил что самый простой выход &#8211; влепить Browser и в нем нарисовать эту таблицу средствами HTML, а [...]]]></description>
			<content:encoded><![CDATA[<p>Проблема возникла.</p>
<table border=1>
<tr>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
<td>&nbsp;&nbsp;&nbsp;&nbsp;</td>
</tr>
<tr>
<td colspan=2>&nbsp;</td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td colspan=2>&nbsp;</td>
</tr>
</table>
<p>Нужно сделать таблицу такого типа с помощью SWT, или, в крайнем случае, AWT/Swing. То есть, с горизонтальными спанами ячеек. Причем таблица немаленькая &#8211; где-то 60х10 как минимум &#8211; то есть, со скроллингом и подобными делами. Подумав немного, решил что самый простой выход &#8211; влепить Browser и в нем нарисовать эту таблицу средствами HTML, а потом слегка подкрасить задний фон под стадартный Shellовский чтобы не было ощущения веб-странички. Что печально &#8211; появляются всякие IEшные приколы типа менюшки по райтклику, масштабирования шрифта по контрол+скроллу, итд итп &#8211; в общем, то что приличные виджеты себе обычно не позволяют.</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/01/22/java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCJP</title>
		<link>http://reflectionsofmind.info/blog/2006/01/10/scjp-2/</link>
		<comments>http://reflectionsofmind.info/blog/2006/01/10/scjp-2/#comments</comments>
		<pubDate>Tue, 10 Jan 2006 10:57:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=733</guid>
		<description><![CDATA[Наконец-то прислали сертификат из Sun. В конверте:
1) Небольшая пластиковая карточка размером с кредитку &#8211; на ней мое имя, название сертификации, логотип Sun и разные другие надписи
2) Альбомный листок формата чуть больше А4 на плотной бумаге с крупными надписями &#8211; очевидно, чтобы вставить в рамочку и повесить на стенку
3) Поздравительное письмо
4) Договор, который если я подпишу [...]]]></description>
			<content:encoded><![CDATA[<p>Наконец-то прислали сертификат из Sun. В конверте:</p>
<p>1) Небольшая пластиковая карточка размером с кредитку &#8211; на ней мое имя, название сертификации, логотип Sun и разные другие надписи<br />
2) Альбомный листок формата чуть больше А4 на плотной бумаге с крупными надписями &#8211; очевидно, чтобы вставить в рамочку и повесить на стенку<br />
3) Поздравительное письмо<br />
4) Договор, который если я подпишу и отправлю в Sun, то поимею право использовать логотип сертификации на своих визитках и резюме</p>
<p>Я бы сфотографировал все это счастье, но единственный досягаемый фотоаппарат &#8211; у меня на мобилке и он меня приводит в тихий ужос ибо 0,3 мегапикселя, а выглядит как джипег со сжатием в 20 раз. Так что отложим до лучших времен :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2006/01/10/scjp-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SCJP</title>
		<link>http://reflectionsofmind.info/blog/2005/12/24/scjp/</link>
		<comments>http://reflectionsofmind.info/blog/2005/12/24/scjp/#comments</comments>
		<pubDate>Sat, 24 Dec 2005 02:24:00 +0000</pubDate>
		<dc:creator>Tymur Porkuian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://reflectionsofmind.info/blog/?p=726</guid>
		<description><![CDATA[Долго думал писать сюда или нет, но таки напишу, может кому пригодится :) Сдал вчера экзамен на Sun Java Certified Programmer. 86% при проходных 51%. Наверное, если бы готовился интенсивнее, прошел еще с десяток mock exam&#8217;ов и все-таки разобрался до конца с потоками, то получил бы 90-95%, а то и все 100. Хотя эти проценты [...]]]></description>
			<content:encoded><![CDATA[<p>Долго думал писать сюда или нет, но таки напишу, может кому пригодится :) Сдал вчера экзамен на Sun Java Certified Programmer. 86% при проходных 51%. Наверное, если бы готовился интенсивнее, прошел еще с десяток mock exam&#8217;ов и все-таки разобрался до конца с потоками, то получил бы 90-95%, а то и все 100. Хотя эти проценты особой роли не играют, потому что на сертификате их не будет. </p>
<p>Теперь через месяц пришлют сам сертификат, а через полгода посмотрю как он помогает искать работу.</p>
<p>Вообще, экзамен легкий. Если хотя бы десяток прог на джаве написал, то за месяц или меньше можно подготовиться и сдать на 80%+. Благо, в настоящем экзамене подковырки те же, что и в mock exam&#8217;ах. Кстати, отличный список mock exam&#8217;ов есть на http://www.javaranch.com/. Особое внимание обращать на те, которые hard &#8211; если там набрали 60-70%, то можно смело идти сдавать.</p>
<p>Времени давали два часа, хватило с головой, ушел через 80 минут. Параллельно со мной сдавал еще один парень. Со словарем, хотя это и запрещено :))) Не понимаю, по чему же он тогда учился и готовился? По русским книжкам, что ли? Мокэкзамов на русском я не видел, а без них сдать, имхо, практически нереально. Кроме того, со словарем можно попросту не успеть &#8211; он там уже сидел когда я зашел и все еще сидел когда я уходил.</p>
<p>Следующая цель &#8211; девелоперский. Даже если я его сдавать не буду :)</p>
]]></content:encoded>
			<wfw:commentRss>http://reflectionsofmind.info/blog/2005/12/24/scjp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
