<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2608978537755325728</id><updated>2012-01-05T22:43:23.158+02:00</updated><category term='addAll'/><category term='linux'/><category term='seo'/><category term='политика'/><category term='java'/><category term='amazon'/><category term='web'/><category term='разработка'/><category term='generics'/><category term='sape'/><category term='коллекции'/><category term='collections'/><category term='подорожі'/><category term='юмор'/><category term='вело'/><category term='мониторинг'/><category term='веб'/><title type='text'>Блог разработчика финансового ПО</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-7151179234808881160</id><published>2010-04-06T15:54:00.006+03:00</published><updated>2010-04-14T18:33:33.020+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Инсталяция Eclipse</title><content type='html'>Чтобы не забыть, какие я обычно плагины ставлю к Eclipse.&lt;br&gt;&lt;br&gt;

1. Subclipse&lt;br&gt;
http://subclipse.tigris.org/&lt;br&gt;&lt;br&gt;

2. eclipse-hide-toolbar&lt;br&gt;
http://code.google.com/p/eclipse-hide-toolbar/&lt;br&gt;&lt;br&gt;

3. Eclipse WTP&lt;br&gt;&lt;br&gt;

4. Wireframe Sketcher&lt;br&gt;
http://wireframesketcher.com/&lt;br&gt;&lt;br&gt;

5. PyDev (sometimes)&lt;br&gt;
http://pydev.org/&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-7151179234808881160?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/7151179234808881160/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=7151179234808881160' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/7151179234808881160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/7151179234808881160'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2010/04/eclipse.html' title='Инсталяция Eclipse'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-9053292279020981225</id><published>2009-08-27T13:30:00.005+03:00</published><updated>2009-08-27T13:54:29.052+03:00</updated><title type='text'>Java, который я не понимаю</title><content type='html'>Еще одна, наряду с &lt;a href="http://vasyas.blogspot.com/2009/02/collectionaddall-java-generics.html"&gt;добавлением элементов из одной типизированной wildcard коллекцией в другую&lt;/a&gt; особенность родовых типов в Java.&lt;br&gt;&lt;br&gt;

А именно, параметры для родовых типов не определяются автоматически (infer) из контекста. Хотя определяются автоматически для родовых функций. Поясню на примере. Фрагмент кода 1:
&lt;br&gt;
&lt;code&gt;&amp;lt;T&amp;gt; String cat(T a, T b) {
  return String.valueOf(a) + String.valueOf(b);
}
...
System.out.println(cat(1, 2));
&lt;/code&gt;
&lt;br&gt;
В этом фрагменте при инстанциировании cat компилятор автоматически определит, что T - int.&lt;br&gt;&lt;br&gt;

Фрагмент кода 2:
&lt;br&gt;
&lt;code&gt;class Cat&amp;lt;T&amp;gt; {
  T a, b;

  Cat(T a, T b) {
    this.a = a;
    this.b = b;
  }
        
   String cat() {
     return String.valueOf(a) + String.valueOf(b);
   }
}
...
System.out.println(new Cat(1, 2).cat());
&lt;/code&gt;
&lt;br&gt;
В этом фрагменте при инстанциировании класса Cat компилятор выдаст предупреждение, что класс родовой класс используется без указания родового параметра. Хотя из вызова конструктора можно было эти родовые параметры определить. Так как компилятор такого не делает, приходится лишний раз руками указывать тип:
&lt;br&gt;
&lt;code&gt;System.out.println(new Cat&amp;lt;Integer&amp;gt;(1, 2).cat());
&lt;/code&gt;
&lt;br&gt;
Это, конечно, плохо с точки зрения читабельности и поддерживаемости кода.&lt;br&gt;&lt;br&gt;
В Internet не очень много информации, почему так сделано. Я нашел только одно старое упоминание вот здесь &lt;a href="http://forums.sun.com/thread.jspa?threadID=393707"&gt;форуме Sun&lt;/a&gt;, в котором говориться о том, что автоматическое определение родовых параметров расходится с идеологией Java. Но для методов так же сделано - почему для них не расходиться.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-9053292279020981225?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/9053292279020981225/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=9053292279020981225' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/9053292279020981225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/9053292279020981225'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2009/08/java.html' title='Java, который я не понимаю'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-2684631456083604631</id><published>2009-06-25T12:33:00.006+03:00</published><updated>2009-06-25T18:19:39.712+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='мониторинг'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Мониторинг лог-файлов с использованием Zabbix</title><content type='html'>Программный комплекс Zabbix (&lt;a href="http://wwww.zabbix.com/"&gt;www.zabbix.com&lt;/a&gt;) - популярное средство для мониторинга компьютерных систем. Zabbix позволяет отслеживать различные системные и прикладные показатели, например, загруженность CPU и сетевых интерфейсов, скорость работы сайтов, размер пула соединений и др. При возникновении внештатных ситуаций можно настроить уведомление по различным каналам вроде емейл и SMS. &lt;br&gt;&lt;br&gt;

Часто возникает необходимость мониторинга лог-файлов. А именно, при возникновении ошибочной ситуации было бы полезно отсылать письмо или SMS. В версии 1.4 Zabbix нет встроенных средств, которые бы позволяли такое сделать. Мне пришлось для этого написать небольшой скрипт на bash, который потом подключить как пользовательский параметр в Zabbix. Скрипт можно скачать здесь &lt;a href="http://drop.io/aikmulc/asset/diglog-sh"&gt;diglog.sh&lt;/a&gt;
&lt;br&gt;&lt;br&gt;

&lt;strong&gt;Для подключения скрипта в Zabbix&lt;/strong&gt; нужно выполнить следующее: &lt;br&gt;&lt;br&gt;

1. Прописать в zabbix-agentd.conf строку для определения нового пользовательского параметра:
&lt;code&gt;UserParameter=diglog[*],/etc/zabbix/alert.d/diglog.sh $1 $2
&lt;/code&gt;

После чего перезапустить zabbix-agent
&lt;br&gt;&lt;br&gt;

2. Через веб-интерфейс Zabbix добавить новый Item. Ключ (key) у него должен быть, например, таким
&lt;code&gt;diglog[/home/application/application.log,/tmp/application.log.diglog]
&lt;/code&gt;
Первый параметр - это путь к лог-файлу, который нужно мониторить. Второй параметр - путь к файлу состояния, в котором будет хранится текущее положение в лог-файле. Файл состояния должен быть свой для каждого лог-файла.&lt;br&gt;

