<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russiannone.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/noitems.css"?><rss 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/" version="2.0">

<channel>
	<title>evgeny.gavrin</title>
	
	<link>http://blog.gavr.in</link>
	<description>Random notes on software development</description>
	<lastBuildDate>Mon, 14 Feb 2011 20:49:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/eugene-gavrin" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="eugene-gavrin" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://feeds.feedburner.com/eugene-gavrin" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Feugene-gavrin" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Feugene-gavrin" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Feugene-gavrin" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><item>
		<title>Concurrent Programming Library</title>
		<link>http://blog.gavr.in/2011/02/33/</link>
		<comments>http://blog.gavr.in/2011/02/33/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 20:49:09 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Parallel]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=33</guid>
		<description><![CDATA[Рад представить вам свой проект, который я вынашивал у себя в голове достаточно долго &#8211; Concurrent Programming Library. Сейчас по ссылке будет видна заглушка, проект будет опубликован 8го марта сего года. Библиотека планируется как набор параллельных алгоритмов и паттернов, которые дадут возможность разработчикам писать простые параллельные программы используя .net framework 2.0 и выше. Из базовых [...]]]></description>
			<content:encoded><![CDATA[<p>Рад представить вам свой проект, который я вынашивал у себя в голове достаточно долго &#8211; <a title="Concurrent Programming Library" href="http://cpl.codeplex.com/" target="_blank">Concurrent Programming Library</a>. Сейчас по ссылке будет видна заглушка, проект будет опубликован 8го марта сего года.</p>
<p>Библиотека планируется как набор параллельных алгоритмов и паттернов, которые дадут возможность разработчикам писать простые параллельные программы используя <strong>.net framework 2.0 и выше</strong>. Из базовых алгоритмов планируется Parallel.For/Foreach/Invoke, которые покроют процентов 70 случаев, где будет возникать необходимость в подобном &#8220;колхозном&#8221; распараллеливании. Из продвинутых Pipeline, DataFlow и AsyncTasks &#8211; они должны покрыть остальные более экзотические случаи. Очевидно, что практически сразу возникнет желание иметь набор tread-safe колекций,  они тоже будут (правда их список пока варьируется). В дополнении к этому стоит заметить, что большинство библиотек для распараллеливания страдают вполне определенным набором &#8220;родовых болезней&#8221;, одна из которых отладка. Поэтому планируется на уровне библиотеки внедрить средства для тестирования, отладки, оценки производительности и масштабируемости приложения.</p>
<p>Идея вынашивалась действительно долго, и на то были разные причины &#8211; внутренняя критика, объективные и субъективные сомнения о необходимости подобной библиотеки. Но внешние обстоятельства сложились так, что библиотеку я все же решился написать. Первый вопрос, который возникает &#8211; на кой бы фиг? Особенно при условии, что уже существует Task Parallel Library, которая поставляется из коробоки и обладает более чем отличной документацией. Поясняю, так случилось, что в мои руки попал шестой(!!!) по счету проект, который требовал библиотеки уровня &#8220;чуть по-проще Task Parallel Library&#8221;, но для .net framework 2.0 или 3.5. Чаще все-таки хотелось именно 2.0.</p>
<p>Изучение просторов сети показало, что имеется две библиотеки, которые могли бы стать решение проблемы, но в силу своей лицензии они не могут использоваться в коммерческих проектах. В связи с этим, по различным блогам процветают посты вроде: &#8220;Пишем параллельный For на 2-м фреймворке&#8221;, &#8220;Parallel.Invoke за 10-ть минут&#8221; и &#8220;Параллелим проект в 20к строк кода с помощью тредов&#8221;, думаю не стоит говорить, что качество подобных реализаций варьируется от &#8220;Вау&#8221; до &#8220;Ох тыж ёжик&#8221;. Ни о каких тестах, отладке и тд речи естественно не идет.</p>
<p>Ниже живет родмап, которому я планирую следовать при разработке. Все работа поделена на несколько этапов, где каждый этап будет сопровождаться насильственной публичной поркой. Я планирую рассылать исходники и просить отревьюить мой код. Очень надеюсь, что данная практика не станет порочной и не превратится в &#8220;избиение&#8221; <img src='http://blog.gavr.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Roadmap:</strong></p>
<p><strong>Step 1 (Basic parallel algorithms)</strong>:</p>
<ul>
<li>Parallel.For</li>
<li>Parallel.Foreach</li>
<li>Parallel.Invoke</li>
<li>Basic performance and scalability testing environment</li>
</ul>
<p><strong>Step 2 (Advanced algorithms)</strong>:</p>
<ul>
<li>Pipeline</li>
<li>Basic scheduling</li>
<li>DataFlow concepts</li>
<li>Tasks concepts</li>
</ul>
<p><strong>Step 3 (Tread-safe collections)</strong>:</p>
<ul>
<li>Concurrent.List</li>
<li>Concurrent.Dictionary</li>
<li>Concurrent.Queue</li>
<li>Concurrent.Stack</li>
<li>&#8230;</li>
</ul>
<p><strong>Step 4 (Task scheduling environment)</strong>:</p>
<ul>
<li>Asynchronous Tasks</li>
<li>Schedulers</li>
</ul>
<p><strong>Step 5 (Refactoring)</strong>:</p>
<ul>
<li>Replace current implementation of Parallel.For/Foreach/Invoke/Pipeline with Tasks.</li>
</ul>
<p>Ну и некоторое послесловие:</p>
<ul>
<li>План работ будет со временем меняться, например, второй и третий пункт могут быть поменяны местами.</li>
<li>Существует хороший шанс, что я смогу привлечь к разработке несколько человек разной степени просвященности для реализации как теоретических, так и практических частей проекта.</li>
<li>Если кто-то пишет дипломчик, курсовичок и тд на смежную тему - welcome <img src='http://blog.gavr.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=wNJX-HvPlAg:Z-aM0l4C38s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2011/02/33/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The idea for a new project #1</title>
		<link>http://blog.gavr.in/2010/12/29/</link>
		<comments>http://blog.gavr.in/2010/12/29/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 22:27:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[CECIL]]></category>
		<category><![CDATA[Mono]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=29</guid>
		<description><![CDATA[Перед тем как описывать возникшую у меня идею, я для начала сделаю небольшую вводную. После этого станет более или менее понятно зачем это нужно. Существует такая вещь, как динамическая компиляция &#8211; Just-In-Time, или компиляция на лету. Написанная программа сначала транслируется в некий промежуточный язык, затем уже во время выполнения программы этот промежуточный язык транслируется в [...]]]></description>
			<content:encoded><![CDATA[<p>Перед тем как описывать возникшую у меня идею, я для начала сделаю небольшую вводную. После этого станет более или менее понятно зачем это нужно.</p>
<p>Существует такая вещь, как динамическая компиляция &#8211; Just-In-Time, или компиляция на лету. Написанная программа сначала транслируется в некий промежуточный язык, затем уже во время выполнения программы этот промежуточный язык транслируется в нативный код. Бонусов подобный подход дает много, но основной &#8211; это потенциально легкая переносимость ПО с платформы на платформу. Мы получаем код, который совершенно не зависит от архитектуры той платформы, на которой будет исполнятся.</p>
<p>Но есть проблема &#8211; сам JIT компилятор. Ему приходится держать баланс между временем компиляции и временем выполнения. JIT компилятор может генерировать очень хороший, качественный нативный код, но тогда придется ждать. Из-за этого часто возникает, так называемый &#8220;startup delay&#8221;, когда ты запускаешь приложение и ждешь пару секунд пока оно начнет работать. Разработчикам под WPF подобный эфект должен быть знаком.</p>
<p>А вот теперь к делу.<br />Есть желание взять .Net сборку, распотрошить его с помощь CECIL или Reflection, затем получить <a href="http://www.google.ru/images?client=ubuntu&amp;channel=cs&amp;q=control+flow+graph&amp;um=1&amp;ie=UTF-8&amp;source=og&amp;sa=N&amp;hl=ru&amp;tab=wi&amp;biw=1280&amp;bih=689">control flow graph</a>, пооптимизировать/проанализировать и выгрузить обратно в CIL.</p>
<p>Актуальность.<br />Справедливо возникает вопросы: а зачем делать то, что должен делать хороший компилятор?<br />В чем была моя задумка? Будем считать, что компилятор С# от Microsoft генерит очень хороший CIL, и ему подобный велосипед не нужен. Но кроме компилятора C# от MSFT существует еще компилятор Mono, IronPython, IronRuby, F# и еще много других, но менее известных. И какой IL генерируют они знают только их авторы. </p>
<p>В идеале может получится тула, которая позволит приводить CIL в одинаково хороший вид, вне зависимости от того, какой компилятор сгененировал исходный байт-код.</p>
<p>Еще отдельно хочу сказать, зачем получать control flow graph, а не работать с CECIL и Reflection напрямую &#8211; потому что это удобно. Работать с полноценным графом гораздно удобнее и приятней, чем без него. И не стоит забывать про огромное количество придуманных алгоритмов на графах, что существенно должно облегчить работу.</p>
<p>ЗЫ. Друзья, эта мысль находится еще в зачаточном состоянии, и поэтому мне нужно Ваше мнение. Если у Вас есть замечания или предложения &#8211; пишите.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=9R450heO5Hw:5X_Ai65rNaY:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/12/29/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Project Euler #1</title>
		<link>http://blog.gavr.in/2010/10/28/</link>
		<comments>http://blog.gavr.in/2010/10/28/#comments</comments>
		<pubDate>Sun, 03 Oct 2010 21:01:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[F#]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Euler]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=28</guid>
		<description><![CDATA[Для закрепление навыков владения новым языком программирования мне уже не в первый раз предлагают начать решать задачки с Project Euler. Сайт с большим количеством алгоритмических задач, которые можно решать на любом удобном языке программирования, ну или на бумаге. Фишка заключается в том, что ответ на задачу &#8211; это число, которое необходимо вписать в форму. Если [...]]]></description>
			<content:encoded><![CDATA[<p>Для закрепление навыков владения новым языком программирования мне уже не в первый раз предлагают начать решать задачки с <a href="http://en.wikipedia.org/wiki/Project_Euler">Project Euler</a>. Сайт с большим количеством алгоритмических задач, которые можно решать на любом удобном языке программирования, ну или на бумаге. Фишка заключается в том, что ответ на задачу &#8211; это число, которое необходимо вписать в форму. Если решение правильное, то Вам откроется доступ к ветке форума, посвященной данной задаче.</p>
<p>Вот и первая задача:<br />Необходимо найти сумму всех натуральных чисел до 1000, которые делятся на 3 или на 5. <a href="http://projecteuler.net/index.php?section=problems&amp;id=1">[link]</a></p>
<p>Решение:<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color: black;">  range     = [0..999]</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color: black;">  sumFunc   = List.fold (+) 0</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color: black;">  condition = </span><span style="color:#0000ff">fun</span><span style="color: black;">  x </span><span style="color:#0000ff">-&gt;</span><span style="color:#000000">  x % 3 = 0 || x % 5 = 0</span></pre>
<pre style="margin:0em;"></pre>
<pre style="margin:0em;"><span style="color: black;">List.filter condition range |&gt; sumFunc |&gt; System.Console.Write</span></pre>
</blockquote>
<p>Если разобрать построчно, то следующей строкой мы объявляем список элементов от 0 до 999 включительно.<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  range     = [0..999]</span></pre>
<pre style="margin: 0em;"><span style="color: black;">int list = [0; 1; 2; 3; 4; 5; 6; 7; 8; 9] </span><span style="color: green;">// примерно такой</span></pre>
</blockquote>
<p>Далее декларируем функцию, которая будет суммировать элементы списка.<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  sumFunc   = List.fold (+) 0</span></pre>
</blockquote>
<p>Описание <b>List.fold</b> с MSDN <a href="http://msdn.microsoft.com/en-us/library/ee353894.aspx">[link]</a>:<br />
<blockquote>Применяет функцию к каждому элементу коллекции, передавая накапливаемое значение аргумента по потоку в процессе вычисления.Принимает второй аргумент и применяет функцию к нему и к первому элементу списка. Затем передает этот результат в функцию вместе со вторым элементом и т. д. Возвращает окончательный результат. Если входная функция — f, а элементы — i0&#8230;iN, вычисляется f (&#8230; (f s i0) i1 &#8230;) iN.</p></blockquote>
<p>Выглядит это так, на вход подается операция, начальное значение и список:<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: black;">List.fold (+) 0 [0..9]</span></pre>
</blockquote>
<p>Далее начальное значение складывается с первым элементом коллекции, полученный результат со вторым, ну и так далее: 0+0 -&gt; 0+1 -&gt; 1+2 -&gt; 3+3 -&gt; 6+4 -&gt; 10+5 -&gt; 15+6 -&gt; 21+7 -&gt; 28+8 -&gt; 36+9 = 45.</p>
<p>Затем условие, на которое будут проверятся числа из входного списка, тут вроде и так все понятно:<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  condition = <span style="color: blue;">fun</span><span style="color: black;">  x <span style="color: blue;">-&gt;</span><span style="color: black;">  x % 3 = 0 || x % 5 = 0</span></span></span></pre>
</blockquote>
<p>И в конце, мы с помощью <b>List.filter</b> создаем новый список, из элементов базового списка (<b>range</b>), которые удовлетворяют условию (<b>condition</b>). Полученный список передается в (<b>sumFunc</b>).<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: black;">List.filter condition range |&gt; sumFunc</span></pre>
</blockquote>
<p>Решение можно записать и по другому, например так:<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color: black;">  problem n =</span></pre>
<pre style="margin:0em;"><span style="color: black;">     [0..n-1]</span></pre>
<pre style="margin:0em;"><span style="color: black;">     |&gt; List.filter (</span><span style="color:#0000ff">fun</span><span style="color: black;">  x </span><span style="color:#0000ff">-&gt;</span><span style="color: black;">  x % 3 = 0 || x % 5 = 0)</span></pre>
<pre style="margin:0em;"><span style="color: black;">     |&gt; List.fold (+) 0</span></pre>
<pre style="margin:0em;"><span style="color: black;">     |&gt; System.Console.Write</span></pre>
<pre style="margin:0em;"></pre>
<pre style="margin:0em;"><span style="color: black;"> problem 1000</span></pre>
</blockquote>
<p>Ну и под конец, завлекалочка по F# от создателя языка Don Syme <a href="http://channel9.msdn.com/blogs/martinesmann/don-syme-fsharp-and-functional-programming-in-net">[link]</a>:
<div style="text-align: center;"><object data="data:application/x-silverlight-2," height="288" type="application/x-silverlight-2" width="512"><param name="source" value="http://channel9.msdn.com/scripts/VideoPlayer.xap?v=3.1" /><param name="initParams" value="deferredLoad=true,duration=0,m=http://mschnlnine.vo.llnwd.net/d1/ch9/3/8/9/2/6/4/DonSymeFSharpTechTalkMarch2009_ch9.wmv,autostart=false,autohide=true,showembed=true, thumbnail=http://mschnlnine.vo.llnwd.net/d1/ch9/3/8/9/2/6/4/DonSymeFSharpTechTalkMarch2009_large_ch9.png, postid=0" /><param name="background" value="#00FFFFFF" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/> </a> </object></div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=xVxUgMXXupw:_xqPlQ9jf7s:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/10/28/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>ITLala #5</title>
		<link>http://blog.gavr.in/2010/06/25/</link>
		<comments>http://blog.gavr.in/2010/06/25/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 20:29:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[ITLala]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=25</guid>
		<description><![CDATA[Российская Интернет общественность некоторое время активно обсуждала деятельность школьника Дениса Попова. Денис, как заявлялось в некоторых источниках, создал новую ОС — BolgenOS. Создал самостоятельно и с нуля. Мы поговорим не только и не столько о самой ОС, сколько о том, какая вообще сложилась ситуация вокруг этого. Хронология событий: 2009-12-31 Сообщение Дениса на ЛОР 2010-02-10 Вопрос [...]]]></description>
			<content:encoded><![CDATA[<p>Российская Интернет общественность некоторое время активно обсуждала деятельность школьника Дениса Попова. Денис, как заявлялось в некоторых источниках, создал новую ОС — BolgenOS. Создал самостоятельно и с нуля. Мы поговорим не только и не столько о самой ОС, сколько о том, какая вообще сложилась ситуация вокруг этого.</p>
<p>Хронология событий:</p>
<p>
<div>2009-12-31 <a href="http://www.linux.org.ru/forum/development/4387601">Сообщение Дениса на ЛОР</a></div>
<div>2010-02-10 <a href="http://otvety.google.ru/otvety/thread?tid=77a509cfd24fbdee&#038;table=/otvety/user%3Fuserid%3D03651752157887126850">Вопрос о том, как зарегистрировать</a></div>
<div>2010-05-27 <a href="http://www.youtube.com/watch?v=KUc6QGREUIY&#038;fmt=18">Репортаж «ТРК Телекон» о BolgenOS</a></div>
<div>2010-06-03 <a href="http://quadregus.livejournal.com/2842.html">Опровержение в ЖЖ Дениса и обвинение журналистов</a></div>
<div>2010-06-07 <a href="http://www.youtube.com/watch?v=b6QT_tCjDao">Ответ ТРК «Телекон»</a></div>
</p>
<p>А также <a href="http://www.youtube.com/watch?v=Qfar_yKYLD4">презентационный ролик</a> своей ОС от Дениса Попова.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="slide" width="450" height="53" align="middle"><param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://file.podfm.ru/player_new.swf"><param name="menu" value="false"><param value="transparent" name="WMode"><param name="quality" value="high"><param name="FlashVars" value="xmlurl=http://itlala.podfm.ru/itlala/5/data.xml"><embed src="http://file.podfm.ru/player_new.swf" menu="false" quality="high" width="450" height="53" name="slide" flashvars="xmlurl=http://itlala.podfm.ru/itlala/5/data.xml" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent"></object></embed>Слушайте, оставляйте комментарии и пожелания <img src='http://blog.gavr.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=0sFt3_cYvwU:UyVIPTd_ixI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/06/25/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>F#: basic syntax.</title>
		<link>http://blog.gavr.in/2010/05/24/</link>
		<comments>http://blog.gavr.in/2010/05/24/#comments</comments>
		<pubDate>Tue, 18 May 2010 18:20:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[F#]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=24</guid>
		<description><![CDATA[За последний год я несколько раз пытался приобщиться к функциональному программированию, но каждый раз заканчивалось все грустно. Сначала я пытался познать истину через легендарный SICP, потом через &#8220;Функциональное программирование&#8221; Харрисона и Филда, а потом и по видеокурсу Дмитрия Сошникова на Intiut. Сложно. Конечно, основные вещи стали понятны, многие даже начал применять на практике при написании [...]]]></description>
			<content:encoded><![CDATA[<p>За последний год я несколько раз пытался приобщиться к функциональному программированию, но каждый раз заканчивалось все грустно. Сначала я пытался познать истину через легендарный SICP, потом через &#8220;Функциональное программирование&#8221; Харрисона и Филда, а потом и по видеокурсу Дмитрия Сошникова на Intiut. Сложно. <br />Конечно, основные вещи стали понятны, многие даже начал применять на практике при написании на не функциональных языках, но глобального прозрения не наступило.<br />Не наступило, ну и ладно. Пойдем другим &#8211; будем решать задачи с использованием ФП.<br />Для экспериментов выбрал F#, правда с самого начала возникли сложности &#8211; отсутствие вменяемых учебных материалов на русском языке. Было несколько HelloWorld&#8217;ов, но на этом пожалуй и все. А вот статей с объяснением базовых элементов синтаксиса я не нашел. Что может оттолкнуть существенную часть начинающих разработчиков от этого языка.<br />Так что давайте рассмотрим основные элементы языка.</p>
<p><b>Light directive</b><br />
<blockquote>
<pre style="margin: 0em;"><span style="color: blue;">#light</span></pre>
</blockquote>
<p>Это специальная магия, которая стоит в начале практически в каждого F# листинга.<br />#light &#8211; опция, которая позволяет писать на несколько упрощенном варианте языка. Сокращается количество ключевых слов, таких как in, begin/end и т.д. Компилятор начинает более придирчиво относится к отступам в коде. Подробнее написано на msdn. <a href="http://msdn.microsoft.com/en-us/library/dd233199.aspx">[link]</a><br />Разработчики говорят, что в последних версиях эта опция включена по умолчанию и можно ее больше не писать. Но я традиционно никому не верю, так что пусть поживет &#8211; лишняя строчке не жмет.<br /><i>UPD: Зря я никому не верил. Действительно в последних версиях #light неявно включен, а чтобы его отключить необходимо прописать в начале файла #light &#8220;off&#8221;.</i></p>
<p><b>Open</b><br />Это аналог using из языка C#.<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: green;">// Сложный способ</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;">System.Console.WriteLine(<span style="color: maroon;">"Hello, world!"</span><span style="color: black;"> ) </span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// Простой</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"><span style="color: blue;">open</span><span style="color: black;">  System</span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;">Console.WriteLine(<span style="color: maroon;">"Hello, world!"</span><span style="color: black;"> )</span></pre>
</blockquote>
<p><b>Comments</b><br />
<blockquote>
<pre style="margin: 0em;"><span style="color: green;">//&nbsp;&nbsp;Однострочный комментарий </span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">(*</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"><span style="color: green;">&nbsp;&nbsp;&nbsp;&nbsp;Прикольный многострочный комментарий</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"><span style="color: green;">*) </span><span style="color: black;"> </span></pre>
</blockquote>
<p><b>Let</b><br />&#8220;let&#8221; это ключевое слово, которое используется для объявления функций и значений.<br />В F# нет такого понятия, как переменная, правда существует возможно объявления mutable-значений, которые в последствии возможно будет переопределить.<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: green;">// Answer нельзя переопределить, всегда будет равно 42</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  Answer = 42</span></pre>
<pre style="margin: 0em;"><span style="color: green;">// mutable говорит о том, что мы можем изменить значение</span></pre>
<pre style="margin: 0em;"><span style="color: green;">// с помощью оператора &lt;-</span></pre>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  <span style="color: blue;">mutable</span><span style="color: black;">  y = 0</span></span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// ": string" - явное указание типа</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;"><span style="color: green;">// В подавляющем большинстве случаев, в явном указании типа</span></pre>
<pre style="margin: 0em;"><span style="color: green;">// нет необходимости</span></pre>
<pre style="margin: 0em;"><span style="color: blue;">let</span><span style="color: black;">  <span style="color: blue;">mutable</span><span style="color: black;">  z : string = <span style="color: blue;">null</span><span style="color: black;"> </span></span></span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// Не скомпилируется </span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;">Answer &lt;- 69</pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// Переопределение</span><span style="color: black;"> </span></pre>
<pre style="margin: 0em;">y &lt;- 5       </pre>
<pre style="margin: 0em;">z &lt;- <span style="color: maroon;">"I Want To Believe"</span></pre>
</blockquote>
<p>В F# нет необходимости явно указывать тип значения/функции, которую объявляете, хоть такая возможно и имеется. В языке имеется так называемое автоопределение типов, что сродни var из C# &#8211; компилятор сам подберет необходимый тип.<br />Выглядеть это будет так:<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  c = </span><span style="color:#800000">&#39;a&#39;</span><span style="color:#008000">&nbsp;// Char</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  x = int c </span><span style="color:#008000">&nbsp;// Приведение к типу Int</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  d = </span><span style="color:#0000ff">new</span><span style="color:#000000">  Roswell()</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  f : float = 3.14159</span><span style="color:#008000">&nbsp;// Для &quot;5.0&quot; можно писать   &quot;5.&quot;</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  e = </span><span style="color:#800000">&quot;Fun for the whole family.&quot;</span><span style="color:#008000">// String </span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  f = printfn</span> <span style="color:#800000">&quot;Except grandma and grandpa.&quot;</span><span style="color:#008000">&nbsp;// Или вызов функции</span></pre>
</blockquote>
<p><b>Lists and arrays</b><br />
<blockquote>
<pre style="margin:0em;"><span style="color:#008000">// List</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  listA = [ 0..10 ]</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  listB = [ 1..2..10 ] </span><span style="color:#008000">// 1, 3, 5.. - в середине указывается шаг</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  listC = [ 1; 2; 3 ]</span></pre>
<pre style="margin:0em;"><span style="color:#008000">// Properties</span></pre>
<pre style="margin:0em;">printfn <span style="color:#800000">&quot;listA .IsEmpty is %b&quot;</span><span style="color:#000000">  (listA .IsEmpty)</span></pre>
<pre style="margin:0em;">printfn <span style="color:#800000">&quot;listA .Length is %d&quot;</span><span style="color:#000000">  (listA .Length)</span></pre>
<pre style="margin:0em;">printfn <span style="color:#800000">&quot;listA .Head is %d&quot;</span><span style="color:#000000">  (listA .Head)</span></pre>
<pre style="margin:0em;">printfn <span style="color:#800000">&quot;listA .Item(1) is %d&quot;</span><span style="color:#000000">  (listA .Item(1))</span></pre>
</blockquote>
<blockquote><pre style="margin:0em;"><span style="color:#008000">// Array</span> </pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  arrayA = [| 1; 2; 3 |]</span></pre>
<pre style="margin:0em;">printfn arrayA.[0]</pre>
</blockquote>
<p>Про Array и List в F# следует поговорить более развернуто, что, наверное, и случится в недалеком будущем.</p>
<p>С функциями несколько сложнее, но все все равно все достаточно прозрачно:<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  FuncName param = param + 1 </span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  BaseG param1 param2 = param1 + param2</span></pre>
</blockquote>
<p>При необходимости можно явно указать тип параметров.<br />У функций тоже есть типы. Когда мы пишем свои собственные функции, мы можем указывать их тип явно. Обычно это считается хорошей практикой, исключая случаи написания очень коротких функций. <br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  SideG (param1 :float) (param2:float) : float = param1  + param2 </span></pre>
<pre style="margin:0em;"></pre>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  H(param1, param2) = param1 + param2</span></pre>
</blockquote>
<p>И небольшой фокус, для объявления рекурсивных функций необходимо использовать &#8220;let rec&#8221;. Правда мне не очень понятно зачем для объявления рекурсивных функций добавили еще одно ключевое слово. Видимо это какой-то хинт компилятору.<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span>&nbsp;<span style="color:#0000ff">rec</span><span style="color:#000000">  fact x =</span></pre>
<pre style="margin:0em;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">if</span><span style="color:#000000"> x &lt; 1 </span><span style="color:#0000ff">then</span><span style="color:#000000"> 1</span></pre>
<pre style="margin:0em;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">else</span><span style="color:#000000"> x * fact (x - 1)</span></pre>
</blockquote>
<p><b>Conditional expressions</b><br />В языке имеется два типа проверки на условия: один более привычный, а другой более функциональный.<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  test x y =</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;if</span><span style="color:#000000">  x = y </span><span style="color:#0000ff">then</span><span style="color:#800000">&quot;equal&quot;</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;elif</span><span style="color:#000000">  x &lt; y </span><span style="color:#0000ff">then</span><span style="color:#800000">&quot;x &lt; y&quot;</span></pre>
<pre style="margin:0em;"><span style="color:#0000ff">&nbsp;&nbsp;&nbsp;&nbsp;else</span><span style="color:#800000">&quot;x &gt; y&quot;</span></pre>
</blockquote>
<p>Это был привычный if-then-else, но есть более функциональный способ. Называется &#8220;Pattern-matching&#8221;. Очень похоже на обычный switch.<br />
<blockquote>
<pre style="margin:0em;"><span style="color:#0000ff">let</span><span style="color:#000000">  isMaster x = </span><span style="color:#0000ff">match</span><span style="color:#000000">  x </span><span style="color:#0000ff">with</span></pre>
<pre style="margin:0em;">&nbsp;&nbsp;&nbsp;&nbsp;| <span style="color:#800000">&quot;KpoHyc&quot;</span><span style="color:#0000ff">-&gt;</span><span style="color:#800000">&quot;Hello, Master&quot;</span></pre>
<pre style="margin:0em;">&nbsp;&nbsp;&nbsp;&nbsp;| _, <span style="color:#0000ff">-&gt;</span><span style="color:#800000">&quot;Emmm...&quot;</span></pre>
</blockquote>
<p>Попробовал написать самый наглядный пример того, чем собственно является &#8220;Pattern-matching&#8221;. Во всех местах, что я читал рекомендуется использовать именно match, ибо &#8220;true functional&#8221;. Я поверил, но у меня самого пока есть некоторые сложности с четким пониманием происходящего.<br />Думаю, что не у меня одного возникли с этим проблемы, так что надо будет рассмотреть этот момент чуть подробнее.</p>
<p><b>Looping constructs</b><br />С циклами в F# все кристально понятно, код сам за себя говорит.<br />
<blockquote>
<pre style="margin: 0em;"><span style="color: green;">// while</span></pre>
<pre style="margin: 0em;"><span style="color: blue;">while</span><span style="color: black;">  condition </span><span style="color: blue;">do</span></pre>
<pre style="margin: 0em;">&nbsp;&nbsp;&nbsp;&nbsp;printfn <span style="color: maroon;">"While"</span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// foreach</span></pre>
<pre style="margin: 0em;"><span style="color: blue;">for</span><span style="color: black;">  e </span><span style="color: blue;">in</span><span style="color: black;">  someEnumerable </span><span style="color: blue;">do</span></pre>
<pre style="margin: 0em;">&nbsp;&nbsp;&nbsp;&nbsp;printfn <span style="color: maroon;">"Foreach"</span></pre>
<pre style="margin: 0em;"></pre>
<pre style="margin: 0em;"><span style="color: green;">// for</span></pre>
<pre style="margin: 0em;"><span style="color: blue;">for</span><span style="color: black;">  i </span><span style="color: blue;">in</span><span style="color: black;">  0..9 </span><span style="color: blue;">do</span> </pre>
<pre style="margin: 0em;">&nbsp;&nbsp;&nbsp;&nbsp;printfn <span style="color: maroon;">"For" i</span></pre>
</blockquote>
<p>У меня имеется еще несколько вопросов, но уверен, что все решится методом &#8220;Googling with Bing&#8221;, но пока лень. В статье я описал где-то 80% синтаксиса, который может понадобится при изучении языка и для написания первой программы этого будет вполне достаточно.<br />В следующей статье про F# планируется рассказать о классах, рассмотреть конструкцию (|>) и более детально рассмотреть сложные моменты данной статьи. </p>
<p>Ссылки:
<ul>
<li>SICP на русском. <a href="http://newstar.rinet.ru/~goga/sicp/sicp.pdf">[link]</a></li>
<li>Видеокурс Дмитрия Сошникова &#8220;Функциональное программирование&#8221;. <a href="http://www.intuit.ru/department/pl/funcprog/">[link]</a></li>
<li>SharpDevelop 3.2 <a href="http://www.icsharpcode.net/opensource/sd/download/#SharpDevelop3x">[link]</a></li>
<li>F# Tools <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=444005fb-e627-4feb-b51d-13d6a3b4b8ed&amp;displaylang=en">[link]</a></li>
<li>Microsoft F# Dev Center <a href="http://msdn.microsoft.com/en-us/fsharp/default.aspx">[link]</a></li>
<li>F# Symbol and Operator Reference <a href="http://msdn.microsoft.com/en-us/library/dd233228.aspx">[link]</a></li>
<li>F# Code Formatting Guidelines <a href="http://msdn.microsoft.com/en-us/library/dd233191.aspx">[link]</a></li>
</ul>
<p><i>UPD: Получил много замечаний по тексту, буду исправлять <img src='http://blog.gavr.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </i></p>
<p>ЗЫ. Друзья, если у Вас есть какие вопросы/дополнение/пожелания/исправления &#8211; пожалуйста, пишите.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=z4Y780vIqPQ:gBz7xyJpXDE:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/05/24/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>ITLala #3</title>
		<link>http://blog.gavr.in/2010/05/23/</link>
		<comments>http://blog.gavr.in/2010/05/23/#comments</comments>
		<pubDate>Sat, 08 May 2010 20:30:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[Новости]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=23</guid>
		<description><![CDATA[Друзья, мы с Александром записали очередной выпуск подкаста IT-Lala. Этот выпуск подкаста посвящен прошедшей конференции FRUCT. О том, как это было, для кого и о чем. Слушайте, оценивайте, высказывайтесь, предлагайте. Приветствуется любой фидбек =)]]></description>
			<content:encoded><![CDATA[<p>Друзья, мы с <a href="http://chernyy.ru/">Александром</a> записали очередной выпуск подкаста <a href="http://itlala.podfm.ru/itlala/3/">IT-Lala</a>. Этот выпуск подкаста посвящен прошедшей конференции <a href="http://fruct.org/conference7">FRUCT</a>. О том, как это было, для кого и о чем.</p>
<p>Слушайте, оценивайте, высказывайтесь, предлагайте.</p>
<p><object classid="clsid27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="slide" width="450" height="53" align="middle"><param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://file.podfm.ru/player_new.swf"><param name="menu" value="false"><param value="transparent" name="WMode"><param name="quality" value="high"><param name="FlashVars" value="xmlurl=http://itlala.podfm.ru/itlala/3/data.xml"><embed src="http://file.podfm.ru/player_new.swf" menu="false" quality="high" width="450" height="53" name="slide" flashvars="xmlurl=http://itlala.podfm.ru/itlala/3/data.xml" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent"></object></p>
<p>Приветствуется любой фидбек =)</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=74CcEG0wzT0:lWgZx7GzI90:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/05/23/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Free commercial soft for students</title>
		<link>http://blog.gavr.in/2010/05/22/</link>
		<comments>http://blog.gavr.in/2010/05/22/#comments</comments>
		<pubDate>Sun, 02 May 2010 14:58:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[.net]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Free]]></category>
		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=22</guid>
		<description><![CDATA[Всем привет. На той неделе я обещал рассказать о том, где можно достать бесплатный коммерческий софт студентам. Или проеприетарный, как сейчас модно говорить, но мне это слово не нравится.Наступили выходные и мне выдалась минутка исполнить обещанное. JetBrainshttp://www.jetbrains.com/products.html &#8211; это их официальный сайт со списком продуктов. Вы студент ВУЗа. И хотите, чтобы у Вашего университета в [...]]]></description>
			<content:encoded><![CDATA[<p>Всем привет. На той неделе я обещал рассказать о том, где можно достать бесплатный коммерческий софт студентам. Или проеприетарный, как сейчас модно говорить, но мне это слово не нравится.<br />Наступили выходные и мне выдалась минутка исполнить обещанное.</p>
<p><b>JetBrains</b><br /><a href="http://www.jetbrains.com/products.html">http://www.jetbrains.com/products.html</a> &#8211; это их официальный сайт со списком продуктов.</p>
<p>Вы студент ВУЗа. И хотите, чтобы у Вашего университета в классах стояли лицензионные продукты от JetBrains. Дальше я оглашу список доступных продуктов, но имейте ввиду &#8211; просто так их не дадут. Кому-нибудь с Олимпа Вашего университета, например зам. декану, придется заполнить специальную анкеты на сайте компании. Анкета на английском &#8211; основная сложность в этом. Так что если у Олимпийцев с этим сложность &#8211; Вам придется им с этим помочь. Сами же ребята из JetBrains на контакт идут легко и на почту отвечают очень шустро.</p>
<p>И так, сами продукты:<br /><a href="http://www.jetbrains.com/idea/index.html">IntelliJ IDEA</a> &#8211; лучшая, по моему мнению, IDE для Java.<br />Нас интересует classroom лицензии &#8211; для работы в учебных классах университета.<br />Чтобы сделать запрос необходимо заполнить форму по ссылке: <a href="http://www.jetbrains.com/eforms/resolver.action?licenseRequest=ideaCRLN">[link]</a>.</p>
<p><a href="http://www.jetbrains.com/resharper/">ReSharper</a> &#8211; аддон к Visual Studio существенно ускоряющий разработку на C#: <a href="http://www.jetbrains.com/eforms/classroomRequest.action?licenseRequest=RSCL">[link]</a></p>
<p><a href="http://www.jetbrains.com/ruby/index.html">RubyMine</a> &#8211; IDE для Ruby.<br /><a href="http://www.jetbrains.com/eforms/classroomRequest.action?licenseRequest=RMCL">[link]</a></p>
<p>Все предоставляемые лицензии предназначены для работы в учебных классах.<br />Запращивать лицензию должен сотрудник университета, либо его представитель.</p>
<p><b>Adobe</b><br />Компания, к сожалению, не предоставляет ПО для студентов бесплатно, но дает существенные скидки при покупке &#8211; до 80%. (Это Photoshop, Illustrator, Dreamweaver и тд. ) Данная лицензия может использоваться для коммерческой разработки. В любом случае, три кило рубля за Creative Suite &#8211; это смешные деньги. Лицензия пожизненная, деньги зарабатывать можно &#8211; в моем понимании, это халява.<br />Детально возможно почитать тут: <a href="http://www.adobe.com/education/students/">[link]</a></p>
<p>А вот Flex Builder студентам бесплатно дают. Нужно заполнить форму и Вам вышлю код: <a href="http://www.adobe.com/devnet/flex/free/index.html">[link]</a></p>
<p><b>MatLab</b><br />Предоставляется некая evaluate copy для студентов и преподавателей &#8211; детальнее я сказать не могу. Необходимо зарегистрироваться. <a href="http://www.mathworks.com/programs/academia/eval.html">[link]</a></p>
<p><b>AutoDesk</b><br />Эта известная компания оказалась одной из самых щедрых и лояльных к студентам и преподавателям.<br />Необходима регистрация, но от меня не потребовали никакого подтверждения, что я студент &#8211; сказали, мол потом проверим при случае. Как обычно &#8211; исключительно в учебных целях.<br />По данной программе предоставляет более 25-ти программ, видео материалы, учебные курсы и т.д.<br />Там и 3ds MAX, и AutoCad и тд.</p>
<p>Тот софт, что предоставляется студентам &#8211; дается для личного домашнего учебного использования. Под какими ограничениями софт дается преподавателям сказать не могу &#8211; необходимо регистрироваться. Каждый желающий получить бесплатный софт &#8211; должен пройти регистрацию.<br /><a href="http://students.autodesk.com/">[link]</a></p>
<p><b>Корпорация добра</b><br />У Microsoft, как оказалось, достаточно много инициатив для студентов.</p>
<p><b>MSDN AA</b><br />Штука не совсем бесплатная, по крайней мере для университета. Стоит порядка 15-ти килорублей.<br />Но если думаете, что этой подписки у Вашего университета нет &#8211; настоятельно рекомендую сходить в деканат и уточнить. Например, в нашем университете была такая ситуация: подписка была, но ее не смогли настроить. Уж не знаю как деканат не смог разобраться в инструкции из трех сток, но у меня это совершенно не заняло времени.<br />Можно много говорить, что это никому не нужно, но лицензии на Win7, OneNote и XP расходятся, как горячие пирожки.<br />Весь софт из MSDN AA дается преподавателям, студентам и всему вузу для установки в учебных аудиториях.</p>
<blockquote><p>Подписка MSDN AA включает все основные серверные программы и средства разработки:</p>
<ul>
<li>Система разработки Visual Studio.</li>
<li>Серверы семейства Windows Server System, включая серверы Windows Server, SQL Server, Exchange Server, Commerce Server, BizTalk Server, Host Integration Server, Application Center Server, Systems Management Server.</li>
<li>Все операционные системы, выпущенные корпорацией Microsoft, пакеты средств разработки (SDK — Software Development Kit), пакеты драйверов устройств (DDK — Device Driver Kit).</li>
<li>Средства разработки для операционной системы Windows CE.</li>
<li>Бета-версии продуктов, новые выпуски, обновления.</li>
<li>Приложения Office Access, Visio Professional, Project Professional, Office OneNote, Office InfoPath, Office SharePoint Portal Server.</li>
<li>Библиотека Microsoft eLearning Library.</li>
<li>Библиотека MSDN (Документация, технические статьи, образцы кода).</li>
<li>Библиотека технической поддержки Knowledge Base.</li>
<li>и некоторые другие средства разработки Microsoft.</li>
</ul>
<p>Обратите внимание, что стандартный пакет MS Office в комплект MSDN AA не входит.</p></blockquote>
<p><b>DreamSpark</b><br />Если с MSDN AA не повезло, то есть DreamSpark &#8211; тут с софтом скудней.<br />Но операционная система и средства разработки имеются. Все как обычно для учебных целей.<br />Но есть одна возможность &#8211; весь софт из DreamSpark разрешается использовать для создания приложений под WinPhone7 и зарабатывать на них.</p>
<p>Инструкция: Идем на <a href="http://dreamspark.ru">dreamspark.ru</a> запрашиваем ключ, идем на <a href="http://dreamspark.com">dreamspark.com</a>, регистрируемся.<br />Гемморой с регистрацией мне не очень понян, но проблем у меня никаких не возникало.</p>
<p><b>Microsoft Live@Edu</b><br />Фактически это live аккаунт. То есть hotmail, skydrive на 25Gb и что там еще есть.<br />Цимус не в этом, а в том, какой профит можно с этого заиметь.<br />В моем понимании, когда у студентов и преподавателей есть университетская электронная почта &#8211; это существенно упрощает взаимодействие, как преподавателей со студентами, так и студентов с преподавателями.<br />К Live@Edu подключен СПбГУ.</p>
<p>Подключения данной программы позволит упростить взаимодействие со студентами.</p>
<p>Евангелизм:<br />
<blockquote><a href="http://www.microsoft.com/Rus/education/higher/ms-live.aspx">[link]</a></p>
<p><a href="http://www.it-academy.ru/index.php?id=745">[link]</a> &#8211; тут про нее очень подробно описано.</p>
<p><a href="http://blogs.technet.com/lvedurus/archive/2009/08/27/live-edu.aspx">[link]</a> &#8211; как регистрировать и настраивать.</p></blockquote>
<p><b>Послесловие</b><br />Друзья, если заметите какие неточности или опечатки &#8211; скажите. Пишу заболевший, так что некоторые вещи мог упустить.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=WSGYZwv6lMs:T3XQ55OPGoQ:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/05/22/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>ITLala #1</title>
		<link>http://blog.gavr.in/2010/04/21/</link>
		<comments>http://blog.gavr.in/2010/04/21/#comments</comments>
		<pubDate>Sat, 17 Apr 2010 16:55:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[ITLala]]></category>
		<category><![CDATA[Podcast]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=21</guid>
		<description><![CDATA[Сегодня мы с Александром Черным официально представили пилотный выпуск нашего совместного подкаста ITLala. Слушайте,&#160;комментируйте, делитесь впечатлениями. Лента подкаста живет на&#160;http://itlala.podfm.ru/itlala/rss/.]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы с <a href="http://chernyy.ru">Александром Черным</a> официально представили пилотный выпуск нашего совместного подкаста <a href="http://itlala.podfm.ru">ITLala</a>.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="slide" width="450" height="53" align="middle"><param name="allowScriptAccess" value="sameDomain"><param name="movie" value="http://file.podfm.ru/player_new.swf"><param name="menu" value="false"><param value="transparent" name="WMode"><param name="quality" value="high"><param name="FlashVars" value="xmlurl=http://itlala.podfm.ru/itlala/1/data.xml"><embed src="http://file.podfm.ru/player_new.swf" menu="false" quality="high" width="450" height="53" name="slide" flashvars="xmlurl=http://itlala.podfm.ru/itlala/1/data.xml" align="middle" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent"></object></p>
<div>Слушайте,&nbsp;комментируйте, делитесь впечатлениями.
<div>Лента подкаста живет на&nbsp;<a href="http://itlala.podfm.ru/itlala">http://itlala.podfm.ru/itlala/rss/</a>.</div>
</div>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=HFdLX44uH-4:resgHskI5yc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/04/21/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Visual Studio 2010 launch in St. Petersburg</title>
		<link>http://blog.gavr.in/2010/04/20/</link>
		<comments>http://blog.gavr.in/2010/04/20/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 22:52:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=20</guid>
		<description><![CDATA[Приветствую всех. Только что я вернулся с Visual Studio launch, который проходил в Санкт-Петербурге 14го апреля в гостинице Прибалтийская. Там еще Воттервиль находится. Были даже мысли, что Microsoft устроит запуск студии в аквапарке.Скажу сразу &#8211; мероприятие мне очень понравилось. От начала до конца чувствовалась основательная организационная подготовка. Конечно, не обошлось и без косяков. Например, очень [...]]]></description>
			<content:encoded><![CDATA[<p>Приветствую всех. Только что я вернулся с Visual Studio launch, который проходил в Санкт-Петербурге 14го апреля в гостинице Прибалтийская. Там еще Воттервиль находится. Были даже мысли, что Microsoft устроит запуск студии в аквапарке.<br />Скажу сразу &#8211; мероприятие мне очень понравилось. От начала до конца чувствовалась основательная организационная подготовка. Конечно, не обошлось и без косяков. Например, очень не хватало таблички перед входом с большой надписью: &#8220;Гардероб ТАМ&#8221;. Чтобы такие как я смогли сразу его найти.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Регистрация</span></span><br />После посещения гардероба я прошел на регистрацию. Регистрация прошла легко и непринужденно &#8211; никаких толп, аврала и истерик. Ребята из Event Team работали очень оперативно &#8211; спасибо Вам.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Пленарный доклад</span></span><br />На пленарном докладе выступал Brian Hurry. Начал он свое выступление с фразы: &#8220;Code. Code is everywhere&#8230;&#8221;. Вице-президент Microsoft говорил спокойно,&nbsp;вкрадчиво, на простом и понятном английском &#8211; понятно было всем. Сразу стало ясно, что этот человек много ездит с докладами в самые разные страны мира (у меня создалось такое впечатление). Было очень интересно, но немного громко. &nbsp;Периодически на сцену приглашались ребята из русского офиса, которые интенсивно демонстрировали некоторые новые возможности 10-й студии.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Обед</span></span><br />По окончании пленарного доклада все проследовали на обед. А мы с друзьями проследовали на &nbsp;место проведения кофе-брейка, где отведали по два вкуснейших круасана с кофе. Обсудили услышанное. Особо запомнилось сказанное про новые средства взаимодействия разработчиков и тестеров &#8211; это действительно новый уровень. Тестеру теперь нет необходимо плясать вокруг девелопера, чтобы объяснять ему где находится ошибка. А чтобы ее воспроизвести нет необходимости применять методику типа &#8220;ковки на северном склоне лысой горы ранней весной в полнолуние после третьего крика кукушки с последующей закалкой в крови двухлетнего медведя-девственника с правым голубым глазом&#8221;. Все цивилизовано, прозрачно и в пару щелчков мыши.<br />Затем мы спустили на обед. Аккуратная очередь к еде уже немного рассосалась и мы довольно быстро смогли&nbsp;утолить&nbsp;голод.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Доклад Brian Hurry о переходе на Team Foundation Server</span></span><br />Презентация нового продукта прошла спокойно, размеренно, с расстановкой. При нас на чистую машину установили TFS, попутно рассказывая о некоторых новых возможностях. Со сцены нам сказали, что Москвичи оказались недоверчивы и высказывали предположение, что показывается не реальная установка, а запись. Так вот, она действительно реальная: Брайн установил TFS на свой нетбук, настроил и начал демонстрировать то, что теперь умеет TFS. В подробности вдаваться не буду, но скажу, что мой шеф прослушав доклад решил попробовать внедрить TFS к нам.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Гайдар Магдануров о VS2010 для веб-разработчика</span></span><br />Этот доклад, лично у меня, вызвал самые противоречивые впечатления. Гайдар начал рассказывать очень хорошо, весело, с юмором. Скрепочка в студии, например, вызвала бурю положительных эмоций. Была показана поддержка IntelliSence для JavaScript и HTML. Припомнили и смерть ie6, и личный user-experience &#8211; начало было очень бодрым.<br />Окончание доклада немного подкачало &#8211; на машине не оказалось ReSharper и подготовленных сниппетов. Гайдар в этот момент, видимо, подумал несколько нехороших слов, но не растерялся и достойно все рассказал.<br />В целом могу сказать, что доклад мне понравился. Впечатление осталось положительным, не смотря на технические огрехи.</p>
<p><span class="Apple-style-span"><span class="Apple-style-span" style="font-size: x-large;">Архитектурное проектирование и анализ кода</span></span><br />Доклад читал Сергей Орлик. Перед нами стоял честный спец, который знает о чем говорит, и отвечает за свои слова.&nbsp;В начале презентации Сергей пообещал, что &#8220;вынесет&#8221; нам мозг, подразумевая, что предстоит сложное обсуждение. Обещание он выполнил. Вынес.<br />В сжатые сроки (1 час) Сергей рассказал о том насколько сейчас изменилась жизнь архитектора приложений, какие задачи ему предстоит решать и какие инструменты для решения этих задач ему предоставляет Visual Studio. Признаюсь честно, я понял лишь малую часть из того, что говорилось на докладе. Как только выложат видео &#8211; обязательно пересмотрю. Да, понял я лишь малую часть, и эта часть касалась dgml &#8211; возможности генерации графов зависимости для вашего проекта.
<div class="separator" style="clear: both; text-align: center;"><a href="http://nadiacomanici.files.wordpress.com/2009/07/add-to-dgml.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="483" src="http://nadiacomanici.files.wordpress.com/2009/07/add-to-dgml.jpg" width="640" /></a></div>
<p>Что-то такого вида. Получив граф зависимостей из неизвестной библиотеки, к которой еще и документация вменяемая отсутствует &#8211; мы сможет в кратчайшие сроки разобраться с тем, что происходит в коде. Экономит время. А если просмотреть такой граф для собственного проекта, то сразу станет ясно, что и где не так. Всплывут все ошибки при проектировании.<br />Презентация шла еще долго, и реакция сидящих в зале менялась от &#8220;а зачем нам это?&#8221; до &#8220;Очуметь! Мы хотим эти штуки.&#8221;.<br />Сергей в конце доклада стал отвечать на многочисленные вопросы. Вопросов было очень много и Сергея долго не отпускали.</p>
<p><span class="Apple-style-span" style="font-size: x-large;">Продвинутый кофе-брейк</span><br />В одном из перерывов я подошел к ничего не подозревающему Сергею Орлику и заговорил с ним. Слово за слово &#8211; разговорились. Позже подтянулся Данила Корнев. Очень хорошо пообщались.<br />Большое впечатление на меня произвело то, как просто было общаться с этими людьми. Обычно, кажется, что специалисты должны быть суровыми и угрюмыми. Наверняка многие знают какой снобизм&nbsp;свойственен лекторам ВУЗ&#8217;ов. Ты студент &#8211; я преподаватель. Комфортного общения при таком отношении не получается. Но тут была совершенно иная атмосфера, докладчики были очень дружелюбно настроены к своим слушателям. Меня это очень порадовало.</p>
<p><span class="Apple-style-span" style="font-size: x-large;">Масштаб кода и производительность разработчика</span><br />Пересказывать суть доклада не имеет смысла, он был очень техническим. Терри Липпер подробно рассказывал о нововведениях в VS2010, которые касаются C++. Просто рассказывал. Подробно, на примерах и объяснениями.</p>
<p>Знаменательно, что подавляющее число &#8220;студентов&#8221; покинули мероприятие довольно быстро. А вот все специалисты остались слушать технические доклады. Было видно, что многие действительно собираются использовать те возможности, которые представила Microsoft.</p>
<p><span class="Apple-style-span" style="font-size: x-large;">Итого</span><br />Мне понравилось.</p>
<p>Из хорошего:
<ul>
<li>Очень порадовало общение с Сергеем Орликом и Данилой Корневым из русского офиса Microsoft.</li>
<li>Организация мероприятия была на высшем уровне.</li>
<li>Новые знакомства.</li>
</ul>
<div>Из плохого:</div>
<div>
<ul>
<li>Не давали бейсбольные биты.</li>
</ul>
</div>
<div></div>
<p>И отдельно:
<ul>
<li>Хочу передать привет прелестной девушке в красном со стенда Legal Softwave: &#8220;Привет&#8221;.</li>
</ul>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=r3W-lAJj6Fo:fbvaoZSdCZU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/04/20/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Quick start to Windows Phone 7 development</title>
		<link>http://blog.gavr.in/2010/04/18/</link>
		<comments>http://blog.gavr.in/2010/04/18/#comments</comments>
		<pubDate>Tue, 06 Apr 2010 06:09:00 +0000</pubDate>
		<dc:creator>EugeneGavrin</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[WP7]]></category>

		<guid isPermaLink="false">http://blog.gavr.in/?p=18</guid>
		<description><![CDATA[Windows Phone 7 development. При разработке под WinPhone стоит иметь ввиду, что это совершенно новая, абсолютно не связанная с WinMobile операционная система. Разве что основана она на WinCE, но это мелочи. Соответственно ни одно приложение, работавшее в WinMobile, тут работать не будет. Так же не будут работать и многие библиотеки, в силу некоторой ограниченности Silverlight. [...]]]></description>
			<content:encoded><![CDATA[<p><b>Windows Phone 7 development</b>.</p>
<p>При разработке под WinPhone стоит иметь ввиду, что это совершенно новая, абсолютно не связанная с WinMobile операционная система. Разве что основана она на WinCE, но это мелочи. Соответственно ни одно приложение, работавшее в WinMobile, тут работать не будет. Так же не будут работать и многие библиотеки, в силу некоторой ограниченности Silverlight. Никакого unmanaged кода. На MIX&#8217;10 утверждали, что это на телефоне будет полноценный Silverlight 3. Но обманули.<br />Список отличий доступен по ссылке:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff426930(VS.96).aspx">http://msdn.microsoft.com/en-us/library/ff426930(VS.96).aspx</a></li>
</ul>
<p>Сейчас на данном факте заострять внимание не будем.</p>
<p><b>IDE, Money, Manuals.</b><br />Механизмы разработки для WinPhone до боли напоминают подобные в iPhone: у нас и Windows Marketplace, бесплатная среда разработки, ежегодные 100 долларов за лицензию разработчика. Правда, при регистрации разработчиком мне честно сказали, что неплохо бы получить какой-то американский ИНН, так, на всякий случай. А то могут наказать денежкой в размере 30% процентов с доходов, помимо налога с продаж. Как с этим у AppStore, пока не разбирался &#8211; вполне возможно, что аналогично.</p>
<p>Стоит лицензия 2915 рублей, как говорит русский сайт. Есть одно но, для студентов и аспирантов &#8211; халява, по Dreamspark все бесплатно. Проще говоря, все, что лежит в Dreamspark может использоваться для коммерческой разработки под Windows Phone. У Apple такого нет.</p>
<p>Еще один важный момент: Microsoft берет 30% от стоимости приложения себе. Для сравнения Apple берет столько же. &#8211; Но Microsoft все равно добрее Apple.</p>
<p>Но это все беллетристика. Самое интересное – это средства разработки. А средство разработки у нас &#8211; это старая добрая Visual Studio 2010 в специально редакции «for Windows Phone». Там же живут и эмулятор Windows…несколько не полноценный, но сочтем это минусом CTP, и XNA. Доступен, также Expression Blend 4 RC, правда я не уверен, что он будет поставляться бесплатно.</p>
<p>Остался еще один немаловажный момент. На XNA я никогда ничего не делал, на Silverlight тоже.<br />Надо книг и учебных материалов:</p>
<ul>
<li>По Silverlight 3 есть бесплатная книга на русском языке. <a href="http://go.microsoft.com/?linkid=9683327">Скачать</a>.</li>
<li>MSDN:&nbsp;<a href="http://msdn.microsoft.com/en-us/library/ff402535(VS.92).aspx">http://msdn.microsoft.com/en-us/library/ff402535(VS.92).aspx</a></li>
<li>По XNA: <a href="http://www.xnagamemaking.com/">http://www.xnagamemaking.com</a>&nbsp;(Ходить по главам в менюшке слева)&nbsp;</li>
<li>И бесплатное превью книги от&nbsp;Charles Petzold. <a href="http://www.charlespetzold.com/phone/">Скачать</a>.</li>
</ul>
<p><b>Money.</b>
<ul>
<li>Средства разработки бесплатные.</li>
<li>Выхлоп со 100 продаж приложения стоимостью 1.99$: 131$</li>
<ul>
<li>с&nbsp;учетом&nbsp;российских налогов: 121$</li>
</ul>
</ul>
<p>Скоро постараюсь глянуть, как живут разработчики iPhone, а если энтузиазм не угаснет, то и под Android.</p>
<p>UPD: Исправил немного статью по &#8220;налогам&#8221; в магазинах.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/eugene-gavrin?a=2mPqeBzn678:BdkB2SEuKsU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/eugene-gavrin?d=yIl2AUoC8zA" border="0"></img></a>
</div>]]></content:encoded>
			<wfw:commentRss>http://blog.gavr.in/2010/04/18/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 3.330 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-01-19 17:36:53 -->

