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

<channel>
	<title>lelick.net</title>
	<atom:link href="http://lelick.net/feed" rel="self" type="application/rss+xml" />
	<link>http://lelick.net</link>
	<description>обо всем по немножку</description>
	<lastBuildDate>Thu, 15 Apr 2010 18:24:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>atom fishing</title>
		<link>http://lelick.net/other/atom-fishing.html</link>
		<comments>http://lelick.net/other/atom-fishing.html#comments</comments>
		<pubDate>Thu, 15 Apr 2010 18:24:39 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Общие]]></category>
		<category><![CDATA[on-line]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[игры]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=156</guid>
		<description><![CDATA[Открыл для себя о чудо игру &#8211; Atom fishing. Суть игры заключается в том, что нужно ловить рыбу в районе Припяти. Понимаю что звучит глупо, но ни как не могу оторваться. К сожалению на Ubuntu (в Wine) игра так и не запустилась, поэтому играю в нее через Virtual Box. К плюсам стоит отнести: RPG on-line [...]]]></description>
			<content:encoded><![CDATA[<p>Открыл для себя о чудо игру &#8211; <a href="http://atomfish.ru/">Atom fishing</a>. Суть игры заключается в том, что нужно ловить рыбу в районе Припяти. Понимаю что звучит глупо, но ни как не могу оторваться.<br />
К сожалению на Ubuntu (в Wine) игра так и не запустилась, поэтому играю в нее через Virtual Box.<span id="more-156"></span><br />
К плюсам стоит отнести:</p>
<ul>
<li> RPG</li>
<li> on-line</li>
<li> быстроразвивающаяся</li>
<li> большое обилие рыбы, инструментов ловли, квестов</li>
<li> много локаций</li>
</ul>
<p>Из минусов:</p>
<ul>
<li> небольшие тормоза (обещают исправить вводом новых серверов)</li>
<li> отсутствие мультиплатформенности</li>
<li> пока еще не реализованы некоторые полезные вещи (обмен товаров, приват)</li>
</ul>
<p>В общем игра маст хев, отличная убивалка времени!</p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/atom-fishing.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Востановление (сброс) панелей в Ubuntu</title>
		<link>http://lelick.net/other/reset_panel.html</link>
		<comments>http://lelick.net/other/reset_panel.html#comments</comments>
		<pubDate>Tue, 13 Apr 2010 18:08:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Общие]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=151</guid>
		<description><![CDATA[На днях поставил всяких красивостей, на свою Ubuntu. Глаз чуть попривык, захотелось чего-то более менее стандартного. В параметрах внешнего вида вернул стандартную тему, но не тут то было: Меню на панеле было черезчур запутано, и тут мне пришла на встречу о чудо команда: gnome-panel --replace На заметку: Не забываем что писать ее надо после sudo]]></description>
			<content:encoded><![CDATA[<p>На днях поставил всяких <del datetime="2010-04-13T18:00:51+00:00">красивостей</del>, на свою <strong>Ubuntu</strong>. Глаз чуть попривык, захотелось чего-то более менее стандартного.  В параметрах внешнего вида вернул стандартную тему, но не тут то было: Меню на панеле было черезчур запутано, и тут мне пришла на встречу о чудо команда:</p>
<pre class="brush: plain;">gnome-panel --replace</pre>
<p><strong>На заметку:</strong> Не забываем что писать ее надо после sudo <img src='http://lelick.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/reset_panel.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mount of filesystem failed</title>
		<link>http://lelick.net/other/mount-of-filesystem-failed.html</link>
		<comments>http://lelick.net/other/mount-of-filesystem-failed.html#comments</comments>
		<pubDate>Mon, 01 Feb 2010 16:52:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Общие]]></category>
		<category><![CDATA[гемор]]></category>
		<category><![CDATA[не работает]]></category>
		<category><![CDATA[непонятки]]></category>
		<category><![CDATA[хрень]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=149</guid>
		<description><![CDATA[Собственно сегодня написала мне моя Ubuntu 9.10, повергнув меня в ступор. А дословно писало следующее: Mount of filesystem failed. A maintenance shell will now be started. CONTROL-D will terminate this shell and retry. Слегка ссанув начал разбираться: Ошибка в файловой системе, пробую команду fsck, что то мутит. Затем просит перезагрузиться. Вместо этого жму Ctrl+D. И [...]]]></description>
			<content:encoded><![CDATA[<p>Собственно сегодня написала мне моя <strong>Ubuntu 9.10,</strong> повергнув меня в ступор. А дословно писало следующее:</p>
<pre class="brush: plain;">
Mount of filesystem failed.
A maintenance shell will now be started.
CONTROL-D will terminate this shell and retry.
</pre>
<p>Слегка ссанув начал разбираться:<br />
Ошибка в файловой системе, пробую команду fsck, что то мутит. Затем  просит перезагрузиться. Вместо этого жму <em>Ctrl+D</em>. И пошла, пошла загрузка&#8230; В итоге загрузился нормально.</p>
<p><strong>На заметку:</strong> разобраться с резервированием и восстановлением данных. </p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/mount-of-filesystem-failed.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Сказ о том как wi-fi поднимал на acer 5600</title>
		<link>http://lelick.net/other/wi-fi_config_ubuntu.html</link>
		<comments>http://lelick.net/other/wi-fi_config_ubuntu.html#comments</comments>
		<pubDate>Fri, 22 Jan 2010 18:51:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[Общие]]></category>
		<category><![CDATA[driver]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[wi-fi]]></category>
		<category><![CDATA[установка]]></category>
		<category><![CDATA[через задницу]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=144</guid>
		<description><![CDATA[Из коробки на Ubuntu 9.04 наконец то появилась поддержка wi-fi. На восьмерке настраивал настраивал, так ни чего сделать и не смог. Это ни могло не радовать. Но заметил странную особенность: После загрузки вайфай работаел примерно 1-2 минуты, затем все вырубалось. Пинг до раутера шел с большими потерями (70-80%). Ситуацию необходимо было в корне менять, и [...]]]></description>
			<content:encoded><![CDATA[<p>Из коробки на <strong>Ubuntu 9.04</strong> наконец то появилась поддержка <strong>wi-fi</strong>. На восьмерке настраивал настраивал, так ни чего сделать и не смог. Это ни могло не радовать. Но заметил странную особенность: После загрузки <strong>вайфай</strong> работаел примерно 1-2 минуты, затем все вырубалось. Пинг до раутера шел с большими потерями (70-80%). Ситуацию необходимо было в корне менять, и так:<br />
Идем <a href="http://wireless.kernel.org/en/users/Download#Download_latest_Linux_wireless_drivers">на замечательный сайт</a>, дальше надеюсь все понятно.<span id="more-144"></span><br />
А дальше для самых маленьких, если уж совсем не понятно:<br />
<a href="http://wireless.kernel.org/en/users/Drivers">Скачиваем</a> драйвер под свою карточку.<br />
Распаковываем архив командой</p>
<pre class="brush: plain;">
tar jxvf arhive-name.tar.bz2
</pre>
<p>Собираем</p>
<pre class="brush: plain;">
cd compat-wireless-$(date -I)
make
</pre>
<p>Если на этом этапе выползли ошибки &#8211; смело гуглим их<br />
Установка</p>
<pre class="brush: plain;">
sudo make install
</pre>
<p>Удаление</p>
<pre class="brush: plain;">
sudo make uninstall
</pre>
<p>Драйвер встал как родной, потерь больше нет, инет работает, счастье привалило!</p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/wi-fi_config_ubuntu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Сбой при обмене пакетами</title>
		<link>http://lelick.net/other/eror_packedge_resived.html</link>
		<comments>http://lelick.net/other/eror_packedge_resived.html#comments</comments>
		<pubDate>Wed, 20 Jan 2010 14:07:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Общие]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=145</guid>
		<description><![CDATA[Сегодня столкнулся со следующей проблемой: Комп видит локалку, в интернет благополучно не выходит, при попытке что либо пропинговать выдает следующее: Обмен пакетами с °я¦ по 32 байт: Погуглив пришел к решению, что проблема с сокетами netsh int ip reset logfile netsh winsock reset Потом придется восстановить настройки сети, но это же гораздо лучше, чем переустанавливать [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня столкнулся со следующей проблемой:<br />
Комп видит локалку, в интернет благополучно не выходит, при попытке что либо пропинговать выдает следующее:<br />
Обмен пакетами с °я¦ по 32 байт:<br />
Погуглив пришел к решению, что проблема с сокетами</p>
<pre class="brush: plain;">
netsh int ip reset logfile
netsh winsock reset
</pre>
<p>Потом придется восстановить настройки сети, но это же гораздо лучше, чем переустанавливать систему!</p>
<p>Если не поможет вышеуказанный способ, можно сделать экспорт веток реестра с работающей машины:</p>
<pre class="brush: plain;">
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Winsock
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2
</pre>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/eror_packedge_resived.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>События и сигналы в PyQt4 – программирование PyQt4 часть 4</title>
		<link>http://lelick.net/python/events_and_signals_part4.html</link>
		<comments>http://lelick.net/python/events_and_signals_part4.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 12:14:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[программирование]]></category>
		<category><![CDATA[разработка]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=134</guid>
		<description><![CDATA[События События являются важной составной частью любом GUI приложении. События генерируются пользователями или системой. Когда мы вызываем exec_ () метод &#8211; приложение входит в основной цикл. Сигналы и Слоты Сигналы срабатывают, когда пользователь нажимает кнопку, перетаскивает ползунок и т.д. Сигналы так же могут происходить например, когда тикает таймер. Слотом является метод, который реагирует на сигнал. [...]]]></description>
			<content:encoded><![CDATA[<h3>События</h3>
<p><strong>События</strong> являются важной составной частью любом  <strong>GUI</strong> приложении. <strong>События</strong> генерируются пользователями или системой. Когда мы вызываем exec_ () метод &#8211; приложение входит в основной цикл. </p>
<h3>Сигналы и Слоты</h3>
<p>Сигналы срабатывают, когда пользователь нажимает кнопку, перетаскивает ползунок и т.д. Сигналы так же могут происходить например, когда тикает таймер. Слотом является метод, который реагирует на сигнал. <span id="more-134"></span></p>
<pre class="brush: python;">
#!/usr/bin/python

# sigslot.py

import sys
from PyQt4 import QtGui, QtCore

class SigSlot(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('signal &amp;amp;amp; slot')

        lcd = QtGui.QLCDNumber(self)
        slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)

        vbox = QtGui.QVBoxLayout()
        vbox.addWidget(lcd)
        vbox.addWidget(slider)

        self.setLayout(vbox)
        self.connect(slider,  QtCore.SIGNAL('valueChanged(int)'), lcd,
		QtCore.SLOT('display(int)') )

        self.resize(250, 150)

app = QtGui.QApplication(sys.argv)
qb = SigSlot()
qb.show()
sys.exit(app.exec_())
</pre>
<p>В этом примере мы выводим LCD число и ползунок. При перетаскивании ползунка изменяется число.</p>
<pre class="brush: python;">
 self.connect(slider,  QtCore.SIGNAL('valueChanged(int)'), lcd, QtCore.SLOT('display(int)') )
</pre>
<p>Здесь мы связываемся с помощью <em>valueChanged()</em> к функции <em>display()</em>.</p>
<p>Метод <em>connect </em>имеет четыре параметра. Отправитель является объектом, который посылает сигнал. Приемник является объектом, который получает сигнал. Наконец, метод, который реагирует на сигнал.<br />
<a href="http://lelick.net/python/events_and_signals_part4.html/attachment/pyqt4_01" rel="attachment wp-att-137"><img src="http://lelick.net/wp-content/uploads/2009/12/pyqt4_01.jpg" alt="pyqt4_01" title="pyqt4_01" width="255" height="175" class="alignnone size-full wp-image-137" /></a></p>
<h3>Переполнения и обработка событий</h3>
<p>События в <strong>PyQt</strong> обрабатываются в основном обработчике событий.</p>
<pre class="brush: python;">
#!/usr/bin/python

# escape.py

import sys
from PyQt4 import QtGui, QtCore

class Escape(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('escape')
        self.resize(250, 150)
        self.connect(self, QtCore.SIGNAL('closeEmitApp()'), QtCore.SLOT('close()') )

    def keyPressEvent(self, event):
        if event.key() == QtCore.Qt.Key_Escape:
            self.close()

app = QtGui.QApplication(sys.argv)
qb = Escape()
qb.show()
sys.exit(app.exec_())
</pre>
<p>В нашем примере мы предопределили keyPressEvent () как обработчик событий</p>
<pre class="brush: python;">
def keyPressEvent(self, event):
     if event.key() == QtCore.Qt.Key_Escape:
         self.close()
</pre>
<p>Если нажали кнопку <em>Escape</em> &#8211; приложение закроется.</p>
<p>Генерируется Объекты, созданные с <em>QtCore.QObject</em> может отдавать сигналы. Если мы нажмем на кнопку, <em>clicked()</em> генерируется сигнал. В следующем примере мы увидим, каким образом мы можем отдавать сигналы.</p>
<pre class="brush: python;">
#!/usr/bin/python

# emit.py

import sys
from PyQt4 import QtGui, QtCore

class Emit(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('emit')
        self.resize(250, 150)
        self.connect(self, QtCore.SIGNAL('closeEmitApp()'), QtCore.SLOT('close()') )

    def mousePressEvent(self, event):
        self.emit(QtCore.SIGNAL('closeEmitApp()'))

app = QtGui.QApplication(sys.argv)
qb = Emit()
qb.show()
sys.exit(app.exec_())
</pre>
<p>Создали новый сигнал closeEmitApp(). В случае нажатия кнопки мыши этот сигнал сработает.</p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/python/events_and_signals_part4.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>не работает denwer при выключеном интернет</title>
		<link>http://lelick.net/other/denwer_not_work_offline.html</link>
		<comments>http://lelick.net/other/denwer_not_work_offline.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 18:37:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Общие]]></category>
		<category><![CDATA[denwer]]></category>
		<category><![CDATA[skype]]></category>
		<category><![CDATA[проблемы]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=128</guid>
		<description><![CDATA[Собственно решение было на поверхности, поле усиленного «гугления»: Необходимо зайти в управление службами и включить службу DNS-клиент. Как заверили все должно заработать полсе перезагрузки denwer`a. Но так ни чего и не заработало, каковым было мое удивление, когда после закрытия skype все прекрасно заработало. И в чем же тогда была причина? Хм, неужели в skype?]]></description>
			<content:encoded><![CDATA[<p>Собственно решение было на поверхности, поле усиленного «гугления»: Необходимо зайти в <strong>управление службами</strong> и включить службу <strong>DNS-клиент</strong>. Как заверили  все должно заработать полсе перезагрузки <strong>denwer`a</strong>. Но так ни чего и не заработало, каковым было мое удивление, когда после закрытия <strong>skype</strong> все прекрасно заработало.<br />
<span id="more-128"></span><br />
И в чем же тогда была причина? Хм, неужели в <strong>skype</strong>?</p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/other/denwer_not_work_offline.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>jQuery — drag tree php+mysql</title>
		<link>http://lelick.net/jquery/jquery_drag_tree_php_mysql.html</link>
		<comments>http://lelick.net/jquery/jquery_drag_tree_php_mysql.html#comments</comments>
		<pubDate>Sun, 13 Dec 2009 19:49:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[dragging]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tree]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=118</guid>
		<description><![CDATA[Сегодня мы напишем примочку к плагину на jQuery — simple tree plugin. Этот плагин выводит список в виде дерева, и позволяет перемещать элементы этого дерева. И так создаем таблицу myqsl: CREATE TABLE `category` ( `category_id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) DEFAULT '0', `category_label` varchar(100) DEFAULT NULL, `orderby` int(11) DEFAULT NULL, PRIMARY KEY (`category_id`) ) [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня мы напишем примочку к плагину на <strong>jQuery</strong> — <a href="http://news.kg/wp-content/uploads/tree/">simple tree plugin</a>. Этот плагин выводит список в виде дерева, и позволяет перемещать элементы этого дерева. И так создаем таблицу myqsl:</p>
<pre class="brush: plain;">
CREATE TABLE `category` (
  `category_id` int(11) NOT NULL AUTO_INCREMENT,
  `parent_id` int(11) DEFAULT '0',
  `category_label` varchar(100) DEFAULT NULL,
  `orderby` int(11) DEFAULT NULL,
  PRIMARY KEY  (`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
</pre>
<p><span id="more-118"></span><br />
Для теста вставляем записи:</p>
<pre class="brush: plain;">
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('1','0','category one','1');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('2','0','category two','2');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('3','2','category three','1');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('4','2','category four','2');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('5','4','category fine','1');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('6','0','category six','3');
INSERT INTO `category` (`category_id`,`parent_id`,`category_label`,`orderby`) VALUES ('7','6','category seven','1');
</pre>
<p>Должны получить структуру следующего вида:</p>
<pre class="brush: xml;">
&lt;ul class=&quot;simpleTree&quot;&gt;
 &lt;li id=&quot;0&quot; class=&quot;root&quot;&gt;&lt;span&gt;Categories&lt;/span&gt;
  &lt;ul&gt;
   &lt;li id=&quot;1&quot;&gt;&lt;span&gt;Category one&lt;/li&gt;
   &lt;li id=&quot;2&quot;&gt;&lt;span&gt;Category two&lt;/span&gt;
    &lt;ul&gt;
     &lt;li id=&quot;3&quot;&gt;&lt;span&gt;Category three&lt;/span&gt;&lt;/li&gt;
     &lt;li id=&quot;4&quot;&gt;&lt;span&gt;Category four&lt;/span&gt;
      &lt;ul&gt;
       &lt;li id=&quot;5&quot;&gt;&lt;span&gt;Category five&lt;/span&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
   &lt;/ul&gt;
   &lt;li id=&quot;6&quot;&gt;&lt;span&gt;Category six&lt;/span&gt;
    &lt;ul&gt;
     &lt;li id=&quot;7&quot;&gt;&lt;span&gt;Category seven&lt;/span&gt;&lt;/li&gt;
    &lt;/ul&gt;
   &lt;/li&gt;
  &lt;/ul&gt;
 &lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>И так приступаем к кодированию</p>
<pre class="brush: php;">
mysql_connect(&quot;&lt;b&gt;host&lt;/b&gt;&quot;, &quot;&lt;b&gt;user&lt;/b&gt;&quot;, &quot;&lt;b&gt;password&lt;/b&gt;&quot;) or die(mysql_error());
mysql_select_db(&quot;&lt;b&gt;database&lt;/b&gt;&quot;) or die(mysql_error());

$rsCategories = mysql_query(&quot;SELECT * FROM category ORDER BY parent_id, orderby&quot;);

$arrayCategories = array();

while($row = mysql_fetch_assoc($rsCategories)){
	$arrayCategories[$row['category_id']] = array(&quot;parent_id&quot; =&gt; $row['parent_id'], &quot;name&quot; =&gt; $row['category_label']);
}
</pre>
<p>Затем пишем функции, которые будут строить структуру, нужную нам</p>
<pre class="brush: php;">
function createTreeT($array, $currentParent, $currLevel = -1) {
	foreach ($array as $categoryId =&gt; $category) {
		if ($currentParent == $category['parent_id']) {

			for ($i=0;$i&lt;$currLevel;$i++) echo &quot;*&quot;;			

			echo $category['name'].&quot;&lt;br /&gt;&quot;;

			$currLevel++;
		 	createTreeT ($array, $categoryId, $currLevel);
		 	$currLevel--;
		}
	}
}

function createTree($array, $currentParent, $currLevel = 0, $prevLevel = -1) {

	foreach ($array as $categoryId =&gt; $category) {

		if ($currentParent == $category['parent_id']) {						

			if ($currLevel &gt; $prevLevel) echo &quot; &lt;ul&gt; &quot;; 

			if ($currLevel == $prevLevel) echo &quot; &lt;/li&gt; &quot;;

			echo '&lt;li id=&quot;'.$categoryId.'&quot;&gt;&lt;span&gt;'.$category['name'].'&lt;/span&gt;';

			if ($currLevel &gt; $prevLevel) { $prevLevel = $currLevel; }

			$currLevel++; 

		 	createTree ($array, $categoryId, $currLevel, $prevLevel);

		 	$currLevel--;
		}	

	}

	if ($currLevel == $prevLevel) echo &quot; &lt;/li&gt;  &lt;/ul&gt; &quot;;

}

&lt;ul class=&quot;simpleTree&quot;&gt;
	&lt;li id=&quot;0&quot; class=&quot;root&quot;&gt;&lt;span&gt;Categories&lt;/span&gt;
		&lt;?php createTree($arrayCategories, 0); ?&gt;
	&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Следующая функция передает файлу <strong>saveData.php</strong> сереализованный массив данных, вида <strong>0:1:1|0:2:2|2:3:1|2:5:2|2:4:3|0:6:3|6:7:1|</strong></p>
<pre class="brush: jscript;">
function(){
	var serialStr = &quot;&quot;;
	var order = &quot;&quot;;

	$(&quot;ul.simpleTree li span&quot;).each(function(){
		parentId = $(this).parent(&quot;li&quot;).parent(&quot;ul&quot;).parent(&quot;li&quot;).attr(&quot;id&quot;);
		if (parentId == undefined) parentId = &quot;root&quot;;
		order = (($(this).parent(&quot;li&quot;).prevAll(&quot;li&quot;).size()+1))/2;
		if ( parentId != &quot;root&quot;) serialStr += &quot;&quot;+parentId+&quot;:&quot;+$(this).parent(&quot;li&quot;).attr(&quot;id&quot;)+&quot;:&quot;+order+&quot;|&quot;;
	});

	$.ajax({
	   type: &quot;POST&quot;,
	   url: &quot;saveData.php&quot;,
	   data: &quot;serialized=&quot;+serialStr,
	   success: function(msg){
	   	 $(&quot;#serializedList&quot;).html(msg);
	   }
	 });

	return false;

}
</pre>
<p>А вот и сам файл <strong>saveData.php</strong>.</p>
<pre class="brush: php;">
include_once(&quot;connection.php&quot;); // the connection to the database
if ($_POST['serialized']) {

	$categories = explode(&quot;|&quot;, substr($_POST['serialized'],0,-1));
	$error =  false;

	foreach ($categories as $category) {
 		list($parentId, $categoryId, $order) = split(&quot;:&quot;, $category);

 		$result = mysql_query(&quot;UPDATE category SET parent_id = &quot;.$parentId.&quot;, orderby = &quot;.$order.&quot;
 						    WHERE category_id = &quot;.$categoryId ) or die(mysql_error());

 	}	

	echo &quot;Tree updated.&quot;;

}
echo &quot;&lt;br /&gt;&quot;.$_POST['serialized'];
</pre>
<p><a href="http://www.lelick.net/uploads/sourse/jquery/simpletree.zip">Скачать пример</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/jquery/jquery_drag_tree_php_mysql.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery Alert Dialogs — простые модальные окна</title>
		<link>http://lelick.net/jquery/jquery_alert_dialogs.html</link>
		<comments>http://lelick.net/jquery/jquery_alert_dialogs.html#comments</comments>
		<pubDate>Wed, 09 Dec 2009 17:26:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqury]]></category>
		<category><![CDATA[оформление]]></category>
		<category><![CDATA[плагин]]></category>
		<category><![CDATA[программирование]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=113</guid>
		<description><![CDATA[Не так давно открыл для себя плагин к jQuery, для замены стандартных диалоговых форм. Сие чудо используется следующим образом: &#60;!-- Подключаем jQuery --&#62; &#60;script src=&#34;/path/to/jquery.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;script src=&#34;/path/to/jquery.ui.draggable.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;!-- Подключаем файлы библиотеки --&#62; &#60;script src=&#34;/path/to/jquery.alerts.js&#34; type=&#34;text/javascript&#34;&#62;&#60;/script&#62; &#60;link href=&#34;/path/to/jquery.alerts.css&#34; rel=&#34;stylesheet&#34; type=&#34;text/css&#34; media=&#34;screen&#34; /&#62; Когда плагин будет успешно подключен, в нашем распоряжении появятся следующие новые функции: [...]]]></description>
			<content:encoded><![CDATA[<p>Не так давно открыл для себя плагин к<strong> jQuery</strong>, для замены стандартных диалоговых форм. <a href="http://abeautifulsite.net/2008/12/jquery-alert-dialogs/">Сие чудо</a> используется следующим образом:</p>
<pre class="brush: jscript;">
&lt;!-- Подключаем jQuery --&gt;
&lt;script src=&quot;/path/to/jquery.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;/path/to/jquery.ui.draggable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;!-- Подключаем файлы библиотеки --&gt;
&lt;script src=&quot;/path/to/jquery.alerts.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;link href=&quot;/path/to/jquery.alerts.css&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
</pre>
<p><span id="more-113"></span><br />
Когда плагин будет успешно подключен, в нашем распоряжении появятся следующие новые функции:</p>
<ul>
<li> jAlert(message, [title, callback])</li>
<li>jConfirm(message, [title, callback])</li>
<li>jPrompt(message, [value, title, callback])</li>
</ul>
<p><strong>Совместимость:</strong></p>
<ul>
<li>Internet Explorer 6 &#038; 7</li>
<li>Firefox 2 &#038; 3</li>
<li>Safari 3</li>
<li>Chrome</li>
<li>Opera 9</li>
</ul>
<p><a href="http://www.lelick.net/uploads/sourse/jquery/jquery.alerts-1.1.zip">Скачать плагин</a><br />
<a href="http://labs.abeautifulsite.net/projects/js/jquery/alerts/demo/">Посмотреть пример работы плагина</a></p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/jquery/jquery_alert_dialogs.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Позиционирование в PyQt4 &#8211; программирование PyQt4 часть 3</title>
		<link>http://lelick.net/python/pyqt_documentation_part3.html</link>
		<comments>http://lelick.net/python/pyqt_documentation_part3.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 02:00:15 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[python]]></category>
		<category><![CDATA[gui]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[программированние]]></category>

		<guid isPermaLink="false">http://lelick.net/?p=93</guid>
		<description><![CDATA[Важной частью в программировании является управление слоями. Управление слоями можно осуществлять двумя путями: абсолютное позиционирование и объединением классов. Абсолютное позиционирование Программист определяет положение и размер каждого виджета в пикселях. При использовании абсолютного позиционирования, вы должны понять несколько вещей: Размер и расположение виджетов не изменится, если изменятся размеры окна приложения могут выглядеть по-разному на разных платформах [...]]]></description>
			<content:encoded><![CDATA[<p>Важной частью в программировании является управление слоями. Управление слоями можно осуществлять двумя путями: абсолютное позиционирование и объединением классов.</p>
<h3>Абсолютное позиционирование</h3>
<p>Программист определяет положение и размер каждого виджета в пикселях. При использовании абсолютного позиционирования, вы должны понять несколько вещей:<span id="more-93"></span></p>
<ul>
<li>Размер и расположение виджетов не изменится, если изменятся размеры окна</li>
<li>приложения могут выглядеть по-разному на разных платформах</li>
<li>изменения шрифтов в приложение может испортить макет</li>
</ul>
<pre class="brush: python;">
#!/usr/bin/python

# absolute.py

import sys
from PyQt4 import QtGui

class Absolute(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('Communication')

        label = QtGui.QLabel('Couldn\'t', self)
        label.move(15, 10)

        label = QtGui.QLabel('care', self)
        label.move(35, 40)

        label = QtGui.QLabel('less', self)
        label.move(55, 65)

        label = QtGui.QLabel('And', self)
        label.move(115, 65)

        label = QtGui.QLabel('then', self)
        label.move(135, 45)

        label = QtGui.QLabel('you', self)
        label.move(115, 25)

        label = QtGui.QLabel('kissed', self)
        label.move(145, 10)

        label = QtGui.QLabel('me', self)
        label.move(215, 10)

        self.resize(250, 150)

app = QtGui.QApplication(sys.argv)
qb = Absolute()
qb.show()
sys.exit(app.exec_())
 </pre>
<p>В примере система координат находится в левом верхнем углу. Значения X растут слева направо. Значения Y растут с верху вниз.<br />
<img src="http://lelick.net/wp-content/uploads/2009/part3/img1.jpg" alt="Абсолютное позиционирование" title="Абсолютное позиционирование"  /></p>
<h3>Box Layout</h3>
<p>Поставим две кнопки в правом нижнем углу. Чтобы это сделать мы будем использовать одно горизонтальное и одно вертикальное поле.</p>
<pre class="brush: python;">
#!/usr/bin/python

# boxlayout.py

import sys
from PyQt4 import QtGui

class BoxLayout(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('box layout')

        ok = QtGui.QPushButton(&amp;quot;OK&amp;quot;)
        cancel = QtGui.QPushButton(&amp;quot;Cancel&amp;quot;)

        hbox = QtGui.QHBoxLayout()
        hbox.addStretch(1)
        hbox.addWidget(ok)
        hbox.addWidget(cancel)

        vbox = QtGui.QVBoxLayout()
        vbox.addStretch(1)
        vbox.addLayout(hbox)

        self.setLayout(vbox)

        self.resize(300, 150)

app = QtGui.QApplication(sys.argv)
qb = BoxLayout()
qb.show()
sys.exit(app.exec_())
 </pre>
<pre class="brush: python;">
 ok = QtGui.QPushButton(&amp;quot;OK&amp;quot;)
 cancel = QtGui.QPushButton(&amp;quot;Cancel&amp;quot;)
</pre>
<p>Создаем кнопки</p>
<pre class="brush: python;">
 hbox = QtGui.QHBoxLayout()
 hbox.addStretch(1)
 hbox.addWidget(ok)
 hbox.addWidget(cancel)
</pre>
<p>Горизонтальное расположение окна</p>
<pre class="brush: python;">
self.setLayout(vbox)
</pre>
<p>Установили макет основного окна.<br />
<img src="http://lelick.net/wp-content/uploads/2009/part3/img2.jpg" alt="Box Layout" title="Box Layout"   /><br />
</p>
<h3>QGridLayout</h3>
<p>Универсальный макет в виде таблицы. Делит пространство на строки и столбцы.</p>
<pre class="brush: python;">
#!/usr/bin/python

# gridlayout.py

import sys
from PyQt4 import QtGui

class GridLayout(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        self.setWindowTitle('grid layout')

        names = ['Cls', 'Bck', '', 'Close', '7', '8', '9', '/',
            '4', '5', '6', '*', '1', '2', '3', '-',
            '0', '.', '=', '+']

        grid = QtGui.QGridLayout()

        j = 0
        pos = [(0, 0), (0, 1), (0, 2), (0, 3),
                (1, 0), (1, 1), (1, 2), (1, 3),
                (2, 0), (2, 1), (2, 2), (2, 3),
                (3, 0), (3, 1), (3, 2), (3, 3 ),
                (4, 0), (4, 1), (4, 2), (4, 3)]

        for i in names:
            button = QtGui.QPushButton(i)
            if j == 2:
                grid.addWidget(QtGui.QLabel(''), 0, 2)
            else: grid.addWidget(button, pos[j][0], pos[j][1])
            j = j + 1

        self.setLayout(grid)

app = QtGui.QApplication(sys.argv)
qb = GridLayout()
qb.show()
sys.exit(app.exec_())
</pre>
<p>В нашем примере мы создали сетку из кнопок.</p>
<pre class="brush: python;">
grid = QtGui.QGridLayout()
</pre>
<p>Создаем сетку.</p>
<pre class="brush: python;">
 if j == 2:
     grid.addWidget(QtGui.QLabel(''), 0, 2)
 else: grid.addWidget(button, pos[j][0], pos[j][1])
</pre>
<p>Чтобы добавить компонент к сетке, мы используем <em>addWidget ()</em></p>
<p><img src="http://lelick.net/wp-content/uploads/2009/part3/img3.jpg" alt="QGridLayout" title="QGridLayout"   /></p>
]]></content:encoded>
			<wfw:commentRss>http://lelick.net/python/pyqt_documentation_part3.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