Тип у Item'а должен быть Character по крайней мере для Zabbix 1.4.&lt;br&gt;

После добавления Zabbix сразу же начнет выбирать по одной строчки из лог-файла.&lt;br&gt;&lt;br&gt;

3. Добавить триггер для обработку ошибок в лог-файле, например, с таким выражением:
&lt;code&gt;{ZABBIX Server:diglog[/home/application/application.log,/tmp/application.logdiglog].str(ERROR)}=1
&lt;/code&gt;
&lt;br&gt;

4. Подключить к триггеру действия для отсылки уведомления об ошибке.
&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-2684631456083604631?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/2684631456083604631/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=2684631456083604631' title='1 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/2684631456083604631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/2684631456083604631'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2009/06/zabbix.html' title='Мониторинг лог-файлов с использованием Zabbix'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-3853707027167058501</id><published>2009-02-04T20:27:00.006+02:00</published><updated>2009-02-04T20:46:56.301+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='addAll'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='коллекции'/><category scheme='http://www.blogger.com/atom/ns#' term='collections'/><category scheme='http://www.blogger.com/atom/ns#' term='generics'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Collection.addAll в Java Generics</title><content type='html'>&lt;a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html"&gt;Родовые типы (generics)&lt;/a&gt; в Java - одна из самых интересных и полезных возможностей. Она очень грамотно и логично спроектирована, но иногда попадаются моменты, которые ставят в тупик. Лично я пару натыкался на такой фрагмент:&lt;br&gt;
&lt;code&gt;List&amp;lt;? extends MyType&amp;gt; l1;
List&amp;lt;? extends MyType&amp;gt; l2;
        
l1.addAll(l2);
&lt;/code&gt;

Компилятор при этом выдает ошибку в строке, где элементы одной коллекции добавляются в другую. Казалось бы, в чем проблема - коллекции типизированы одинаково, следовательно, могут содержать одинаковые элементы. На самом деле, если бы такой код был допустимым, нарушалась бы безопасность типов (в коллекцию можно было бы добавить недопустимые элементы). Это демонстрирует следующий пример:&lt;br&gt;
&lt;code&gt;List&amp;lt;Double&amp;gt; dl = null;
List&amp;lt;Integer&amp;gt; il = null;
        
List&amp;lt;? extends Number&amp;gt; l1 = dl;
List&amp;lt;? extends Number&amp;gt; l2 = il;
        
l1.addAll(l2);
&lt;/code&gt;

В коллекцию Double попадают объекты типа Integer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-3853707027167058501?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/3853707027167058501/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=3853707027167058501' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/3853707027167058501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/3853707027167058501'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2009/02/collectionaddall-java-generics.html' title='Collection.addAll в Java Generics'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-4869285617167965442</id><published>2008-12-11T21:59:00.002+02:00</published><updated>2008-12-11T22:02:53.449+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='sape'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Java API для Sape.ru</title><content type='html'>Выложил в публичный доступ когда-то написанный интерфейс для работы с биржей ссылок SAPE.ru. Описание, а также исходники можно посмотреть на Google Code, адрес такой &lt;a href="http://javasape.googlecode.com/"&gt;http://javasape.googlecode.com/&lt;/a&gt;.

Комментарии можно ссылать по мылу или писать прямо в этом посте.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-4869285617167965442?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/4869285617167965442/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=4869285617167965442' title='7 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4869285617167965442'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4869285617167965442'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/12/java-api-saperu.html' title='Java API для Sape.ru'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-7604734996426275869</id><published>2008-10-23T18:41:00.006+03:00</published><updated>2008-10-23T19:35:13.300+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='веб'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Интересный способ мониторинга рабочих сайтов</title><content type='html'>Иногда возникает ситуация, когда рабочий (production) сайт начинает тормозить, или вообще подвисать. Для нахождения проблемы можно просмотреть код в поисках узких мест или написать нагрузочный тест и посмотреть профилировщиком методы, которые выполняются много времени. &lt;br&gt;&lt;br&gt;

Но часто бывает так, что сайт начинает тормозить только при некотором стечении обстоятельств, например, когда заходит определенный пользователь на определенную страницу. Такого рода узкие места нагрузочным тестом не покроешь, так как не ясно, на каких именно данных проявляется проблема.&lt;br&gt;&lt;br&gt;

В этом случае можно воспользоваться утилитой &lt;a href="http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jstack.html"&gt;jstack&lt;/a&gt; которая входит в состав JDK начиная с версии 1.5.0. Эта утилита позволяет просмотреть текущее состояние работающих в указанной виртуальной машине потоков (которые thread). Например, &lt;br&gt;
&lt;code&gt;user@laptop$ jstack 3344 
"btpool0-439" prio=10 tid=0xa98da000 nid=0x1b3a in Object.wait() [0xa99ff000..0xa99ff130]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
 at java.lang.Object.wait(Native Method)
 at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:482)
 - locked &lt;0xb47e0078&gt; (a org.mortbay.thread.BoundedThreadPool$PoolThread)

"Java2D Disposer" daemon prio=10 tid=0xaa35c800 nid=0xb2e in Object.wait() [0xa9fd4000..0xa9fd50b0]
   java.lang.Thread.State: WAITING (on object monitor)
 at java.lang.Object.wait(Native Method)
 at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
 - locked &lt;0xaf007a30&gt; (a java.lang.ref.ReferenceQueue$Lock)
 at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
 at sun.java2d.Disposer.run(Disposer.java:125)
 at java.lang.Thread.run(Thread.java:619)
&lt;/code&gt;

Для каждого потока показаны его атрибуты, в том числе его название, и стектрейс. &lt;br&gt;&lt;br&gt;

Идея в том, чтобы на каждом запросе добавлять в название потока информацию, необходимую для идентификации узких мест. Тогда использовав jstack, из названия потока можно посмотреть, над чем в данный момент работает он работает.&lt;br&gt;&lt;br&gt;

Например, очевидными кандидатами на добавление в название потока являются адрес страницы, которая обрабатывается и логин пользователя. Код по добавлению этой информации логично разместить в HTTP-фильтре. Фрагмент его будет выглядеть приблизительно так:&lt;br&gt;
&lt;code&gt;public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        String threadName = getUser().login + ": " + RequestInfo.get().getRequestUrl();
        Thread.currentThread().setName(threadName);
        
        chain.doFilter(request, response);
}
&lt;/code&gt;

