<?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/tech/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>Google I/O 2010</title>
		<link>http://artamonov.ru/2010/05/21/google-io-2010/</link>
		<comments>http://artamonov.ru/2010/05/21/google-io-2010/#comments</comments>
		<pubDate>Fri, 21 May 2010 11:49:14 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google tv]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=403</guid>
		<description><![CDATA[Google I/O закончился, основные моменты конференции:

Web растет


на десктопе перестали появляться значимые приложения (за исключением игр)
люди проводят все больше и больше времени в интернет. Телевидение, радио и газеты сдают свои позиции


Приходит HTML5


к концу года будет поддерживаться всеми современными (= новыми) браузерами
открыли WebM (web media) &#8211; видео кодек vp8, его поддержали opera и mozilla.
я не специалист, и [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/intl/ru/events/io/2010/">Google I/O</a> закончился, основные моменты конференции:</p>
<dl>
<dt>Web растет</dt>
<dd>
<ul>
<li>на десктопе перестали появляться значимые приложения (за исключением игр)</li>
<li>люди проводят все больше и больше времени в интернет. Телевидение, радио и газеты сдают свои позиции</li>
</ul>
</dd>
<dt>Приходит HTML5</dt>
<dd>
<ul>
<li>к концу года будет поддерживаться всеми современными (= новыми) браузерами</li>
<li>открыли <a href="http://www.webmproject.org">WebM (web media)</a> &#8211; видео кодек vp8, его поддержали opera и mozilla.</li>
<li>я не специалист, и зрение у меня не очень, поэтому не заметил особых проблем по сравнению с h264, но некоторые утверждают что качество хуже.</li>
<li>Adobe встроит VP8 в Flash Player -> он появится и в устаревших браузерах -> получается единый кодек для видео в инете</li>
</ul>
</dd>
<dt><a href="http://code.google.com/intl/ru-RU/chrome/apps/">Chrome Web Store</a></dt>
<dd>
<ul>
<li>продажа web приложений как &laquo;коробок&raquo;</li>
<li>Еще один шаг к Google OS</li>
</ul>
</dd>
<dt><a href="http://wave.google.com">Google Wave</a></dt>
<dd>
<ul>
<li>открыт для всех</li>
<li>ускорен, расширен API и т.д.</li>
<li>использовался для обсуждения на всех секциях Google IO, получилось очень удобно</li>
</ul>
</dd>
<dt><a href="http://www.springsource.org/node/2595">Сотрудничество с VMWare</a></dt>
<dd>
<ul>
<li>Spring Roo научился генерить GWT интерфейс</li>
<li>за несколько минут, на наших глазах, было написано полноценное приложение на Spring Roo для GAE + GWT</li>
</ul>
</dd>
<p><span id="more-403"></span></p>
<dt><a href="http://code.google.com/intl/ru/webtoolkit/doc/latest/ReleaseNotes.html">GWT 2.1</a></dt>
<dd>
<ul>
<li>работа на разных устройствах</li>
<li>встроен MVP</li>
<li>новые компоненты для отображения больших объемов данных</li>
<li>Speed Tracer учитывает серверный код</li>
</ul>
</dd>
<dt><a href="http://googleappengine.blogspot.com/2010/05/app-engine-at-google-io-2010.html">App Engine</a></dt>
<dd>
<ul>
<li>для бизнеса</li>
<li>поддержка OAuth и OpenId</li>
<li>инструментарий загрузки и выгрузки данных</li>
<li>планы на Comet и длительную обработку данных (mapreduce я так понимаю)</li>
</ul>
</dd>
<dt><a href="http://code.google.com/intl/ru/apis/webfonts/">Fonts API</a></dt>
<dd>
<ul>
<li>набор [нестандартных] шрифтов подключаемых через CSS + Javascript</li>
</ul>
</dd>
<dt><a href="http://developer.android.com/sdk/android-2.2-highlights.html">Android 2.2</a></dt>
<dd>
<ul>
<li>очень хорошо ускорена виртуальная машина (уже имеющиеся приложения начинают работать в 2-5 раз быстрее)</li>
<li>перевод текста</li>
<li>голосовые команды</li>
<li>очень хорошо стебались над iPad, iPhone</li>
<li>раздарили HTC Evo всем участникам конференции</li>
<li>поддержка flash 10.1</li>
<li>и много прочего</li>
</ul>
</dd>
<dt><a href="http://www.google.com/tv/">Google TV</a></dt>
<dd>
<ul>
<li>как приставка к имеющемуся телевизору, или как телевизор с встроенным Google TV</li>
<li>поиск по TV каналам, с возможностью записи и т.д.<br />
выход в web, просмотр видео в инете, покупки фильмов онлайн (amazon, netflix, пр.)</li>
<li>на него можно будет ставить приложения android</li>
<li>получается интересный медиацентр для дома</li>
<li>толком не работал, постоянно ломался &laquo;пульт управления&raquo;</li>
<li>будет в продакшне к следующему лету</li>
</ul>
</dd>
</dl>
<p>Ну и вывод: интернет меняется, и с огромной скоростью</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/05/21/google-io-2010/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMForce</title>
		<link>http://artamonov.ru/2010/04/27/vmforce/</link>
		<comments>http://artamonov.ru/2010/04/27/vmforce/#comments</comments>
		<pubDate>Tue, 27 Apr 2010 20:07:15 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Бизнес]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[enterprise 2.0]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[vmforce]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=384</guid>
		<description><![CDATA[VMWare только что показали презентацию своего VMForce, платформу для приложений внутри SalesForce, на основе Spring Framework.
Презентация была, к сожалению, совсем не бизнесовая, а техническая. Зачем то показывали примеры кода и пр., но не рассказали зачем это. Но общую идею, конечно, можно понять. VMForce это PaaS для реализации своих приложений, интегрированных в инфраструктуру Salesforce, работающую на [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://vmware.com">VMWare </a>только что показали презентацию своего <a href="http://vmforce.com">VMForce</a>, платформу для приложений внутри <a href="http://www.salesforce.com">SalesForce</a>, на основе Spring Framework.</p>
<p>Презентация была, к сожалению, совсем не бизнесовая, а техническая. Зачем то показывали примеры кода и пр., но не рассказали зачем это. Но общую идею, конечно, можно понять. VMForce это PaaS для реализации своих приложений, интегрированных в инфраструктуру Salesforce, работающую на их серверах, с их базой данных и их клиентами. Видимо деньги за использование будут будут тоже как-то пилиться между вендорами и salesforce, но вот эту часть вообще мимо обошли, как и много другое.</p>
<p>А вообще вот презентация (это не то что было на официальном представлении, но суть передает):<br />
<object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/LpO6whOCAmQ&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/LpO6whOCAmQ&#038;color1=0xb1b1b1&#038;color2=0xcfcfcf&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"></embed></object></p>
<p>Да, все идет к этому, к SaaS, PaaS, Enterpise 2.0, интеграции приложений под одним зонтом и пр. Мы собственно сейчас занимаемся тем же самым, посмотрим кто кого <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  VMForce что-то реальное собирается показать во второй половине года, мы надесь тоже.</p>
<p>P.S. Но суть презентации я не понимаю, хоть убей, что они хотели сказать то? Все сводилось к лозунгу что &laquo;Java может работать в облаке&raquo;. И чо? Кто-то разве сомневался? Не объяснили ни зачем это нужно бизнесу, ни зачем это нужно вендорам, ни что вообще хотят сделать. И вообще трансляция была полуработающая <img src='http://artamonov.ru/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' />  Такое ощущение что им срочно нужно было хоть что-то сказать, но времени на полноценную подготовку не было.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2010/04/27/vmforce/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dataset Publisher</title>
		<link>http://artamonov.ru/2009/12/15/dataset-publisher/</link>
		<comments>http://artamonov.ru/2009/12/15/dataset-publisher/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:08:21 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[Мои проекты]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[datasets]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[gae]]></category>
		<category><![CDATA[google app engine]]></category>
		<category><![CDATA[torrent]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=344</guid>
		<description><![CDATA[
Кто нибудь занимается datamining, textmining, ir и прочими делами с большими массивами данных? Вот запустил небольшой сервис: datasetpublisher.com &#8211; торрент трекер для коллекций данных. Т.е. чтобы не качать очередные 5G дампа википедии со скоростью 70Kb/s (докачается как раз к моменту когда выложат новый дамп), а скачать с нормальной скоростью через торрент. 
Только запустил, поэтому там [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://artamonov.ru/wp-content/uploads/2009/12/datasetpublisher.png" alt="datasetpublisher" title="datasetpublisher" width="200" height="122" style="float: right; margin-left: 10px; margin-bottom: 10px" /></p>
<p>Кто нибудь занимается datamining, textmining, ir и прочими делами с большими массивами данных? Вот запустил небольшой сервис: <a href="http://www.datasetpublisher.com">datasetpublisher.com</a> &#8211; торрент трекер для коллекций данных. Т.е. чтобы не качать очередные 5G дампа википедии со скоростью 70Kb/s (докачается как раз к моменту когда выложат новый дамп), а скачать с нормальной скоростью через торрент. </p>
<p>Только запустил, поэтому там пока пусто, но будем наполнять. Если есть желание и есть что &#8211; то выкладывайте. Я, в свою очередь, постараюсь донести об этом сервисе до всех заинтересованных лиц.</p>
<p>Проект запущен на <a href="http://code.google.com/appengine/">Google App Engine</a>, что собственно и послужило причиной его появления. Уж очень я в последнее время заинтересовался этой платформой, и решил поэксперементировать. А так как я очень не люблю что-то делать &laquo;в корзину&raquo;, и считаю что подобные эксперименты, помимо исследовательской цели, должны принести конкретный применимый сейчас результат. И вспомнил разговор с <a href="http://ivan.begtin.name/">Иваном Бегтиным</a>, незадолго до этого, о том что неплохо бы иметь подобный ресурс. Теперь он есть. И с GAE разобрался, на него еще посмотрю как вести себя будет, и напишу свое мнение.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2009/12/15/dataset-publisher/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Single Web Profile</title>
		<link>http://artamonov.ru/2008/09/05/single-web-profile/</link>
		<comments>http://artamonov.ru/2008/09/05/single-web-profile/#comments</comments>
		<pubDate>Fri, 05 Sep 2008 09:18:14 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[cdi]]></category>
		<category><![CDATA[web 3.0]]></category>
		<category><![CDATA[интеграция]]></category>
		<category><![CDATA[соц. сети]]></category>

		<guid isPermaLink="false">http://artamonov.ru/?p=119</guid>
		<description><![CDATA[Предыдущий пост про CDI на самом деле подготавливал почву к похожей теме из другой области.
В корпоративном секторе упомянутые подходы давно опробованы, и есть куча внедрений, ну правда в Россию это пришло сравнительно недавно, но западный опыт довольно обширный. Так вот, хочу поразмышлять по поводу приложения этих методик в web приложения. Как я уже описал, это [...]]]></description>
			<content:encoded><![CDATA[<p>Предыдущий<a href="http://artamonov.ru/2008/09/04/customer-data-integration/"> пост про CDI</a> на самом деле подготавливал почву к похожей теме из другой области.</p>
<p>В корпоративном секторе упомянутые подходы давно опробованы, и есть куча внедрений, ну правда в Россию это пришло сравнительно недавно, но западный опыт довольно обширный. Так вот, хочу поразмышлять по поводу приложения этих методик в web приложения. Как я уже описал, это применимо для социальных сетей и вообще сайтов содержащих большой объем пользовательской информации. В последнее время это становится очень даже популярным, появляются различные инициативы по интеграции сервисов друг с другом, по передачи пользовательской информации. Упомянул я и протоколы, которыми кто то уже начал пользоваться, а кто-то присматривается.<br />
<span id="more-119"></span><br />
Первый этап, «с основой на CRM», в данном случае выражает наличие монстров типа Одноклассники и ВКонтакте. Так как помимо них есть куча мелких сетей, то и виртуальные модели тоже появляются. Из российских это нашумевший в определенных кругах bestpersons. С некоторыми косяками, но он первопроходец, ему положено первому наступать на все эти грабли, и пока даже можно простить тот самый косяк. Ну а дальше все идет к тому что мы переключимся на центр персональных данных, не привязанных к определенному сайту. Будет некие информационные хабы, может их предоставят и упомянутые социальные сети.</p>
<p>Есть даже мнение, которое я поддерживаю, что вся эта взаимная интеграция сайтов есть немаловажная часть будущего web 3.0, возможно даже самая главная часть. </p>
<p>Идея что для web&#8217;а что для enterprise одинакова, но в случае бизнеса уже множество раз опробованная, а в web лишь только зарождается. В случае социальных сетей нет такого желания объединиться, по крайней мере со стороны сервисов, это удобно лишь конечному пользователю. Крупные социальные сети пока считают что тем самым они могут потерять своих пользователей, и судя по всему они слишком жадные до данных, скорее всего они будут сильно сопротивляться этим инновациям, пока окончательно не умрут. Те же одноклассники сейчас ценятся лишь огромной базой пользователей, а не теми услугами которые они предоставляют для них. Ну на самом деле, разместить фото и отписать «как дела?» можно и без них, но показывать это фото обычно некому, нужно в начале найти этого человека <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  И ведь ничего суперсовременного тут нет, нужна лишь база по которой можно найти своих одноклассников, а дальше уже мелочи.</p>
<p>Пользователю же подобный хаб дает большие возможности. Как минимум имея единый профайл, содержащий всю нужную и, что очень важно, всегда актуальную информацию о себе, о связях с другими людьми, к тому же сгруппированную по типам (друзья, деловые знакомые и пр.) а также медиаданные, такие как фото, видео и тесты, можно использовать внешние сервисы именно как индивидуальные услуги. Предоставляя каждому сервису определенный срез своих данных. На одном сервисе напишет другу как дела и покажет фотку «у машины» или «на курорте», на другом сервисе красивое «фото для души» и «я купил мыльницу с макросьемкой», а на третьем серию фоток с очередного праздника. Идея думаю понятна. Технически это конечно не обязательно будет именно физически единый центр/сайт/сервис. Опыт CDI показывает что наиболее вероятно распределенное хранение, как несколько связанных БД, т.е. распределенная работа с данными, но единая точка связи всех данных.</p>
<p>Закончим с философией и мечтами о светлом будущем, в данном случае растекаться мыслью по древу можно очень и очень долго. Основная мысль которую я хотел донести это то что идея единого центра пользовательских данных во-первых не нова, во-вторых опробована и есть свои методики, в-третьих что еще много что можно сделать, и самое главное, еще больше от этого получить, и в-четвертых: сейчас будет волна подобных разработок <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  А сейчас не паханое поле для всевозможных стартапов, мэшапов и прочих мейкапов.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/09/05/single-web-profile/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Изучение языка минипогружением</title>
		<link>http://artamonov.ru/2008/09/03/izuchenie-yazyka-minipogruzheniem/</link>
		<comments>http://artamonov.ru/2008/09/03/izuchenie-yazyka-minipogruzheniem/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 07:27:55 +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=112</guid>
		<description><![CDATA[Опубликовал небольшую идею на хабре: Изучение языка минипогружением. Если кто есть оттуда &#8211; посмотрите, плюсаните, прокомментируйте.
]]></description>
			<content:encoded><![CDATA[<p>Опубликовал небольшую идею на хабре: <a href="http://habrahabr.ru/blogs/startup_ideas/38776/">Изучение языка минипогружением</a>. Если кто есть оттуда &#8211; посмотрите, плюсаните, прокомментируйте.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/09/03/izuchenie-yazyka-minipogruzheniem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Обработка данных, подход &#171;MapReduce&#187;</title>
		<link>http://artamonov.ru/2008/02/21/obrabotka-dannyx-podxod-mapreduce/</link>
		<comments>http://artamonov.ru/2008/02/21/obrabotka-dannyx-podxod-mapreduce/#comments</comments>
		<pubDate>Thu, 21 Feb 2008 11:07:03 +0000</pubDate>
		<dc:creator>splix</dc:creator>
				<category><![CDATA[Базы данных]]></category>
		<category><![CDATA[Новые технологии]]></category>
		<category><![CDATA[Обработка данных]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[gridgain]]></category>
		<category><![CDATA[hadoop]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[map reduce]]></category>
		<category><![CDATA[split aggregate]]></category>
		<category><![CDATA[кластеризация]]></category>
		<category><![CDATA[обработка данных]]></category>

		<guid isPermaLink="false">http://artamonov.ru/2008/02/21/obrabotka-dannyx-podxod-mapreduce/</guid>
		<description><![CDATA[В 2004 году Google рассказал о модели обработки данных которую они использую. Основана она на том что данные обрабатывает пара простых функций Map и Reduce. Первая их которых выделяет множество пар Ключ/Значений из входящих данных (тоже являющихся парами Ключ/Значение), а вторая производит объединение/группировку этих пар, и, опять же, выдает наружу таки пары, чаще всего в [...]]]></description>
			<content:encoded><![CDATA[<p>В 2004 году Google рассказал о модели обработки данных которую <a href="http://labs.google.com/papers/mapreduce.html">они использую</a>. Основана она на том что данные обрабатывает пара простых функций <code>Map</code> и <code>Reduce</code>. Первая их которых выделяет множество пар Ключ/Значений из входящих данных (тоже являющихся парами Ключ/Значение), а вторая производит объединение/группировку этих пар, и, опять же, выдает наружу таки пары, чаще всего в меньшем количестве чем пришло на вход. Дополнительным элементом является распределенная файловая система GoogleFS, благодаря которой обрабатываемый файл, и вся промежуточная информация, становится легко доступной с любого компьютера в кластере.</p>
<p>Т.к. вся архитектура обработки состоит из небольших функций, то обработку можно легко распараллелить на кластере. К тому же облегчает разбивка на отдельные куски и восстановление после сбоя. Используя распределенную ФС мы разбиваем данные на небольшие кусочки, с каждым из которых и работает отдельный элемент кластера. </p>
<p>Так же эту идею можно встретить под названием Split/Aggregate. Т.е. суть в том что входные данные (неважно какого размера) разбиваются на отдельные элементы (этап split), к примеру построчно, каждая строка как отдельное значение для обработки. Эти блоки строк раcпределяются по кластеру для обработки, где для каждой строки вызывается функция обработки (map). Результат выполнения опять объединяется (reduce/aggregate) в выходной файл. Если нужно, то данные сохраняются отсортироваными в определенном порядке, к примеру по внешнему ключу.<br />
<span id="more-60"></span></p>
<h1>Область применения</h1>
<p>Сам подход очень хорошо подходит для длительной обработки больших объемов данных, причем когда нам не требуется определенная последовательность процесса или получение результата по мере поступления новых данных. Т.е. если у нас в наличии пару гигабайт данных для обработки и нам нужен конечный результат обработки, то это отличный вариант, но если у нас тот же гигабайт постоянно поступает небольшими кусочками, и мы должны их тут же отправлять на обработку, ожидая результат как можно скорее, то удобней иной подход, нежели чем MapReduce и Hadoop в частности.</p>
<p>Например это очень подходит когда нам нужно обработать стопку csv файлов. Ну или один, но большой. В каждой строке несколько колонок с данными, на основе этого получаем результат, тоже в csv. Так вот обработку такого файла легко распаралелить на нескольких машинах, построчно, или блоками, скажем по 100 строк, равномерно раскидать по серверам, обработать, а потом результирующие строки склеить в выходной файл. Если надо можно еще отсортировать чтобы было в том же порядке что и во входящих данных. Все это требует гораздо меньше ресурсов чем сама обработка данных. </p>
<p>Есть мнение что при обработке данные не стоит перегонять в текстовые файлы, пусть все хранится в БД, и читать оттуда поблочно, тут же складывая полученные результаты. В этом тоже есть свои плюсы и минусы, тут каждый решает сам, в зависимости от задач. Распределенная ФС, кстати, очень хорошо заменяет БД как центральное хранилище данных, а привести в структурный вид, удобный для БД можно уже и отдельным этапом (например отдельной задачей mapreduce). Хотя загрузку и средствами БД можно легко и быстро сделать.</p>
<h1>Пример алгоритма</h1>
<p>Приведу один простой пример, может понятней будет.</p>
<dl>
<dt>mapNumbers(&laquo;1, 4 and 3&#8243;)</dt>
<dd>Пусть он выделит все цифры в тексте, например регэкспом \d+, не суть важно. В нашем случае выдаст пары {num:1, num:4, num:3}, где num  &#8211; имя ключа, а 1,4 и 3 &#8211; его значения</dd>
<dt>reduceSum(num[])</dt>
<dd>На вход придет список пар с одинаковым ключем, в нашем случае ключ num. Пусть метод выполняет суммирование всех цифр для переданного списка пар. Т.е. в нашем случае ему на вход придут те три пары num:#, и он произведет суммирование 1 + 4 + 3, выдав 8</dd>
</dl>
<p>На самом деле функции иногда в сотни раз сложнее, но суть та же.</p>
<h1>Реализации MapReduce кластера под java</h1>
<h2>Apache Hadoop</h2>
<p><a href="http://hadoop.apache.org/">Apache Hadoop</a> &#8211; одна из основных реализаций системы для такой обработки. Поддерживает как MapReduce так и распределенную файловую систему (HDFS). Подпроектом еще идет как минимум реализация BigTable. map/reduce могут быть написаны не обязательно на Java, вполне подойдет все что может запускаться под этой ОС. Кстати, базовой ОС является Unix, хотя как я понимаю под Windows тоже работает, через cygwin.</p>
<p>Недавно Yahoo! <a href="http://developer.yahoo.com/blogs/hadoop/2008/02/yahoo-worlds-largest-production-hadoop.html">сообщил</a> что они успешно используют Hadoop для обработки объемов порядка 300 терабайт на кластере из 10 000 серверов. Из чего можно сделать вывод что для повседневных задач по обработки текущих данных Hadoop хватит с лихвой.</p>
<h2>GridGain</h2>
<p><a href="http://www.gridgain.com">GridGain</a> скорее рассчитан(но не ограничивается этим) не на обработку терабайтов данных, а разбиение на кучу задач, не важно каких. Больше подходит название SplitAggregate. Т.е. мы задаем объем задач, GridGain раскидывает это по кластеру, и далее передает нам результат. И здесь уже хоть сразу все через БД делай, хоть используй поверх распределенной ФС (от того же Hadoop даже), не суть важно. Авторы к примеру предлагают так юнит тесты запускать, т.е. разбиваем по методам на кластер, и все они параллельно тестируются. Надо это попробовать, если окажется десяток лишних компов под рукой <img src='http://artamonov.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>А еще эти товарищи очень не любят писать лишний код сами, а предпочитают интегрировать готовые, зарекомендовавшие себя решения. Что я считаю очень правильно, зачем лишний раз изобретать велосипед? Так вот, я к тому что система получается очень гибкая, красиво написанная, настраиваемая в спринге и интегрируется с кучей прочих около grid решений. </p>
<h1>Cloud Computing</h1>
<p>В свете последнего расцвета cloud computing, сервисов типа Amazon S3 и EC2 все это становится довольно интересным. Сейчас можно не ждать несколько часов для обработки, когда можно запустить все это на кластере из сотен серверов, получить результат через несколько минут заплатив за аренду этого кластера совсем небольшую сумму.</p>
]]></content:encoded>
			<wfw:commentRss>http://artamonov.ru/2008/02/21/obrabotka-dannyx-podxod-mapreduce/feed/</wfw:commentRss>
		<slash:comments>0</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>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>
