<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>Roman Elizarov&apos;s blog</title>
  <link>http://elizarov.livejournal.com/</link>
  <description>Roman Elizarov&apos;s blog - LiveJournal.com</description>
  <lastBuildDate>Sun, 07 Jun 2009 04:35:07 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>elizarov</lj:journal>
  <lj:journalid>5843877</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
  <image>
    <url>http://l-userpic.livejournal.com/24940887/5843877</url>
    <title>Roman Elizarov&apos;s blog</title>
    <link>http://elizarov.livejournal.com/</link>
    <width>50</width>
    <height>50</height>
  </image>

<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/14297.html</guid>
  <pubDate>Sun, 07 Jun 2009 04:35:07 GMT</pubDate>
  <title>EГЭ и злая империя Microsoft</title>
  <link>http://elizarov.livejournal.com/14297.html</link>
  <description>&lt;table width=&quot;200&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;61&quot; border=&quot;0&quot; title=&quot;Мои результаты ЕГЭ&quot; alt=&quot;Мои результаты ЕГЭ&quot; src=&quot;http://rian.ru/i/ege/EGE_verh.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Математика&quot; alt=&quot;Математика&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet1.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;5&quot; alt=&quot;5&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka5.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Русский язык&quot; alt=&quot;Русский язык&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet2.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;5&quot; alt=&quot;5&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka5.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Физика&quot; alt=&quot;Физика&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet3.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;3&quot; alt=&quot;3&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka3.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Химия&quot; alt=&quot;Химия&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet4.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;3&quot; alt=&quot;3&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka3.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;География&quot; alt=&quot;География&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet5.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;4&quot; alt=&quot;4&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka4.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Биология&quot; alt=&quot;Биология&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet6.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;3&quot; alt=&quot;3&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka3.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;История&quot; alt=&quot;История&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet7.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;3&quot; alt=&quot;3&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka3.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;img width=&quot;167&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;Обществознание&quot; alt=&quot;Обществознание&quot; src=&quot;http://rian.ru/i/ege/EGE_predmet8.jpg&quot; /&gt;&lt;/td&gt;&lt;td&gt;&lt;img width=&quot;33&quot; height=&quot;30&quot; border=&quot;0&quot; title=&quot;5&quot; alt=&quot;5&quot; src=&quot;http://rian.ru/i/ege/EGE_ocenka5.jpg&quot; /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&lt;a href=&quot;http://www.rian.ru/infografika/20090602/172980575-ig.html&quot;&gt;&lt;img width=&quot;200&quot; height=&quot;31&quot; border=&quot;0&quot; title=&quot;Мои результаты ЕГЭ&quot; alt=&quot;Мои результаты ЕГЭ&quot; src=&quot;http://rian.ru/i/ege/EGE_niz.jpg&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Шокирует то, что этот сайт не работает в FireFox. Вообще, в Российском интернете это очень частое явление. Почему именно в нашей стране в школах учат почти исключительно продуктам Microsoft и такая большая степень промытия мозгов, что &amp;quot;вэб дизайнеры&amp;quot; в подавляющей массе не подозревают о существовании других браузеров?&lt;br /&gt;</description>
  <comments>http://elizarov.livejournal.com/14297.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/14062.html</guid>
  <pubDate>Fri, 05 Jun 2009 03:53:06 GMT</pubDate>
  <title>JavaOne 2009: Day 3</title>
  <link>http://elizarov.livejournal.com/14062.html</link>
  <description>Сегодня мне удалось послушать одну исключительно полезную и грамотную техническую сессию. Cliff Click и Brian Goetz на пару рассказывали о сложностях оптимизации производительности в современных архитектурах. Подробно, с примерами. На редкость грамотная и интересная презентация. Как только они выложат слайды online, я обязательно скину в своем блоге ссылку на них, как и на несколько других интересных презентаций с этого JavaOne.&lt;br /&gt;&lt;br /&gt;А вечером IBM рассказывала про &lt;a href=&quot;http://harmony.apache.org/&quot;&gt;Apache Harmony&lt;/a&gt;. Я и не знал что они этим глубоко занимаются. Делали упор на модульность, которую в Sun-овскую реализацию еще только планируют прикрутить (и по этому поводу было аж несколько презентаций от Sun). Также IBM зачем-то воткнула речь про свою технологию кэширования информации в кластере. Там было упоминание о том, что мол на рынке есть и другие такие продукты, но никакого реального сравнения с конкурентами представлено не было. В общем, бесполезный маркетоидный рассказ получился.&lt;br /&gt;&lt;br /&gt;Вот и всё. Для меня это был последний день на JavaOne. Труба зовет на &lt;a href=&quot;http://www.tradersexpo.com/&quot;&gt;TradersExpo&lt;/a&gt;.</description>
  <comments>http://elizarov.livejournal.com/14062.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/13736.html</guid>
  <pubDate>Thu, 04 Jun 2009 16:20:49 GMT</pubDate>
  <title>JavaOne 2009: Day 2</title>
  <link>http://elizarov.livejournal.com/13736.html</link>
  <description>На General Session рассказывали про успехи Java на мобильном фронте. На сцене представители Orange и SonyEricsson клятвенно обещали объединяться с индустрией и бороться с фрагментацией платформ которая, как известно, корень всех проблем в мобильном Java мире. Тот факт, что они открыто признали фрагментацию уже радует. Посмотрим, что у них получится с борьбой.&lt;br /&gt;&lt;br /&gt;Обещали поддержку &lt;a href=&quot;http://java.sun.com/store&quot;&gt;Java Store&lt;/a&gt; и &lt;a href=&quot;http://javafx.com/&quot;&gt;JavaFX&lt;/a&gt; на разных устройствах. Как всегда, в маркетинге Sun Microsystems не все дома, и похоже они хотят как-то завязать между собой Java Store и JavaFX. Надеюсь, что разум возобладает и, несмотря на маркетинг, для Java Store будет все-равно какие именно Java приложения в нем размещены. Концептуально идея у них такая: разработчик отправляет приложение в &lt;a href=&quot;http://java.sun.com/warehouse&quot;&gt;Java Warehouse&lt;/a&gt;, где его проверяют, сертифицируют и т.п., а уже оттуда оно становится доступным на всех устройствах. С точки зрения маркетинга Sun, устройства делятся на три категории: Desktop, Mobile, TV. Они это называют &quot;all screens of customer&apos;s life&quot;. Собственно, хитом шоу было одно и тоже JavaFX приложение работающее на всех 3-х устройствах. Desktop-ом у них был MacBook, в качеcтве Mobile выступала специальная версия HTC Touch Diamond с поддержкой JavaFX (кстати, её здесь продают), а в качестве TV выступало уже упоминавшееся мной устройство от LG.</description>
  <comments>http://elizarov.livejournal.com/13736.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/13476.html</guid>
  <pubDate>Wed, 03 Jun 2009 02:55:56 GMT</pubDate>
  <title>JavaOne 2009: Day 1</title>
  <link>http://elizarov.livejournal.com/13476.html</link>
  <description>Итак, началась ежегодная конференция &lt;a href=&quot;http://java.sun.com/javaone/&quot;&gt;JavaOne&lt;/a&gt;. На открытии конференции, как всегда, рассказали о миллиардах десктопов и мобильных устройств с Java ;) Не забыли упомянуть и о &lt;a href=&quot;http://en.wikipedia.org/wiki/BD-J&quot;&gt;Blue Ray&lt;/a&gt; дисках. Показали телевизор LG (начинает продаваться в Корее через месяц), который нативно умеет запускать JavaFX приложения с весьма неплохой производительностью (полупрозрачные менюшки и приложения живенько бегали поверх Full HD видеоряда).&lt;br /&gt;&lt;br /&gt;Анонсировали &lt;a href=&quot;http://www.java.com/en/store/index.jsp&quot;&gt;Java Store&lt;/a&gt; (пока в глубокой бете), который позволит программистам легко распространять и продавать свои приложения. В общем, модный тренд не обошел стороной и Java. Они пока еще не выбрали конкретную модель оплаты (в бете всё бесплатно) и спрашивают мнения разработчиков о том, какая модель будет лучше всего. Порадовало то, что сразу предусмотрен режим preview, когда можно запустить приложение не покупая и не устанавливая его.&lt;br /&gt;&lt;br /&gt;Естественно, они не смогли промолчать про покупку Sun Microsystems компанией Oracle. Из-за требований закона, как публичная компания, они не могут официально комментировать еще не завершенную сделку. В этом году нет стенда Oraclе, нет презентаций от Oracle. Но в конце открытия на сцену пригласили &lt;a href=&quot;http://en.wikipedia.org/wiki/Larry_Ellison&quot;&gt;Лари Эллисона&lt;/a&gt;, который попытался успокоить всех Java разработчиков. Он сказал, что ничего не поменяется, но будет больше инвестиций в Java, в том числе, и на клиентской стороне (упоминал JavaFX и OpenOffice).</description>
  <comments>http://elizarov.livejournal.com/13476.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/13093.html</guid>
  <pubDate>Tue, 21 Apr 2009 08:48:22 GMT</pubDate>
  <title>ACM ICPC World Finals</title>
  <link>http://elizarov.livejournal.com/13093.html</link>
  <description>ACM ICPC World Finals проходит прямо сейчас! Болейте за команды своих вузов! Официальная страница соревнований: &lt;a href=&quot;http://cm2prod.baylor.edu/&quot;&gt;http://cm2prod.baylor.edu/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Видеотрансляция соревнований: &lt;a href=&quot;http://icpc09.csc.kth.se/live/&quot;&gt;http://icpc09.csc.kth.se/live/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Официальная таблица результатов: &lt;a href=&quot;http://icpcdmt.csc.kth.se/scoreboard/index.html&quot;&gt;http://icpcdmt.csc.kth.se/scoreboard/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Таблица результатов в подробном виде: &lt;a href=&quot;http://zibada.ru/pcms/finals/&quot;&gt;http://zibada.ru/pcms/finals/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Меньше чем через 4 часа определятся новые чемпионы мира по программированию. Однако, в последний час таблица результатов &quot;замораживается&quot; и победители будут объявлены только через 7-8 часов на церемонии награждения.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE:&lt;/b&gt; В этом году результаты объявили уже через 45 минут после окончания соревнования. Золотые медалисты (первые четыре места):&lt;br /&gt;на 1-м месте команда СПбГУ ИТМО,&lt;br /&gt;на 2-м команда Tsinghua University,&lt;br /&gt;на 3-м команда СПбГУ,&lt;br /&gt;на 4-м команда Саратовского ГУ.</description>
  <comments>http://elizarov.livejournal.com/13093.html</comments>
  <category>icpc</category>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/12922.html</guid>
  <pubDate>Mon, 20 Apr 2009 20:26:34 GMT</pubDate>
  <title>О программном коде</title>
  <link>http://elizarov.livejournal.com/12922.html</link>
  <description>&lt;strike&gt;Лучший программист не тот, кто пишет больше кода, а тот, кто решил поставленную перед ним задачу наименьшим количеством кода.&lt;/strike&gt; Из двух программ решающих одну и ту же задачу лучше та, которая короче. Хороший рефакторинг уменьшает количество кода в проекте. Код имеет наилучший дизайн, если для внесения в него новой функциональности нужно произвести изменения в наименьшем количестве мест кода.&lt;br /&gt;&lt;br /&gt;UPDATE: Пост исключительно о программном коде. Упоминание программиста было лишним.</description>
  <comments>http://elizarov.livejournal.com/12922.html</comments>
  <category>programming</category>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/12695.html</guid>
  <pubDate>Sat, 29 Nov 2008 19:52:47 GMT</pubDate>
  <title>Дилемма заключённого</title>
  <link>http://elizarov.livejournal.com/12695.html</link>
  <description>В последнее время много пишут про кризис. Кто-то с пессимизмом пишет про то, как всё будет плохо; другие критикуют власть и пишут, что она должна была делать, чтобы всем было лучше; третьи спрашивают, что же им делать, чтобы спастись или дают советы про то, как спасти себя. Я пока ни разу не видел, чтобы кто-то написал о том, что должен сделать каждый, чтобы всем было лучше. Это очень странно, ибо еще с досоветских времен в России было сильно &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%B8%D0%B7%D0%BC&quot;&gt;коллективистское&lt;/a&gt; мышление -- забота в первую очередь о своем коллективе, а уже потом о себе. Похоже, что с ростом благосостояния общества неизбежно побеждает индивидуализм. Например, мои социальные установки существенно более индивидуалистичны, чем установки моих родителей. В этом не было бы ничего плохого, если бы не тот факт, что многие экономические процессы работают по принципу &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BB%D0%B5%D0%BC%D0%BC%D0%B0_%D0%B7%D0%B0%D0%BA%D0%BB%D1%8E%D1%87%D1%91%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE&quot;&gt;дилеммы заключённого&lt;/a&gt;.&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;В дилемме заключенного, если каждый действует исключительно с целью максимизации своей личной выгоды, то все остаются в проигрыше. А если бы они действовали сообща, принося в жертву свою потенциальную прибыль, то остались бы в выигрыше.&lt;br /&gt;&lt;br /&gt;Каждый день своей жизни мы делаем выбор -- что купить в магазине? в какой валюте держать свои сбережения? держать деньги в банке или в чулке? Можно проанализировать эти решения с точки зрения дилеммы заключенного и в контексте развивающейся экономической ситуации. Становится очевидно, что каждый может внести свой вклад в борьбу с разворачивающимся финансовым кризисом, если действовать сообща, пожертвовав возможностью нажиться за счет ошибок других.&lt;br /&gt;&lt;br /&gt;Вот мои три &amp;quot;коллективистских&amp;quot; антикризисных совета для каждого под лозунгом &amp;quot;что должен сделать каждый, чтобы помочь стране&amp;quot;:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Минимизируйте потребление импортных товаров и услуг, заменяя их отечественными &lt;strike&gt;(даже если они худшего качества)&lt;/strike&gt; либо уменьшая частоту их потребления. &lt;strong&gt;UPDATE:&lt;/strong&gt; это не значит что надо потреблять отечественный хлам в ущерб себе. По многим позициям можно перейти на отечественные товары без потерь, а многие другие можно без потерь сократить (реже менять сотовый телефон, например).&lt;/li&gt;&lt;li&gt;Переведите все свои сбережения в рубли. &lt;/li&gt;&lt;li&gt;Положите все свои сбережения в банк или в несколько банков (по 700 тысяч рублей в каждый), если у вас их много. &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Какой эффект могут произвести эти действия? Не радикальный, но значимый. По разным оценкам, Россияне держат &amp;quot;под матрасом&amp;quot; в валюте от 5 до 80 млрд. долларов. Такой физический спрос на рубли способен заметно подвинуть курс рубля к доллару, а самое главное вынести на маржин колах спекулянтов, которые играют сейчас против рубля. Что же касается импорта, то в 2007 г. только автомобилей было ввезено на 20 млрд. рублей, так что России есть куда &amp;quot;подвинутся&amp;quot; по импорту, чтобы сохранить положительный платежный баланс.&lt;br /&gt;&lt;br /&gt;Внимательный читатель обратит внимание, что если подобным советам последуют во всех странах, то из-за замедления мировой торговли всем придется не сладко. Но я не знаю аналогичного глобального рецепта сохранения хорошей жизни во всем мире. Дело в том, что ситуация, происходившая во всем мире последние 10 лет, была &amp;quot;unsustainable&amp;quot; и всем очевидно, что процесс, который не может продолжаться вечно, не будет продолжаться вечно.</description>
  <comments>http://elizarov.livejournal.com/12695.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>91</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/12397.html</guid>
  <pubDate>Thu, 20 Nov 2008 07:40:28 GMT</pubDate>
  <title>Как избежать утечек памяти из-за потери подписчиков в GUI приложениях</title>
  <link>http://elizarov.livejournal.com/12397.html</link>
  <description>&lt;i&gt;Написать этот пост меня cподвиг &lt;a href=&quot;http://community.livejournal.com/ru_java/740562.html&quot;&gt;вопрос в ru_java&lt;/a&gt; от &lt;span class=&apos;ljuser ljuser-name_and_bel&apos; lj:user=&apos;and_bel&apos; style=&apos;white-space: nowrap;&apos;&gt;&lt;a href=&apos;http://and-bel.livejournal.com/profile&apos;&gt;&lt;img src=&apos;http://l-stat.livejournal.com/img/userinfo.gif&apos; alt=&apos;[info]&apos; width=&apos;17&apos; height=&apos;17&apos; style=&apos;vertical-align: bottom; border: 0; padding-right: 1px;&apos; /&gt;&lt;/a&gt;&lt;a href=&apos;http://and-bel.livejournal.com/&apos;&gt;&lt;b&gt;and_bel&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Всем кто когда-либо писал большие, сложные, многооконные GUI приложения, где разные окна работают с общими моделями данных, должна быть знакома ситуация: открываем и закрываем какое-либо окошко несколько раз и видим что потребление памяти увеличилось. Классическая &lt;a href=&quot;http://en.wikipedia.org/wiki/Memory_leak&quot;&gt;утечка памяти&lt;/a&gt;, которая у пользователей проявляется как &quot;тормоза&quot; после длительной работы с приложением, а потом и вылет из-за нехватки памяти. Причина таких утечек обычно банальна и проста -- визуальные компоненты приложения должны подписываться к модели данных чтобы получать нотификации об её изменениях и отображать их на экране (классический шаблон &lt;a href=&quot;http://en.wikipedia.org/wiki/Model-view-controller&quot;&gt;Model-View-Controller&lt;/a&gt;, только Controller нас сейчас не интересует). Программист забыл отписаться от нотификаций при закрытии окна -- вот вам и утечка. В приложениях написанных на базе Swing ситуация осложняется тем, что при написании отдельных компонентов не очень понятно в какой момент надо отписываться -- стандартных методов типа close или destroy для компонентов не предусмотрено. Можно ли построить дизайн приложения таким образом, чтобы уменьшить вероятность появления таких ошибок? &lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;Один из подходов заключается в явном управлении за жизненным циклом всех окон и компонентов внутри них. В некоторые GUI каркасы такое управление встроено изначально, а в Swing можно прикрутить что-нибудь свое или чужое. Это решает часть проблемы. У вас появляется метод типа close или destroy куда надо написать код отписывания от всех моделей данных. Далее, в компоненте вашего приложения нужно следить чтобы для каждого addXXXListener в инициализации компонента был парный ему removeXXXListener в методе закрытия. Такое дублирование это явно нехороший &lt;a href=&quot;http://en.wikipedia.org/wiki/Code_smell&quot;&gt;запах в коде&lt;/a&gt;, показывающий непродуманность дизайна.&lt;br /&gt;&lt;br /&gt;Мы избавились от этого дублирования в несколько шагов. Сначала, через максимальное абстрагирование и повторное использование кода мы добились, чтобы моделей в приложении было бы существенно меньше чем компонентов. Там где это возможно, используется универсальная модель -- иерархическое дерево контекстов хранящее пары key-value. Её фундаментальное отличие от классических классов типа &lt;a href=&quot;http://java.sun.com/javase/6/docs/api/java/beans/beancontext/BeanContext.html&quot;&gt;BeanContext&lt;/a&gt; в том, что любое поддерево можно отцепить от контекста приложения вызвав на корне поддерева setParent(null). При этом, все указатели для нотификации о событиях идущих от корня дерева к этому поддереву автоматически обрываются.&lt;br /&gt;&lt;br /&gt;Каждое окно или панель приложения создает свой собственный подконтекст в этом дереве. Все компоненты этого окна или панели подписываются на нотификации используя исключительно свой контекст, который окно или панель передает им в конструкторе. А отписываться им вообще не надо. При закрытии окна или панели пользователем вызывается setParent(null) на его контексте, автоматически отписывая все компоненты от идущих снаружи нотификаций. &lt;br /&gt;</description>
  <comments>http://elizarov.livejournal.com/12397.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>25</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/12087.html</guid>
  <pubDate>Wed, 15 Oct 2008 14:10:13 GMT</pubDate>
  <title>Cross-platform Browser for Java</title>
  <link>http://elizarov.livejournal.com/12087.html</link>
  <description>У нас есть большое Swing приложение в которое надо интегрировать HTML страницы. Именно интегрировать, а не открывать во внешнем браузере.&lt;br /&gt;&lt;br /&gt;Когда эти страницы были простыми, нам хватало встроенной в Swing поддержки HTML. С ней, конечно, масса проблем, если у клиента не быстрый интернет, ибо там всего 4 штуки &quot;image loader&quot; потока, которые забиваются и любая подгрузка иконок в приложении умирает (там используются те же потоки). Но это мы научились обходить. Реальные сложности наступают, когда мы хотим интегрировать полноценные web страницы (JavaScript, современный CSS и всё такое).&lt;br /&gt;&lt;br /&gt;Пару лет назад для решения этой проблемы мы долго воевали с &lt;a href=&quot;https://jdic.dev.java.net/&quot;&gt;JDIC&lt;/a&gt;. На Mac он у нас стабильно так и не заработал, а под Windows какая-то версия работает с натяжкой, но приемлемо. То есть валит и подвешивает наше приложение не слишком уж часто.&lt;br /&gt;&lt;br /&gt;Сейчас же проблема поддержки Mac встает ребром. Отсюда вопрос: возился ли кто-нибудь с JDIC в течение последних двух лет и есть ли какие комментарии на эту тему? Может там всё радикально улучшилось за два года? А может есть какие-нибудь проверенные альтернативные решения?&lt;br /&gt;&lt;br /&gt;P.S. Я знаю что Sun хочет решить эту проблему в JavaFX и, может быть, в Java 7. Но мне-то эту проблему надо решать уже сейчас.</description>
  <comments>http://elizarov.livejournal.com/12087.html</comments>
  <category>devexperts</category>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>10</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/11785.html</guid>
  <pubDate>Mon, 13 Oct 2008 07:20:11 GMT</pubDate>
  <title>The Road to Java.next</title>
  <link>http://elizarov.livejournal.com/11785.html</link>
  <description>В последнее время всё чаще обсуждается вопросы &quot;Как должен развиваться языка Java?&quot; и &quot;Что придет на смену Java?&quot;. В качестве примеров т.н. Java.next языков приводятся &lt;a href=&quot;http://www.scala-lang.org/&quot;&gt;Scala&lt;/a&gt;,  &lt;a href=&quot;http://groovy.codehaus.org/&quot;&gt;Groovy&lt;/a&gt; и множество других экспериментальных и реальных языков. Изучение этих языков, в свою очередь, подпитывает желание добавить ту или иную фичу в Java. Наиболее конструктивная критика Java заключается в том, что для множества реальных задач приходится писать слишком много &quot;boiler plate code&quot;. Например, всем известен такой шаблон:&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;
