<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JUG.ua &#187; наука</title>
	<atom:link href="http://jug.ua/category/science/feed/" rel="self" type="application/rss+xml" />
	<link>http://jug.ua</link>
	<description>weblog сообщества Java-разработчиков КПИ</description>
	<lastBuildDate>Sun, 05 Feb 2012 12:27:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Знакомимся с JRebel</title>
		<link>http://jug.ua/2012/01/jrebel/</link>
		<comments>http://jug.ua/2012/01/jrebel/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 22:32:58 +0000</pubDate>
		<dc:creator>randrey</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[Class Loader]]></category>
		<category><![CDATA[JRebel]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=790</guid>
		<description><![CDATA[Осенью прошлого года на конференции JavaOne в Сан-Франциско, традиционно были присуждены награды лучшим проектам года &#8220;2011 Duke&#8217;s Choice Awards&#8221;. И хотелось бы подготовить цикл небольших статей, коротко описывающих каждый из проектов-победителей. Начнем данный цикл с номинации &#8220;Innovative Compiler for Java Code&#8221;, награду в которой получил проект JRebel, эстонской компании ZeroTurnaround, созданный Евгением Кабановым (Jevgeni Kabanov) и Томасом Румером (Toomas Römer). [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" title="JRebel" src="http://upload.wikimedia.org/wikipedia/en/thumb/f/f6/JRebel_logo.png/250px-JRebel_logo.png" alt="" width="192" height="88" />Осенью прошлого года на конференции <strong><a href="http://www.oracle.com/javaone/index.html" target="_blank">JavaOne</a></strong> в Сан-Франциско, традиционно были присуждены награды лучшим проектам года <strong><a title="2011 Duke's Choice Awards" href="http://java.com/en/dukeschoice/" target="_blank">&#8220;2011 Duke&#8217;s Choice Awards&#8221;</a>. </strong>И хотелось бы подготовить цикл небольших статей, коротко описывающих каждый из проектов-победителей.</p>
<p>Начнем данный цикл с номинации <strong>&#8220;Innovative Compiler for Java Code&#8221;,</strong> награду в которой получил проект <strong><a title="JRebel" href="http://www.zeroturnaround.com/jrebel/" target="_blank">JRebel</a></strong>, эстонской компании <a href="http://zeroturnaround.com">ZeroTurnaround</a>, созданный Евгением Кабановым (Jevgeni Kabanov) и Томасом Румером (Toomas Römer).</p>
<p><span id="more-790"></span>Стоит отметить, что это не единственная их награда за прошедший год, этот проект был признан <strong>&#8220;Самой инновационной технологией Java&#8221;</strong> на <a href="http://jax-awards.com/">JAX Innovation Awards</a>. А в числе пользователей JRebel значатся IBM, HP, AT&amp;T, Bank of America, Disney, LinkedIn, &#8230;</p>
<p><strong>Для того, чтобы понять предназначение JRebel начнем чуть-чуть издалека</strong></p>
<p>Рассмотрим два простых класса. Первый класс имеет лишь переопределенный метод toString():</p>
<pre class="brush: java; title: ; notranslate">
public class TestModule {
    @Override
    public String toString() {
        return &quot;TestModule, version 1!&quot;;
    }
}
</pre>
<p>Второй класс в бесконечном цикле создает экземпляр объекта первого класса и выводит его на экран:</p>
<pre class="brush: java; title: ; notranslate">
public class Test {
  public static void main(String[] argv) {
    for (;;) {
            TestModule t = new TestModule();
            System.out.println(t);
            System.console().readLine();
    }
  }
}
</pre>
<p>Если же во время выполнения программы мы изменим строку <em>&#8220;TestModule, version 1!&#8221;</em> на <em>&#8220;TestModule, version 2!&#8221;</em>, и применяя раздельную компиляцию заново скомпилируем класс <em>TestModule</em>, то от этого значение выводимой строки не измениться.</p>
<p>Это происходит потому, что стандартный (системный) ClassLoader при первом же обращении к классу, а точнее при вызове его конструктора (либо при обращении к статическому методу или полю), динамически загружает и кеширует байт-код класса в недра JVM, и в дальнейшем уже не обращается к файловой системе. Можете даже удалить файл <em>TestModule.class</em>, это никак не отразиться на работе программы.</p>
<p>Перечень загружаемых во время работы программы классов, и директории откуда они загружаются, можно узнать подставив при запуске программы ключик <em>java -verbose:class &#8230;.</em> Узнаете много чего интересного ;)</p>
<p>Из приведенного выше примера следует, то, что после изменения исходного кода (и, соответственно, байт-кода) необходимо перезапускать все приложение. А в случае промышленного (Java Web, Java EE) приложения заново разворачивать его на сервере. Вообщем-то логично.</p>
<p>Все бы ничего, но <a title="Java EE Productivity Report 2011" href="http://zeroturnaround.com/java-ee-productivity-report-2011/">проведенные исследования</a> показали, что разработчики тратят в среднем <strong>от 10 до 13 минут на час программирования</strong>, на периодическое развертывания приложений.</p>
<p>Чтобы сократить потери времени, необходимо &#8220;научить&#8221; JVM обновлять байт-код классов в случаи их изменений, без необходимости перезапуска приложения.</p>
<p>В простом случае для этого достаточно написать свой загрузчик классов, который наследуется от абстрактного класса ClassLoader, и переопределить в нем ряд методов таким образом, чтобы при каждом создании экземпляра класса его байт-код считывался с файловой системы. Это на самом деле делается не так страшно, как может показаться и подробно, вместе с примерами, описывается в статье <strong><a href="http://samag.ru/archive/article/68">&#8220;ClassLoader – скрытые возможности&#8221;</a></strong>.</p>
<p>Экземпляр собственного ClassLoader-а предается в качестве параметра статического метода <em>Class.forName(String name, boolean initialize, ClassLoader loader)</em>, после чего с помощью рефлексии создается экземпляр требуемого класса:</p>
<pre class="brush: java; title: ; notranslate">
public class Test {
  public static void main(String[] argv) throws Exception {
    for (;;) {
      ClassLoader loader = new DynamicClassOverloader(new String[] {&quot;.&quot;});
      // текущий каталог &quot;.&quot; будет единственным каталогом поиска для
      // класса &quot;TestModule&quot;
      Class clazz = Class.forName(&quot;TestModule&quot;,true,loader);
      Object object = clazz.newInstance();
      System.out.println(object);

      //TestModule test = (TestModule) object;

      System.console().readLine();
    }
  }
}
</pre>
<p>В данном примере <em><a href="http://jug.ua/wp-content/uploads/2012/01/DynamicClassOverloader.txt">DynamicClassOverloader</a></em> (код по ссылке) как раз и является нашим загрузчиком классов (подробности в указанной статье <a href="http://samag.ru/archive/article/68">&#8220;ClassLoader – скрытые возможности&#8221;</a>).</p>
<p>Можно проверить, что теперь во время работы программы при изменении строки <em>&#8220;TestModule, version 1!&#8221;</em> на <em>&#8220;TestModule, version 2!&#8221;</em> будет меняться и выводимое в консоль сообщение.</p>
<p>Все было бы замечательно, если бы не ряд особенностей. Первая из которых начнется если откомментировать 10 строчку. В результате получим замечательное RuntimeException:<br />
<code><br />
Exception in thread "main" java.lang.ClassCastException: TestModule cannot be cast to TestModule<br />
</code><br />
Почему оно происходит? Запустим нашу программу с ключиком <em>java -verbose:class Test</em>, и обратим внимание на следующий фрагмент:<br />
<code><br />
...<br />
[Loaded TestModule from __JVM_DefineClass__]<br />
TestModule, version 1!<br />
[Loaded TestModule from file:/C:/Projects/DynamicClassLoader/build/classes/]<br />
...<br />
</code><br />
В первой строке происходит загрузка класса <em>TestModule</em> с помощью нашего собственного загрузчика классов, во второй &#8211; вывод сообщения, в третей &#8211; стандартный (системный) загрузчик классов снова загружает класс <em>TestModule</em>, именно в тот момент когда пытаемся осуществить приведение типов:</p>
<pre class="brush: java; title: ; notranslate">
TestModule test = (TestModule) object;
</pre>
<p>Получается, что класс к которому мы хотим привести (преобразовать) объект загружен с помощью системного загрузчика, а класс на основании которого этот объект <em>object</em> был создан загружен с помощью нашего собственного загрузчика. Хоть классы одинаковы (и их байт-код идентичен), но загружены разными загрузчиками, и, как следствием, JVM считает их абсолютно разными.</p>
<p>Такую вот особенность, и далеко не единственную, которую нужно учитывать при написании собственного загрузчика классов.</p>
<p><strong>Теперь, что же такое JRebel</strong></p>
<p><strong></strong>JRebel &#8211; это плагин к JVM, который позволяет на лету перезагружать классы и другие ресурсы, которые были изменены с момента развёртывания приложения. При этом он не имеет тех проблем и особенностей, которые возникают при написании собственного загрузчика классов.</p>
<p>При загрузке класса в JVM, JRebel отслеживает соответствующий ему .class-файл и в случае его изменения подгружает изменившийся класс через расширенный загрузчик классов. При этом старые экземпляры классов и сам класс сохраняется, что позволяет приложению продолжать работу без потери данных. Новые же экземпляры класса будут создаются уже на основании обновленного байт-кода класса.</p>
<p>На данный момент JRebel поддерживает практически все изменения, которые могут осуществляться в исходном коде (<a title="JRebel Features Comparison Matrix" href="http://zeroturnaround.com/jrebel/features/" target="_blank">JRebel Features</a>):</p>
<ul>
<li>Changes to method bodies</li>
<li>Adding/removing Methods</li>
<li>Adding/removing constructors</li>
<li>Adding/removing fields</li>
<li>Adding/removing classes</li>
<li>Adding/removing annotations</li>
<li>Changing static field value</li>
<li>Adding/removing enum values</li>
<li>Changing interfaces</li>
</ul>
<p>за исключением изменений связанных с иерархией классов:</p>
<ul>
<li>Replacing superclass</li>
<li>Adding/removing implemented interfaces</li>
</ul>
<p>Есть ли аналоги? Да есть, но им далеко до возможностей JRebel. Сравнительную табличку аналогичных технологий и более подробное описание JRebel можно посмотреть в статье <a href="http://www.oracle.com/technetwork/middleware/weblogic/oraclewls-jrebel.pdf"><strong>Get to Production Sooner</strong></a>.</p>
<p><strong>Что еще посмотреть/почитать по теме</strong></p>
<ul>
<li>Отчет - <a title="Java EE Productivity Report 2011" href="http://zeroturnaround.com/java-ee-productivity-report-2011/">&#8220;Java EE Productivity Report 2011&#8243;</a></li>
<li>Видео с конференции и набор статей от автора JRebel, Евгения Кабанова - <a href="http://zeroturnaround.com/blog/reloading-objects-classes-classloaders/"> Reloading Java Classes: Technical Series</a></li>
<li>Статья - <a href="http://java.dzone.com/articles/5-jrebel-features-you-couldn%E2%80%99t">&#8220;5 JRebel Features You Couldn’t Do In The JVM&#8221;</a></li>
</ul>
<p>Также, компания  <a href="http://zeroturnaround.com">ZeroTurnaround</a> недавно выпустила свой новый продукт <strong><a href="http://zeroturnaround.com/liverebel/">LiveRebel</a></strong>. И если основной целью JRebel было сократить потери времени разработчиков на т.н. &#8220;Turnaround&#8221;, то LiveRebel в первую очередь рассчитан на обновление приложений на лету в &#8220;продакшане&#8221; без необходимости остановки их работы и с гарантией сохранения сессии.</p>
<p>Будем ждать таких же успехом LiveRebel!</p>
<p><strong>P.S.</strong> Если кто-то захочет написать небольшую статью о других проектах получивших награды  <a title="2011 Duke's Choice Awards" href="http://java.com/en/dukeschoice/" target="_blank">&#8220;2011 Duke&#8217;s Choice Awards&#8221;</a>, не стесняйтесь ;)</p>
<p><em>За помощь в подготовке данного материа спасибо Полянскому Дмитрию</em></p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2012/01/jrebel/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Будущее Java &#8211; грядущие новшества Java 8</title>
		<link>http://jug.ua/2011/12/java-8/</link>
		<comments>http://jug.ua/2011/12/java-8/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 22:02:13 +0000</pubDate>
		<dc:creator>randrey</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Java 8]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=689</guid>
		<description><![CDATA[По результатам выступлений на конференции &#8220;Сиклум Java Субботник&#8221; и Встречи JUG KPI (посвященных лямбда выражениям (функциям) в Java), несколько небольших примеров и пояснений к презентации &#8220;Будущее Java, грядущие новшества Java 8&#8243; (видео доклада), а также исходный код приводимых примеров. Для начала стоит предупредить, что все излагаемое в презентации может измениться; не думаю, правда, что радикально, [...]]]></description>
			<content:encoded><![CDATA[<p>По результатам выступлений на конференции <a href="http://habrahabr.ru/company/Ciklum/blog/133628/">&#8220;Сиклум Java Субботник&#8221;</a> и <a href="http://jug.ua/2011/11/vstrecha-jug-kpi-1-dekabrya/">Встречи JUG KPI</a> (посвященных лямбда выражениям (функциям) в Java), несколько небольших примеров и пояснений к презентации <a href="http://jug.ua/wp-content/uploads/2011/12/Java8_Ciklum.pdf"><strong>&#8220;Будущее Java, грядущие новшества Java 8&#8243;</strong></a> (<a href="http://www.youtube.com/watch?v=TFH8ZTcxnL0&amp;list=UUlYsF7DXWqjF38dVEIvaEaQ&amp;index=1&amp;feature=plcp">видео доклада</a>), а также <a href="http://jug.ua/wp-content/uploads/2011/12/Java8_examp.zip">исходный код</a> приводимых примеров.</p>
<p>Для начала стоит предупредить, что все излагаемое в презентации может измениться; не думаю, правда, что радикально, но все же. Так, к примеру, за время, прошедшее между двумя докладами, <em>defender methods</em> успели окончательно сменить название на <em>virtual extension methods</em>.</p>
<p>И второе, те примеры кода, которые приводились во время презентации, работают! Точнее, почти работают&#8230; Вы можете скачать предварительную версию <a href="http://jdk8.java.net/lambda/">JDK 8 с поддержкой лямбда-выражений</a> и начать экспериментировать.</p>
<p><span id="more-689"></span></p>
<ul>
<li><strong><em>Virtual extension methods</em></strong></li>
</ul>
<p>Итак, предположим, мы имеем интерфейс <strong><em>NewInterface</em></strong> и хотим в него добавить новый метод <strong><em>void test()</em></strong> без необходимости его реализации в классах, которые реализуют данный интерфейс. Для этого в третьей строке, после описания метода, добавляем ключевое слово <strong><em>default</em></strong> и указываем имя класса, а также статического метода в данном классе, который будет вызываться в случае обращения к методу <strong><em>void test()</em></strong>.</p>
<pre class="brush: java; title: ; notranslate">
interface NewInterface{
void test2();
void test() default DefaultClass.test;
          //default { DefaultClass.test(this);};
}</pre>
<p>Код в третьей строке и будет тем самым <em>virtual extension method</em>.</p>
<p>В одном из описаний упоминается, что к методу вызываемому по умолчанию, после слова default можно обращаться так, как сделано в 4 строке, но в данный момент такой код не компилируется.</p>
<p>Класс <strong><em>DefaultClass</em></strong> выглядит следующим образом:</p>
<pre class="brush: java; title: ; notranslate">
class DefaultClass {
    public static void test(NewInterface ni){
        System.out.println(&quot;Default Hello&quot;);
    }
}
</pre>
<p>Теперь можно написать класс <strong><em>NewClass</em></strong> реализующий наш интерфейс <strong><em>NewInterface</em></strong>:</p>
<pre class="brush: java; title: ; notranslate">
class NewClass implements NewInterface{
	public void test2(){
		System.out.println(&quot;My Hello&quot;);
	}
}
</pre>
<p>Метод test2() &#8220;нормальный&#8221;, поэтому его мы обязаны реализовать. Если мы реализуем и метод <strong><em>void test()</em></strong>, то при обращении к нему будет вызываться данная реализации, иначе &#8211; дефолтная реализация из класса <strong><em>DefaultClass</em></strong>.</p>
<p>Протестируем то, что получилось, выполнив следующий код:</p>
<pre class="brush: java; title: ; notranslate">
public class Java8DefenderTest {
    public static void main(String[] args) {
        NewInterface ni = new NewClass();
		ni.test2();
		ni.test();
	}
}
</pre>
<p>Компиляция проходит без ошибок, а вот при запуске получаем следующее:<br />
<code><br />
My Hello<br />
Exception in thread "main" java.lang.AbstractMethodError: java8defender.NewClass.test()V<br />
at java8defender.Java8DefenderTest.main(Java8DefenderTest.java:26)<br />
</code><br />
И с этим, к сожалению, я пока не знаю что делать :( Можно было бы предположить, что поддержка <em>virtual extension methods</em> еще не реализована, но новые методы по работе с коллекциями их уже успешно используют.</p>
<p>С тем, как с помощью <em>virtual extension methods</em> реализовать множественное наследование поведения, вы можете ознакомиться на слайде 11 презентации.</p>
<p>Дополнительную информацию о <em>virtual extension methods</em> можно почерпнуть из документа <a href="http://cr.openjdk.java.net/~briangoetz/lambda/Defender%20Methods%20v4.pdf">&#8220;Interface evolution via virtual extension methods&#8221;</a>, а для любителей дискретной математики и формальных грамматик из <a href="http://cr.openjdk.java.net/~briangoetz/lambda/featherweight-defenders.pdf">&#8220;Featherweight Defenders: A formal model for virtual extension methods in Java&#8221;</a>.</p>
<ul>
<li><strong><em>Лямбда-выражения</em></strong></li>
</ul>
<p>Говоря короток, лямбда-выражение &#8211; это удобный способ реализации анонимного класса на основе интерфейса, содержащего единственный метод. Интерфейс содержащий единственный метод называется <em>функциональным интерфейсом</em> (<em>functional interface</em>). К примеру, такие интерфейсы как <em>Runnable, Callable, EventHandler и Comparator</em> являются функциональными.</p>
<p>Рассмотрим пример. Пусть у нас есть следующий интерфейс:</p>
<pre class="brush: java; title: ; notranslate">
interface F1{
	int add(int x, int y);
 }
</pre>
<p>Его реализация с помощью анонимного класса и вызов метода add(int x, int y) будут следующими:</p>
<pre class="brush: java; title: ; notranslate">
F1 fun = new F1(){
	public int add(int x, int y){
		return x+y;
	}
};
fun.add(3,5);
</pre>
<p>С помощью лямбда-выражения данный анонимный класс переписывается следующим образом:</p>
<pre class="brush: java; title: ; notranslate">
F1 func1 = (a,b) -&gt; a+b;
int i = 5, j = 13;
func1.add(i,j);
</pre>
<p>В круглых скобках указываются входные параметры (в соответствии с параметрами метода), а после стрелки &#8211; тело (реализация) того самого единственного метода, который был объявлен в интерфейсе. При желании его (тело) можно заключить в фигурные скобки и написать <em>return</em>:</p>
<pre class="brush: java; title: ; notranslate">
F1 func1 = (a,b) -&gt; {
        System.out.println(&quot;a=&quot; + a);
        System.out.println(&quot;b=&quot; + b);
        return a+b;
}
int i = 5, j = 13;
func1.add(i,j);
</pre>
<p>В блоке кода может быть реализована и любая другая функциональность, а также могут выполняться обращения к переменным за пределами лямбда-выражения. Ограничение: внешние переменные должны быть т.н. <em>effectively final</em>, то есть вести себя как переменная перед которой стоял бы модификатор <em>final</em>.</p>
<p>Основное значение и преимущество лямбда-выражений состоит в том, что их можно передавать в качестве параметров в методы в удобном компактном виде (пример на слайде 26). Так же планируется, что в будущем можно будет в качестве параметров передавать ссылки на методы и конструкторы, без их непосредственного вызова. К примеру:</p>
<pre class="brush: java; title: ; notranslate">
String::isEmpty
&quot;abc&quot;::length
Person::getLastName
ArrayList&lt;String&gt;::new
</pre>
<p>Но на данный момент эта функциональность еще не работает.</p>
<p>Детальнее про <em>лямбда-выражения</em> можно почитать в проекте <a href="http://jcp.org/aboutJava/communityprocess/edr/jsr335/index.html">Lambda Specification</a> либо в более короткой статье <a href="http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html">State of the Lambda</a> (кстати обнаружил ее новую версию лишь сейчас).</p>
<ul>
<li><strong><em>Functional Collection Patterns</em></strong></li>
</ul>
<p>Судя по тому, что написано в <a href="http://openjdk.java.net/jeps/">JDK Enhancement Proposals</a> (JEP), <em>virtual extension methods</em> и <em>лямбда-выражения</em> добавляются в Java с целью введение функциональных методов (функций высшего порядка) по работе с коллекциями &#8211; Functional Collection Patterns. Эти методы: filter, map, reduce (свертка), а так же целый ряд других, уже добавлены в интерфейс <a href="http://hg.openjdk.java.net/lambda/lambda/jdk/file/a08e29fbdb3b/src/share/classes/java/lang/Iterable.java"><em>Iterable.java</em></a> с использованием <em>virtual extension methods</em>. Данные методы будут работать с коллекциями и в качестве параметров будут принимать <em>лямбда-выражения</em>, которые и будут определять, чего именно мы хотим добиться от нашей коллекции:</p>
<pre class="brush: java; title: ; notranslate">
List&lt;Student&gt; students = ...
double highestScore =
    students.filter(s -&gt; s.getGradYear() == 2010 || s.getGradYear() == 2011)
        .map(s -&gt; s.getScore())
	  //.map(Student::getScore) //либо указатель на функцию, пока не работает
	    .reduce(0.0, (left, right) -&gt; (left &gt; right) ? left : right );
</pre>
<p>Но основной целью является даже не добавление методов по работе с коллекциями, а добавление параллельных версий этих методов, оптимизированных для оптимальной работы с большими объемами данных на многоядерных (многопроцессорных) системах. Параллелизм будет основываться на подходе «divide-and-conquer» с использование <em>Fork-Join framework</em> из Java 7. Загляните в исходный код <a href="http://hg.openjdk.java.net/lambda/lambda/jdk/file/a08e29fbdb3b/src/share/classes/java/util/ParallelIterables.java"><em>ParallelIterables.java</em></a> и увидите там универсальный алгоритм для параллельной работы с коллекциями.</p>
<p>К сожалению, статей и материалов по данной тематике я не нашел. Разве только презентация Brian Goetz <a href="http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf"><strong>&#8220;Language / Library / VM co-evolution in Java SE 8&#8243;</strong></a> с конференции <a href="http://www.devoxx.com/display/DV11/Home">Devoxx 2011</a>. Ну а так же исходный код будущей Java SE 8 ;)</p>
<p>Так что пока ждемс &#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2011/12/java-8/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Шлях PHP-програміста</title>
		<link>http://jug.ua/2011/10/way-of-php-programmer/</link>
		<comments>http://jug.ua/2011/10/way-of-php-programmer/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 22:35:56 +0000</pubDate>
		<dc:creator>randrey</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=627</guid>
		<description><![CDATA[Що треба щоб грати на барабані? – Ну, що там, взяв та барабаниш! Що треба щоб грати на скрипці? – Довго та нудно вчитись поки вийдуть якісь приємні для слуху звуки. В чомусь схожа ситуація і з програмуванням на PHP. Як виявилось, моя ремарка у попередній статті  стосовно «PHP-програмістів» багато кого зачепила. На справді, саме [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: right;"><em>Що треба щоб грати на барабані? – Ну, що там, взяв та барабаниш!</em><br />
<em>Що треба щоб грати на скрипці? – Довго та нудно вчитись поки вийдуть якісь приємні для слуху звуки.</em></p>
<p style="text-align: justify;">В чомусь схожа ситуація і з програмуванням на PHP. Як виявилось, моя ремарка <a href="http://jug.ua/2011/09/shlyax-programista/">у попередній статті</a>  стосовно «PHP-програмістів» багато кого зачепила. На справді, саме з таким ставленням Ви і можете зіштовхнутись потрапивши у професійне середовище, і Вам доведеться доводити рівень своєї компетенції, як PHP-програміста (тут вже без лапок і цілком серйозно).</p>
<p style="text-align: justify;"><span id="more-627"></span>У цій статті хотів би, по-перше, вибачитись перед тими людьми, кого мимоволі образив, і пояснити чому склалась саме така ситуація.</p>
<p style="text-align: justify;">Одразу ж скажу, що не маю ніякого упередженого ставлення до PHP чи будь якої іншої мови (звісно крім Java $). І дійсно, як можна ставитись до мови на якій розроблені найбільші соціальні мережі <em>Facebook</em> та <em>ВКонтакте</em>, а також найбільш популярна система для Інтернет-крамниць <em>Magento</em>. Крім цього, світ IT все більше вимагає те що зветься <a href="http://blogs.computerworld.com/15032/polyglot_programming_development_in_multiple_languages">&#8220;polyglot programming&#8221;</a>. Тобто програми, і навіть їх окремі частини, можуть розроблятись з використанням тієї мови, яка буде найбільш зручна та ефективна для вирішення певної задачі.</p>
<p style="text-align: justify;"><a href="http://openjdk.java.net/projects/mlvm/"><img class="alignright" style="border: 3px solid white;" title="Da Vinci" src="http://openjdk.java.net/projects/mlvm/images/helicopter.png" alt="" width="214" height="152" /></a></p>
<p style="text-align: justify;">До речі, у віртуальній машині Java є проект під назвою <a href="http://openjdk.java.net/projects/mlvm/index.html"><strong><em>Da Vinci Machine</em></strong></a>, в рамках якого в Java Virtual Machine вже реалізована підтримка таких мов як <em>Ruby (JRuby), Python (Jython), JavaScript</em> та ін. А також, є проект <strong><em><a href="http://www.caucho.com/">Resin</a></em></strong> – <em>“100% Java implementation of PHP 5”</em>.</p>
<p style="text-align: justify;">Що ці всі мови дозволяють робити? Користуватись всіма компоненти та сервісами з яких складається Java-платформа, і при цьому програмувати на тій мові, яка найбільш зручна та ефективна для вирішення вашої задачі. Теоретично, гадаю, без особливих проблем (крім авторських прав) можна було б включити до вище наведеного переліку і C# з Visual Basic .NET ;)</p>
<p style="text-align: justify;">Тепер переходимо до «але» та PHP.</p>
<p style="text-align: justify;">Так от, що стосується  PHP, то тут склалась така ситуація, що ця мова здається настільки легкою, що на ній без особливих зусиль щось пишуть школярі, вже навіть не старших, а середніх класів. Кажу це як людина, яка приймала участь у оцінці фінальних робіт на конкурсах школярів, які проводили компанії Intel (<a href="http://www.isef.kpi.ua">Intel Techno</a>) та Oracle (<a href="http://www.thinkquest.org/en/">ThinkQuest</a>). PHP там був на другому місці за популярністю (на першому був Flash). І от, деякі з цих школярів починають вважати себе досвідченими «PHP-програмістів» (тут знову в лапках), і прямо про це заявляють мотивуючи тим, що вже на комерційній основі розробляють сайти.</p>
<p style="text-align: justify;">Така сама ситуація була колись і з програмістами на Delphi (до речі, мова на який написаниі <em>Skype</em> та <em>The Bat!</em>). Від тих програм на Delphi, які були у великій кількості незрозуміло як написані переважно для наших державних структур просто хочеться тікати, як від якогось жаху!</p>
<p style="text-align: justify;">Так от, свою попередню статтю я закінчив не закликом «Не ставайте «PHP-програмістами!», а скоріше проханням «Не поспішайте ставати «PHP-програмістами». Це значить, що не треба поспішати барабанити по барабану, а необхідно, щоб навчитись гарно грати на ньому, так само багато вчитись, як і грі на скрипці. Від того, що PHP задається легкою не слідує те, що часу для його вивчення треба витратити менш ніж для Java.</p>
<p style="text-align: justify;">Як м<a href="http://i.imgur.com/1gF1j.jpg"><img class="alignleft" title="as seen by ..." src="http://i.imgur.com/1gF1j.jpg" alt="" width="261" height="169" /></a>ені розповідали в одній із компаній для підготовки PHP-програмістів застосовують наступну методику. Спочатку людей вчать Java Enterprise Edition, особливу увагу приділяючи саме архітектурі та шаблонам проектування, які там реалізовані. Після цього від них вимагають реалізовувати той самий архітектурний підхід при розробці програм на PHP.</p>
<p style="text-align: justify;">І на останок,<strong> <a title="as seen by ..." href="http://i.imgur.com/1gF1j.jpg">картинка</a></strong>, яка має всіх примирити.</p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2011/10/way-of-php-programmer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Шлях програміста</title>
		<link>http://jug.ua/2011/09/shlyax-programista/</link>
		<comments>http://jug.ua/2011/09/shlyax-programista/#comments</comments>
		<pubDate>Mon, 26 Sep 2011 23:27:11 +0000</pubDate>
		<dc:creator>randrey</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=533</guid>
		<description><![CDATA[Ця замітка адресована початківцям – студентам першокурсникам (але сподіваюсь що вона буде корисною й іншим людям). Знаю, що багато з Вас задавались питанням: «А чи стану я програмістом?». Відповідь на нього, поки що, навряд чи Вам хтось зможе дати, але вона з’явиться згодом, коли Ви почнете рухатись по обраному Вами професійному шляху. Щоб допомогти зорієнтуватись, [...]]]></description>
			<content:encoded><![CDATA[<p>Ця замітка адресована початківцям – студентам першокурсникам (але сподіваюсь що вона буде корисною й іншим людям). Знаю, що багато з Вас задавались питанням: «А чи стану я програмістом?». Відповідь на нього, поки що, навряд чи Вам хтось зможе дати, але вона з’явиться згодом, коли Ви почнете рухатись по обраному Вами професійному шляху. Щоб допомогти зорієнтуватись, наведу «дорожню карту», на якій представлені основні блоки дисциплін, що є необхідними до вивчення.</p>
<p><span id="more-533"></span></p>
<p><a href="http://jug.ua/wp-content/uploads/2011/09/DevEdu.png"><img class="size-medium wp-image-534 alignleft" style="border: 0pt none; margin: 4px;" title="DevEdu" src="http://jug.ua/wp-content/uploads/2011/09/DevEdu-241x300.png" alt="" width="193" height="240" /></a></p>
<p>У складанні цієї «дорожньої карти» приймав участь цілий колектив людей, з декількох компаній, які професійно займаються як системним так і промисловим програмуванням.<br />
Хотів би відмітити, що багато початківців намагаються пропустити перший блок &#8211; «Основи програмування», до речі він є одними з найскладніших, і перейти одразу ж до так званого промислового програмування, переважно на мові PHP. Результатом цього є   вихідний код на який без сліз важко дивитись, де людині якось вдається реалізувати відомі лінійні алгоритми з експоненційною складністю, а яким чином даний код працює не розуміє навіть його автор. У професійному середовищі для таких «програмістів» є свій діагноз – «PHP-програміст». Отож, не поспішайте ставати «PHP-програмістами» ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2011/09/shlyax-programista/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[ann] экспертная система Nigma.ru</title>
		<link>http://jug.ua/2009/06/expert-system-nigmaru/</link>
		<comments>http://jug.ua/2009/06/expert-system-nigmaru/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 08:59:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[ru]]></category>
		<category><![CDATA[spotlight]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=190</guid>
		<description><![CDATA[nigma.ru &#8211; онлайн-система, позволяющую как производить простейшие арифметические преобразования, так и решать математические задачи различной степени сложности. Также Нигма распознает более тысячи физических, математических констант и единиц измерения, что позволяет производить операции со множеством величин (в том числе решать с ними уравнения) и получать ответ в требуемых единицах измерения. Помимо уравнений система решает все задачи, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://nigma.ru">nigma.ru</a> &#8211; онлайн-система, позволяющую как производить простейшие арифметические преобразования, так и решать математические задачи различной степени сложности. Также Нигма распознает более тысячи физических, математических констант и единиц измерения, что позволяет производить операции со множеством величин (в том числе решать с ними уравнения) и получать ответ в требуемых единицах измерения.</p>
<p>Помимо уравнений система решает все задачи, характерные для калькуляторов поисковых систем и конверторов валют. Однако Нигма умеет считать в дробях и знает общеупотребимые синонимы валют.</p>
<p>Пример &#8211; <a title="биквадратное уравнение" href="http://nigma.ru/index.php?s=x2+-+3x+%2B+2+%3D+0&amp;t=web&amp;yn=1&amp;gl=1&amp;rm=1&amp;ms=1&amp;av=1&amp;yh=1&amp;ap=1&amp;nm=1&amp;lang=all&amp;rg=&amp;fs=autocomplete">биквадратное уравнение</a> c развёрнутым ходом решения:</p>
<p><a href="http://jug.ua/wp-content/uploads/2009/06/nigma-biquadratic-equation.jpg"><img class="alignnone size-medium wp-image-191" title="nigma-biquadratic-equation" src="http://jug.ua/wp-content/uploads/2009/06/nigma-biquadratic-equation-187x300.jpg" alt="nigma-biquadratic-equation" width="187" height="300" /></a></p>
<p>Подробнее о математических и лингвистических способностях нигмы можно почитать на сайте nigma.ru.</p>
<p>Что умеет nigma &#8211; <a href="http://nigma.ru/index_menu.php?action=click_menu&amp;menu_element=math_task_list">http://nigma.ru/index_menu.php?action=click_menu&amp;menu_element=math_task_list</a>:</p>
<ul>
<li>решать уравнения, в т.ч. с единицами измерения и математическими и физическими константами, а также системы уравнений</li>
<li>Конвертировать валюты</li>
<li>Раскладывать на множители числа и буквенные выражения</li>
<li>Находить наименьшее общее кратное и наибольший общий делитель чисел; определять взаимно простые числа</li>
<li>Вычислять модуль числа</li>
<li>Сравнивать числа (с пониманием математических констант вроде &#8220;пи&#8221;), сортировать числа по возрастанию и убыванию</li>
<li>Вычислять численные выражения, раскрывать скобки, сокращать дроби, упрощать буквенные выражения, упрощать тригонометрические выражения</li>
<li>Определять знак буквенного выражения (если возможно)</li>
<li>Представлять многочлен в виде квадрата</li>
<li>Приводить подобные слагаемые</li>
<li>Приводить дроби к общему знаменателю</li>
</ul>
<p>Что понимает: <a href="http://nigma.ru/index_menu.php?action=click_menu&amp;menu_element=math_phrase_list">http://nigma.ru/index_menu.php?action=click_menu&amp;menu_element=math_phrase_list</a> &#8211; фразы &#8220;Вычислить&#8221;, &#8220;Решить&#8221;, НОК, НОД, Сортировка (Упорядочить), Общий знаменатель, Делители, Модуль, Сравнить, Раскрыть скобки, Представить в виде квадрата, Привести подобные, Сократить, Упростить, Взаимно простые, Знак.</p>
<p>См. также заметку <a href="http://jug.ua/2009/06/wolframalpha-vs-google-squared/">Wolfram|Alpha vs Google Squared</a></p>
<p>happy computing!</p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2009/06/expert-system-nigmaru/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Wolfram&#124;Alpha vs Google Squared</title>
		<link>http://jug.ua/2009/06/wolframalpha-vs-google-squared/</link>
		<comments>http://jug.ua/2009/06/wolframalpha-vs-google-squared/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 14:46:09 +0000</pubDate>
		<dc:creator>n0mer</dc:creator>
				<category><![CDATA[анонс]]></category>
		<category><![CDATA[наука]]></category>
		<category><![CDATA[en]]></category>
		<category><![CDATA[MathML]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[wolfram]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=133</guid>
		<description><![CDATA[Google Labs выпустили Google Squared &#8211; поисковый инструмент, который поможет собрать воедино факты на любую заданную тему. Возможности: увидеть таблицу элементов и их аттрибутов разработчики назвали такие таблицы фактов словом &#8220;squares&#8220; настроить отображение, указав какие элементы (строки) и аттрибуты (столбы) показывать, а какие &#8211; нет увидеть, какие вебсайты являются источником информации сохранить подборку и поделиться [...]]]></description>
			<content:encoded><![CDATA[<p>Google Labs выпустили <a href="http://www.google.com/squared/">Google Squared</a> &#8211; <span class="tagautolink autolink">поисковый инструмент</span>, который поможет собрать воедино факты на любую заданную тему.</p>
<p>Возможности:</p>
<blockquote>
<ul>
<li>увидеть таблицу элементов и их аттрибутов<br />
разработчики назвали такие таблицы фактов словом &#8220;<a title="Яндекс.Словари: перевод «square» — английский язык" href="http://lingvo.yandex.ru/en?text=square&amp;st_translate=on">squares</a>&#8220;</li>
<li>настроить отображение, указав какие элементы (строки) и аттрибуты (столбы) показывать, а какие &#8211; нет</li>
<li>увидеть, какие вебсайты являются источником информации</li>
<li>сохранить подборку и поделиться ей с другими пользователями</li>
</ul>
</blockquote>
<p>К слову, Google Squared похож на сервис структурированных запросов <a href="http://www.wolframalpha.com/">Wolfram Alpha</a> &#8211; программу вычисления знаний (<span>computational knowledge engine), результат работы которой &#8211; выборка из собственной внутренней базы знаний.</span></p>
<p>О возможностей системы Wollram Alpha рассказывает её создатель, <a title="Stephen Wolfram" href="http://en.wikipedia.org/wiki/Stephen_Wolfram">Стивен Вольфрам</a> &#8211; британский физик, математик, писатель и бизнесмен, известный своими работами в таких областях как физика элементарных частиц, космология, клеточные автоматы, теория сложности и компьютерная алгебра, а также авторством программы <em>Mathematica</em> и собственно сервиса Wolfram|Alpha.</p>
<p><span>Видео (10:58) </span></p>
<p><a href="http://jug.ua/2009/06/wolframalpha-vs-google-squared/"><em>Click here to view the embedded video.</em></a></p>
<p>Факты:</p>
<ul>
<li>Wolfram|Alpha &#8211; это 5 миллиноно строк кода на <em><a title="Wolfram Mathematica: Home Page" href="http://www.wolfram.com/products/mathematica/index.html">Mathematica</a></em> (с использованием <span class="mw-redirect">w</span><span class="mw-redirect">e</span><span class="mw-redirect">b</span><span class="mw-redirect"><em>Mathematica</em></span> и grid<em>Mathematica</em>), которые работают на 10,000 <abbr title="central processing unit">CPU</abbr>, база знаний, <abbr title="Natural language processing">NLP</abbr>-движок и библиотека алгоритмов</li>
<li>web<em>Mathematica</em> &#8211; продукт, позволяющий веббраузеру выступать в роли интерфейса к удалённому <span class="mw-redirect"><em>Mathematica-</em></span>серверу и запускать <span class="mw-redirect"><em>Mathematica-</em>скрипты на любой платформе.<br />
Пример работы : ctg (Pi/2) ≈ 0<br />
<a href="http://jug.ua/wp-content/uploads/2009/06/webmathematica.jpg"><img class="alignnone size-medium wp-image-184" title="webmathematica" src="http://jug.ua/wp-content/uploads/2009/06/webmathematica-300x195.jpg" alt="webmathematica" width="300" height="195" /></a><br />
</span><span class="mw-redirect"><a href="http://functions.wolfram.com/ElementaryFunctions/Cot/">http://functions.wolfram.com/ElementaryFunctions/Cot/</a> &#8211; обзор функции котангенса<br />
</span><span class="mw-redirect"><a href="http://functions.wolfram.com/webMathematica/FunctionEvaluation.jsp?name=Cot">http://functions.wolfram.com/webMathematica/FunctionEvaluation.jsp?name=Cot</a> &#8211; онлайн калькулятор, позволяет вычислить значение функции котангенса для любого аргумента<br />
<a href="http://functions.wolfram.com/ElementaryFunctions/Cot/09/0001/">http://functions.wolfram.com/ElementaryFunctions/Cot/09/0001/</a> &#8211; представление котангенса в виде ряда, плюс возможность скопировать эту формулу во внутренних форматах <em>Mathematica</em> (Input Form, Standard Form и Rule Form) или в <abbr title="Mathematical Markup Language">MathML</abbr>-формате:<br />
<img src="http://functions.wolfram.com/ElementaryFunctions/Cot/09/0001/MainEq1.gif" alt="" /><br />
</span>утилита <a title="MathML Central: A Wolfram Web Resource" href="http://mathmlcentral.com">mathmlcentral.com</a> от Wolfram Research умеет генерировать GIF, JPEG и даже xHTML по <abbr title="Mathematical Markup Language">MathML</abbr>-коду; есть даже возможность сгенерить случайным образом выбранную формулу (кнопка &#8220;<a href="http://www.mathmlcentral.com/Tools/FromMathMLURL.jsp">Random URL</a>&#8220;)</li>
<li>grid<em>Mathematica</em> &#8211; дополнение к <em>Mathematica</em>, расширяющая её возможности параллельных вычислений</li>
</ul>
<p>Подробности:</p>
<ul>
<li><a href="http://www.google.com/squared/">http://www.google.com/<strong>squared</strong>/</a></li>
<li><a href="http://www.wolframalpha.com/">http://www.<strong>wolframalpha</strong>.com/</a></li>
<li><a href="http://functions.wolfram.com/">http://<strong>functions</strong>.wolfram.com/</a><br />
По состоянию на июнь 2009 сайт web<em>Mathematica</em> содержит 304,409 формул и 10,828 визуализаций, причём здесь есть даже<span class="comment_text"> информация о функциях, которую они ещё в свою <abbr title="computer algebra system">CAS</abbr> не встроили.</span></li>
<li><span class="comment_text"><a href="http://mathworld.wolfram.com/">http://<strong>mathworld</strong>.wolfram.com/</a><br />
MathWorld &#8211; <a title="New in MathWorld from Wolfram MathWorld" href="http://mathworld.wolfram.com/whatsnew/">постоянно обновляемый</a> набор интерактивных математических статей, созданных и поддерживаемый Эриком Вайштайном. Проект спонсируется компанией Wolfram Research Inc. (автор <em>Mathematica</em>) и частично грантом &#8220;National Science Foundation&#8217;s National Science Digital Library&#8221; университету &#8220;University of Illinois at Urbana-Champaign&#8221;.</span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2009/06/wolframalpha-vs-google-squared/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Что такое теория относительности</title>
		<link>http://jug.ua/2009/06/theory_of-relativity/</link>
		<comments>http://jug.ua/2009/06/theory_of-relativity/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 13:18:32 +0000</pubDate>
		<dc:creator>n0mer</dc:creator>
				<category><![CDATA[наука]]></category>
		<category><![CDATA[off topic]]></category>
		<category><![CDATA[ru]]></category>
		<category><![CDATA[soviet union]]></category>
		<category><![CDATA[theory of relativity]]></category>

		<guid isPermaLink="false">http://jug.ua/?p=107</guid>
		<description><![CDATA[Фильм Что такое теория относительности Режиссер: Семен Райтбурт Сценаристы: Семен Лунгин, Илья Нусинов, Семен Райтбурт Производство: Моснаучфильм Год выпуска: 1964 Актеры: Алла Демидова, Георгий Вицин, Алексей Грибов, Алексей Полевой, Георгий Тусузов Научно-популярный фильм с элементами художественного кино, расскаэывающий о &#8220;теории относительности&#8221;. часть 1 (9:46) часть 2 (9:44) Теория относительности — термин, введённый в 1908 году [...]]]></description>
			<content:encoded><![CDATA[<p>Фильм <strong>Что такое теория относительности</strong></p>
<blockquote><p>Режиссер: Семен Райтбурт<br />
Сценаристы: Семен Лунгин, Илья Нусинов, Семен Райтбурт<br />
Производство: Моснаучфильм<br />
Год выпуска: 1964<br />
Актеры: Алла Демидова, Георгий Вицин, Алексей Грибов, Алексей Полевой, Георгий Тусузов</p>
<p>Научно-популярный фильм с элементами художественного кино, расскаэывающий о &#8220;теории относительности&#8221;.</p></blockquote>
<p>часть 1 (9:46)<br />
<p><a href="http://jug.ua/2009/06/theory_of-relativity/"><em>Click here to view the embedded video.</em></a></p><br />
часть 2 (9:44)<br />
<p><a href="http://jug.ua/2009/06/theory_of-relativity/"><em>Click here to view the embedded video.</em></a></p></p>
<blockquote><p><strong>Теория относительности</strong> — термин, введённый в 1908 году Максом Планком с целью показать, как специальная теория относительности (и, позже, общая теория относительности) использует принцип относительности.</p>
<p><a href="http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8">Специальная теория относительности</a></p>
<p>Специальная, или частная теория относительности — это теория структуры пространства-времени. Впервые была представлена в 1905 году Альбертом Эйнштейном в работе «К электродинамике движущихся тел». Теория описывает движение, законы механики, а также пространственно-временные отношения, определяющие их, при скоростях движения, близких к скорости света. Классическая механика Ньютона в рамках специальной теории относительности является приближением для малых скоростей.</p>
<p><a href="http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%89%D0%B0%D1%8F_%D1%82%D0%B5%D0%BE%D1%80%D0%B8%D1%8F_%D0%BE%D1%82%D0%BD%D0%BE%D1%81%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D0%BE%D1%81%D1%82%D0%B8">Общая теория относительности</a></p>
<p>Общая теория относительности — теория гравитации, разработанная Эйнштейном в 1905—1917 годах. Является дальнейшим развитием специальной теории относительности. В общей теории относительности постулируется, что гравитационные эффекты обусловлены не силовым взаимодействием тел и полей, а деформацией самого пространства-времени, в котором они находятся. Эта деформация связана, в частности, с присутствием массы-энергии.</p></blockquote>
<h3>Советские познавательные фильмы</h3>
<p>По ссылке <a title="Советские познавательные фильмы" href="http://www.youtube.com/view_play_list?p=879D5FB717145C79">http://www.youtube.com/view_play_list?p=879D5FB717145C79</a> находятся такие фильмы:</p>
<ul>
<li><strong>Физика в половине десятого</strong> &#8211; cоветский познавательный видеоролик, объясняющий некоторые основы физики.</li>
<li>В фильме <strong>Математик и чёрт</strong> (СССР, 1972) математик предлагает продать душу дьяволу за то, чтобы тот доказал или опроверг теорему Ферма.<br />
Редкий игровой научно-популярный фильм по рассказу Артура Порджеса &#8220;Саймон Флэгг и дьявол&#8221;.</li>
<li><strong>Урок астрономии</strong></li>
<li><strong>Этот правый, левый мир</strong> &#8211; cоветский научно-популярный фильм о симметрии в нашем мире. По мотивам книги М. Гарднера.<br />
Центрнаучфильм, 1971<br />
Авторы сценария: С.Райтбурт, В.Шрейберг<br />
Режиссер: С.Райтбург.<br />
В ролях: д.т.н. проф.В.Шестаков</li>
</ul>
<p>Приятного просмотра!</p>
]]></content:encoded>
			<wfw:commentRss>http://jug.ua/2009/06/theory_of-relativity/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