Теперь, если в выводе jstack будет часто видно, например, такое &lt;br&gt;
&lt;code&gt;
"medved: /heavy/calculation" prio=10 tid=0x9aa9a800 nid=0x2519 runnable [0x9ad18000..0x9ad
190b0]
   java.lang.Thread.State: RUNNABLE
 at com.site.heavy.calculation.Calc.inner(Calc.java:113)
 at com.site.heavy.calculation.Calc.outer(Calc.java:43)
&lt;/code&gt;

значит, для пользователя medved медленно показывается страница /heavy/calculation. Это уже можно профилировать.&lt;br&gt;&lt;br&gt;

Названия потока удобно использовать также в других случаях отладки, например, записать в него User-Agent, и тогда прямо в стектрейсе ошибки будет видно, под каким браузером она возникла.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-7604734996426275869?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/7604734996426275869/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=7604734996426275869' title='2 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/7604734996426275869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/7604734996426275869'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/10/blog-post_23.html' title='Интересный способ мониторинга рабочих сайтов'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-4895473689747250438</id><published>2008-10-13T19:55:00.004+03:00</published><updated>2008-10-13T19:59:59.722+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='юмор'/><category scheme='http://www.blogger.com/atom/ns#' term='политика'/><title type='text'>Консерваторы и демократы</title><content type='html'>(Не удержался, чтобы не перепостить - уж очень понравилось.)
&lt;br&gt;&lt;br&gt;

Я спросил несовершеннолетнюю дочь своих друзей, кем бы она хотела быть, когда вырастет. Она сказала, что хотела бы когда-нибудь стать Президентом Соединённых Штатов Америки. Оба счастливых родителя, либеральные демократы, присутствовавшие при разговоре, с гордостью переглянулись. Я спросил девочку: "Хорошо, допустим ты стала Президентом, что бы ты сделала в первую очередь?"
&lt;br&gt;&lt;br&gt;

Она ответила: "Первым делом я бы предоставила пищу и жильё всем бездомным".
&lt;br&gt;&lt;br&gt;

"Чудесно, - согласился я, - весьма достойная цель! Но вовсе не обязательно ждать того времени, когда ты станешь Президентом. Можно уже сейчас начать действовать в соответствии с твоим планом. Приходи ко мне в дом, выполи сорняки в саду, постриги траву на лужайке, подмети двор, и я заплачу тебе пятьдесят долларов. Тогда ты сможешь пойти к лавке, возле которой валяется один из бездомных, и вручить ему свои $50 на покупку еды или для сбережений в счёт покупки будущего дома".
&lt;br&gt;&lt;br&gt;

Она надолго задумалась. Её мать смотрела на меня так выразительно, что я не берусь истолковывать её взгляд. В конце концов девочка подняла глаза и спросила: "Почему бы тогда этому бездомному самому не прийти к вам домой и не сделать эту работу - тогда вы бы прямо ему и заплатили эти 50 долларов?"
&lt;br&gt;&lt;br&gt;

Я ответил: "Добро пожаловать в ряды консерваторов, дочка!"
&lt;br&gt;&lt;br&gt;

Её родители до сих пор со мной не общаются...
&lt;br&gt;&lt;br&gt;

Источник: &lt;a href="http://art-of-arts.livejournal.com/"&gt;http://art-of-arts.livejournal.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-4895473689747250438?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/4895473689747250438/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=4895473689747250438' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4895473689747250438'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4895473689747250438'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/10/blog-post.html' title='Консерваторы и демократы'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-4204557818071516159</id><published>2008-10-09T16:57:00.014+03:00</published><updated>2009-11-18T17:28:13.752+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='веб'/><category scheme='http://www.blogger.com/atom/ns#' term='amazon'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>Устанавливаем на Amazon EC2 и Amazon EBS Java-приложение с MySQL</title><content type='html'>На примере типичного сайта опишу последовательность действий по установке на &lt;a href="http://aws.amazon.com/"&gt;хостинг Amazon&lt;/a&gt;. &lt;br&gt;&lt;br&gt;

Приложение - сайт на Java, который требует большой вычислительной мощности. Поэтому было принято решение сразу запускаться на Amazon. В работе сайт использует на чтение-запись базу MySQL.
Сайт будет развернут на одном экземпляре (instance) &lt;strong&gt;Elastic Computing Cloud (EC2)&lt;/strong&gt;. База MySQL - на томе (volume) &lt;strong&gt;Elastic Block Storage (EBS)&lt;/strong&gt;. Все пользовательские данные будут храниться в MySQL. На диске экземпляра будут храниться настройки, а также скрипт сборки приложения, который будет собирать приложения из внешних источников (например, из репозитария Subversion). &lt;br&gt;&lt;br&gt;

Далее в тексте, при описании вводимых команд, если приглашение оболочки начинается на &lt;strong&gt;$&lt;/strong&gt; - команду следует выполнять на локальном компьютере, если приглашение начинается на &lt;strong&gt;#&lt;/strong&gt; - на удаленном экземпляре EC2. &lt;br&gt;&lt;br&gt;

&lt;h3&gt;Установка утилит EC2 и настройка окружения&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Заходим на &lt;a href="http://aws-portal.amazon.com"&gt;http://aws-portal.amazon.com&lt;/a&gt;, логинимся, покупаем EC2. На страницах нужно будет найти и запомнить &lt;strong&gt;Access Key ID&lt;/strong&gt;, &lt;strong&gt;Secret Access Key&lt;/strong&gt; и &lt;strong&gt;Account ID&lt;/strong&gt;.
Также нужно сгенерировать и сохранить файл с сертификатом X.509 (&lt;i&gt;cert-11111111111111.pem&lt;/i&gt;) и файл с приватным ключем (&lt;i&gt;pk-11111111111111.pem&lt;/i&gt;).
&lt;li&gt; Устанавливаем &lt;strong&gt;Amazon EC2 Command-Line Tools&lt;/strong&gt;.
&lt;ol type=a&gt;
&lt;li&gt;Скачиваем с &lt;a href="http://developer.amazonwebservices.com/connect/entry.jspa?externalID=351&amp;categoryID=88"&gt;Amazon&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Распаковываем в нужное место (например, &lt;i&gt;/usr/ec2&lt;/i&gt;).&lt;/li&gt;
&lt;li&gt;Прописываем окружение (вариант для Linux):
&lt;code&gt;pupkin@local$ export EC2_HOME=/usr/ec2/ec2-api-tools-1.3-19403
pupkin@local$ export PATH=$PATH:$EC2_HOME/bin
pupkin@local$ export EC2_PRIVATE_KEY=/home/pupkin/mega-project/ec2/pk-11111111111111.pem
pupkin@local$ export EC2_CERT=/home/pupkin/mega-project/ec2/cert-11111111111111.pem   
&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Проверить, правильно ли установлены утилиты можно, выполнив команду &lt;i&gt;ec2-describe-images&lt;/i&gt;. Результатом команды будет список доступных для запуска образов виртуальных машин (AMI):
&lt;code&gt;pupkin@local$ ec2-describe-images -a
IMAGE ami-5586623c 1fm2knh6gyecefa34102-phe-bucket/image.manifest.xml 437711880492 available public  i386 machine  
IMAGE ami-63ec090a 1VYRBPTAGB3GRJD3N902-AMI-082407/image.manifest.xml 681122512140 available public  i386 machine  
IMAGE ami-18cf2a71 1VYRBPTAGB3GRJD3N902-AMI-110407-dev/image.manifest.xml 681122512140 available public  i386 machine  
...
&lt;/code&gt;
 &lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Настройка экземпляра&lt;/h3&gt;