InputStream in = openStream();
try {
    // ... do something with in.
} finally {
    in.close();
}
&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Многие хотели бы вместо этого куска когда писать что-то похожее на вот такой код (a la C#), преимущество которого особенно заметно при работе с несколькими ресурсами одновременно:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;
using (InputStream in : openStream()) {
    // ... do something with in.
}
&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;И вот тут программисты делятся на два лагеря. Одни говорят: давайте добавим в язык Java &quot;cильные&quot; closures (например, по &lt;a href=&quot;http://javac.info/&quot;&gt;BGGA&lt;/a&gt;) и дадим возможность программистам самим менять синтаксис языка, то есть определять конструкции вроде &quot;using&quot; в соответствии с их project-specific потребностями. Другие говорят, что добавить closures это значит дать обезьяне в руки гранату. Читаемость кода существенно упадет из-за огромного количества специальных конструкций которые программисты создадут для своих целей. Давайте добавим конкретные расширения языка once-and-for-all аналогично указанному выше &quot;using&quot; и, тем самым, решим 90% самых острых проблем.&lt;br /&gt;&lt;br /&gt;Похожая дискуссия разгорается и вокруг JavaBean properties и шаблонных методов getXXX и setXXX. Современные Java IDE умеют их генерировать (как и другие шаблоны), но пишем-то мы код один раз, а читаем потом десятки раз. Как же сделать Java код более читабельным? Нужно ли для этого добавлять в язык более универсальные или более простые, понятные и конкретные механизмы?&lt;br /&gt;&lt;br /&gt;Кто прав? Как заранее узнать какое именно расширение языка принесет больше пользы, а какое принесет больше вреда?&lt;br /&gt;&lt;br /&gt;Я не знаю ответа на эти вопросы, но я знаю путь который можно использовать для поиска ответов. На этот путь меня натолкнуло &lt;a href=&quot;http://groups.google.ru/group/javaposse/browse_thread/thread/bf6cfc65fdf8fee4/f01e97a6dedb6dd3#f01e97a6dedb6dd3&quot;&gt;вот это обсуждение The Road to Java.next&lt;/a&gt;. Вкратце идея такова: вместо того, чтобы добавлять новые синтаксические конструкции в язык, давайте добавим их в наши IDE. Ничто не мешает современному IDE автоматически выявлять шаблоны кода и заменять их на более простые синтаксические конструкции исключительно на экране, в то время как в исходниках они будут оставаться в своем развернутом виде. Это позволит, например, пользоваться конструкцией using в любой версии Java и проверить её применимость на практике не внося необратимых изменений в сам язык Java.&lt;br /&gt;&lt;br /&gt;Конечно, не любое потенциальное расширения языка поддается такому эксперименту. Речь идет об исключительно синтаксических конструкциях. Например, очень легко реализовать на уровне IDE т.н.  &lt;a href=&quot;http://docs.google.com/View?docid=k73_1ggr36h&quot;&gt;CICE closures&lt;/a&gt;, чтобы вот этот код:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;
executor.submit(new Runnable() {
    public void run() {
        action();
    }
});
&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;на экране вашего IDE выглядел бы как:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;
executor.submit(Runnable() {
    action();
});
&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;В то время как &lt;a href=&quot;http://javac.info/&quot;&gt;BGGA closures&lt;/a&gt; не представляются как простая синтаксическая трансформация.&lt;br /&gt;&lt;br /&gt;Но это лучше чем ничего, учитывая что синтаксические шаблоны и их эквивалентные замены могли бы втыкаться пользователем в конфигурацию IDE а также включаться и отключаться по желанию. Что по этому поводу думают программисты? Будет ли это полезно? А что думают люди которые работают над созданием Java IDE? Можно ли это реализовать?&lt;br /&gt;</description>
  <comments>http://elizarov.livejournal.com/11785.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>59</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/11697.html</guid>
  <pubDate>Fri, 15 Aug 2008 15:11:23 GMT</pubDate>
  <title>Cross-compile Java bytecode to Objective-C</title>
  <link>http://elizarov.livejournal.com/11697.html</link>
  <description>Перед &lt;a href=&quot;http://www.devexperts.com/&quot;&gt;Devexperts&lt;/a&gt; стоит задача перевести некий объем бизнес-логики написанный на Java для мобильных приложений на iPhone, где основным языком разработки является Objective-C. Начнем с кода который рисует красивые графики на нашем собственном классе типа Canvas. Речь о GUI в целом сейчас пока не идет -- его мы разрабатываем &quot;с нуля&quot; используя нативные элементы управления на iPhone. &lt;br /&gt;&lt;br /&gt;Объем кода для перевода на Objective-C достаточно большой, чтобы у нас не возникало безоговорочного желание написать всё с нуля, так как нам же потом этот код и поддерживать. Хочется вносить все будущие изменения в один code-base. Более того, таких проектов предвидится несколько, то есть в перспективе придется переводить на iPhone несколько различных библиотек и приложений. &lt;br /&gt;&lt;br /&gt;Возникла идея разработать кросс-компилятор с Java bytecode в Objective-C и ограничиться пока ref-counting GC, так мы знаем что у нас нет циклов в графе объектов. Занимался ли кто-нибудь чем-нибудь подобным? Нет ли для этого готовых решений? Если готовых решений нет, то на следущей неделе мы официально откроем вакансию на позицию &quot;Senior Developer&quot; под этот проект. Если кому интересно -- пишите.</description>
  <comments>http://elizarov.livejournal.com/11697.html</comments>
  <category>devexperts</category>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>32</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/11388.html</guid>
  <pubDate>Tue, 12 Aug 2008 07:51:03 GMT</pubDate>
  <title>Google Code Jam 2008: Round 3, Статистика</title>
  <link>http://elizarov.livejournal.com/11388.html</link>
  <description>Закончился 3-ий отборочный раунд &lt;a href=&quot;http://code.google.com/codejam/&quot;&gt;Google Code Jam 2008&lt;/a&gt;. Дальше будут onsite полуфиналы, которые пройдут в офисах Google по всему миру. &lt;br /&gt;&lt;br /&gt;Уже есть первая &lt;a href=&quot;http://www.go-hero.net/jam/&quot;&gt;статистика соревнований&lt;/a&gt; как по языкам программирования, так и по &lt;a href=&quot;http://www.go-hero.net/jam/regions&quot;&gt;странам&lt;/a&gt;. Последняя особенно лыботытна. Вот некоторые факты:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; По результатам квалификации, наибольшее число прошедших программистов из Индии -- 1016 человек. По результам 3-го раунда из них осталось 11 человек.&lt;br /&gt;&lt;li&gt; На втором месте по этому показателю США -- 949 человек прошло квалификацию. По результам 3-го раунда из них осталось 55 человек.&lt;br /&gt;&lt;li&gt; На третьем месте по этому показателю Китай -- 856 человек прошло квалификацию. По результам 3-го раунда из них осталось 108 человек.&lt;br /&gt;&lt;li&gt; Россия же была представлена лишь 373 программистами по результатам квалификации (4-ый результат). По результам 3-го раунда из них осталось 70 человек (2-ой результат).&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Из этого грустный вывод: в России как всегда много умных (в данном случае программистов), но они не готовы и палец о палец ударить ради &lt;strike&gt;престижа страны&lt;/strike&gt; чего-либо (UPDATE: см. дискуссию о мотивации). Я лично знаю несколько хороших программистов, которые имели все шансы пройти 3-ий раунд, но они просто забили болт.</description>
  <comments>http://elizarov.livejournal.com/11388.html</comments>
  <category>codejam</category>
  <lj:security>public</lj:security>
  <lj:reply-count>24</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/11258.html</guid>
  <pubDate>Sat, 02 Aug 2008 12:26:12 GMT</pubDate>
  <title>Полное солнечное затмение в Новосибирске</title>
  <link>http://elizarov.livejournal.com/11258.html</link>
  <description>&lt;a href=&quot;http://pics.livejournal.com/elizarov/pic/0000211r/&quot;&gt;&lt;img style=&quot;float:right;padding:5px;border:1px solid black&quot; src=&quot;http://pics.livejournal.com/elizarov/pic/0000211r/s320x240&quot; width=&quot;320&quot; height=&quot;213&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;&lt;br /&gt;Посмотрели полное солнечное затмение под Новосибирском. Почти &quot;once in a lifetime event&quot;, ибо следующее полное затмение проходящее над сколько-нибудь населенной территорией будет еще &lt;a href=&quot;http://eclipse.gsfc.nasa.gov/solar.html&quot;&gt;очень не скоро&lt;/a&gt;. Погода как будто специально для всех постаралась -- небо над &quot;Обским Морем&quot; было абсолютно чистое. Осмысленные фотографии было сделать практически невозможно без специальной техники и подготовки. Такое событие сложно целиком передать в виде одного неподвижного кадра. Моя жена снимала на видео (слева снизу в кадре), и может быть после монтажа получится интересный ролик. В общем, отпуск удался на славу!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPDATE&lt;/b&gt;: Следующее затмение можно будет посмотреть &lt;a href=&quot;http://en.wikipedia.org/wiki/Solar_eclipse_of_July_22,_2009&quot;&gt;22 Июля 2009 года прямо в Шанхае&lt;/a&gt;. Продолжительность затмения фантастические 5+ минут. А вот после этого уже действительно долго ждать.</description>
  <comments>http://elizarov.livejournal.com/11258.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/10979.html</guid>
  <pubDate>Thu, 17 Jul 2008 06:12:53 GMT</pubDate>
  <title>Google Code Jam 2008: Qualification</title>
  <link>http://elizarov.livejournal.com/10979.html</link>
  <description>Сегодня проходит квалификационный раунд &lt;a href=&quot;http://code.google.com/codejam/&quot;&gt;Google Code Jam 2008&lt;/a&gt;. Для прохождения к отборочным раундам достаточно сдать определенное число правильных решений из предложенного набора задач до конца сегодняшнего дня. Количество участников проходящих в первый раунд никак не ограничено. &lt;br /&gt;&lt;br /&gt;В результате 3-х отборочных раундов с 25 Июля по 9 Августа будут отобраны полуфиналисты, которые будут участвовать в очных соревнованиях в своем регионе (Asia Pacific, Americas, EMEA). Кульминацией события будет финал 14 Ноября с призом в $10k за первое место.&lt;br /&gt;&lt;br /&gt;Фундаментальное отличие этих соревнований от других подобных программистских соревнований в том, что решать задачи можно используя любые языки программирования и технологии. Оценка зачет/незачет выставляется на основе отосланного участником файла с ответом на предоставленный организаторами файл с исходными значениями для набора тестов. Исходный код, который использовался для получения ответа, или описание инструментов и порядка их использования также отсылается, но это нужно организаторам исключительно с целью борьбы с мошенниками. Можно вообще решать всё на бумажке, только на каждый файл (содержащий примерно сотню тестов) дается 4 или 8 минут, в зависимости от его сложности. Таймер начинает тикать как только файл был скачан, то есть предполагается, что к этому времени вы уже придумали решение и написали весь необходимый вам код.</description>
  <comments>http://elizarov.livejournal.com/10979.html</comments>
  <category>codejam</category>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/10741.html</guid>
  <pubDate>Mon, 07 Jul 2008 13:04:00 GMT</pubDate>
  <title>По следам JavaOne: Что ждать от Java 7 (Часть 3: Pluggable Type Systems)</title>
  <link>http://elizarov.livejournal.com/10741.html</link>
  <description>В докладе про &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5581&amp;amp;yr=2008&amp;amp;track=javase&quot;&gt;Upcoming Java Programming-Language Changes&lt;/a&gt; есть упоминание про &lt;a href=&quot;http://groups.csail.mit.edu/pag/jsr308/&quot;&gt;JSR 308: Annotations on Java Types&lt;/a&gt;. Вкратце, идея состоит в том, чтобы разрешить указывать аннотации во всех местах Java кода где есть упоминание типа данных (включая определения локальных переменных, фактические и формальные параметры типов, операторы приведения типов и т.п.). Это позволяет создавать свои собственные системы типов путем расширения существующих типов данных аннотациями. Вместе со специализированной версий компилятора javac, реализующего эти расширения, авторы JSR 308 предлагают т.н. &quot;checkers framework&quot;, позволяющий писать дополнения к компилятору для проверки ваших собственных аннотаций. Предлагаются готовые решения для проверки кода на предмет соответствия Nullable/NonNull, Readonly/Mutable/..., Interned. То есть, операция &lt;code&gt;@NonNull String s = compute()&lt;/code&gt; будет приводить к ошибке компиляции, если тип результата метода &lt;code&gt;compute&lt;/code&gt; не аннотирован как &lt;code&gt;@NonNull&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;Использование этого механизма ограничено лишь вашей фантазией и требованиями создаваемых вами приложений. Предположим что вы пишете код, который рассчитывает расстояния, скорости, времена и т.п., храня их в переменных типа double. Код сложный для отладки и вы рискуете запутаться в единицах изменениях. Вам нужны гарантии, что километры не складываются с секундами и т.п.. Вы можете создать подходящую систему типов, проаннотировать все ваши double переменные, и написать checker, чтобы убедиться в корректности вашей программы. Можно добиться того, что при наличии в вашей программе &lt;code&gt;@Kilometers double a&lt;/code&gt; и &lt;code&gt;@Seconds double b&lt;/code&gt;, выражение &lt;code&gt;a + b&lt;/code&gt; давало бы ошибку компиляции. &lt;br /&gt;&lt;br /&gt;Если вам приходится использовать Венгерскую нотацию для того, чтобы отличать типы данных вашего приложения, как это, например, &lt;a href=&quot;http://www.joelonsoftware.com/articles/Wrong.html&quot;&gt;описал Джоел Сполски на примере безопасных и небезопасных строк в Web приложениях&lt;/a&gt;, то теперь у вас появляется возможность переложить еще один кусочек работы по проверке вашего кода на компилятор, введя систему типов для вашего конкретного приложения. &lt;br /&gt;&lt;br /&gt;Концептуальная сторона такого подхода к разработке приложений и языков описана в замечательной работе &lt;a href=&quot;http://pico.vub.ac.be/~wdmeuter/RDL04/papers/Bracha.pdf&quot;&gt;Pluggable Type Systems&lt;/a&gt;, автором которой является Gilad Bracha. Для общего ознакомления можно посмотреть его &lt;a href=&quot;http://bracha.org/pluggable-types.pdf&quot;&gt;слайды&lt;/a&gt;. Рассматривая достоинства и недостатки языков со строгой типизацией по сравнению с динамическими языками, он призывает к созданию языков, семантика выполнения которых не зависит ни от какой системы типов, но позволяющих подключать любые системы типов, которые нужны программисту в той или иной предметной области.</description>
  <comments>http://elizarov.livejournal.com/10741.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/10379.html</guid>
  <pubDate>Wed, 11 Jun 2008 05:55:03 GMT</pubDate>
  <title>По следам JavaOne: Что ждать от Java 7 (Часть 2: Concurrency)</title>
  <link>http://elizarov.livejournal.com/10379.html</link>
  <description>Доклад Brian Goets &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5515&amp;amp;yr=2008&amp;amp;track=javase&quot;&gt;Concurrency Features in JDK 7&lt;/a&gt; открывается весьма пессимистичным графиком, который наглядно показывает конец роста частоты и начало &quot;multicore era&quot; (по графику видно что это примерно 2003 год). Он рассказывает про парралелизацию вычислений с помощью библиотеки fork-join, которая войдет в Java 7. Это всё еще низкий уровень для прикладного программиста, однако именно такая реализация на низком уровне позволяет эффективно использовать множество ядер для вычислений не затыкаясь на общих локах в очередях заданий, и обеспечивает локальность доступа к памяти в этоху широкого распространения &lt;a href=&quot;http://en.wikipedia.org/wiki/Non-Uniform_Memory_Access&quot;&gt;NUMA архитектур&lt;/a&gt;. Эффективность этого подхода так же обоснована в докладе Гоэтза.&lt;br /&gt;&lt;br /&gt;В конце доклада он рассказаывает про библиотеку &lt;a href=&quot;http://gee.cs.oswego.edu/dl/jsr166/dist/jsr166ydocs/jsr166y/forkjoin/ParallelArray.html&quot;&gt;ParallelArray&lt;/a&gt;, которая построена поверх fork-join, и позволяет декларативно (sql-like образом) производить filter-map-reduce операции над массивами данных прозрачно распараллеливая их на множество ядер. Действительно удобной для использования эта библиотека станет только при добавлении в язык Java &lt;a href=&quot;http://elizarov.livejournal.com/10140.html&quot;&gt;замыканый (closures)&lt;/a&gt;.</description>
  <comments>http://elizarov.livejournal.com/10379.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>16</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/10140.html</guid>
  <pubDate>Mon, 09 Jun 2008 06:23:10 GMT</pubDate>
  <title>По следам JavaOne: Что ждать от Java 7 (Часть 1: Closures)</title>
  <link>http://elizarov.livejournal.com/10140.html</link>
  <description>Сразу оговорюсь, что скоро ждать Java 7 не нужно. Компания &lt;a href=&quot;http://finance.google.com/finance?q=JAVA&quot;&gt;Sun Microsystems&lt;/a&gt; ударилась в конкуренцию с компанией &lt;a href=&quot;http://finance.google.com/finance?q=ADBE&quot;&gt;Adobe&lt;/a&gt; и направила все свои лучшие силы на развитие технологии &lt;a href=&quot;http://www.javafx.com/&quot;&gt;JavaFX&lt;/a&gt;. В этом посте я не буду углубляться в обсуждение этого факта и предсказывать победителей, скажу лишь что core Java, в том числе и Java 7, тоже в чем-то от этого выиграет (или проиграет -- это как посмотреть). Сейчас же я поговорю о тех планируемых улучшениях, которые ни как не связаны с технологией JavaFX.&lt;br /&gt;&lt;br /&gt;Наиболее радикальным и фундаментальным изменением которое могло бы произойти в Java 7 была бы поддержка в языке Closures. Смотрите доклад Нила Гафтера &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5579&amp;amp;yr=2008&amp;amp;track=javase&quot;&gt;Closures Cookbook&lt;/a&gt;. Более подробная информация, включая прототип реализации находится на &lt;a href=&quot;http://www.javac.info/&quot;&gt;www.javac.info&lt;/a&gt;. Лично мне не нравится предложенный авторами синтаксис, но даже с таким синтаксом язык Java безусловно улучшится. Я могу назвать массу мест в своем собсвтенном коде, где можно было бы сократить boilerplate код, если бы в языке была поддержка closures. Однако, с большой вероятностью closures в Java 7 все-таки не появятся. Соответсвующее предложение еще даже не зарегестрировано через &lt;a href=&quot;http://www.jcp.org/en/home/index&quot;&gt;JCP&lt;/a&gt;.</description>
  <comments>http://elizarov.livejournal.com/10140.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>18</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/9844.html</guid>
  <pubDate>Sat, 07 Jun 2008 07:44:30 GMT</pubDate>
  <title>По следам JavaOne: Challenges in Multicore Era</title>
  <link>http://elizarov.livejournal.com/9844.html</link>
  <description>Пора начать серию постов по следам лучших презентаций на прошедшем JavaOne. Все, кто хочет сам порыться в материалах конференции, приглашаются на &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/index.jsp&quot;&gt;JavaOne Online&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;На дворе &quot;многоядерная эра&quot;. Если раньше медленный софт можно было не переписывать, а просто подождать когда появится более быстрый процессор, то в наступающей эре программированию предстоит пережить изменение всех парадигм программирования. Надо научиться эффективно использовать всё возрастающее количество ядер, каждое из которых не сильно быстрей, а порой и медленей ядер предыдущего поколения. &lt;br /&gt;&lt;br /&gt;Доклад &lt;a href=&quot;http://www.azulsystems.com/events/javaone_2008/2008_Challenges.pdf&quot;&gt;Challenges in Multicore Era&lt;/a&gt;, представленный Azul Systems и Sun Microsystems, это короткий и содержательный отчет о текущей ситауции в индустрии и академическом мире, который рассказывает текущее положение вещей и формулирует нерешенные проблемы. Основная цитата:&lt;br /&gt;&lt;blockquote&gt;The hardware, the OS, and the JVM are ready for large numbers of cores.&lt;br /&gt;The languages, the tools and the programming community at large are not ready for large concurrent programs.&lt;br /&gt;So... good luck, guys!&lt;/blockquote&gt;&lt;br /&gt;Для тех кто всеръез увлекается многопоточным программированием с созданием &lt;a href=&quot;http://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms&quot;&gt;non-blocking&lt;/a&gt; алгоритмов (только такие алгоритмы масштабируются на десятки и сотни ядер) очень рекомендую &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/2008/pdf/TS-6256.pdf&quot;&gt;Toward a Coding Style for Scalable Nonblocking Data Structures&lt;/a&gt; который также можно &lt;a href=&quot;http://developers.sun.com/learning/javaoneonline/sessions/sessions2008/watch/6256/TS-6256/index.html&quot;&gt;посмотреть&lt;/a&gt;. Это досточно технически-сложный материал понятный по слайдам только тогда, когда уже всё знаешь.</description>
  <comments>http://elizarov.livejournal.com/9844.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>65</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/9553.html</guid>
  <pubDate>Tue, 27 May 2008 21:27:42 GMT</pubDate>
  <title>Java + OpenGL</title>
  <link>http://elizarov.livejournal.com/9553.html</link>
  <description>У кого-нибудь есть опыт OpenGL на Java? Отзывы? А желание этим заниматься full-time? Есть предложение по работе в &lt;a href=&quot;http://www.devexperts.com/&quot;&gt;Devexperts&lt;/a&gt;. Могу рассказать подробности лично.</description>
  <comments>http://elizarov.livejournal.com/9553.html</comments>
  <category>devexperts</category>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/9349.html</guid>
  <pubDate>Tue, 27 May 2008 10:47:48 GMT</pubDate>
  <title>Список книг которые должен прочитать каждый Java программист</title>
  <link>http://elizarov.livejournal.com/9349.html</link>
  <description>Здесь собран список лучших, по моему мнению, когда либо написанных книг про Java. Книги расположены в порядке их важности (первыми указаны наиболее фундаментальные). &lt;br /&gt;&lt;br /&gt;  0. &lt;a href=&quot;http://www.amazon.com/Java-TM-Language-Specification-3rd/dp/0321246780&quot;&gt;Java Language Specification 3rd Edition by James Gosling et al&lt;/a&gt; это самая главная книга, книга номер &quot;ноль&quot; этого списка, известная также как JLS. Она доступна в HTML виде &lt;a href=&quot;http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html&quot;&gt;здесь&lt;/a&gt;. В третьей редакции описывается 5-ая версия языка. Я считаю, что каждый Java программист должен прочитать JLS хотя бы раз. Необходимо знать все возможности предоставленные языком для того чтобы использовать их самому и для того чтобы понимать код написанный другими. JLS это аналог JavaDoc или другой документации для используемых вами библиотек. Однако, в отличие от библиотечных классов, для которых документация обычно доступна из вашей среды программирования, по языку контекстная документация в средах программирования не предоставляется, поэтому JLS нужно читать практически &quot;от корки до корки&quot; хотябы на уровне оглавления и общего содержания каждого пункта. JLS является обязательной литературой при подготовке к сдаче экзамена на &lt;a href=&quot;http://www.sun.com/training/certification/java/scjp.xml&quot;&gt;Sun Certified Java Programmer (SCJP)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;  1. &lt;a href=&quot;http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683&quot;&gt;Effective Java 2nd Edition by Joshua Bloch&lt;/a&gt; рассказывает как именно надо использовать язык Java, чтобы писать хорошие и понятные другим программы. Это сборник практических советов и шаблонов которые должны быть в репертуаре каждого Java программиста. Во второй редакции своего бестселлера Блох рассказывает об эффективном использовании всех возможностей 5-ой версии Java. Даже программист с многолетним опытом откроет в ней что-то новое и уж точно получит удовольствие от систематизации всех основных знаний про программирование на Java.&lt;br /&gt;&lt;br /&gt;  2. &lt;a href=&quot;http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601&quot;&gt;Java Concurrency in Practice by Brian Goetz et al&lt;/a&gt; необходима всем, кто пишет многопоточные приложения на Java. Её не нужно читать если вы пишете простые приложения а для бизнес-логики используете J2EE или другие каркасы приложений которые изолируют программиста от многопоточности. Однако, как только вам необходимо оптимизировать производительность или скорость реакции вашего приложения, то в современном мире от многопоточности вам не уйти. В этом случае книга Гоэтза будет вашим лучшим помошником.&lt;br /&gt;&lt;br /&gt;  3. &lt;a href=&quot;http://www.amazon.com/Java-TM-Puzzlers-Pitfalls-Corner/dp/032133678X&quot;&gt;Java Puzzlers: Traps, Pitfalls, and Corner Cases by Joshua Bloch, Neal Gafter&lt;/a&gt; это интересная книга которая состоит из интеллектуальных загадок исключительно на языке Java. Она раскроет перед вами все граничные случаи языка Java, научит как не надо программировать, чтобы ваш код был понятен. Книжка не обязательна для прочтения, но очень рекомендуется для подготовки к SCJP и для собственного удовольствия.</description>
  <comments>http://elizarov.livejournal.com/9349.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/9063.html</guid>
  <pubDate>Sat, 10 May 2008 16:40:41 GMT</pubDate>
  <title>Последний день JavaOne</title>
  <link>http://elizarov.livejournal.com/9063.html</link>
  <description>На закрывающей речи выступал &lt;a href=&quot;http://www.sun.com/aboutsun/media/ceo/bio.jsp?name=James%20Gosling&quot;&gt;James Gosling&lt;/a&gt; и показывал различные технологические новинки. Можно посмотреть полный &lt;a href=&quot;http://java.sun.com/javaone/sf/webcasts.jsp#k5livewebcast&quot;&gt;webcast&lt;/a&gt; или прочитать краткий отчет в его &lt;a href=&quot;http://blogs.sun.com/jag/entry/too_much_fun&quot;&gt;блоге&lt;/a&gt;. Я стал жертвой рекламы и под впечатлением от презентации купил себе &lt;a href=&quot;http://www.livescribe.com/&quot;&gt;Livescribe Pulse SmartPen&lt;/a&gt;. Игрушка фантастической прикольности, плюс SDK позволяющий писать для неё приложения на Java. Насколько же она удобна в повседневной жизни покажет практика. Потом поделюсь впечатлениями. &lt;br /&gt;&lt;br /&gt;Дальше опять слушал технические сессии про многопоточность, многокорность и масштабируемость. Всё пересказывать нет смысла. Как только организаторы выложат слайды и записи сессий, я составлю список из лучших, на мой вкус, презентаций со ссылками на них.</description>
  <comments>http://elizarov.livejournal.com/9063.html</comments>
  <category>java</category>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/8714.html</guid>
  <pubDate>Fri, 09 May 2008 15:46:30 GMT</pubDate>
  <title>Третий день JavaOne</title>
  <link>http://elizarov.livejournal.com/8714.html</link>
  <description>Некоторые подробности про New I/O в Java 7 - &lt;a href=&quot;http://jcp.org/en/jsr/detail?id=203&quot;&gt;JSR 203&lt;/a&gt;. Обещали закрыть практически все мыслимые проблемы и недоработки ввода-вывода в Java. Можно будет получать нотификации об изменениях файлов, работать с символическими ссылками, безопасно ходить по дереву каталогов, эффективно копировать и перемещать файлы (с копированием прав при желании), работать напрямую с правами файлов и другими специфичными для платформы атрибутами файлов. Можно будет писать свои реализации файловой системы. На сетевом уровне обещают перевести все операции с сокетами на channels, то есть все операции (включая доступ к нестандартным параметрам соединения) можно будет делать без обращения к классу Socket. &lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://research.sun.com/jtech/pubs/04-g1-paper-ismm.pdf&quot;&gt;The Garbage First Garbage Collector&lt;/a&gt; (aka G1) -- единственный доклад (по признаю авторов) в названии которого 50% мусора :) Он ждет нас в Java 7 как замена CMS. Очень, очень грамотный алгоритм. Будем надеятся, что они смогут довести до ума реализацию (там еще есть над чем поработать). Доклад проводился совместно с &lt;a href=&quot;http://www.cboe.com/&quot;&gt;CBOE&lt;/a&gt; -- они один из крупнейших клиентов Sun, а вся биржевая система CBOE написана на Java. Потрясает воображение их тестовая система, на которой они и откатывают различные нововведения типа новых алгоритмов GC. Собственно, внутри Sun разработчики проводят только различные микро-тесты и синтетические тесты, в то время как сотрудничество с CBOE позволяет им прогонять свои алгоритмы на реальных системах.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://blogs.azulsystems.com/cliff/&quot;&gt;Cliff Click&lt;/a&gt; упростил доказательство своей революционной реализации &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/ConcurrentHashMap.html&quot;&gt;ConcurrentHashMap&lt;/a&gt;, которая обгоняет последний на 10% даже на машинах с малым числом процессоров (16-32), а на машинах с количеством процессоров приближающемся к 1000 вообще не имеет равных, в силу того что алгоритм полностью &lt;a href=&quot;http://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms&quot;&gt;Lock-Free&lt;/a&gt;. В этом году Cliff Click  продемонстрировал как используя такой же подход написать параллельный Lock-Free &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/java/util/BitSet.html&quot;&gt;BitSet&lt;/a&gt;, и &quot;почти&quot; FIFO очередь которая масштабируется на тысячи процессоров. Код доступен в  SourceFourge как часть &lt;a href=&quot;http://sourceforge.net/projects/high-scale-lib&quot;&gt;high-scale-lib&lt;/a&gt;.</description>
  <comments>http://elizarov.livejournal.com/8714.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/8654.html</guid>
  <pubDate>Thu, 08 May 2008 16:08:22 GMT</pubDate>
  <title>Второй день JavaOne</title>
  <link>http://elizarov.livejournal.com/8654.html</link>
  <description>Слушал много сессий :) &lt;a href=&quot;http://www.gafter.com/~neal/&quot;&gt;Neal Gafter&lt;/a&gt; рассказывал про &lt;a href=&quot;http://javac.info/&quot;&gt;Closures&lt;a&gt;, &lt;a href=&quot;http://www.doc.ic.ac.uk/~abuckley/&quot;&gt;Alex Buckley&lt;/a&gt; про &lt;a href=&quot;http://blogs.sun.com/abuckley/en_US/entry/module_membership_declarations&quot;&gt;модульность&lt;/a&gt;, &lt;a href=&quot;http://blogs.azulsystems.com/cliff/&quot;&gt;Cliff Click&lt;/a&gt; cделал очень веселый рассказ про &lt;a href=&quot;http://en.wikipedia.org/wiki/Race_condition&quot;&gt;data races&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;К сожалению, Cliff Click подтвердил что &quot;state of the art and state of the practiсe&quot; в отладке data races это визуальные инспекции кода, аккуратное документирования и т.п. В общем, читайте замечательную книгу &lt;a href=&quot;http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601&quot;&gt;&quot;Concurrency in Practice&quot; by Brian Goetz&lt;/a&gt;. Процесс абсолютно не масштабируемый, но ничего лучше сейчас просто нет. Единственный инструмент каторый как-то может помочь на практите это &lt;a href=&quot;http://findbugs.sourceforge.net/&quot;&gt;FindBugs&lt;/a&gt;. Его автор &lt;a href=&quot;http://www.cs.umd.edu/~pugh/&quot;&gt;&quot;Mr. Skip-List&quot; Bill Pugh&lt;/a&gt;, как всегда, сделал шикарный доклад с примерам про то как казалось бы абсолютно идиотские ошибки (типа метода equals который всегда возвращает false), после добавления их описания в FindBugs, были обнаружены в десятке мест в JDK, Glassfish, TomCat и других больших проектах. &lt;br /&gt; &lt;br /&gt;Слушал доклад про &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_transactional_memory&quot;&gt;Transactional Memory&lt;/a&gt;. В то время как существуем масса реализаций STM (software transactional memory), они все создают существенные накладные рассходы. Однако есть и перспективное направление развития -- Hardware Transactional Memory. Именно здесь нас скорей всего ждет прорыв в направлении масштабируемого многопоточного программирования. Но сначала должны появиться массовые процессоры поддерживающие транзакции с памятью на аппаратном уровне.&lt;/a&gt;&lt;/a&gt;</description>
  <comments>http://elizarov.livejournal.com/8654.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>2</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/8235.html</guid>
  <pubDate>Tue, 06 May 2008 21:53:02 GMT</pubDate>
  <title>Открытие JavaOne</title>
  <link>http://elizarov.livejournal.com/8235.html</link>
  <description>На открытии показали красивое &lt;a href=&quot;http://www.sun.com/javafx/&quot;&gt;JavaFX&lt;/a&gt; демо-приложение &quot;Connected Life&quot; (агрегатор facebook, flickr, etc) работающее под &lt;a href=&quot;http://java.sun.com/javase/&quot;&gt;JavaSE&lt;/a&gt;. Показали как используя &lt;a href=&quot;http://download.java.net/jdk6/&quot;&gt;Java 6u10&lt;/a&gt; можно загрузить аплет, а потом &quot;вытащить&quot; его из браузера и сделать desktop приложением. Его же показали работающим на &lt;a href=&quot;http://java.sun.com/javame/&quot;&gt;JavaME&lt;/a&gt; телефоне, и его же работающем на эмуляторе &lt;a href=&quot;http://code.google.com/android/&quot;&gt;Android-а&lt;/a&gt;. &lt;b&gt;НЕ&lt;/b&gt; показали работающим его под iPhone (что было вполне ожидаемым). А еще оно подвизало из-за тормозного интернета здесь, в &lt;a href=&quot;http://www.moscone.com/&quot;&gt;Moscone&lt;/a&gt;, что навело на грустные мысли о неумении основной массы программистов писать networked/connected графические приложения (HINT: проблема в однопоточности современных GUI frameworks в комбинации с блокирующими примитивами работы с сетью и с внешними сервисами). &lt;br /&gt;&lt;br /&gt;Показывали интеграцию JavaFX с HD-видео (2D приложение в которое было заинтегрировано видео) и 3D (куча виртуальных эранов играющих видео летали по сфере). Красиво, но были видны моменты когда срабатывал GC.&lt;br /&gt;&lt;br /&gt;Пообещали что JavaFX Desktop выйдет осенью 2008-го, а mobile версия весной 2009-го.</description>
  <comments>http://elizarov.livejournal.com/8235.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://elizarov.livejournal.com/7989.html</guid>
  <pubDate>Mon, 28 Apr 2008 10:23:50 GMT</pubDate>
  <title>Еду на JavaOne</title>
  <link>http://elizarov.livejournal.com/7989.html</link>
  <description>5-го Мая улетаю в командировку в США. Первая остановка в моем маршруте будет на &lt;a href=&quot;http://sun.com/javaone&quot;&gt;JavaOne&lt;/a&gt;. Буду писать здесь обо всем интересном, что доведется там увидеть.</description>
  <comments>http://elizarov.livejournal.com/7989.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
</channel>
</rss>
