<?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>Игорь Артамонов &#187; Мысли</title>
	<atom:link href="http://artamonov.ru/category/ideas/feed/" rel="self" type="application/rss+xml" />
	<link>http://artamonov.ru</link>
	<description>Посмотрим, глубока ли кроличья нора</description>
	<lastBuildDate>Fri, 21 May 2010 11:51:55 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>90% разработки</title>
		<link>http://artamonov.ru/2010/05/20/stages-of-product-dev/</link>
		<comments>http://artamonov.ru/2010/05/20/stages-of-product-dev/#comments</comments>
		<pubDate>Thu, 20 May 2010 16:00:34 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Методология]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[процессы]]></category>
		<category><![CDATA[этапы разработки]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=393</guid>
		<description><![CDATA[Есть такое интересное разбивание проекта на этапы, как я называю &#171;по правилу 90%&#187;. Я не знаю откуда я его взял, может где-то прочитал, может сам это вывел, может еще что-то, но тем не менее:

Команда рано или поздно приходит к моменту когда проект &#171;уже сделан на 90%&#187; &#8211; что-то уже запускается (в идеалистичном use case) , [...]]]></description>
			<content:encoded><![CDATA[<p>Есть такое интересное разбивание проекта на этапы, как я называю &laquo;по правилу 90%&raquo;. Я не знаю откуда я его взял, может где-то прочитал, может сам это вывел, может еще что-то, но тем не менее:</p>
<ol>
<li>Команда рано или поздно приходит к моменту когда проект &laquo;уже сделан на 90%&raquo; &#8211; что-то уже запускается (в идеалистичном use case) , есть какая-то система, казалось бы осталось лишь допилить чуть чуть. </li>
<li>Но на самом деле это лишь начало. Дальше еще столько же до того момента когда продуктом можно будет реально пользоваться, когда он станет работать у другого человека, перестанет падать в ситуации отличающейся от идеальной и т.д. Вот тут да, снова дошли до стадии &laquo;готово на 90%&raquo;.</li>
<li>И это оказывается не все&#8230; <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Теперь нужно допилить чтобы все было &laquo;красиво&raquo;, удобно, чтобы это поддерживалось, запускалось из коробки, были написаны инструкции. И после уже снова &laquo;готов на 90%&raquo;, тут уже и правда почти готово.</li>
</ol>
<p><span id="more-393"></span><br />
Ну в общем это все понятно, интересно другое: если в первом этапе у нас рулят матерые программисты, самоорганизующаяся команда, правильная архитектура и всякие хитрые технологии, то во втором уже больше качество собранных требований (<u>заранее собранных</u>), ну а в третьем вообще лишь процессы. Причем в третьем, в противоположность первому, иногда важнее даже начинающие программисты, потому что они согласны заниматься &laquo;не интересными задачами&raquo;, точнее они еще не выросли из них. А те матерые разработчики которые начинали уже выросли, им это не интересно, и даже уволятся если им дать такую задачу. Если рисовать графики важности то получится примерно такая иллюстрация:</p>
<p><img src="http://artamonov.ru/wp-content/uploads/2010/05/productflow.png" alt="" title="productflow" width="621" height="189" class="aligncenter size-full wp-image-392" /></p>
<p>Отличный пример всему этому имхо весь опенсурс, часто застрявший на первом этапе. Вот, например, <a href="http://www.ubuntu.com/">популярный линуксовый десктоп</a>: в нем огромное количество крутых штук, которых нет в коммерческих конкурентах. Это все благодаря матерым программистам. Но в тоже время в нем не сделаны банальнейшие вещи, естественные у конкурентов, и естественные для пользователя. Пример: уже 6 лет висит задачка &laquo;<a href="https://bugzilla.gnome.org/show_bug.cgi?id=141154">показывать превью картинок в диалоге выбора файлов</a>&laquo;. Казалось бы самая естественная вещь, но висеть будет еще столько же времени, потому что матерому программисту заниматься такимим вещами не fun, это ниже его уровня, а вот процессов, менеджеров и стажеров там очень мало. И о сборе требований, анализе пользователя тоже никто пока не думает. Я не говорю что опенсурс весь такой, есть масса совсем противоположных примеров, но тут изначально условия существования проекта такие, поэтому много примеров.</p>
<p>Ну и возникает естественный вопрос: а как бы так собрать команду, и организовать процесс чтобы <u>оптимально учесть</u> все этапы? Выполнять проект разными командами чаще всего не реалистично, хотя иногда стоит подумать.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/05/20/stages-of-product-dev/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ПО как виртуальный образ</title>
		<link>http://artamonov.ru/2010/04/08/software-as-a-vm/</link>
		<comments>http://artamonov.ru/2010/04/08/software-as-a-vm/#comments</comments>
		<pubDate>Thu, 08 Apr 2010 19:46:00 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Прочее]]></category>
		<category><![CDATA[виртуализация]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=376</guid>
		<description><![CDATA[Тут Джоана Рутковска засветила прототип ОС, Qubes OS, в которой приложения запускаются в отдельной вирутальной машине, что должно решить многие проблемы безопасности. Идея, конечно, интересная, но в ситуации когда главная угроза безопасности это пользовать, мне кажется мало полезной. С другой стороны, для такие параноиков как я очень пригодится, я бы себе взял  
Так вот, [...]]]></description>
			<content:encoded><![CDATA[<p>Тут <a href="http://en.wikipedia.org/wiki/Joanna_Rutkowska">Джоана Рутковска</a> засветила прототип ОС, <a href="http://theinvisiblethings.blogspot.com/2010/04/introducing-qubes-os.html">Qubes OS</a>, в которой приложения запускаются в отдельной вирутальной машине, что должно решить многие проблемы безопасности. Идея, конечно, интересная, но в ситуации когда главная угроза безопасности это пользовать, мне кажется мало полезной. С другой стороны, для такие параноиков как я очень пригодится, я бы себе взял <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Так вот, мне это напомнило мою старую мысль о том что многий софт можно вообще выпускать только в виде образов виртуальных машин. Не тот который для обычных пользователей, а более серьезный. Ну вот, например, не проще ли было бы сделать &laquo;веб-мастеру&raquo; виртуальный образ среды в которой будет разрабатываться сайт, вместо <a href="http://www.denwer.ru/">Дэнвера</a> (или что там сейчас популятно)? Вместо всех прочих хитрых SDK? Софта, который для своей работы требует поставить еще сотни мегабайт дополнительных библиотек? А корпоративный софт, особенно серверный, который поставит только сертифицированный админ, на сертифицированно настроенный сервер, со строго определенной версией ОС, на котором после этого ничего другого и не поставить? Итак ведь многие все это ставят сразу в отдельную виртуалку, так может уже и выдавать сразу готовый образ, в котором все настроено, стоит весь нужный комплект дополняющего софта и библиотек, и можно рассчитывать на то что ничего лишнего рядом не поставят? А уж сколько проблем решает виртуализация, тут тебе и многоплатформенность, и бэкапы, и миграция, и cloud computing, и пр. Ну хотя тут не мне говорить, ну хотя бы потому что не эксперт.</p>
<p>Или может я совсем не в теме, и вендоры ПО уже давно работают в этом направлении, и даже уже сейчас продают готовые образы?</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/04/08/software-as-a-vm/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Поисковая ниша</title>
		<link>http://artamonov.ru/2010/01/18/poiskovaya-nisha/</link>
		<comments>http://artamonov.ru/2010/01/18/poiskovaya-nisha/#comments</comments>
		<pubDate>Mon, 18 Jan 2010 14:49:10 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[идея]]></category>
		<category><![CDATA[мобильный интернет]]></category>
		<category><![CDATA[поиск]]></category>
		<category><![CDATA[рынок]]></category>
		<category><![CDATA[стартап]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=362</guid>
		<description><![CDATA[Пообщался на днях, в очередной раз, с человеком пишушим свой поисковик, убийцу яндекса и гугла вместе взятых   Я попытался донести что рынок поиска, в текущем виде, занят, по крайней мере от посягательства со стороны небольших команд. Есть Гугл как основной гигант, есть куча игроков рядом с ним поменьше, и есть несколько тысяч совсем [...]]]></description>
			<content:encoded><![CDATA[<p>Пообщался на днях, в очередной раз, с человеком пишушим свой поисковик, убийцу яндекса и гугла вместе взятых <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Я попытался донести что рынок поиска, в текущем виде, занят, по крайней мере от посягательства со стороны небольших команд. Есть Гугл как основной гигант, есть куча игроков рядом с ним поменьше, и есть несколько тысяч совсем незаметных поисковиков, вертикальных, узкоспециализированных, экспериментальных и пр. Даже мелочь, конечно, имеет своих посетителей, но все равно тут делать нечего, лишь гиганты могут методично вычищать свои алгоритмы, нанося небольшие, малозаметные штрихи в общей картины. Время больших мазков давно прошли. И занять тут значительную долю не получится, даже вкладывая миллиарды в маркетинг, в Bing я слабо верю. Это никому не нужно, даже пользователям, как ни странно это звучит.</p>
<p>Единственный заметный результат дает &laquo;структуризация веба&raquo;, а точнее структурированный и полноценный ответ на его основе. В идеале как у <a href="http://wolframalpha.com">Вольфрама</a>. Вольфраму более менее удалось лишь потому что они выбрали очень специфичную, узкую, и изначально структурируюмую область, в которой, к тому же, они давно сидели. Конечно же продвижения есть и остальных, и у Гугла, и у Яндекса, и особенно мне нравится как это получается у <a href="http://nigma.ru">Нигмы</a>. При этом охватить сразу всё, дать ответ на любой вопрос, им слишком трудоемко, на приборах почти не заметно, а ROI совсем плохой.<br />
<span id="more-362"></span><br />
Но вот что-то мне подсказывает что есть таки еще неохваченный сегмент. А именно мобильный поиск. Только это уже не поиск, в этом случае это совсем не поиск, и даже не ответ на вопрос, а именно помощник. Мобильнику не нужен список ссылок, ему нужен конкретный ответ, сразу, в двух словах, обрезанный от всего не нужного в данном конкретном вопросе, с возможностью уточнения и <strong>взаимодействия в его контексте</strong>. Пока с этим справляется гео-поиск, это то что лежит на поверхности. Спроси у мобильного Google Maps название ресторана, и он тут же покажет где ты и где этот ресторан, покажет адрес и номер телефона, по которому тут же можно позвонить. Это вам не список ссылок о ресторане, не ссылка на офсайт ресторана, это не абстрактный ответ, а именно помощь которую ожидает пользователь. </p>
<p>Но на самом деле дело ведь не только в поиске места, и не только в учете геоположения клиента. Это, как я уже сказал, на поверхности, это верхушка айсберга. А вот другого сейчас ничего и нет, все ограничивается лишь поиском адреса. Все кроме этого спрашивай через поисковик, переходи по ссылкам и ищи ответ сам, на своем маленьком экране.</p>
<p>А мобильный интернет тем временем ускоряется день ото дня, количество мобильных пользователей растет с огромной скоростью, и браузеры в них становятся вполне себе функциональные, спасибо майкрософту что не смог уничтожить и эту область своим Internet Explorer&#8217;ом. </p>
<p>Так вот, если вы желаете создать нового убийцу гугла, то обратите внимание на эту нишу. Нормального поисковика-помощника для мобильных устройств нет. Еще раз подчеркиваю что это не должен быть поиск, вообще забудьте это слово. Это именно помощник, который если что-то говорит, то лишь по делу. И общение с ним это не статический выхлоп на ваш запрос, это именно интерактивное взаимодействие. Как это должно выглядеть я сейчас не скажу, но пищу для ума я дал. Я не думаю что это проще чем сделать чем обычный поиск, скорее наборот, но есть подозрение что эффект от тех же трудозатрат будет гораздо больший (<em>еще бы решить вопрос с монетизацией этого</em>).</p>
<p>Если что-то и делается в этом направлении, то гонка сейчас лишь начинается, и лидер определится не скоро. Да, конечно, гуглы, яндексы и прочие яхи работают в этом направлении, но им мешают их текущие рамки, в которых они привыкли работать. Гугл, правда, может сделать что-то &laquo;такое&raquo;, он неоднократно доказывал что способен выходить за границы и нарушать общепринятые взгляды, ну и, к тому же, он по деньгам это может себе позволить, без проблем. Но все равно не факт что он и тут подомнет весь рынок.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/01/18/poiskovaya-nisha/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Какой исполнитель по вкусу</title>
		<link>http://artamonov.ru/2009/07/23/kakoy-ispolnitel-po-vkusu/</link>
		<comments>http://artamonov.ru/2009/07/23/kakoy-ispolnitel-po-vkusu/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 17:02:06 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Методология]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[оценка проекта]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=224</guid>
		<description><![CDATA[
Представим себе что вы решили купить себе телефон, для наглядности представим что это iPhone 3Gs. 
В сети находите 3 варианта покупки:

10 тыс. руб &#8211; и как получится, может завтра, а может через месяц, может вообще не доставят, но денег в любом случае не вернут. К тому же на корпусе могут быть какие-то подозрительные царапины и [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://artamonov.ru/wp-content/uploads/2009/07/iphone.png" alt="iphone" title="iphone" width="77" height="137" style="float:right; padding: 20px 10px 15px 20px;" /><br />
Представим себе что вы решили купить себе телефон, для наглядности представим что это iPhone 3Gs. </p>
<p>В сети находите 3 варианта покупки:</p>
<ul>
<li><strong>10 тыс. руб</strong> &#8211; и как получится, может завтра, а может через месяц, может вообще не доставят, но денег в любом случае не вернут. К тому же на корпусе могут быть какие-то подозрительные царапины и непонятные люди в списке контактов. Или вообще другой телефон привезут, ну и может денег сверху попросят, лишь потому что у них там какие-то непонятные вам &laquo;<em>проблемы возникли с товаром</em>&laquo;.</li>
<li><strong>15 тыс. руб</strong> &#8211; может быть завтра уже доставят, но черт его знает на самом деле, есть некоторая путаница со складами, курьерами, наличием, в общем они обещают на днях позвонить и сказать точнее что как будет, может сразу доставят, может в течении недели, ну или как получится.</li>
<li><strong>20 тыс. руб</strong> &#8211; послезавтра ровно в 14:25 курьер с товаром будет у вас в офисе. точка.</li>
</ul>
<p>Вы какой выберете? От чего зависит решение?<br />
Если по цене, то третий вариант в 2 раза дороже первого. С другой стороны у него гарантия доставки, или вы готовы сидеть на одном месте и ждать курьера сколько угодно?<br />
А если вы руководитель компании и закупаете их сотрудникам, что вы им скажете? А перед своим руководителем в такой ситуации как обоснуете выбор и отчитаетесь?</p>
<p>На самом деле почти риторические вопросы, просто повод поразмышлять о том как думает заказчик разработки софта. Цена, предсказуемость результата и пр.</p>
<p>PS: а еще можно было бы это разбить на 5 вариантов, чтобы сопоставить с уровнями CMMI</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2009/07/23/kakoy-ispolnitel-po-vkusu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jar с винтом</title>
		<link>http://artamonov.ru/2008/11/25/jar-s-vintom/</link>
		<comments>http://artamonov.ru/2008/11/25/jar-s-vintom/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 20:38:33 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[библиотеки]]></category>
		<category><![CDATA[языки]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=145</guid>
		<description><![CDATA[Java, как язык &#8211; ничего особо выдающегося. Да даже тот же C# внешне выглядит приятней, что уж говорить о многих динамических языках. Хотя, если насчет самого синтаксиса Java, то тут тоже наметилась тенденция, уже есть вполне неплохие JRuby, Groovy, Scala и Clojure, выбирай по вкусу.
Так вот, хоть как язык Java и проигрывает, но она имеет [...]]]></description>
			<content:encoded><![CDATA[<p>Java, как язык &#8211; ничего особо выдающегося. Да даже тот же C# внешне выглядит приятней, что уж говорить о многих динамических языках. Хотя, если насчет самого синтаксиса Java, то тут тоже наметилась тенденция, уже есть вполне неплохие <a href="http://jruby.codehaus.org/">JRuby</a>, <a href="http://groovy.codehaus.org/">Groovy</a>, <a href="http://www.scala-lang.org/">Scala</a> и <a href="http://clojure.org/">Clojure</a>, выбирай по вкусу.</p>
<p>Так вот, хоть как язык Java и проигрывает, но она имеет за плечами огромный набор библиотек, для решения почти всех востребованных задач. Я бы даже выразился так:</p>
<pre>
На каждую хитрую задачу найдется свой jar с винтом.
</pre>
<p>ну может не всегда именно jar, а скорее технология, протокол, спецификация, но суть в общем такая.</p>
<p>У всех остальных все хуже. Там или узкая заточенность под одни нужды (RoR), или единая линия партии (.Net), или просто полный хаос.</p>
<p>Главное &#8211; это все таки сколько у тебя за спиной готовых, зарекомендовавших себя и переиспользуемых решений. А что до производительности и требования к ресурсам, так с этим уже давно все хорошо, все работает достаточно быстро, если написать конечно как положено, а не как обычно. Да и в последнее время это уже неактуальная проблема, сейчас в цене не производительность, а масштабируемость.</p>
<p>Поэтому нравится java или нет, но&#8230; но чаще всего выбирать и не из чего.</p>
<p>P.S.: Хотя, если честно, есть тут один минус: это то что привыкнув к этому все стараются делать &laquo;через жаву&raquo;, что не всегда верно, но это уже издержки производства.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/11/25/jar-s-vintom/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Я не знаю EJB и JSF</title>
		<link>http://artamonov.ru/2008/08/06/ya-ne-znayu-ejb-i-jsf/</link>
		<comments>http://artamonov.ru/2008/08/06/ya-ne-znayu-ejb-i-jsf/#comments</comments>
		<pubDate>Wed, 06 Aug 2008 08:39:48 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[EJB]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[hibernate]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[архитектура]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=81</guid>
		<description><![CDATA[Как то так сложилось что при моем примерно 7-летнем опыте коммерческой разработки на Java я почти не имею опыта в EJB. Хотя это первое что спрашивают на собеседовании, я ведь проверял не так давно. Самое интересное, кстати, в том что многие собеседователи после кучи вопросов по опыту в EJB/WebSphere/JMS/пр., о том как это все им [...]]]></description>
			<content:encoded><![CDATA[<p>Как то так сложилось что при моем примерно 7-летнем опыте коммерческой разработки на Java я почти не имею опыта в EJB. Хотя это первое что спрашивают на собеседовании, я ведь проверял не так давно. Самое интересное, кстати, в том что многие собеседователи после кучи вопросов по опыту в EJB/WebSphere/JMS/пр., о том как это все им важно и пр., рассказывая о своих проектах, говорят что на практике все их проекты разрабатываются без какого либо EJB и прекрасно работают по Tomcat, а WebSphere получается лишь для веса. Возможно и потому что не серьезно сейчас предлагать решение без WebSphere/WebLogic + Oracle.</p>
<p>А мне всегда как то хватало связки Spring + Hibernate + Tomcat/JBoss, что в сущности дает тоже самое, но удобнее. Список можно продолжить добавив еще как минимум Acegi, AspectJ, и прочие решения умеющие хорошо и удобно решать свою отдельную задачу, многие легко взаимозаменяемы и дают очень неплохой синергетический эффект.<br />
<span id="more-81"></span><br />
EJB немного был когда я работал в Luxoft, но это почти мимо меня прошло. К EJB как таковому у меня отношение отрицательное из-за больших объемов лишней работы, я считаю что простые вещи должны делаться просто. Для EJB это не выполнялось, простые вещи делались сложно. Да и, честно говоря, сложные вещи делались не сложно, а очень сложно. Тоже самое касается и JSF. Система становится всеобъемлющей, делает все что можно, но, как результат комплексности, делает &laquo;все&raquo; одинаково плохо. Говорят с EJB 3.0 все лучше стало, т.к. изучили опыт аналогов (читай стараются догнать). Но это немного поздно, и с учетом инертности крупных разработчиков все совсем плохо.</p>
<p>Все это рассчитывалось на то что с этим сможет работать совершенно некомпетентный специалист, который возьмет какую либо GUI рисовалку и, не понимая базовых принципов, наклепает работающее приложение. В результате совершенно непонятно как вся эта хренотень может работать, и требует огромных компьютерных ресурсов. Хотя для последнего всегда проще купить HP Superdome и не парится (к тому же часто наоборот, сервера уже стоят, а загружены на 10%, но это уже решается другими методами). На самом деле я даже согласен, часто действительно лучше и гораздо дешевле поставить железо мощнее, но только когда это не вызвано уродством архитектуры. Т.е. когда мы пишем сервер на Ruby (например) и получаем красивое технологически решение, <u>поддерживаемое и легко расширяемое</u>, то потребность в больших ресурсах вполне себе оправдана, но когда говорят <em>&laquo;а нафиг нам пул соединений с БД? без него точно все работает, а с ним вдруг что случится? у нас сервер хороший и без пула потянет!&raquo;</em> то тут уже не сервер ставить, а архитектора увольнять. Хотя и мысль теоретически даже правильная, но не в том месте. </p>
<p>JSF больше страдает клиентской избыточностью, но для intranet на это еще можно забить. Я даже пару раз пытался использовать это, но так и не понял вкуса.  К тому же если нужно создавать хороший интерфейс не заморачиваясь с html/javascript, то надо использовать GWT, а не JSF. Но это, конечно, если нет в требованиях пункта &laquo;поддержка Netscape Navigator 3.0&#8243;, что еще было обязательным года 3 назад, надеюсь сейчас эти &laquo;компьютеры&raquo; уже окончательно доломались и на замену поставили те где можно поставить браузер посовременней. </p>
<p>А то к чему приводит разработка лишь на JSF могу проиллюстрировать тем что на очередном собеседовании с большим недоверием отнеслись к тому что я могу редактировать JSP/HTML в текстовом редакторе, вместо положенного WYSIWYG редактора. Очень удивились тому что я могу предполагать как изменится внешний вид в браузере после редактирования исходного HTML этой страницы. Я по своей наивности считал это вполне обыденной вещью, которую можно поручать даже школьнику-верстальщику. Ладно хоть не сказал что, к примеру, еще понимаю как HTTP протокол организован и на сайты хоть телнетом ходить могу.</p>
<p>Та вот, к чему я. В начале заголовок статьи был &laquo;Я не использую EJB и JSF&raquo;, сейчас заменил на &laquo;Я не знаю EJB и JSF&raquo;. Т.е. это скорее не принципиальное решение, а ситуация. Ведь может быть действительно моя проблема в том что я не знаю их? Может там есть очень серьезные плюсы? Серьезные выигрыши для проекта, для архитектуры, по сравнению с теми же Spring, Hibernate и пр.? Снижение каких то рисков? Если в случае EJB еще более-менее понятно, само по себе оно нужно, как минимум все части по отдельности востребованы. Вопрос в том нужны ли столь тяжеловесные решения иногда для простых задач, когда есть прекрасные и удобные альтернативы. Иногда конечно стоит взять готовую коробку от IBM, Oracle или BEA, вместо набора различных OS кубиков типа Mule, ActiveMQ, JBoss, Hibernate, Spring и т.д.  Это касается EJB, а вот в случае JSF мне вообще непонятно как оно до сих пор существует и кому это надо, неужели JSF дает что-то такое что разработка становится настолько дешевле? </p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/08/06/ya-ne-znayu-ejb-i-jsf/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Лаконичность кода или Java vs K или зачем нам JRuby и Groovy</title>
		<link>http://artamonov.ru/2008/04/24/lakonichnost-koda-ili-java-vs-k-ili-zachem-nam-jruby-i-groovy/</link>
		<comments>http://artamonov.ru/2008/04/24/lakonichnost-koda-ili-java-vs-k-ili-zachem-nam-jruby-i-groovy/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 15:38:07 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[codestyle]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[J]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[K]]></category>
		<category><![CDATA[Kdb]]></category>
		<category><![CDATA[Q]]></category>
		<category><![CDATA[ФЯ]]></category>

		<guid isPermaLink="false">http://artamonov.ru/2008/04/24/lakonichnost-koda-ili-java-vs-k-ili-zachem-nam-jruby-i-groovy/</guid>
		<description><![CDATA[Кто там говорит что perl-код не читабелен? Вот вам реализация soundex на языке K:
sdx:"bfpvcgjkqsxzdtlmnr"!(4#1),(8#2),(3 3 4 5 5 6)
nn:{d2:x where x > 0;r:d2 where d1:0w':d2}
soundex:{(x[0],(nn (sdx@1 _ x)),l:4#0)[til 4]}

угу, именно так&#8230; Похоже что клавиатуру протирали.
Теперь запускаем:
&#62;soundex "hellomyfriends"
("h";4;5;1)

А оно работает даже!
На самом деле из меня пока еще никакой специалист по K, и в действительности саму функцию [...]]]></description>
			<content:encoded><![CDATA[<p>Кто там говорит что perl-код не читабелен? Вот вам реализация soundex на языке <a href="http://en.wikipedia.org/wiki/K_programming_language">K</a>:</p>
<pre><code>sdx:"bfpvcgjkqsxzdtlmnr"!(4#1),(8#2),(3 3 4 5 5 6)
nn:{d2:x where x > 0;r:d2 where d1:0w<>':d2}
soundex:{(x[0],(nn (sdx@1 _ x)),l:4#0)[til 4]}
</code></pre>
<p>угу, именно так&#8230; Похоже что клавиатуру протирали.<br />
Теперь запускаем:<span id="more-72"></span></p>
<pre><code>&gt;soundex "hellomyfriends"
("h";4;5;1)
</code></pre>
<p>А оно работает даже!</p>
<p>На самом деле из меня пока еще никакой специалист по K, и в действительности саму функцию (т.е. последние 2 строки) наверняка можно переписать укоротив раза в 2-3, вообще для такой мелочи должно 1 строки кода хватать, так что мой пример нифига не лаконичен. Но идея думаю понятна. На Java тоже самое было бы гораздо длиннее, я приводить алгоритм soundex не буду, но можете посмотреть на другие <a href="http://www.cs.nyu.edu/~michaels/screencasts/Java_vs_K/Java_vs_K.html">сравнения синтаксиса Java и K</a></p>
<p>Честно говоря вся фишка языка K вовсе не в том что он такой компактный, а в <a href="http://kx.com/">Kdb+</a> и их совместных возможностях, но все же, я именно о синтаксисе. Для Java кода, при кодревью, я всегда помечал записи вида:</p>
<pre><code>x += isEmpty(s) || isDigit(s) ? 1 : 2;
</code></pre>
<p>и требовал что то вроде:</p>
<pre><code>if (isEmpty(s) || isDigit(s)) {
    x++;
} else {
    x += 2;
}
</code></pre>
<p>Что первый что второй вариант одинаковы понятны, хотя визуально второй прозрачней. K на самом деле тоже понятен, ну если его конечно изучить <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Вот только порог вхождения тут повыше, во многом из за того что сходу не получается читать примеры кода. Ну и опечатки гораздо менее заметны.</p>
<p>Так вот для человека, который не знает программирования, а тем более уж Java и K, оба языка покажутся &laquo;китайской грамотой&raquo;, и лишь для специалиста будет понятно, причем лишь тот пример на языке которого у него есть реальный опыт. </p>
<p>Еще в Java есть куча людей непонимающих вовсе как работает компьютер и что именно они пишут, а в K сплошь хакеры, поэтому для первых и делается попытка как можно больше упростить синтаксис, чтобы достаточно было знать даже не язык программирования, а английски язык. В результате получается что исправить ошибку или продолжить проект на java гораздо проще, возможно что даже если и опыт владения языками одинаков. Также на практике много раз убеждался что вполне можно сказать тестеру, аналитику или админу что и где нужно исправить, если возникла проблема а у вас нет возможности исправить в данный момент, и он исправит без проблем. В случае K объяснить будет на порядок сложнее, да даже слушать никто не станет, придется ехать и самому лезть в код, даже если надо всего лишь повернуть слэш в другую сторону <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>С другой стороны когда реализуешь алгоритм немного раздражает что пишешь сотни строк не относящихся напрямую к алгоритму (конечно постоянные Ctrl+Enter немного облегчают, но все же это не панацея), а после не можешь его окинуть взглядом и чтобы понять как оно работает появляются уродцы типа UML диаграмм. Ну и вообще пока описываешь эти бесконечные иерархии начинаешь забывать что собственно пишешь.  Кстати, а может устроить программирование как в шахматных партиях: 8 машинисток и идти вдоль ряда, лишь парой фраз указывая каждой что ей нужно писать? В случае Kdb+/K ходит история что некоторые, совсем уж хакеры, на ходу, собственно в процессе получения ТЗ от зрителей, за 1-1,5 часа пишут небольшую ERP.</p>
<p>Так вот, к чему я, если отвлечься от &laquo;java разработчика без проблем найти, а под K замучаешься&raquo;, то возникает вопрос: а все же как лучше? С одной стороны простота, с другой скорость реализации. Весь этот синтаксический overhead уже заставляет java разработчиков искать себя в ruby, python, groovy. Этакая золотая середина?</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/04/24/lakonichnost-koda-ili-java-vs-k-ili-zachem-nam-jruby-i-groovy/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>JYaml в качестве DSL</title>
		<link>http://artamonov.ru/2007/04/13/jyaml-v-kachestve-dsl/</link>
		<comments>http://artamonov.ru/2007/04/13/jyaml-v-kachestve-dsl/#comments</comments>
		<pubDate>Fri, 13 Apr 2007 07:27:15 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[yaml]]></category>

		<guid isPermaLink="false">http://www.artamonov.ru/2007/04/13/jyaml-v-kachestve-dsl/</guid>
		<description><![CDATA[Есть вот такая вот интересная задачка: приложение должно выполнять серию команд, внешне даже однотипных и настраиваемых через разные параметры. При этом описание очереди команд должно быть не в коде, а во внешнем файле, который можно отредактировать, и, без перекомпиляции приложения, запустить очередь заново. Да и вообще файл со списком команд указывать каким то параметром приложению, [...]]]></description>
			<content:encoded><![CDATA[<p>Есть вот такая вот интересная задачка: приложение должно выполнять серию команд, внешне даже однотипных и настраиваемых через разные параметры. При этом описание очереди команд должно быть не в коде, а во внешнем файле, который можно отредактировать, и, без перекомпиляции приложения, запустить очередь заново. Да и вообще файл со списком команд указывать каким то параметром приложению, т.к. будут различные файлы с разными очередностями команд.<br />
<span id="more-57"></span><br />
Этакий файл с описание фильтров для обрабатываемой информации, который редактируют не обязательно программисты.<br />
Как варианты для реализации: придумать какой то свой формат, потом его интерпретировать. Но такой интерпретатор та еще задача, кучу времени потребует. Еще можно воспользоваться XML, из которого через Castor, к примеру, воссоздавать все наши объекты / фильтры / команды. Но вот какого объёма будет требуемый нам файл с описанием, страшно представить.<br />
Ну а так как это получается некий узкоспециализированный язык, то я вот и предложу как упростить эту задачу. Идея растет из того же XML, но в более упрощённом виде, в виде <a href="http://yaml.org">YAML</a> описания.<br />
Итак, нам, к примеру, надо следующие команды:</p>
<ul>
<li>замена в определённом поле</li>
<li>удаление по определённому регекспу</li>
<li>сортировка</li>
<li>удаление пробелов</li>
</ul>
<p>Получаем вот такой вот файлик:</p>
<pre><code>--- !replace
from: __UNKNOWN__
to: Computer
atField: author
--- !remove
regex: [^\\d]+
atFields:
  - year
  - phone
--- !sort
withComparator: !defaultComparator
  direction: desc
--- !transform
withTransformer: !trim{}
</code></pre>
<p>Этакий Domain Specific Language получается. Может на первый взгляд не так все просто, но если написать небольшое описание синтаксиса нашего языка, или знакомство с документацией по yaml, все встанет на свои места, и редактирование подобного списка команд становится несложной задачей, с которой может справится продвинутый пользователь. В общем я сейчас сильно в синтаксис не буду вдаваться, кому надо глянут на <a href="http://yaml.org">yaml.org</a> и <a href="http://jyaml.sourceforge.net/">jyaml.sourceforge.net</a><br />
Второй момент как это прочитать, т.е. как построить их этого файла наши объекты. Делается все просто, через упомянутый <a href="http://jyaml.sourceforge.net/">JYaml</a>:</p>
<pre><code>List&lt;Command> list = new ArrayList&lt;Command>();
YamlDecoder dec = new YamlDecoder(in);
try {
    while (true) {
        Command command = (Command) dec.readObject();
        list.add(command);
    }
} catch (EOFException e) {
    log.debug("Finished reading stream.");
} finally {
    dec.close();
}
</code></pre>
<p>ну и т.к. в файле мы использовали не полный имена классов, то надо настроить связь между именем и самим классом, это нужно сделать <strong>до чтения</strong> самих объектов, следующим образом:</p>
<pre><code>BiDirectionalMap&lt;String, String> classes = new BiDirectionalMap&lt;String, String>();
classes.put("replace", ReplaceCmd.class.getName());
classes.put("remove", RemoveCmd.class.getName());
classes.put("trim", Trim.class.getName());
classes.put("sort", SortCmd.class.getName());
classes.put("defaultComparator", DefaultComparatorCmd.class.getName());
classes.put("transform", TransformCmd.class.getName());
YamlConfig.getDefaultConfig().setTransfers(classes);
</code></pre>
<p>На самом деле можно такой мини язык делать не только для списка команд, в общем то почти любой класс так можно описать и десериализовать после в объект, а текущая задача она применима к моим условиям. Правда тут возникла проблема: хотелось бы чтобы эти объекты помимо описания в этом файле имели настройки в Spring. Т.е. все связи с другими объектами настроить в Spring контексте, а саму очерёдность и дополнительные настройки брать уже из этого файла. Так вот это я не знаю как реализовать, не расширяя YamlDecoder. Хотя, т.к. jyaml проект open source&#8217;ный, это тоже вполне реализуемо.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2007/04/13/jyaml-v-kachestve-dsl/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Горы сейчас высокие пошли&#8230;</title>
		<link>http://artamonov.ru/2006/06/20/goryi-seychas-vyisokie-poshli/</link>
		<comments>http://artamonov.ru/2006/06/20/goryi-seychas-vyisokie-poshli/#comments</comments>
		<pubDate>Tue, 20 Jun 2006 13:28:39 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Мысли]]></category>

		<guid isPermaLink="false">http://www.artamonov.ru/2006/06/20/goryi-seychas-vyisokie-poshli/</guid>
		<description><![CDATA[- Что мне нужно выучить, чтобы создать игру/офисный пакет/1с?
- Экономику. Менеджмент, маркетинг и т.д. А потом все-все просчитать, взять огромную кучу денег, нанять помощников, много разных программистов, тестеров, дизайнеров, разных узких специалистов и тогда сделать это! А если в одного&#8230; да бесполезно просто.
]]></description>
			<content:encoded><![CDATA[<p>- Что мне нужно выучить, чтобы создать игру/офисный пакет/1с?<br />
- Экономику. Менеджмент, маркетинг и т.д. А потом все-все просчитать, взять огромную кучу денег, нанять помощников, много разных программистов, тестеров, дизайнеров, разных узких специалистов и тогда сделать это! А если в одного&#8230; да бесполезно просто.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2006/06/20/goryi-seychas-vyisokie-poshli/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Web 2.0</title>
		<link>http://artamonov.ru/2006/06/05/web-20/</link>
		<comments>http://artamonov.ru/2006/06/05/web-20/#comments</comments>
		<pubDate>Mon, 05 Jun 2006 08:38:38 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Мысли]]></category>
		<category><![CDATA[Новые технологии]]></category>

		<guid isPermaLink="false">http://www.artamonov.ru/2006/06/05/web-20/</guid>
		<description><![CDATA[После книги &#171;Решение проблемы инновации&#187; посмотрел через эту призму на текущие тенденции в Web. В Web-разработка многие сейчас носятся с идеями инноваций, хотя большинство из всего этого авторы назвали бы поддерживающей инновацией, которые по его мнению не так доходны.
Многие высказанные в книге идеи можно развить в области ИТ, да и сами они (авторы) неоднократно рассуждали [...]]]></description>
			<content:encoded><![CDATA[<p>После книги &laquo;<a href="http://www.artamonov.ru/2006/02/14/reshenie-problemyi-innovatsiy-v-biznese-kristensen-reynor/">Решение проблемы инновации</a>&raquo; посмотрел через эту призму на текущие тенденции в Web. В Web-разработка многие сейчас носятся с идеями инноваций, хотя большинство из всего этого авторы назвали бы поддерживающей инновацией, которые по его мнению не так доходны.<br />
Многие высказанные в книге идеи можно развить в области ИТ, да и сами они (авторы) неоднократно рассуждали про инновации в различных сферах ИТ, но я сейчас хочу остановится лишь на одной из них.<br />
<span id="more-10"></span><br />
По мнению авторов, в начале производства лучшим решением будет создание продукта из сильно связанных компонентов, использовать по максимуму свои возможности. И далее по мере выхода продукта на рынок, по мере появления конкурентов, развития  самого продукта и пр. лучше переходить на специализацию в одном из направлений. Все это мы и так видим в своей сфере, ни IBM, ни HP и даже уже ни Apple, никто из них сейчас не занимается всем продуктом как одним целым. Продукт разбился на модули, на различные (универсально стыкуемые друг с другом) железки, на софт, на поддержку и пр. На рынок выходят новые игроки, и того бизнеса который был у IBM уже ничего не осталось (заглянул было в корпус, ну ни одной железки с лейблом IBM, винчестер и тот Hitachi/IBM). Только не надо понимать меня буквально, что IBM развалился, это не так, это их бизнес поменялся. Ну да ладно, это я не туда отвлекся.</p>
<p>Это я к тому что по мере развития технологии наступает насыщение, и развитие в таком виде становится менее прибыльным. Начинаются стандартизации взаимодействия элементов и децентрализация/передача частей производства. В результате получается продукт лучшего качества и оптимизация производства.</p>
<p>Так вот такое же насыщение сейчас пришло в Web. Сейчас пошли все эти новые технологиий RSS, RDF, SOAP, Semantic Web и пр. Т.е. переход от &laquo;сайт как единое целое&raquo; к &laquo;сайт как участник связанной системы&raquo;. Сайт начинает связывать/использовать для своей работы некоторые другие сайты/сервисы, а также сам может отдавать другим какие либо свои услуги/информацию. Остается только договорится о стандартизации обмена, об API доступа к сайту. Это уже не сайты, а сервисы.</p>
<p>И вполне вероятным может быть создание сайта лишь на основе иных сервисов. Это несомненно дает множество плюсов, в плане качества сайта. К примеру я могу прикрутить к определенному сайту карту местности, если делать буду ее своими силами. Но сколько денег это мне будет стоить? Есть у меня один знакомый, который занимался много времени ГИС-софтом, он мне примерно рассказал сколько ресурсов это потребует, в общем дорого это&#8230; Но есть путь проще: к сайту прекрасно прикручивается <a href="http://maps.google.com/">Google Maps</a>. Еще из подобных сервисов у нас уже есть различные чаты, календари (GCal), хранилище данных (Amazon S3), фиды по кучи разных тем&#8230; еще много чего, но на самом деле еще мало <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />   </p>
<p>Главное что все идет к тому что сервисов этих будет день ото дня больше и больше, и это радует. В результате каждый разработчик заработает на том что он умеет делать лучше других, а пользователи получат более качественный продукт.</p>
<p>Вот это уже и есть Web 2.0. А все эти закругленные углы, большие шрифты, css, ajax, и пр. это просто обычный процесс улучшения, просто попавший на этоже время.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2006/06/05/web-20/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
