<?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-1299980182778467930</id><updated>2011-11-27T16:52:03.612-08:00</updated><category term='обработка на лету'/><category term='потоки'/><category term='stream'/><title type='text'>Platon's Java life</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1299980182778467930.post-524848551087413421</id><published>2009-01-10T00:40:00.000-08:00</published><updated>2009-01-10T00:59:18.664-08:00</updated><title type='text'>Читаем Flash Shared Object средствами Java</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Возникла потребность в считывании файлов, которые хранят данные при работе с Flash приложениями. В сети нашел лишь редактор этих файлов &lt;a href="http://solve.sourceforge.net/"&gt;SolVE - Flash Shared Object editor&lt;/a&gt;, даже написал создателю письмо с просьбой поделиться исходниками. &lt;br /&gt;Но не дождавшись ответа решил самолично засесть и написать, в конце концов, эту &lt;strong&gt;Java библиотеку - парсер Flash файлов&lt;/strong&gt;.&lt;br /&gt;Итак, вашему вниманию библиотека SolReader. Единственное ее предназначение читать файл Flash формата и строить дерево объектов.&lt;br /&gt;Для некоммерческого использования лицензия GPL&lt;br /&gt;Для коммерческого - придется скинуть 5-10 евро на электронный кошелек с упоминанием проекта, в котором планируется использовать библиотеку.&lt;br /&gt;&lt;script type="text/javascript"&gt;google_ad_client = "pub-5536312060227043";/* 234x60, создано 26.09.08 */google_ad_slot = "5849248976";google_ad_width = 234;google_ad_height = 60;&lt;/script&gt;&lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;a href="http://slil.ru/26523205"&gt;SolReader-v0.0.1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-524848551087413421?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/524848551087413421/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=524848551087413421' title='Комментарии: 7'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/524848551087413421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/524848551087413421'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2009/01/flash-shared-object-java.html' title='Читаем Flash Shared Object средствами Java'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-9025530884665117918</id><published>2008-10-11T01:05:00.000-07:00</published><updated>2008-10-11T01:59:06.641-07:00</updated><title type='text'>Google Code Jam 2008 EMEA: Разбор задачи Painting a Fence</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Зашел сегодня посмотреть, как там &lt;a href="http://code.google.com/codejam/"&gt;соревнования Гугла проходят&lt;/a&gt;, заодно попрактиковаться на прошедших соревнованиях. Условия задачи Scaled Triangle я так и не понял, поэтому взялся за вторую задачу Painting a Fence. Порадовало то, что мозг шевелится, есть идеи. Решение сразу встало перед глазами - &lt;br /&gt;первое) надо построить ориентированный нецикличный граф ^_^ + зачем-то мне взбрело в голову, добавить в граф вершину начала и вершину конца (это поможет мне совсем забыть о диапазонах, буду работать только с графом), переформулировав задачу, &lt;strong&gt;найти минимальное число вершин чтобы дойти от вершины начала до вершины конца.&lt;/strong&gt;&lt;br /&gt;второе) поиск в глубину должен учитывать количество цветов на каждой ветке: при переходе на следующий уровень - добавлять цвет, при возврате - убавлять.&lt;br /&gt;&lt;br /&gt;2 несложных пункта средствами Java реализовать крайне легко:&lt;br /&gt;&lt;br /&gt;&lt;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.io.FileNotFoundException;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.HashMap;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.Map;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.Scanner;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; PaintingFence {&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String[] &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colors;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;boolean&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[][] &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// Удобная штука Map в ней ключ - имя цвета, значение - количество художников, использующих этот цвет&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Map&amp;lt;String, Integer&amp;gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; HashMap&amp;lt;String, Integer&amp;gt;();&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getMinimumPainters(String[] colors, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] start, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] finish) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colors &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= colors;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= colors.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// мы создаем матрицу достижимости (ориентированный граф) и добавляем в нее 2 узла - начало и конец&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;boolean&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;+ &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;2&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;][&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;+ &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;2&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;];&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;/*&lt;br /&gt;   * попарно проверяем возможность перехода&lt;br /&gt;   * критерий один - если из отрезка i можно увеличить сплошной отрезок с помощью отрезка j,&lt;br /&gt;   * то считаем, что из узла i можно перейти в узел j&lt;br /&gt;   */&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i++) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; j = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; j &amp;lt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; j++)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;i][j] = finish[j] &amp;gt; finish[i] &amp;&amp; start[j] &amp;lt;= finish[i] + &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// проверяем, можно ли войти в этот узел, другими словами, предлагает ли художник рисовать с начала полотна&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;   &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[N]&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[i] = start[i] == &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// проверяем, может ли художник закончить полотно&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;   &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// далее точка N + 1 будет означать, что мы смогли полностью закрасить полотно&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;   &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;i][&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;+ &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;] = finish[i] == &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;10000&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;  }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; res = Integer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_VALUE;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i++)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// начинаем с точек входа, которые мы определили на прошлом шаге&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[N]&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[i]) {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// резервируем цвет&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;    &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;put(colors[i], &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;    res = Math.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;min(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;doIt(i), res);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;clear();&lt;br /&gt;   }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; res == Integer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_VALUE &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;? -&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; : res;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; doIt(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; c) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// если художник может завершить полотно, то нам достаточно его одного&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;c][&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;+ &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;]) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; res = Integer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_VALUE;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; i &amp;lt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;N;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i++) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;g[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;c][i]) {&lt;br /&gt;    String currentColor = &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colors[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;i];&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// если количество цветов, задействованных не превышает 3, или цвет рассматриваемого художника уже используется&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;    &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;size() &amp;lt; &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;3&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; || &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;containsKey(currentColor)) {&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// учитываем цвет, которым рисует художник&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;containsKey(currentColor))&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;put(currentColor, &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;get(currentColor) + &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;else&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;      &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;put(currentColor, &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// продвигаемся вглубь&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; cur = doIt(i);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// если решение найдено&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (cur != Integer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_VALUE)&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;      res = Math.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;min(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;res, cur + &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// цвет, которым рисует художник учесть учли, теперь еще раз учитываем, только в обратную сторону&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;put(&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colors[&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;i], &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;get(currentColor) - &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// если цвет больше никем не используется, то удаляем его из списка&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;get(currentColor) == &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;)&lt;br /&gt;      &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;colorMap.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;remove(currentColor);&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// возвращаем минимальное число художников, которые могут нарисовать полотно&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; res;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; main(String[] args) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; FileNotFoundException {&lt;br /&gt;  Scanner sc = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Scanner(System.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;in)&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; N = sc.nextInt();&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; i &amp;lt;= N; i++) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; n = sc.nextInt();&lt;br /&gt;   String[] colors = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String[n];&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] start = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[n];&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] finish = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[n];&lt;br /&gt;   sc.nextLine();&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; j = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; j &amp;lt; n; j++) {&lt;br /&gt;    String[]t = sc.nextLine().split(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;" "&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;    colors[j] = t[&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;];&lt;br /&gt;    start[j] = Integer.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;valueOf(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;t[&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;]);&lt;br /&gt;    finish[j] = Integer.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;valueOf(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;t[&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;2&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;]);&lt;br /&gt;   }&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; res = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; PaintingFence().getMinimumPainters(colors, start, finish);&lt;br /&gt;   System.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;out.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;println(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"Case #"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; + i + &lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;": "&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; + (res == -&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;? &lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"IMPOSSIBLE"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; : String.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;valueOf(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;res)));&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-9025530884665117918?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/9025530884665117918/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=9025530884665117918' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/9025530884665117918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/9025530884665117918'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/10/google-code-jam-2008-emea-painting.html' title='Google Code Jam 2008 EMEA: Разбор задачи Painting a Fence'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-1004293981216444048</id><published>2008-08-08T10:25:00.000-07:00</published><updated>2009-02-13T12:51:13.285-08:00</updated><title type='text'>Как определить позиции сайта? Вашему вниманию SESpider</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Попробовал повозиться в сфере SEO, покопался, взял себе &lt;strong&gt;программы по определению позиций сайта&lt;/strong&gt; и вперед. Оценочно так посматривал на используемое ПО и пришел к мысли: а дай-ка я своё ПО выпущу. И выпустил:&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;google_ad_client = "pub-5536312060227043";/* 234x60, создано 26.09.08 */google_ad_slot = "5849248976";google_ad_width = 234;google_ad_height = 60;&lt;/script&gt;&lt;script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;a href="http://web-mastery.info/sespider/distr/SESpider-v0.6.12.rar" target="_blank"&gt;SESpider v0.6.12&lt;/a&gt; (3 МБ)&lt;br /&gt; или обновление&lt;br /&gt;&lt;a href="http://web-mastery.info/sespider/distr/SESpider-v0.6.12u.rar" target="_blank"&gt;SESpider v0.6.12u&lt;/a&gt; (300 КБ)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web-mastery.info/sespider/distr/sespider-log.txt" target="_blank"&gt;Лог изменения&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sespider.ru"&gt;Официальный сайт программы для определения позиций сайта http://sespider.ru&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Только представьте себе! Чтобы определить позиции сайта вам необходимо пролистать около дюжины страниц каждой поисковой системы и по уйме ключевых фраз. Фактически, для определения позиций сайта, находящегося в пределах с первой по 10 страницу (100 первых позиций), по десяти ключевым фразам в пяти поисковых системах, вам придется просмотреть около пятисот страниц. Да, не велика ли цена для простой операции определения позиций вашего сайта? Сколько времени и сил уйдет на то, чтобы заняться по-настоящему серьезными делами? И здесь на сцене появился герой, &lt;strong&gt;SESpider - программа для определения позиций сайта&lt;/strong&gt;! Переложите все заботы по проверке позиций на него и ваш сайт будет найден среди сотен других в поисковой выдаче самых известных поисковиков. Теперь определить позиции сайта сможет даже младенец! Чем вы хуже? Дерзайте!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://web-mastery.info/sespider/distr/SESpider-demo.rar"&gt;Восьмиминутный ролик&lt;/a&gt;, охватывающий основные возможности программы.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;Описание:&lt;br /&gt;- 9 российских и зарубежных поисковиков, в их числе отечественные - Google.ru, Yandex.ru, Rambler.ru, Mail.ru; зарубежные - Google.com, Google.com.ua, Google.lv, Yahoo.com, Live.com&lt;br /&gt;- 2 алгоритма поиска позиций&lt;br /&gt;- 4 языка (английский, русский, латышский, украинский)&lt;br /&gt;- выход в интернет через proxy&lt;br /&gt;- защита IP от бана (капча)&lt;br /&gt;- импорт проектов из semonitor и Site-Auditor&lt;br /&gt;- определение самых релевантных и количества страниц на сайте по ключевым словам &lt;br /&gt;- Проверка данных по сайту Google Pr, Yandex тИЦ, Число страниц в индексе Google, Число страниц в индекске Yandex, В каталоге Yandex. &lt;br /&gt;1-е окно:&lt;br /&gt;3 колонки (Ключевые слова, Сайты, Поисковые машины), первые 2 активно редактируются, поисковые машины пока строго 3 (Google.com, Google.ru, Yandex.ru)&lt;br /&gt;Есть параметр глубины поиска, (задается в позициях)&lt;br /&gt;Параметр одновременной работы нескольких загрузок страниц.&lt;br /&gt;&lt;br /&gt;В формировании запроса могут участвовать несколько ключевых слов, сайтов и поисковых машин.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ipicture.ru/Gallery/Viewfull/6938168.html" target="_blank"&gt;&lt;img src="http://pic.ipicture.ru/uploads/080918/14749/thumbs/xu7D2nhVpf.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2-е окно - процесс поиска.&lt;br /&gt;Таблица, колонки  - поисковые машины, ряды - ключевые слова для выбранного сайта из списка сайтов внизу.&lt;br /&gt;Кнопочка остановить.&lt;br /&gt;Включение/выключение отображения предыдущей/лучшей позиции.&lt;br /&gt;Сохранение результатов поиска.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ipicture.ru/Gallery/Viewfull/7364591.html" target="_blank"&gt;&lt;img src="http://pic.ipicture.ru/uploads/080930/14749/thumbs/yrcF2Smu5U.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;При двойном клике на позиции сайта высвечивается информация о найденной странице: содержимое тега заголовка страницы, и описание релевантного куска текста&lt;br /&gt;&lt;a href="http://ipicture.ru/Gallery/Viewfull/7364996.html" target="_blank"&gt;&lt;img src="http://pic.ipicture.ru/uploads/080930/14749/thumbs/RU06haSLZP.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;История сканирования. Выбор даты, появляется список сайтов, при выборе сайта выводятся позиции.&lt;br /&gt;&lt;a href="http://ipicture.ru/Gallery/Viewfull/7364987.html" target="_blank"&gt;&lt;img src="http://pic.ipicture.ru/uploads/080930/14749/thumbs/e71J8UCop6.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Настройки частоты запросов к поисковику&lt;br /&gt;&lt;a href="http://ipicture.ru/Gallery/Viewfull/7364975.html" target="_blank"&gt;&lt;img src="http://pic.ipicture.ru/uploads/080930/14749/thumbs/YNWD1fGtae.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;English presentation:&lt;br /&gt;This is &lt;strong&gt;site rank check tool&lt;/strong&gt; very useful if you want to automatizate site position detection in popular search engines. You just enter keywords set, sites set and select search engines set to determine sites' positions.&lt;br /&gt;&lt;br /&gt;- 9 russian and foreign engines, among them russian - Google.ru, Yandex.ru, Rambler.ru, Mail.ru; foreign - Google.com, Google.com.ua, Google.lv, Yahoo.com, Live.com&lt;br /&gt;- 2 positions search algorithms&lt;br /&gt;- 4 languages (English, Russian, Latvian, Ukranian)&lt;br /&gt;- proxy support&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-1004293981216444048?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/1004293981216444048/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=1004293981216444048' title='Комментарии: 33'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/1004293981216444048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/1004293981216444048'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/08/blog-post.html' title='Как определить позиции сайта? Вашему вниманию SESpider'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1299980182778467930.post-7207574412145388804</id><published>2008-07-08T06:46:00.000-07:00</published><updated>2008-08-09T00:38:23.888-07:00</updated><title type='text'>Минимализм: Толстушки меня не привлекают</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;Будучи известным минималистом, не желая работать ни с RMI, ни с SOAP, ни с Cobra, выбрав голый байтовый протокол, вооружился я средством от Apache, именуемым &lt;a href="http://mina.apache.org/"&gt;MINA&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Будучи известным минималистом, не желая работать ни со Spring, ни со Struts, ни с Tribune, вооружился я средством от Apache, именуемым &lt;a href="http://velocity.apache.org/"&gt;Velocity&lt;/a&gt; и набросал свой мини &lt;a href="http://vingrad.ru/blogs/platon/2008/05/23/java-for-web-how-hard-you-are/"&gt;фреймворк&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Будучи известным минималистом, не желая работать ни с FormLayout, ни с чем-нибудь еще, ни с чем-нибудь еще, вооружился я GridBagLayout и набросал свой &lt;a href="http://vingrad.ru/blogs/platon/2008/07/08/malenkie-klassyi-gbc-pisat-kuda-prosche-chem-gridbagconstraints/"&gt;мини класс&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Будучи известным минималистом, не желая работать ни с Hibernate, ни с TopLink, ни с прочим JPA, вооружился я средством от Apache, именуемым dbcp и набросал свой мини фреймворк.&lt;br /&gt;&lt;br /&gt;Он не настолько крут, как Hibernate, но для работы с перзистивным слоем вполне пригоден ^_^&lt;br /&gt;Итак, в этот раз я хочу представить вашему вниманию свои наброски по работе с данными перзистивного слоя.&lt;br /&gt;&lt;br /&gt;Из-за его простоты и отсутствия работы с рефлексией, необходимо четко представлять структуру таблиц баз данных, а также брать всю работу ORM на себя + отсутствие HQL запросов, который при всей моей нелюбви к &lt;span style="font-weight: bold;"&gt;большим&lt;/span&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;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;package&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.test;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.DAORequestException;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User {&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;login;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;password;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;rating;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;final&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrderManager &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;ORDER_MANAGER &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrderManager();&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; id, String login, String password, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; rating) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= id;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;login &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= login;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;password &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= password;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;rating &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= rating;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getId() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setId(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; id) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String getLogin() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;login;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setLogin(String login) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;login &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= login;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String getPassword() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;password;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setPassword(String password) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;password &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= password;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getRating() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;rating;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setRating(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; rating) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;rating &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= rating;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// Разбираемся с ORM&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;UserOrder&amp;gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;orders;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;UserOrder&amp;gt; getOrders() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;orders &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;== &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;null&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;try&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;orders &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;ORDER_MANAGER.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;getUserOrders(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;   } &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;catch&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (DAORequestException e) {&lt;br /&gt;    e.printStackTrace();&lt;br /&gt;   }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;orders;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setOrders(List&amp;lt;UserOrder&amp;gt; orders) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;orders &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= orders;&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;package&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.test;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.jdbc.DAOManagerJDBC;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.jdbc.SQLFactory;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.jdbc.SqlData;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.jdbc.SqlVariant;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.DAORequestException;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.sql.ResultSet;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.sql.SQLException;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.Arrays;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserItemManager &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;extends&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; DAOManagerJDBC&amp;lt;User&amp;gt; {&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;final&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLFactory&amp;lt;User&amp;gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;factory &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLFactory&amp;lt;User&amp;gt;() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User build(ResultSet rec) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLException {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User(rec.getLong(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"record_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), rec.getString(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"login"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), rec.getString(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"password"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), rec.getInt(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"rating"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; insertPart(User item) {&lt;br /&gt;   List&amp;lt;SqlData&amp;gt; m = updatePart(item);&lt;br /&gt;   m.add(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"login"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getLogin()));&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; m;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; updatePart(User item) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"password"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getPassword()),&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"rating"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getRating())&lt;br /&gt;   );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; primaryPart(User item) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"record_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getId()));&lt;br /&gt;  }&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserItemManager() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;super&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"users"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, &lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"record_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;factory)&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User get(String login) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; DAORequestException {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; get(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"login = ?"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlVariant(login)));&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User get(String login, String password) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; DAORequestException {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; get(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"login = ? AND password = ?"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlVariant[]{&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlVariant(login), &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlVariant(password)});&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;package&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.test;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrder {&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;description;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrder(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; id, String description, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; userId) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= id;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;description &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= description;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= userId;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getId() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setId(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; id) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;id &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= id;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String getDescription() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;description;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setDescription(String description) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;description &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= description;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getUserId() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setUserId(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;long&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; userId) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= userId;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// Разбираемся с ORM&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;user;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; User getUser() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;user &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;== &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;null&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;user &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserItemManager().get(&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId)&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;user;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; setUser(User user) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;this&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;user &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= user;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;userId &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= user.getId();&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;package&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.test;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.jdbc.*;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ru.vingrad.platon.perst.DAORequestException;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.sql.ResultSet;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.sql.SQLException;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.Arrays;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.List;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrderManager &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;extends&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; DAOManagerJDBC&amp;lt;UserOrder&amp;gt; {&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;final&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLFactory&amp;lt;UserOrder&amp;gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;factory &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLFactory&amp;lt;UserOrder&amp;gt;() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrder build(ResultSet rec) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SQLException {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrder(rec.getLong(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"order_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), rec.getString(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"description"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), rec.getLong(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"user_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;));&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; insertPart(UserOrder item) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; updatePart(item);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; updatePart(UserOrder item) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"description"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getDescription()),&lt;br /&gt;     &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"user_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getId())&lt;br /&gt;   );&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;SqlData&amp;gt; primaryPart(UserOrder item) {&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlData(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"order_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, item.getId()));&lt;br /&gt;  }&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; UserOrderManager() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;super&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"user_order"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, &lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"order_id"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;factory)&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; List&amp;lt;UserOrder&amp;gt; getUserOrders(User user) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; DAORequestException {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; getList(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"user_id = ?"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, Arrays.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;asList(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SqlVariant(user.getId())));&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SQLFactory представляет здесь для нас новизну. Состоит из 4-х методов&lt;br /&gt;build(ResultSet) восстанавливает из записи объект Java&lt;br /&gt;insertPart(T item) возвращает список полей таблицы и их значений, которые необходимо вставлять в запрос при добавлении записи в таблицу базы данных&lt;br /&gt;updatePart(T item) возвращает список полей таблицы и их значений, которые необходимо вставлять в запрос при обновлении записи в таблице базы данных&lt;br /&gt;primaryPart(T item) возвращает список полей таблицы и их значений, которые являются первичным ключем&lt;br /&gt;&lt;br /&gt;&lt;a href='http://slil.ru/26045739' title='Perst'&gt;Perst (0.1.1)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS. Не смотря на нелюбовь к большим вещам, чтобы никто не смог обвинить меня в глупости и слепости, должен подчеркнуть: JPA - это мощный инструмент, попавший в руки программиста, я представляю его основные возможности и преимущества и ни в коем случае не хотел в этой статье агитировать читателей не пользоваться этим волшебным инструментом.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-7207574412145388804?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/7207574412145388804/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=7207574412145388804' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/7207574412145388804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/7207574412145388804'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/07/blog-post.html' title='Минимализм: Толстушки меня не привлекают'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-6835393626180698909</id><published>2008-07-08T04:53:00.001-07:00</published><updated>2008-07-08T04:56:26.626-07:00</updated><title type='text'>Маленькие классы: GBC писать куда проще, чем GridBagConstraints</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Решил выложить здесь свои наработки по работе с весьма тяжелым менеджером выравнивания - GridBagLayout. Тяжелым не потому, что он запутанный, а потому что писать надо много а выхлоп маленький. К решению меня подтолкнула тема обсуждения &lt;a href="http://forum.vingrad.ru/forum/topic-194533.html"&gt;лучшего менеджера выравнивания в Java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://vingrad.ru/@w1nd"&gt;w1nd&lt;/a&gt;, конечно же, меня переоценил, предположив, что я решил сделать сплав из FormLayout и GridBagLayout. С другой стороны, FormLayout повлиял на результат модификации GridBagLayout.&lt;br /&gt;&lt;br /&gt;3 цели, которые я преследовал:&lt;br /&gt;1. Писать сокращенную форму GridBagConstraints&lt;br /&gt;2. Т.к. ячейки в столбце, как правило, имеют одни и те же параметры, необходим механизм "Задать параметры 1 раз и распространить на все ячейки столбца"&lt;br /&gt;3. &lt;a href="http://forum.vingrad.ru/forum/topic-43890.html"&gt;Цепочечный стиль&lt;/a&gt;, описанный уважаемым &lt;a href="http://vingrad.ru/@%D0%A1%D0%B5%20%D0%BB%D1%8F%20%D0%B2%D0%B8"&gt;Се ля ви&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;И вот они классы:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="border: 0.01mm solid rgb(0, 0, 0); padding: 4px; line-height: 100%; background-color: rgb(255, 255, 255);font-family:monospace;"&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;package&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ru.vingrad.platon.swing;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; java.awt.*;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;class&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;extends&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GridBagConstraints {&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridwidth, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridheight, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weightx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weighty, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; anchor, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; fill, Insets insets, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipadx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipady) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;super&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridx &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridx;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridy &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridy;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridwidth, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridheight) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridx &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridx;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridy &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridy;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridwidth &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridwidth;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridheight &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridheight;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC gridX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridx &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridx;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC gridY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridy &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridy;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC gridWidth(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridwidth) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridwidth &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridwidth;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC gridHeight(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridheight) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;gridheight &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridheight;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC weightX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weightx) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;weightx &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= weightx;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC weightY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weighty) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;weighty &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= weighty;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC anchor(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; anchor) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;anchor &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= anchor;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC fill(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; fill) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;fill &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= fill;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC ipadX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipadx) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;ipadx &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= ipadx;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC ipadY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipady) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;ipady &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= ipady;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC insets(Insets insets) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;insets &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= insets;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre  style="border: 0.01mm solid rgb(0, 0, 0); padding: 4px; line-height: 100%; background-color: rgb(255, 255, 255);font-family:monospace;"&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;package&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ru.vingrad.platon.swing;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; javax.swing.*;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;import&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; java.awt.*;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;class&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil {&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridX;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridY;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridWidth &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridHeight &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= GBC.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold; font-style: italic;"&gt;CENTER;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= GBC.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold; font-style: italic;"&gt;NONE;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; Insets &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; Insets(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;);&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil() {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridX, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridY, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridWidth, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridHeight, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultWeightX, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultWeightY, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultAnchor, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultFill, Insets defaultInsets, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultPadX, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultPadY) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridY;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridWidth &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridWidth;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridHeight &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridHeight;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultWeightX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultWeightY;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultAnchor;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultFill;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultInsets;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultPadX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultPadY;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC buildGBC() {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridY,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridWidth,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridHeight,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY,&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridwidth, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridheight, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weightx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; weighty, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; anchor,&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; fill, Insets insets, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipadx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; ipady) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(gridx, gridy, &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridWidth,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridHeight,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY,&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridx, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridy, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridwidth, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridheight) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBC(gridx, gridy, gridwidth, gridheight, &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY,&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX,&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil gridX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridX) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil gridY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; gridY) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= gridY;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil gridWidth(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridWidth) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridWidth &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridWidth;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil gridHeight(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultGridHeight) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultGridHeight &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultGridHeight;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil weightX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultWeightX) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultWeightX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil weightY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;double&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultWeightY) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultWeightY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultWeightY;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil anchor(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultAnchor) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultAnchor &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultAnchor;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil fill(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultFill) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultFill &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultFill;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil insets(Insets defaultInsets) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultInsets &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultInsets;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil padX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultPadX) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadX &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultPadX;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;public&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil padY(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;int&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; defaultPadY) {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;defaultPadY &lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;= defaultPadY;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;return&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;this&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Пример использования:&lt;br /&gt;&lt;br /&gt;&lt;pre  style="border: 0.01mm solid rgb(0, 0, 0); padding: 4px; line-height: 100%; background-color: rgb(255, 255, 255);font-family:monospace;"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;  JPanel panel = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JPanel(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GridBagLayout());&lt;br /&gt;  GBCUtil util = &lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; GBCUtil().anchor(GBC.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold; font-style: italic;"&gt;WEST)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.insets(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; Insets(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JLabel(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;"Label1"&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;0&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;0&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JLabel(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;"Label2"&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;0&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JLabel(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;"Label3"&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;0&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JButton(&lt;/span&gt;&lt;span style="color: rgb(0, 128, 0); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;"..."&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  util.weightX(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;).anchor(GBC.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold; font-style: italic;"&gt;CENTER)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;.fill(GBC.&lt;/span&gt;&lt;span style="color: rgb(102, 14, 122); background-color: rgb(255, 255, 255); font-weight: bold; font-style: italic;"&gt;HORIZONTAL)&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;;&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JTextField(), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;0&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JTextField(), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;br /&gt;  panel.add(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 128); background-color: rgb(255, 255, 255); font-weight: bold;"&gt;new&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt; JTextField(), util.buildGBC(&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;1&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255); background-color: rgb(255, 255, 255);"&gt;2&lt;/span&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;));&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-6835393626180698909?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/6835393626180698909/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=6835393626180698909' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/6835393626180698909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/6835393626180698909'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/07/gbc-gridbagconstraints.html' title='Маленькие классы: GBC писать куда проще, чем GridBagConstraints'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-2174887767670121660</id><published>2008-06-18T04:09:00.000-07:00</published><updated>2009-04-11T08:48:29.709-07:00</updated><title type='text'>Метод скользящего окна: Обработка текстовых данных из сети "на лету"</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Сегодня я хотел бы затронуть проблему, которую вчера решил &lt;a href="http://forum.vingrad.ru/forum/topic-216984.html"&gt;в сообщесте программистов&lt;/a&gt; Подведу итоги.&lt;br /&gt;&lt;br /&gt;Красиво назвал тему: "Метод скользящего окна". Да, этот термин я услышал, учась в университете. Надо же! Университет мне что-то дал.&lt;br /&gt;Задача: обработка данных по мере их поступления через низкоскоростную сеть. Необходимо извлечь из страницы список элементов (это может быть таблица телефонных номеров, таблица тем на форуме, таблица чего угодно)&lt;br /&gt;И здесь нам поможет как раз это метод скользящего окна. Для того, кто не смотрел по приведенной ссылке, смысл его заключается в том, что мы знаем наверняка максимальный размер куска текста, который бы мы могли бы распознать и извлечь из него данные. К примеру, он равен N. В таком случае буффер данных, или, как мы выразились, "окно", будет давать нам представление не обо всём тексте, а только о той, части которая в него загружена. Это дает нам возможность обработать данные не дожидаясь полной загрузки текста.&lt;br /&gt;&lt;br /&gt;Какого же размера может быть окно? Можно с этим поэксперементировать, но минимальный размер окна должен быть равен 2N(*** поправка в комментарии). Почему? Да потому что если взять, к прмеру N или 1.5*N, то у нас может произойти такая ситуация, когда окно видит макушку нужной записи, после скольжения в пол-окна, мы можем просто напросто уже видеть только заднюю часть этой записи. Очень некрасиво :(&lt;br /&gt;Согласен с тем, что можно скользить окном помаленьку на 1 символ, но это очень трудоемко и неэффективно. В этом алгоритме лучше прыгать сразу на N символов, это позволит нам быстро проходить участки, где нет ни одной нужной нам записи.&lt;br /&gt;Чем больше размер экрана (окна), тем  меньше работы с памятью и строками нам предстоит, но окно всегда надо сдвигать не более чем на (k - 1)N, где k коэффиицент размера окна и k &gt; 1. kN - размер окна.&lt;br /&gt;&lt;br /&gt;Вот приблизительный код:&lt;br /&gt;&lt;pre style="line-height: 100%;font-family:monospace;background-color:#ffffff; border-width:0.01mm; border-color:#000000; border-style:solid; padding:4px;"&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.io.FileInputStream;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.io.IOException;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.io.InputStreamReader;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.regex.Matcher;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;import&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; java.util.regex.Pattern;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ScreenSlide {&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Pattern &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;PATTERN &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= Pattern.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;compile(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;(.+)&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_TEMPLATE_SIZE &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;125&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;K &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;= &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;2&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; main(String[] args) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; IOException {&lt;br /&gt;        InputStreamReader reader = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; InputStreamReader(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; FileInputStream(&lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"c:/www/home/htdocs/11.txt"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;), &lt;/span&gt;&lt;span style="color:#008000;background-color:#ffffff;font-weight:bold;"&gt;"CP1251"&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;char&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] buffer = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;char&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;K*MAX_TEMPLATE_SIZE]&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; shift = buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;        &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; am;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;while&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ((am = &lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;read(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;reader, buffer, buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;- shift)) != -&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;) {&lt;br /&gt;            String s = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; String(buffer, &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, am + buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;- shift);&lt;br /&gt;            Matcher m = &lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;PATTERN.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;matcher(s);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;boolean&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; found = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;false&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;while&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (m.find()) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// Нашли, сдвигаем в конец найденого&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;                System.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;out.&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;println(m.group());&lt;br /&gt;                shift = m.end();&lt;br /&gt;    found = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;true&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;   }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (!found) {&lt;br /&gt;                &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// не нашли, значит смело можем двигать на (k - 1)N&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;                shift = (&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;K-&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;)*&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;font-style:italic;"&gt;MAX_TEMPLATE_SIZE;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;            }&lt;br /&gt;            &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;// Сдвигаем неотработанную часть массива в начало&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;            System.&lt;/span&gt;&lt;span style="background-color:#ffffff;font-style:italic;"&gt;arraycopy(&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;buffer, shift, buffer, &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;0&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;, buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;- shift);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#808080;background-color:#ffffff;font-style:italic;"&gt;/*&lt;br /&gt;  * Гарантированно заполняем до конца буффера или до конца потока&lt;br /&gt;  */&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;private&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;static&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; read(InputStreamReader reader, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;char&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;[] buffer, &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; offset) &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;throws&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; IOException {&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; total = offset;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; am;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;while&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (total &amp;lt; buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;&amp;&amp; (am = reader.read(buffer, total, buffer.&lt;/span&gt;&lt;span style="color:#660e7a;background-color:#ffffff;font-weight:bold;"&gt;length &lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;- total)) != -&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;)&lt;br /&gt;   total += am;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;if&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (total == offset)&lt;br /&gt;   &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; -&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;return&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; total - offset;&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Текст файла:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;wef wkejfwae&lt;br /&gt;fwaefkj waklgrjaewr&lt;br /&gt;gergkl;j esklrgjerg&lt;br /&gt;ergj eslkrgjserg&lt;br /&gt;ergekls;jr gklesjrg&lt;br /&gt;e&lt;br /&gt;&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Первая строка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Вторая строка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Третья строка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Четвертая ооооооооооооооочень длинная строка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Пятая строчка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Шестая строчка&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;Достала меня эта экранная функция&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Сравнивал с полной загрузкой страницы:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Time for screen string: 1062 ms&lt;br /&gt;Time for screen string: 828 ms&lt;br /&gt;Time for screen string: 828 ms&lt;br /&gt;Time for screen string: 782 ms&lt;br /&gt;Time for screen string: 813 ms&lt;br /&gt;Time for screen string: 797 ms&lt;br /&gt;Time for screen string: 812 ms&lt;br /&gt;Time for screen string: 765 ms&lt;br /&gt;Time for screen string: 781 ms&lt;br /&gt;Time for screen string: 782 ms&lt;br /&gt;AVG for screen string: 825 ms&lt;br /&gt;Time for simple string: 875 ms&lt;br /&gt;Time for simple string: 796 ms&lt;br /&gt;Time for simple string: 688 ms&lt;br /&gt;Time for simple string: 750 ms&lt;br /&gt;Time for simple string: 734 ms&lt;br /&gt;Time for simple string: 703 ms&lt;br /&gt;Time for simple string: 719 ms&lt;br /&gt;Time for simple string: 688 ms&lt;br /&gt;Time for simple string: 703 ms&lt;br /&gt;Time for simple string: 734 ms&lt;br /&gt;AVG for simple string: 739 ms&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Более менее сносное 14 %&lt;br /&gt;Смотрим, рецензируем, пользуемся.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-2174887767670121660?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/2174887767670121660/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=2174887767670121660' title='Комментарии: 1'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/2174887767670121660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/2174887767670121660'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/06/blog-post_18.html' title='Метод скользящего окна: Обработка текстовых данных из сети &quot;на лету&quot;'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-6797277656300711797</id><published>2008-06-17T03:59:00.000-07:00</published><updated>2008-06-18T08:05:42.018-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='потоки'/><category scheme='http://www.blogger.com/atom/ns#' term='обработка на лету'/><category scheme='http://www.blogger.com/atom/ns#' term='stream'/><title type='text'>Потоки: Мир захватили струйки информации!!!</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;&lt;br /&gt;Первой статьёй на новом месте хочу отметить новоселье.&lt;br /&gt;&lt;br /&gt;Совсем недавно мне надо было обрабатывать информацию с сайта. Загружать страницы, извлекать из них список нужных записей. Я хотел бы сегодня уделить внимание важности потокового (имею ввиду не Thread, а Stream) подхода в любой задаче обработки данных. &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;br /&gt;&lt;br /&gt;Логичное решение этой ситуации — это выдавать результат постепенно, по мере готовности данных страницы от любого парсера. Если оставить всё как есть, то нам придется избавиться от класса, инкапсулирующего в себе параллельную обработку парсеров. Выпускать из ларца Пандоры&lt;br /&gt;беды и горе — дело, конечно, смелое, но неблагоразумное.&lt;br /&gt;На ум пришло кардинально изменить механизм обработки информации. Приходится вносить изменения в самый нижний уровень, а именно, в механизм обработки конкретной страницы. И вот он! Герой. Поток, во всём его величии и стати.&lt;br /&gt;Алгоритм следующий: раньше мы добавляли данные в список и возращали его запрашивающему объекту, теперь мы не будем возвращать ничего, теперь мы будем писать в поток, предварительно благоразумно переданный обработчику страницы. Таким образом, теоретически, мы можем не дожидаться полной загрузки страницы, а обрабатывать содержимое по мере его поступления, если такое теоретически возможно, и сразу выплевывать извлеченную запись в поток.&lt;br /&gt;&lt;br /&gt;Приблизительно это будет выглядеть так:&lt;br /&gt;&lt;pre&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SitesCollectionHanlder {&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; process(List&amp;lt;SiteHandler&amp;gt; handlers) {&lt;br /&gt;  List&amp;lt;Thread&amp;gt; threads = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; ArrayList&amp;lt;Thread&amp;gt;();&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;final&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SiteHandler h : handlers) {&lt;br /&gt;   Thread t = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Thread(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; Runnable() {&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; run() {h.process();}})&lt;br /&gt;   t.start();&lt;br /&gt;   threads.add(t);&lt;br /&gt;  }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (Thread t : threads)&lt;br /&gt;   t.join();&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; PageHandler {&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; process(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; page) {&lt;br /&gt;  Object o;&lt;br /&gt;  prepareData();&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;while&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;((o = nextObject()) != &lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;null&lt;/span&gt;)&lt;br /&gt;   stream.write(o);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;class&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; SiteHandler {&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; process(&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; pagesAmount) {&lt;br /&gt;  PageHandler handler = &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;new&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; PageHandler(stream);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;for&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; (&lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;int&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; i = &lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;1&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;; i &amp;lt;= pagesAmount; i++)&lt;br /&gt;   handler.process(i);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;public&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; &lt;/span&gt;&lt;span style="color:#000080;background-color:#ffffff;font-weight:bold;"&gt;void&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt; process() {&lt;br /&gt;  process(&lt;/span&gt;&lt;span style="color:#0000ff;background-color:#ffffff;"&gt;100&lt;/span&gt;&lt;span style="background-color:#ffffff;"&gt;);&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-6797277656300711797?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/6797277656300711797/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=6797277656300711797' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/6797277656300711797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/6797277656300711797'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/06/blog-post_17.html' title='Потоки: Мир захватили струйки информации!!!'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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-1299980182778467930.post-1660508340385633175</id><published>2008-06-16T06:17:00.000-07:00</published><updated>2008-06-17T01:41:36.203-07:00</updated><title type='text'>Баловство да и только</title><content type='html'>Здравствуйте, уважаемые.&lt;br /&gt;Решил вести несколько блогов разных тематик. Мой первый блог &lt;a href="http://vingrad.ru/blogs/platon/"&gt;о моей жизни в Java программировании&lt;/a&gt; мне нравится, но у него мало возможностей. На блогспот, думаю, я смогу раскрыться куда больше.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1299980182778467930-1660508340385633175?l=platon007.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://platon007.blogspot.com/feeds/1660508340385633175/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1299980182778467930&amp;postID=1660508340385633175' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/1660508340385633175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1299980182778467930/posts/default/1660508340385633175'/><link rel='alternate' type='text/html' href='http://platon007.blogspot.com/2008/06/blog-post.html' title='Баловство да и только'/><author><name>Platon</name><uri>http://www.blogger.com/profile/08153166453691034693</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>