В качестве ОС выбираем Ubuntu Linux. За основу берем образ Ubuntu 8.04 LTS Hardy от &lt;a href="http://www.alestic.com"&gt;alestic.com&lt;/a&gt;.
Дальше доставим туда необходимые Java, MySQL и всё остальное.
&lt;ol&gt;
&lt;li&gt;Запускаем экземпляр с нужным образом.
&lt;ol type=a&gt;
&lt;li&gt;Ищем последний по дате нужный образ. Выбираем base (лишнего нам не надо) и 64-битную платформу (нашему сайту будет нужно много памяти).
&lt;code&gt;pupkin@local$ ec2-describe-images -a |grep ubuntu |grep alestic |grep 64
IMAGE   ami-17d7337e alestic-64/ubuntu-8.04-hardy-base-64-20080924.manifest.xml
&lt;/code&gt;
&lt;li&gt;Генерируем ключик для доступа к экземпляру по SSH
&lt;code&gt;pupkin@local$ ec2-add-keypair pstam-keypair
&lt;/code&gt;
и сохраняем его в файле, например, &lt;i&gt;/home/pupkin/mega-project/ec2/id_rsa-pstam-keypair&lt;/i&gt;.&lt;br&gt;

Если используется OpenSSH, для этого файлы нужно выставить правильные права доступа:
&lt;code&gt;pupkin@local$ chmod 600 /home/pupkin/mega-project/ec2/id_rsa-pstam-keypair
&lt;/code&gt;

&lt;li&gt;Запускаем выбранный экземпляр

&lt;code&gt;pupkin@local$ ec2-run-instances ami-17d7337e -k pstam-keypair -t m1.large
RESERVATION r-4073a129 701161471898 default
INSTANCE i-1b903272 ami-17d7337e   pending pstam-keypair 0  m1.large 2008-10-02T12:54:37+0000 us-east-1b aki-b51cf9dc ari-b31cf9da
&lt;/code&gt;

&lt;i&gt;i-1b903272&lt;/i&gt; - это идентификатор экземпляра. Он будет нужен позднее. &lt;br&gt;
&lt;i&gt;pending&lt;/i&gt; - означает, что экземпляр в процессе запуска. &lt;br&gt;&lt;br&gt;

Ждем 15 секунд, и выполняем команду

&lt;code&gt;pupkin@local$ ec2-describe-instances
RESERVATION r-4073a129 701161471898 default
INSTANCE i-1b903272 ami-17d7337e ec2-75-101-241-247.compute-1.amazonaws.com domU-12-31-39-01-59-41.compute-1.internal running pstam-keypair
&lt;/code&gt;

Статус должен поменяться на &lt;i&gt;running&lt;/i&gt;. Если не поменялся - нужно подождать еще. &lt;br&gt;

Когда статус поменяется на &lt;i&gt;running&lt;/i&gt;, в таблице будет видно внешний (&lt;i&gt;ec2-75-101-241-247.compute-1.amazonaws.com&lt;/i&gt;) и внутренний (&lt;i&gt;domU-12-31-39-01-59-41.compute-1.internal&lt;/i&gt;) адреса экземпляра. Внешний адрес используется для доступа к экземляру из интернета, внутренний - с других инстансов (если такие будут).

&lt;/ol&gt;

&lt;li&gt;Открываем доступ к экземпляру по нужным портам:
&lt;code&gt;pupkin@local$ ec2-authorize default -p 22
pupkin@local$ ec2-authorize default -p 80
&lt;/code&gt;

проверяем
&lt;code&gt;pupkin@local$ telnet ec2-75-101-241-247.compute-1.amazonaws.com 22&lt;/code&gt;

&lt;li&gt;Логинимся на экземпляр и устанавливаем нужные пакеты

&lt;code&gt;pupkin@local$ ssh -i /home/pupkin/mega-project/ec2/id_rsa-pstam-keypair root@ec2-75-101-241-247.compute-1.amazonaws.com

root@domU-12-31-39-01-59-41# apt-get update
root@domU-12-31-39-01-59-41# apt-get install mysql-server
root@domU-12-31-39-01-59-41# apt-get install apache2
root@domU-12-31-39-01-59-41# apt-get install sun-java6-jdk
root@domU-12-31-39-01-59-41# apt-get install zabbix-agent
root@domU-12-31-39-01-59-41# apt-get install subversion
root@domU-12-31-39-01-59-41# apt-get install postfix
root@domU-12-31-39-01-59-41# apt-get install mailx
&lt;/code&gt;

Дополнительные пакеты можно будет поставить и позднее, при необходимости.

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Настройка Elastic IP&lt;/h3&gt;

При каждом старте экземпляре ему выдается новый IP-адрес. Чтобы при этом избежать проблем с DNS-ом, закажем также Elastic IP.

&lt;code&gt;pupkin@local$ ec2-allocate-address
ADDRESS 75.101.137.69

pupkin@local$ ec2-associate-address -i i-1b903272 75.101.137.69
ADDRESS 75.101.137.69
&lt;/code&gt;

&lt;i&gt;i-1b903272&lt;/i&gt; - это идентификатор экземляра. Если вы его забыли, можно посмотреть командой &lt;i&gt;ec2-describe-instances&lt;/i&gt;).

Теперь этот адрес можно (и нужно) прописать в DNS, например, связав с именем &lt;i&gt;http://mega-project.pupkin.com&lt;/i&gt;.&lt;br&gt;

&lt;h3&gt;Настройка EBS&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Создаем том.
&lt;code&gt;pupkin@local$ ec2-create-volume -s 200 -z us-east-1b&lt;/code&gt;

&lt;i&gt;us-east-1b&lt;/i&gt; - зона, или датацентр Amazon. Её нужно выбрать такой же, в какой запущен экземпляр, чтобы не гонять лишний трафик. Посмотреть зону экземпляра можно командой &lt;i&gt;ec2-describe-instances&lt;/i&gt;.

Ждем пока поднимется, смотрим информацию о томах:

&lt;code&gt;pupkin@local$ ec2-describe-volumes
VOLUME vol-2a08ed43 200  us-east-1b available 2008-10-02T15:50:14+0000
&lt;/code&gt;

&lt;li&gt;Подключаем том к инстансу
&lt;code&gt;pupkin@local$ ec2-attach-volume -i i-1b903272 vol-2a08ed43 -d /dev/sdd1&lt;/code&gt;

&lt;li&gt;Для новосозданного тома создаём и монтируем файловую систему на экземпляре
&lt;code&gt;pupkin@local$ ssh -i /home/pupkin/mega-project/ec2/id_rsa-pstam-keypair root@ec2-75-101-241-247.compute-1.amazonaws.com
root@domU-12-31-39-01-59-41# mkfs -t ext3 /dev/sdd1

root@domU-12-31-39-01-59-41# mkdir /mnt/db
root@domU-12-31-39-01-59-41# mount /dev/sdd1 /mnt/db
&lt;/code&gt;

Монтирование /dev/sdd1 в /mnt/db нужно прописать в /etc/fstab.
Тогда при перезапуске экземпляра том примонтируется автоматически.
&lt;/ol&gt;

&lt;h3&gt;Настройка ПО&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;MySQL&lt;/strong&gt;

MySQL нужно перенести из папки по умолчание (&lt;i&gt;/var&lt;/i&gt;) на EBS в раздел с данными (мы его смонтировали в &lt;i&gt;/mnt/db&lt;/i&gt;).

&lt;ol&gt;
&lt;li&gt;Останавливаем MySQL.
&lt;code&gt;root@domU-12-31-39-01-59-41# /etc/init.d/mysql stop
* Stopping MySQL database server mysqld                      
&lt;/code&gt;

&lt;li&gt;Копируем уже созданную БД.
&lt;code&gt;root@domU-12-31-39-01-59-41# mkdir /mnt/db/lib /mnt/db/log
root@domU-12-31-39-01-59-41# mv /var/lib/mysql /mnt/db/lib/
root@domU-12-31-39-01-59-41# mv /var/log/mysql /mnt/db/log/
root@domU-12-31-39-01-59-41# test -f /vol/log/mysql/mysql-bin.index &amp;amp;&amp;amp;
     perl -pi -e 's%/var/log/%/vol/log/%' /vol/log/mysql/mysql-bin.index
&lt;/code&gt;

&lt;li&gt;Правим конфиг.
&lt;code&gt;root@domU-12-31-39-01-59-41# vim /etc/mysql/my.cnf&lt;/code&gt;

Раздел mysqld должен быть таким

&lt;code&gt;[mysqld]
innodb_file_per_table
datadir          = /mnt/db/lib/mysql
log_bin          = /mnt/db/log/mysql/mysql-bin.log
max_binlog_size  = 1000M
log_slow_queries = /mnt/db/log/mysql/mysql-slow.log
long_query_time  = 10
&lt;/code&gt;

&lt;li&gt;Запускаем.
&lt;code&gt;root@domU-12-31-39-01-59-41# /etc/init.d/mysql start&lt;/code&gt;

&lt;/ol&gt;

&lt;li&gt;Собственно сайт
&lt;ol&gt;

&lt;li&gt;Создаём пользователя, под которым будет работать сайт (если сайт сделан в виде отдельного процесса).
&lt;code&gt;root@domU-12-31-39-01-59-41# /usr/sbin/adduser mega-project&lt;/code&gt;

&lt;li&gt; Пишем скрипт сборки, который
&lt;ul&gt;
&lt;li&gt;чекаутит последнюю версию сайта из репозитария Subversion;
&lt;li&gt;делает сборку;
&lt;li&gt;перезапускает сайт из новособранной версии.
&lt;/ul&gt;

&lt;li&gt;Запускаем скрипт, настраиваем конфиги приложения, запускаем приложение.
 Теперь можно зайти на &lt;i&gt;http://mega-project.pupkin.com/&lt;/i&gt; и посмотреть на работающий сайт :)

&lt;/ol&gt;
&lt;/ol&gt;

&lt;h3&gt;Сохраняем образ тома&lt;/h3&gt;

Чтобы не потерялась проделанная работа, нужно сохранить образ настроеного экземпляра. Сохраненный образ также пригодится, если экземпляр нужно будет перезапустить, для поднятия кластера и др.

&lt;ol&gt;

&lt;li&gt;Копируем ключи и сертификат - они будут нужны на экземпляре.

&lt;code&gt;pupkin@local$ cd /home/pupkin/mega-project/ec2/id_rsa-pstam-keypair
pupkin@local$ scp -i id_rsa-pstam-keypair id_rsa-pstam-keypair root@ec2-75-101-241-247.compute-1.amazonaws.com:
pupkin@local$ scp -i id_rsa-pstam-keypair pk-11111111111111.pem root@ec2-75-101-241-247.compute-1.amazonaws.com:
pupkin@local$ scp -i id_rsa-pstam-keypair cert-11111111111111.pem root@ec2-75-101-241-247.compute-1.amazonaws.com:
&lt;/code&gt;

&lt;li&gt;Собираем пакет с файлами

&lt;code&gt;root@domU-12-31-39-01-59-41# ec2-bundle-vol -e /tmp -d /mnt -k pk-11111111111111.pem -c cert-11111111111111.pem -u &amp;lt;Account ID без символов -&amp;gt -p mega-project-image -s 1500&lt;/code&gt;

&lt;i&gt;1500&lt;/i&gt; - размер образа. На стоимость хранения не оказывает влияния, но при небольших размерах быстрее архивируется (перед хранением) и быстрее стартует экземпляр.&lt;br&gt;
Размер образа должен быть не меньше, чем размер примонтированной на / файловой системы. &lt;br&gt;

Если значение размера будет слишком маленьким, команда &lt;i&gt;ec2-bundle-vol&lt;/i&gt; может выдать сообщение об ошибке &lt;i&gt;execution failed: "rsync ... "&lt;/i&gt; &lt;/o&gt;

&lt;li&gt;Заливаем собранный пакет в Amazon Structured Storage Service (S3).

&lt;code&gt;root@domU-12-31-39-01-59-41# ec2-upload-bundle -b pupkin-images -m /mnt/mega-project-image.manifest.xml -a &amp;lt;Access Key Id&amp;gt; -s &amp;lt;Secret Access Key&amp;gt;&lt;/code&gt;


&lt;li&gt;С локальной машины регистрируем пакет как образ.&lt;/li&gt;

&lt;code&gt;pupkin@local$ ec2-register pupkin-images/mega-project-images.manifest.xml&lt;/code&gt;

Всё, дело сделано :).

&lt;/ol&gt;

&lt;h3&gt;Возникшие проблемы и вопросы&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Почему-то MySQL сразу при старте начинает сильно загружать процессор. Полечилось перезапуском MySQL.&lt;/li&gt;
&lt;/ol&gt;

&lt;strong&gt;UPD.&lt;/strong&gt; При переносе данных MySQL в другую папку нужно также поправить настройки apparmor (в /etc/apparmor.d/usr.sbin.mysqld) и logrotate (в /etc/logrotate.d/mysql-server)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-4204557818071516159?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/4204557818071516159/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=4204557818071516159' title='10 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4204557818071516159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4204557818071516159'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/10/amazon-ec2-amazon-ebs-java-mysql.html' title='Устанавливаем на Amazon EC2 и Amazon EBS Java-приложение с MySQL'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-4941768104313997396</id><published>2008-07-20T21:48:00.001+03:00</published><updated>2008-10-09T19:56:05.778+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='подорожі'/><category scheme='http://www.blogger.com/atom/ns#' term='вело'/><title type='text'>Веломандрівка 12-13 липня</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ouZoKE5zsAs/SIOJ6CD7cbI/AAAAAAAAAHo/kZZ_1l__bV0/s1600-h/velo_photo2.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_ouZoKE5zsAs/SIOJ6CD7cbI/AAAAAAAAAHo/kZZ_1l__bV0/s320/velo_photo2.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5225171622758674866" /&gt;&lt;/a&gt;
&lt;span style="font-weight:bold;"&gt;Веломандрівка 12-13 липня 2008.&lt;/span&gt;&lt;br&gt;

В яку міні-відпустки вирішив проїхатися велосипедом по дорогам Центральної України. Маршрут планувався на два дні такий. 12 липня - Київ-Васильків-Фастів-Сквира. 13 липня - Сквира-Погребище-Турбів-Вінниця-Гнівань. За перший день вийшло записати звіт, за другий уже бажання сидіти за комп'ютером пропало, видно, відстань далася взнаки :).&lt;br&gt;&lt;br&gt;

Отже, почалося все звечора 11 липня.&lt;br&gt;&lt;br&gt;

Звечора 11-го боролися дві ідеї. Одна - тепер середина літа, їхати буде жарко, треба пораніше (о 6-ій, наприклад), встати, аби відповідно рано виїхати, і по спеці не їхати. Інша - останні дні я не висипався, тож треба подовше поспати аби бути в формі. За підтримки ліні друга ідея перемогла :) &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;0 км.&lt;/span&gt; Отже, виїхав я без десяти дев'ять. Вирішив з Києва виїзжати черед Одеську площу на трасу Київ-Одеса до Василькова. Виявилося, що виїхати з Києва в суботу зранку - напряжна штука. Машин - тьма, на Московській площі вічна реконструкція, повітря сизе, всюди пилюка. Побачивши врешті-решт табличку з перекресленим написом "Київ", я вже геть вхеканий. Але, правда, далі було краще. &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;Приблизно 20 км.&lt;/span&gt; Доїхав без особих пригод до Великої Окружної за Глевахої. То була перша помилка - те, що прийняв за окружну, виявилось поворотом Одеської траси ). Я ж повівся на вказівник "Васильків", і поїхав прямо на міст (там під міст - Одеська траса, а на міст - дорога на Васильків. З одного боку у Василькові цікаво - бачив базу тактичної авіації, ліцей екології НАУ (рідна альма-матір), саме місто таке нерівне, вверх і вниз. З іншого боку, то був вийшов гак кілометрів з 10, ще й по нерівному. В центрі Василькова дядько показав, як доїхати до Фастова - для того треба було вернутися на знову на Одеську. Добре хоч не в те місце, з якого з'їхав ). На виїзді на окружну стояли дайці. В одного з них я попитав, як проїхати на Фастів - він впевнено назвав кілометрах в 10 в напрямку Одеси. І я йому повірив, хоча треба було всього лише переїхати Одеську трасу ). Але в результаті воно на краще й вийшло. Даїшник ще довго допитувався - чи я спортсмен, чи нє. Видно, йому за власне пузо було соромно )). &lt;br&gt;&lt;br&gt;

Трохи про карту, по якій їхав. Може то карта для авто і непогана, але на велосипеді по ній їхати неможливо. По ній можно тільки брати орієнтири - наступне село таке-то, а потім - таке-то. А дорогу роспитувати. Занадто вже крупний масштаб - на поворотах зорієнтуватися неможливо. Та що там повороти, там досить великі села попропущені, навіть по кілька зараз. &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;40 км.&lt;/span&gt; Доїхавшли до села, про яке сказав даїшник, і подившись на карту, я зрозумів, що повертати на Фастів пізно - занадто велике коло буде, якщо на Сквиру їхати. Вирішив їхати далі по Одеській, і не доїзжаючи Білої Церкви звернути і виїхати на Сквиру селами. Це було дуже прикольне рішення. Дорога - мрія (краще, ніж Одеська траса), машин - одна на 10 хвилин, справа соняхи, жита-пшениця. В одному місці гречка так пахла, що в пору було падати ). &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;Десь 80 км.&lt;/span&gt; Це було трохи пізніше. А перед цим вирішив пообідати якраз на з'їзді з Одеської траси, у містечку Гребінки (не путати з Гребінкою). Напитав обід аж у третьому кафе - всюди весілля були, видно на Петра-і-Павла одружуватися - хороша прикмета ). Кафе знайшов якраз на повороті на село, через яке мені їхати треба було - Устимівку. Поворот той, до речі, тяжко знайти - треба бути уважним. В кафе ціни виявилися більшими, ніж в Києві, а от якість гірша. Прийшлося брати об'ємом. Почав обідати в 12.40. &lt;br&gt;&lt;br&gt;

Після обіду вирішив повалятися, повідпочивати - якраз година дня була. Знайшов наче гарну місцину, розвалився. Тут напали комарів, за 15 хвилин обкусали здорово, тим самим відразу появилося бажання їхати далі ). Виїхав в 14.05. По дорозі безліч раз доводилося питати дорогу - в тому місці карта зовсім не відповідала дійсності (трохи пізніще згадаю, і опишу села, через які проїзжав). &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;Десь 90 км.&lt;/span&gt; Після обіду виявилось їхати напряжно. Якщо до обіду намагався тримати 30 км за годину, то перші години після обіду ледве тримав 26, а далі і 20 не міг втримати. До Сквири виявилося далі, ніж я очікував. Це такий психологічний момент - ніколи не треба розраховувати, що до цілі залишилося мало. Краще сказати більше, але не буде неприємного розчарування і упадку сил, як наслідок, коли тієї цілі все не буде і не буде. &lt;br&gt;&lt;br&gt;

По дорозі проїзжав багато сіл із дуже гарними ставками. Підходив до води, умивався, але купатися не ризикнув, хоча багато людей сиділо у воді. &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;130 км.&lt;/span&gt; Нарешті (була 18.00) доїхав до Сквири, чому порадувався дуже ). Останніх 10 км їхалося на нервах ). Напитав дорогу до хлібзаводу, де був готель, поселився (18.15) - і чудо, у них була гаряча вода. Покупавшись, вирішив прогулятися, і натрапив у центрі міста інет-кафе, з якого і пишу. По дорозі в інет-кафе випив півлітри кваси, і півлітри коли - дуже вже присушило. Не забути зайти в магазин, купити на завтрашню дорогу водички (тра попробувати на зміну мінералці солодкої), і цукерок. &lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;Умови їзди.&lt;/span&gt;
Після обіду трохи стих вітер (а зранку добре південно-західний, від чого було прохолодно, але тяжкувати їхати). Після Василькова переважно дорога йшла вниз, і було менше перепадів, ніж до нього. &lt;br&gt;
Асфальт був переважно хорошої якості по всій дорозі. &lt;br&gt;
Дуже допомагали їхати гарні поля навколо доріг, особливих захват викликали соняхи. &lt;br&gt;&lt;br&gt;

Із проблем - попік руки коло ліктів і ще трішки ноги над колінами (де закінчилися шорти). І німіли постійни долоні - мізинці не розніміли до сих пір. &lt;br&gt;&lt;br&gt;

Середня швидкість до обіду трималася 24 км, після обіду впала до 21,5. Трохи перетружені стегна, і досить сильна крепатура на плечах і особливо шиї. Ще хочу відмітити якість тупість по дорозі - тяжко було запамёятати по дві назви сіл підряд, тільки на одне вистачало, далі приходилося знову карту дивитися )).&lt;br&gt;&lt;br&gt;

Ще відпочивав трохи частіше, ніж очікував, але менше. Думаю, це через те, що убився трохи при виїзді з Києва (і при подоланні Василькова).&lt;br&gt;&lt;br&gt;

В результаті, за перший день було проїхано 130 км, за другий - 160 км. Отримав масу цікавих та нових вражень.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-4941768104313997396?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/4941768104313997396/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=4941768104313997396' title='1 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4941768104313997396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/4941768104313997396'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/07/12-13.html' title='Веломандрівка 12-13 липня'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ouZoKE5zsAs/SIOJ6CD7cbI/AAAAAAAAAHo/kZZ_1l__bV0/s72-c/velo_photo2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-5534165501636992280</id><published>2008-05-21T22:37:00.001+03:00</published><updated>2008-10-09T19:54:26.622+03:00</updated><title type='text'>Докатились... 4,55 грн за доллар</title><content type='html'>Сегодня НБУ официально &lt;a href="http://www.bank.gov.ua/kurs/last_kurs1.htm"&gt;объявил&lt;/a&gt; о снижение официального курса доллара США к гривне до 4,85 грн за доллар. На протяжение последних несколько недель коммерческий курс доллар постоянно падал, на сегодня на межбанке доллар покупали на 4,55. Наличный курс также опустился до 4,55. &lt;br&gt;&lt;br&gt;

С &lt;a href="http://news.liga.net/news/N0826219.html"&gt;инфляцией бороться&lt;/a&gt; нужно конечно, но это как то уж слишком. Хроники кризиса ликдвидности: &lt;br&gt;&lt;br&gt;

&lt;i&gt;Январь-апрель 2008&lt;/i&gt;. НБУ и Кабмин проводят активную стерилизацию средств (накапливают деньги на счетах Казначейства). &lt;a href="http://www.bank.gov.ua/Statist/DAILY/2008/SALDO_2008.htm"&gt;Остатки банков&lt;/a&gt; на корсчетах в НБУ понижаются с 20 млрд в январе до 13 млрд на 18 апреля.&lt;br&gt;
&lt;i&gt;21-13 апреля 2008&lt;/i&gt;. Недостаток денежных средств давит на позиции банков в ценных бумагах. Ставки overnight поднялись до 30%, при среднем значение 11%. Проблемы с ликвидностью ведут к обвалу фондового рынка. Индекс ПФТС падает за два дня 21-13 апреля на 10%.&lt;br&gt;
&lt;i&gt;19-21 мая&lt;/i&gt;. Скоро опять 20-е число, банкам и предприятиям пора платить в бюджет, но у них нет гривны, поэтому они продают валюту себе в убыток. &lt;a href="http://charts.finance.ua/ru/currency/cash"&gt;Курс USD&lt;/a&gt; начинает снижаться, и достигает в среду значения 4,55 (и даже 4,5). Ситуация разогревает заявление чиновников НБУ о возможности ревальвация гривни. Большое количество людей, получающих зарплату в долларах, начинает нервно подсчитывать падение своих доходов. &lt;br&gt;
&lt;i&gt;20-21 мая&lt;/i&gt;. По слухам, с ПФТС выходят нерезиденты, ловя курсовую разницу. На ПФТС начинается падение, 5% за два дня.&lt;br&gt;
&lt;i&gt;21 мая&lt;/i&gt;. НБУ объявляет о снижении курса доллара.&lt;br&gt;&lt;br&gt;

Ситуация для меня непонятная. Почему в стране с ухудшающейся экономической обстановкой, с отрицательным сальдо внешнеторгового баланса, растет нац.валюта ? Чем этот рост будет поддерживаться ? &lt;br&gt;&lt;br&gt;

Возможно, в скором времени мы увидим обратную тенденцию, и сегодняшний рост смениться крутым пике. А потеряют, как обычно, физические лица, прыгающие в последний вагон в надежде сберечь заработанную копейку.&lt;br&gt;&lt;br&gt;

&lt;span style="font-weight:bold;"&gt;UPD. Похоже, намечается тенденция &lt;/span&gt; - 20 числа ужесточаются проблемы с ликвидностью, и доллар падает. После 20 (21, 22) доллар начинает расти. Два месяца уже так. Нужно посмотреть, можно ли этим воспользоваться.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-5534165501636992280?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/5534165501636992280/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=5534165501636992280' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/5534165501636992280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/5534165501636992280'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/05/455.html' title='Докатились... 4,55 грн за доллар'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-852208057264515349</id><published>2008-05-16T23:24:00.003+03:00</published><updated>2008-10-09T19:53:23.710+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='веб'/><category scheme='http://www.blogger.com/atom/ns#' term='разработка'/><title type='text'>OpenAds и русские буквы</title><content type='html'>Уже достаточно долго для показа баннеров я использую баннеровертелку OpenX (раньше называлась OpenAds, &lt;a href="http://www.openx.org/"&gt;http://www.openx.org/&lt;/a&gt;). Для интеграции с сайтами, которые не используют PHP (а большинство у меня на Java), в OpenX используется XML-RPC.&lt;br&gt;&lt;br&gt;

Ну почему софт на PHP всегда такой глючный!&lt;br&gt;&lt;br&gt;

XML-RPC сервер в OpenX всегда возвращает ответ в кодировке UTF-8. Однако среди поддерживаемых OpenX кодировок нет UTF-8. Для русских символом есть koi8r и windows-1251. И когда в описании баннера присутствуют русские символы (в моем случае - в windows-1251), они не преобразовываются в UTF-8. В результате мой &lt;a href="http://ws.apache.org/xmlrpc/client.html"&gt;XML-RPC клиент от Apache&lt;/a&gt; выдает сообщение:
&lt;pre&gt;
org.apache.xmlrpc.client.XmlRpcClientException: Failed to read servers response: Invalid byte 2 of 2-byte UTF-8 sequence.
at org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:179)
at org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:145)
at org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
      ...
&lt;/pre&gt;
В списке рассылки Apache XML-RPC пользователи жалуются на похожую проблему, на что разработчики XML-RPC резонно отвечают, что это проблема сервера, и решать ее они в принципе не будут. Но баннеры нужно показать. Поэтому правим немного XML-RPC клиент. В метод
&lt;pre&gt;
org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse
&lt;/pre&gt;
ставим первую строку
&lt;pre&gt;
InputSource isource = new InputSource(ResponseFilter.filter(pStream));
&lt;/pre&gt;
и сам клас ResponseFilter
&lt;pre&gt;
public class ResponseFilter {
  public static InputStream filter(InputStream input) {
      StringWriter s = new StringWriter();
    
      try {
          InputStreamReader r = new InputStreamReader(input, "windows-1251");
        
          int ch;
          while ((ch = r.read()) != -1) {
              s.write(ch);
          }
        
          input.close();
      } catch (IOException e) {
          throw new RuntimeException(e);
      }
    
      return new ByteArrayInputStream(s.toString().getBytes());
  }
}
&lt;/pre&gt;
Теперь работает.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-852208057264515349?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/852208057264515349/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=852208057264515349' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/852208057264515349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/852208057264515349'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/05/openads.html' title='OpenAds и русские буквы'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-5076912848112026431</id><published>2008-02-13T18:16:00.001+02:00</published><updated>2008-10-09T19:51:36.183+03:00</updated><title type='text'>Литература всякая нужна ...</title><content type='html'>Когда появилось много работы, я стал меньше читать художественной литературы. Когда выпадало свободное время, и желания что-нибудь почитать, останавливался на чем-либо специальном, например "Инвестиции" Шарпа, или прикладно-развивающем, типа "Семь навыков ..." Кови.&lt;br&gt;&lt;br&gt;

Если пользу от таких книг можно назвать тактической, то чтение хорошей художественной литературы приносит пользу в большем масштабе.&lt;br&gt;&lt;br&gt;

Художественная литература позволяет лучше понять самого себя, тем самым способствует постановке действительно ценных и важных целей. А ничто так не повышает личную эффективность, как осознанная и важная для себя цель.&lt;br&gt;&lt;br&gt;

Пример из личного. Только прочитав недавно "Вино из одуванчиков", я окончательно определился, что для меня будет более подходить дом в пригороде, нежели квартира в центре города. &lt;br&gt;&lt;br&gt;

Желаю и Вам, и себе правильного баланса времени между срочными и важными и задачами :).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-5076912848112026431?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/5076912848112026431/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=5076912848112026431' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/5076912848112026431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/5076912848112026431'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/02/blog-post_13.html' title='Литература всякая нужна ...'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2608978537755325728.post-1269906141142459334</id><published>2008-02-12T21:01:00.001+02:00</published><updated>2008-10-09T19:50:55.661+03:00</updated><title type='text'>Поехали</title><content type='html'>Буду писать в этом блоге о деньгах и проектах, о профессиональном и личном росте, о сайте &lt;a href="http://www.investportfel.com"&gt;Мой инвестиционный портфель&lt;/a&gt;, о разработке софта и просто свои мысли.&lt;br&gt;&lt;br&gt;

Пописав личный дневник в ЖЖ, хочется теперь уделить внимание темам, которые, как я надеюсь, будут интересны &lt;strike&gt;большему&lt;/strike&gt; большому количеству читателей.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2608978537755325728-1269906141142459334?l=vasyas.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://vasyas.blogspot.com/feeds/1269906141142459334/comments/default' title='Дописати коментарі'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2608978537755325728&amp;postID=1269906141142459334' title='0 коментарі(в)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/1269906141142459334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2608978537755325728/posts/default/1269906141142459334'/><link rel='alternate' type='text/html' href='http://vasyas.blogspot.com/2008/02/blog-post.html' title='Поехали'/><author><name>Vasyl Stashuk</name><uri>http://www.blogger.com/profile/17360383633436625686</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
