<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>FractalizeR's WebSite</title>
	
	<link>http://ru.fractalizer.ru</link>
	<description>Часть моего сайта, содержащая контент, специфичный для России</description>
	<lastBuildDate>Thu, 10 May 2012 17:58:55 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/FractalizersWebsiteRU" /><feedburner:info uri="fractalizerswebsiteru" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Исправление ошибки «error:: no video mode activated» при использовании full disk encryption в Ubuntu 12.04</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/vh18UGfzBg8/</link>
		<comments>http://ru.fractalizer.ru/frpost_226/%d0%b8%d1%81%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b8-error-no-video-mode-activated-%d0%bf%d1%80%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c/#comments</comments>
		<pubDate>Thu, 10 May 2012 17:57:44 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Администрирование Linux]]></category>
		<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=226</guid>
		<description><![CDATA[sudo cp usr/share/grub/*.pf2 /boot/grub sudo update-grub]]></description>
			<content:encoded><![CDATA[<pre id="yui_3_2_0_1_1336672189423655">sudo cp usr/share/<wbr>grub/*.<wbr>pf2 /boot/grub</wbr></wbr></pre>
<pre>sudo update-grub</pre>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/vh18UGfzBg8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_226/%d0%b8%d1%81%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b8-error-no-video-mode-activated-%d0%bf%d1%80%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_226/%d0%b8%d1%81%d0%bf%d1%80%d0%b0%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%ba%d0%b8-error-no-video-mode-activated-%d0%bf%d1%80%d0%b8-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c/</feedburner:origLink></item>
		<item>
		<title>Список недорогих роутеров (до 10000 руб.), поддерживающих функцию failover соединения с Интернет (2WAN)</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/vRy5cXpp-r8/</link>
		<comments>http://ru.fractalizer.ru/frpost_218/%d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba-%d0%bd%d0%b5%d0%b4%d0%be%d1%80%d0%be%d0%b3%d0%b8%d1%85-%d1%80%d0%be%d1%83%d1%82%d0%b5%d1%80%d0%be%d0%b2-%d0%b4%d0%be-10000-%d1%80%d1%83%d0%b1-%d0%bf%d0%be/#comments</comments>
		<pubDate>Wed, 09 May 2012 21:03:01 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=218</guid>
		<description><![CDATA[DrayTek Vigor 2820n (ADSL, Wi-Fi, USB) &#8212; 9000 руб. DrayTek Vigor2820Vn (ADSL, Wi-Fi, USB, VoIP)- 9500 руб. DrayTek Vigor2830n (ADSL, Wi-Fi, USB) &#8212; 10385 руб. DrayTek Vigor2830Vn (ADSL, Wi-Fi, USB, VoIP) &#8212; 10900 руб. DrayTek Vigor2910G (USB, Wi-Fi) &#8212; 7100 руб. DrayTek Vigor2910VG (USB, Wi-Fi, VoIP) &#8212; 7100 руб. DrayTek Vigor 2920n (USB, Wi-Fi) &#8212; [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li><a href="http://market.yandex.ru/model.xml?modelid=3659563&amp;hid=723087&amp;text=DrayTek%20Vigor2820n&amp;srnum=2">DrayTek Vigor 2820n</a> (ADSL, Wi-Fi, USB) &#8212; 9000 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=3659562&amp;hid=723087&amp;text=DrayTek%20Vigor2820Vn&amp;srnum=8">DrayTek Vigor2820Vn</a> (ADSL, Wi-Fi, USB, VoIP)- 9500 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=7144116&amp;hid=723087&amp;text=DrayTek%20Vigor2830n&amp;srnum=3">DrayTek Vigor2830n</a> (ADSL, Wi-Fi, USB) &#8212; 10385 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=7288673&amp;hid=723087&amp;text=Vigor2830&amp;srnum=9">DrayTek Vigor2830Vn</a> (ADSL, Wi-Fi, USB, VoIP) &#8212; 10900 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=1045174&amp;hid=723087&amp;text=DrayTek%20Vigor2910G&amp;srnum=3">DrayTek Vigor2910G</a> (USB, Wi-Fi) &#8212; 7100 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=3659579&amp;hid=723087&amp;text=DrayTek%20Vigor2910VG&amp;srnum=2">DrayTek Vigor2910VG</a> (USB, Wi-Fi, VoIP) &#8212; 7100 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=6412233&amp;hid=723087&amp;text=Vigor2920n&amp;srnum=6">DrayTek Vigor 2920n</a> (USB, Wi-Fi) &#8212; 9760 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=6386101&amp;hid=723087&amp;text=Vigor%202920vn&amp;srnum=8">DrayTek Vigor 2920Vn</a> (USB, Wi-Fi, VoIP) &#8212; 9910 руб.</li>
<li><a href="http://market.yandex.ru/search.xml?text=TP-LINK%20TL-R480T%2B&amp;hid=91088&amp;srnum=11">TP-LINK TL-R480T+</a> &#8212; 3500 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=1016486&amp;hid=91088&amp;text=D-Link%20DFL-210&amp;srnum=2">Dlink DFL-210</a> &#8212; 2700 руб. &#8212; 2700 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=7345240&amp;hid=723087&amp;text=D-Link%20DSR-1000N&amp;srnum=25">D-Link DSR-1000N</a> (Wi-Fi, 2xUSB) &#8212; 10140 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=2685718&amp;hid=91088&amp;text=TRENDnet%20BRV324&amp;srnum=4">TRENDnet BRV324</a> &#8212; 8350 руб.</li>
<li><a href="http://market.yandex.ru/model.xml?modelid=7776624&amp;hid=723087&amp;text=Linksys%20X2000&amp;srnum=17">Linksys X2000</a> (ADSL, Wi-Fi) &#8212; 3460 руб. (на сайте производителя почему-то ничего нет про 2WAN)</li>
</ul>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/vRy5cXpp-r8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_218/%d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba-%d0%bd%d0%b5%d0%b4%d0%be%d1%80%d0%be%d0%b3%d0%b8%d1%85-%d1%80%d0%be%d1%83%d1%82%d0%b5%d1%80%d0%be%d0%b2-%d0%b4%d0%be-10000-%d1%80%d1%83%d0%b1-%d0%bf%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_218/%d1%81%d0%bf%d0%b8%d1%81%d0%be%d0%ba-%d0%bd%d0%b5%d0%b4%d0%be%d1%80%d0%be%d0%b3%d0%b8%d1%85-%d1%80%d0%be%d1%83%d1%82%d0%b5%d1%80%d0%be%d0%b2-%d0%b4%d0%be-10000-%d1%80%d1%83%d0%b1-%d0%bf%d0%be/</feedburner:origLink></item>
		<item>
		<title>Активируем автоматическое определение windows-1251 в gEdit 3 (Ubuntu 12.04)</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/fPJh0YW70NI/</link>
		<comments>http://ru.fractalizer.ru/frpost_216/%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%b8%d1%80%d1%83%d0%b5%d0%bc-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd/#comments</comments>
		<pubDate>Wed, 09 May 2012 18:57:10 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Администрирование Linux]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=216</guid>
		<description><![CDATA[Недавно установил себе Ubuntu 12.04 и заметил, что gEdit не распознает кодировку Windows-1251 в файлах. Чтобы включить автораспознавание Windows-1251 можно использовать следующую команду (работает, в принципе, и без sudo): sudo gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8', 'CURRENT', 'WINDOWS-1251', 'ISO-8859-15', 'UTF-16']"]]></description>
			<content:encoded><![CDATA[<p>Недавно установил себе Ubuntu 12.04 и заметил, что gEdit не распознает кодировку Windows-1251 в файлах. Чтобы включить автораспознавание Windows-1251 можно использовать следующую команду (работает, в принципе, и без sudo):</p>
<pre>sudo gsettings set org.gnome.gedit.preferences.encodings auto-detected "['UTF-8', 'CURRENT', 'WINDOWS-1251', 'ISO-8859-15', 'UTF-16']"
</pre>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/fPJh0YW70NI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_216/%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%b8%d1%80%d1%83%d0%b5%d0%bc-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_216/%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%b8%d1%80%d1%83%d0%b5%d0%bc-%d0%b0%d0%b2%d1%82%d0%be%d0%bc%d0%b0%d1%82%d0%b8%d1%87%d0%b5%d1%81%d0%ba%d0%be%d0%b5-%d0%be%d0%bf%d1%80%d0%b5%d0%b4%d0%b5%d0%bb%d0%b5%d0%bd/</feedburner:origLink></item>
		<item>
		<title>84 функции PHP, которые нужно запретить исполнять на сервере</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/Xo17c2HEWfo/</link>
		<comments>http://ru.fractalizer.ru/frpost_207/84-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8-php-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d0%bd%d1%83%d0%b6%d0%bd%d0%be-%d0%b7%d0%b0%d0%bf%d1%80%d0%b5%d1%82%d0%b8%d1%82%d1%8c-%d0%b8%d1%81%d0%bf/#comments</comments>
		<pubDate>Tue, 20 Mar 2012 07:44:26 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Без рубрики]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=207</guid>
		<description><![CDATA[Список функций PHP, которые запрещено исполнять на серверах, которые я конфигурировал: apache_note apache_setenv chgrp closelog debugger_off debugger_on define_sys define_syslog_variables diskfreespace dl escapeshellarg escapeshellcmd exec getmypid getmyuid ini_restore leak listen openlog passthru pclose pcntl_alarm pcntl_exec pcntl_fork pcntl_getpriority pcntl_get_last_error pcntl_setpriority pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait pcntl_sigwaitinfo pcntl_strerror pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig php_uname popen posix [...]]]></description>
			<content:encoded><![CDATA[<p>Список функций PHP, которые запрещено исполнять на серверах, которые я конфигурировал:</p>
<p><span id="more-207"></span></p>
<pre>apache_note
apache_setenv
chgrp
closelog
debugger_off
debugger_on
define_sys
define_syslog_variables
diskfreespace
dl
escapeshellarg
escapeshellcmd
exec
getmypid
getmyuid
ini_restore
leak
listen
openlog
passthru
pclose
pcntl_alarm
pcntl_exec
pcntl_fork
pcntl_getpriority
pcntl_get_last_error
pcntl_setpriority
pcntl_signal
pcntl_signal_dispatch
pcntl_sigprocmask
pcntl_sigtimedwait
pcntl_sigwaitinfo
pcntl_strerror
pcntl_wait
pcntl_waitpid
pcntl_wexitstatus
pcntl_wifexited
pcntl_wifsignaled
pcntl_wifstopped
pcntl_wstopsig
pcntl_wtermsig
php_uname
popen
posix
posix_ctermid
posix_getcwd
posix_getegid
posix_geteuid
posix_getgid
posix_getgrgid
posix_getgrnam
posix_getgroups
posix_getlogin
posix_getpgid
posix_getpgrp
posix_getpid
posix_getpwnam
posix_getpwuid
posix_getrlimit
posix_getsid
posix_getuid
posix_isatty
posix_kill
posix_mkfifo
posix_setegid
posix_seteuid
posix_setgid
posix_setpgid
posix_setsid
posix_setuid
posix_times
posix_ttyname
posix_uname
proc_close
proc_get_status
proc_nice
proc_open
proc_terminate
shell_exec
show_source
syslog
system
url_exec
_getppid</pre>
<p>Расширение pcntl обычно отключено в PHP, так что, возможно, вам не придется включать его функции в ваш список. Расширение posix обычно включено, но его можно выключить, пересобрав PHP с ключом &#8212;disable-posix</p>
<p>Готовая директива disable_functions для copy&amp;paste:</p>
<p style="word-wrap: break-word;">disable_functions=apache_note,apache_setenv,chgrp,closelog,debugger_off,debugger_on,define_sys,define_syslog_variables,diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,getmypid,getmyuid,ini_restore,leak,listen,openlog,passthru,pclose,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_getpriority,pcntl_get_last_error,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_uname,popen,posix,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,show_source,syslog,system,url_exec,_getppid</p>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/Xo17c2HEWfo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_207/84-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8-php-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d0%bd%d1%83%d0%b6%d0%bd%d0%be-%d0%b7%d0%b0%d0%bf%d1%80%d0%b5%d1%82%d0%b8%d1%82%d1%8c-%d0%b8%d1%81%d0%bf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_207/84-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d0%b8-php-%d0%ba%d0%be%d1%82%d0%be%d1%80%d1%8b%d0%b5-%d0%bd%d1%83%d0%b6%d0%bd%d0%be-%d0%b7%d0%b0%d0%bf%d1%80%d0%b5%d1%82%d0%b8%d1%82%d1%8c-%d0%b8%d1%81%d0%bf/</feedburner:origLink></item>
		<item>
		<title>Настройка ядра Linux для поддержки большого числа соединений (~100k) и защиты от DDOS</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/w2jJgcmMxqg/</link>
		<comments>http://ru.fractalizer.ru/frpost_197/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%8f%d0%b4%d1%80%d0%b0-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 09:56:11 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Администрирование Linux]]></category>
		<category><![CDATA[Без рубрики]]></category>
		<category><![CDATA[Статьи]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[нагрузка]]></category>
		<category><![CDATA[тюнинг сети]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=197</guid>
		<description><![CDATA[Пособирал по интернету интересные настройки ядра Linux для обеспечения бесперебойной работы серверов, имеющих дело в большим количеством подключений: торрент-трекеры, вебсерверы и т.д. Один из моих серверов с данными настройками выдержал 258014 соединений. Может быть, выдержал бы и больше, не знаю Соединения считались с помощью wc -l /proc/net/ip_conntrack net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.send_redirects = [...]]]></description>
			<content:encoded><![CDATA[<p>Пособирал по интернету интересные настройки ядра Linux для обеспечения бесперебойной работы серверов, имеющих дело в большим количеством подключений: торрент-трекеры, вебсерверы и т.д. Один из моих серверов с данными настройками выдержал 258014 соединений. Может быть, выдержал бы и больше, не знаю <img src='http://ru.fractalizer.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Соединения считались с помощью <em>wc -l /proc/net/ip_conntrack</em></p>
<p><span id="more-197"></span></p>
<p><strong>net.ipv4.conf.all.accept_redirects = 0</strong><br />
<strong> net.ipv4.conf.all.secure_redirects = 0<br />
net.ipv4.conf.all.send_redirects = 0</strong></p>
<p>Не принимать и не отправлять ICMP-пакеты перенаправления. ICMP-перенаправления могут быть использованы злоумышленником для изменения таблиц маршрутизации. Целесообразно выставить в &#171;0&#8243;. Единица имеет смысл только для хостов, использующихся в качестве маршрутизаторов.</p>
<p><strong>net.ipv4.tcp_max_orphans = 65536</strong></p>
<p>Целочисленное значение параметра tcp_max_orphans определяет максимальное число допустимых в системе сокетов TCP, не связанных каким-либо идентификатором пользовательского файла (user file handle). При достижении порогового значения “осиротевшие” (orphan) соединения незамедлительно сбрасываются с выдачей предупреждения. Этот порог помогает предотвращать только простые атаки DoS. Не следует уменьшать пороговое значение (скорее увеличить его в соответствии с требованиями системы – например, после добавления памяти. Каждое orphan-соединение поглощает около 64 Кбайт несбрасываемой на диск (unswappable) памяти.</p>
<p><strong>net.ipv4.tcp_fin_timeout = 10</strong></p>
<p>Параметр tcp_fin_timeout определяет время сохранения сокета в состоянии FIN-WAIT-2 после его закрытия локальной стороной. Партнер может не закрыть это соединение никогда, поэтому следует закрыть его по своей инициативе по истечении тайм-аута. По умолчанию тайм-аут составляет 60 секунд. В ядрах серии 2.2 обычно использовалось значение 180 секунд и вы можете сохранить это значение, но не следует забывать, что на загруженных WEB-серверах вы рискуете израсходовать много памяти на сохранение полуразорванных мертвых соединений. Сокеты в состоянии FIN-WAIT-2 менее опасны, нежели FIN-WAIT-1, поскольку поглощают не более 1,5 Кбайт памяти, но они могут существовать дольше.</p>
<p><strong>net.ipv4.tcp_keepalive_time = 1800<br />
net.ipv4.tcp_keepalive_intvl = 15</strong><br />
<strong> net.ipv4.tcp_keepalive_probes = 5</strong></p>
<p>tcp_keepalive_time Переменная определяет как часто следует проверять соединение, если оно давно не используется. Значение переменной имеет смысл только для тех сокетов, которые были созданы с флагом SO_KEEPALIVE. Целочисленная переменная tcp_keepalive_intvl определяет интервал передачи проб. Произведение tcp_keepalive_probes * tcp_keepalive_intvl определяет время, по истечении которого соединение будет разорвано при отсутствии откликов. По умолчанию установлен интервал 75 секунд, т.е., время разрыва соединения при отсутствии откликов составит приблизительно 11 минут.</p>
<p><strong>net.ipv4.tcp_max_syn_backlog = 4096</strong></p>
<p>Целочисленное значение в файле tcp_max_syn_backlog определяет максимальное число запоминаемых запросов на соединение, для которых не было получено подтверждения от подключающегося клиента. Если на сервере возникают перегрузки, можно попытаться увеличить это значение.</p>
<p><strong>net.ipv4.tcp_synack_retries = 1</strong></p>
<p>Целочисленное значение (1 байт) tcp_synack_retries определяет число попыток повтора передачи пакетов SYNACK для пассивных соединений TCP. Число попыток не должно превышать 255. Значение 5 соответствует приблизительно 180 секундам на выполнение попыток организации соединения.</p>
<p><strong>net.ipv4.tcp_mem = 50576   64768   98152</strong></p>
<p>Векторная (минимум, режим нагрузки, максимум) переменная в файле tcp_mem cодержит общие настройки потребления памяти для протокола TCP. Эта переменная измеряется в страницах (обычно 4Кб), а не байтах.</p>
<p>Миниум: пока общий размер памяти для структур протокола TCP менее этого количества страниц, операционная система ничего не делает.</p>
<p>Режим нагрузки: как только количество страниц памяти, выделенное для работы протокола TCP, достигает этого значения, активируется режим работы под нагрузкой, при котором операционная система старается ограничивать выделение памяти. Этот режим сохраняется до тех пор, пока потребление памяти опять не достигнет минимального уровня.</p>
<p>Максимум: максимальное количество страниц памяти, разрешенное для всех TCP сокетов.</p>
<p><strong>net.ipv4.tcp_rmem = 4096 87380 16777216<br />
</strong></p>
<p>Векторная (минимум, по умолчанию, максимум) переменная в файле tcp_rmem содержит 3 целых числа, определяющих размер приемного буфера сокетов TCP.</p>
<p>Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Возможность использования такого буфера гарантируется даже при достижении порога ограничения (moderate memory pressure). Размер минимального буфера по умолчанию составляет 8 Кбайт (8192).</p>
<p>Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра /proc/sys/net/core/rmem_default, используемого другими протоколами. Значение используемого по умолчанию буфера обычно (по умолчанию) составляет 87830 байт. Это определяет размер окна 65535 с заданным по умолчанию значением tcp_adv_win_scale и tcp_app_win = 0, несколько меньший, нежели определяет принятое по умолчанию значение tcp_app_win.</p>
<p>Максимум: максимальный размер буфера, который может быть автоматически выделен для приема сокету TCP. Это значение не отменяет максимума, заданного в файле /proc/sys/net/core/rmem_max. При “статическом” выделении памяти с помощью SO_RCVBUF этот параметр не имеет значения.</p>
<p><strong>net.ipv4.tcp_wmem = 4096 65536 16777216</strong></p>
<p>Векторная переменная в файле tcp_wmem содержит 3 целочисленных значения, определяющих минимальное, принятое по умолчанию и максимальное количество памяти, резервируемой для буферов передачи сокета TCP.</p>
<p>Минимум: каждый сокет TCP имеет право использовать эту память по факту своего создания. Размер минимального буфера по умолчанию составляет 4 Кбайт (4096)</p>
<p>Значение по умолчанию: количество памяти, допустимое для буфера передачи сокета TCP по умолчанию. Это значение применяется взамен параметра /proc/sys/net/core/wmem_default, используемого другими протоколами и обычно меньше, чем /proc/sys/net/core/wmem_default. Размер принятого по умолчанию буфера обычно (по умолчанию) составляет 16 Кбайт (16384)</p>
<p>Максимум: максимальное количество памяти, которое может быть автоматически выделено для буфера передачи сокета TCP. Это значение не отменяет максимум, заданный в файле /proc/sys/net/core/wmem_max. При “статическом” выделении памяти с помощью SO_SNDBUF этот параметр не имеет значения.</p>
<p><strong><strong>net.ipv4.</strong>tcp_orphan_retries = 0</strong></p>
<p>Целочисленной значение tcp_orphan_retries определяет число неудачных попыток, после которого уничтожается соединение TCP, закрытое на локальной стороне. По умолчанию используется значение 7, соответствующее приблизительно периоду от 50 секунд до 16минут в зависимости от RTO. На сильно загруженных WEB-серверах имеет смысл уменьшить значение этого параметра, поскольку закрытые соединения могут поглощать достаточно много ресурсов.</p>
<p><strong>net.ipv4.tcp_syncookies = 0</strong></p>
<p>Согласно <a href="http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt" target="_blank">рекомендациям разработчиков ядра</a>, этот режим лучше отключить.<strong><br />
</strong></p>
<p><strong>net.ipv4.netfilter.ip_conntrack_max = 1048576</strong></p>
<p>Максимальное количество соединений для работы механизма connection tracking (используется, например, iptables). При слишком маленьких значениях ядро начинает отвергать входящие подключения с соответствующей записью в системном логе.</p>
<p><strong>net.ipv4.tcp_timestamps = 1</strong></p>
<p>Разрешает <a href="http://www.ietf.org/rfc/rfc1323.txt" target="_blank">временные метки протокола TCP</a>. Их наличие позволяет управлять работой протокола в условиях серьезных нагрузок (см. tcp_congestion_control).</p>
<p><strong>net.ipv4.tcp_sack = 1</strong></p>
<p>Разрешить <a href="http://www.ibm.com/developerworks/ru/library/l-tcp-sack/" target="_blank">выборочные подтверждения протокола TCP</a>. Опция еобходима для эффективного использования всей доступной пропускной способности некоторых сетей. См. статью для определения целесообразности использования.</p>
<p><strong>net.ipv4.tcp_congestion_control = htcp</strong></p>
<p><a href="http://en.wikipedia.org/wiki/TCP_congestion_avoidance_algorithm" target="_blank">Протокол</a>, используемый для управления нагрузкой в сетях TCP. bic и cubic реализации, используемые по умолчанию, содержат баги в большинстве версий ядра RedHat и ее клонов. Рекомендуется использовать htcp.</p>
<p><strong>net.ipv4.tcp_no_metrics_save = 1</strong></p>
<p>Не сохранять результаты измерений TCP соединения в кеше при его закрытии. В некоторых случаях помогает повысить производительность.</p>
<p><strong>net.ipv4.route.flush=1</strong></p>
<p>Актуально для ядер 2.4. По странной причине в ядрах 2.4, если в рамках TCP сессии произошел повтор передачи с уменьшенным размером окна, все соединения с данным хостом в следующие 10 минут будут иметь именно этот уменьшенный размер окна. Данная настройка позволяет этого избежать.</p>
<p><strong>net.ipv4.conf.all.rp_filter = 1</strong><br />
<strong>net.ipv4.conf.lo.rp_filter = 1</strong><br />
<strong>net.ipv4.conf.eth0.rp_filter = 1</strong><br />
<strong>net.ipv4.conf.default.rp_filter = 1</strong></p>
<p>Активируем защиту от <a href="http://ru.wikipedia.org/wiki/IP-спуфинг" target="_blank">IP-спуфинга</a>.</p>
<p><strong>net.ipv4.conf.all.accept_source_route = 0</strong><br />
<strong>net.ipv4.conf.lo.accept_source_route = 0</strong><br />
<strong>net.ipv4.conf.eth0.accept_source_route = 0</strong><br />
<strong>net.ipv4.conf.default.accept_source_route = 0</strong></p>
<p>Запрещаем <a href="http://paramax.susu.ru/study/tcpips/-Utilita_trassirovki_marshrutov_Traceroute-IP-opciya_marshrutizaciya_ot_istochnika.htm" target="_blank">маршрутизацию от источника</a>.</p>
<p><strong>net.ipv4.ip_local_port_range = 1024 65535</strong></p>
<p>Увеличиваем диапазон локальных портов, доступных для установки исходящих подключений</p>
<p><strong>net.ipv4.tcp_tw_reuse = 1</strong></p>
<p><strong></strong>Разрешаем повторное использование TIME-WAIT сокетов в случаях, если протокол считает это безопасным.</p>
<p><span><strong>net.ipv4.tcp_window_scaling = 1</strong></span></p>
<p><span>Разрешаем динамическое изменение размера окна TCP стека</span></p>
<p><span><strong>net.ipv4.tcp_rfc1337 = 1</strong></span></p>
<p><span>Защищаемся от <a href="http://tools.ietf.org/html/rfc1337" target="_blank">TIME_WAIT атак</a>.</span></p>
<p><strong><span>net.ipv4.ip_forward = 0</span></strong></p>
<p><span>Запрещаем переадресацию пакетов, поскольку мы не роутер.</span></p>
<p><strong>net.ipv4.icmp_echo_ignore_broadcasts = 1</strong></p>
<p>Не отвечаем на ICMP ECHO запросы, переданные широковещательными пакетами</p>
<p><strong>net.ipv4.icmp_echo_ignore_all = 1</strong></p>
<p>Можно вообще не отвечать на ICMP ECHO запросы (сервер не будет пинговаться)</p>
<p><strong>net.ipv4.icmp_ignore_bogus_error_responses = 1</strong></p>
<p>Не отвечаем на ошибочно сформированные сообшения</p>
<p><strong>net.core.somaxconn = 15000</strong></p>
<p>Максимальное число открытых сокетов, ждущих соединения. Имеет смысл увеличить значение по умолчанию, для высоконагруженных серверов советуют значения в районе 15000-20000.</p>
<p><strong>net.core.netdev_max_backlog = 1000</strong></p>
<p>Параметр определяет максимальное количество пакетов в очереди на обработку, если интерфейс получает пакеты быстрее, чем ядро может их обработать.</p>
<p><strong>net.core.rmem_default=65536</strong></p>
<p>Размер буфера приема данных по умолчанию для всех соединений.</p>
<p><strong>net.core.wmem_default=65536</strong></p>
<p>Размер буфера передачи данных по умолчанию для всех соединений.</p>
<p><strong>net.core.rmem_max = 16777216</strong></p>
<p>Максимальный размер буфера приема данных для всех соединений.</p>
<p><strong>net.core.wmem_max = 16777216</strong></p>
<p>Максимальный размер буфера передачи данных для всех соединений.</p>
<p>&nbsp;</p>
<h2>Скрипт для изменения параметров</h2>
<p>Просто скопируйте все строки ниже и вставьте в консоль (правая кнопка мыши в Putty):</p>
<pre> sysctl -w net.ipv4.conf.all.accept_redirects=0
 sysctl -w net.ipv4.conf.all.secure_redirects=0
 sysctl -w net.ipv4.conf.all.send_redirects=0
 sysctl -w net.ipv4.tcp_max_orphans=65536
 sysctl -w net.ipv4.tcp_fin_timeout=10
 sysctl -w net.ipv4.tcp_keepalive_time=1800
 sysctl -w net.ipv4.tcp_keepalive_intvl=15
 sysctl -w net.ipv4.tcp_keepalive_probes=5
 sysctl -w net.ipv4.tcp_max_syn_backlog=4096
 sysctl -w net.ipv4.tcp_synack_retries=1
 sysctl -w net.ipv4.tcp_mem=50576   64768   98152
 sysctl -w net.ipv4.tcp_rmem=4096 87380 16777216
 sysctl -w net.ipv4.tcp_wmem=4096 65536 16777216
 sysctl -w net.ipv4.tcp_orphan_retries=0
 sysctl -w net.ipv4.tcp_syncookies=0
 sysctl -w net.ipv4.netfilter.ip_conntrack_max=1048576
 sysctl -w net.ipv4.tcp_timestamps=1
 sysctl -w net.ipv4.tcp_sack=1
 sysctl -w net.ipv4.tcp_congestion_control=htcp
 sysctl -w net.ipv4.tcp_no_metrics_save=1
 sysctl -w net.ipv4.route.flush=1
 sysctl -w net.ipv4.conf.all.rp_filter=1
 sysctl -w net.ipv4.conf.lo.rp_filter=1
 sysctl -w net.ipv4.conf.eth0.rp_filter=1
 sysctl -w net.ipv4.conf.default.rp_filter=1
 sysctl -w net.ipv4.conf.all.accept_source_route=0
 sysctl -w net.ipv4.conf.lo.accept_source_route=0
 sysctl -w net.ipv4.conf.eth0.accept_source_route=0
 sysctl -w net.ipv4.conf.default.accept_source_route=0
 sysctl -w net.ipv4.ip_local_port_range=1024 65535
 sysctl -w net.ipv4.tcp_tw_reuse=1
 sysctl -w net.ipv4.tcp_window_scaling=1
 sysctl -w net.ipv4.tcp_rfc1337=1
 sysctl -w net.ipv4.ip_forward=0
 sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
 sysctl -w net.ipv4.icmp_echo_ignore_all=1
 sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
 sysctl -w net.core.somaxconn=15000
 sysctl -w net.core.netdev_max_backlog=1000
 sysctl -w net.core.rmem_default=65536
 sysctl -w net.core.wmem_default=65536
 sysctl -w net.core.rmem_max=16777216
 sysctl -w net.core.wmem_max=16777216</pre>
<h2></h2>
<h2>Перманентное сохранение настроек</h2>
<p>Если сервер после применения настроек работает нормально, добавьте настройки в файл /etc/sysctl.conf в следующем виде:</p>
<pre>net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
net.ipv4.tcp_max_orphans=65536
net.ipv4.tcp_fin_timeout=10
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_keepalive_intvl=15
net.ipv4.tcp_keepalive_probes=5
net.ipv4.tcp_max_syn_backlog=4096
net.ipv4.tcp_synack_retries=1
net.ipv4.tcp_mem=50576   64768   98152
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_orphan_retries=0
net.ipv4.tcp_syncookies=0
net.ipv4.netfilter.ip_conntrack_max=1048576
net.ipv4.tcp_timestamps=1
net.ipv4.tcp_sack=1
net.ipv4.tcp_congestion_control=htcp
net.ipv4.tcp_no_metrics_save=1
net.ipv4.route.flush=1
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.lo.rp_filter=1
net.ipv4.conf.eth0.rp_filter=1
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.ip_local_port_range=1024 65535
net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_window_scaling=1
net.ipv4.tcp_rfc1337=1
net.ipv4.ip_forward=0
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_echo_ignore_all=1
net.ipv4.icmp_ignore_bogus_error_responses=1
net.core.somaxconn=15000
net.core.netdev_max_backlog=1000
net.core.rmem_default=65536
net.core.wmem_default=65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216</pre>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/w2jJgcmMxqg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_197/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%8f%d0%b4%d1%80%d0%b0-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_197/%d0%bd%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-%d1%8f%d0%b4%d1%80%d0%b0-linux-%d0%b4%d0%bb%d1%8f-%d0%bf%d0%be%d0%b4%d0%b4%d0%b5%d1%80%d0%b6%d0%ba%d0%b8-%d0%b1%d0%be%d0%bb%d1%8c%d1%88%d0%be/</feedburner:origLink></item>
		<item>
		<title>JetBrains PHPStorm VS NetBeans</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/IKZDO1fSHAw/</link>
		<comments>http://ru.fractalizer.ru/frpost_194/jetbrains-phpstorm-vs-netbeans/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 06:57:59 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=194</guid>
		<description><![CDATA[Читая статью на Хабре про скидки на PHPStorm, которым я давно уже пользуюсь и очень доволен, набрел в комментах на отличный список преимуществ PHPStorm перед Netbeans. Не могу удержаться от цитирования: подсветка и автокомплит например, CSS внутри HTML внутри JS внутри PHP. навигация по CSS именованные пачки вкладок (tasks) интегрированные с контролем версий и багтрекером [...]]]></description>
			<content:encoded><![CDATA[<p>Читая <a href="http://habrahabr.ru/blogs/php/131610/">статью на Хабре про скидки на PHPStorm</a>, которым я давно уже пользуюсь и очень доволен, набрел в комментах на отличный список преимуществ PHPStorm перед Netbeans. Не могу удержаться от цитирования:</p>
<p><span id="more-194"></span></p>
<ul>
<li>подсветка и автокомплит например, CSS внутри HTML внутри JS внутри PHP.</li>
<li>навигация по CSS</li>
<li>именованные пачки вкладок (tasks) интегрированные с контролем версий и багтрекером</li>
<li>лучший в мире GUI к Git (насколько вообще возможен GUI к этому поделию) и интеграция с Github.</li>
<li>Несколько VCS в проекте в любых сочетаниях любой вложенности с несколькими &#171;корнями&#187;</li>
<li>PhpStorm работает быстрее NetBeans for PHP.</li>
<li>поддержка PHPUnit (Status GUI, Go to test итп)</li>
<li>лучший в мире commit dialog (ввод коммента и полноценная правка исходников прямо из просмотра diffа)</li>
<li>рефакторинги вроде rename var/field/class (последний переименовывает заодно и файлы с классом и тестами), extract|inline variable, extract method итп.</li>
<li>идеальная реализация VCS history</li>
<li>лучший в мире редактор Javascript (автокомплит, рефакторинг, поддержка популярных фреймворков ипр.)</li>
<li>лучшая в мире реализация local history</li>
<li>визуальное слияние изменений файла внешней программой</li>
<li>управление кодировкой на уровнях проек/папка/файл (netbeans — кодировка одна на весь проект);</li>
<li>быстрое форматирование кода на больших файлах</li>
<li>цветные вкладки, раскрашиваемые по путям, которые можно задавать регулярками. Контроллеры, модели и вьюхи разными цветами</li>
<li>в результатах поиска можно тыкнуть на строчку — в окне рядом появится участок кода. Не надо открывать файл, чтобы посмотреть</li>
<li> подсветка неиспользуемых переменных</li>
<li>куча клавиатурных сочетаний</li>
</ul>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/IKZDO1fSHAw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_194/jetbrains-phpstorm-vs-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_194/jetbrains-phpstorm-vs-netbeans/</feedburner:origLink></item>
		<item>
		<title>Jooq — «LINQ» для Java, типобезопасный построитель SQL запросов в Java коде</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/H86AqMdhFj0/</link>
		<comments>http://ru.fractalizer.ru/frpost_178/jooq-linq-%d0%b4%d0%bb%d1%8f-java-%d1%82%d0%b8%d0%bf%d0%be%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d1%8b%d0%b9-%d0%bf%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d0%b5%d0%bb%d1%8c-sql/#comments</comments>
		<pubDate>Fri, 22 Apr 2011 10:26:09 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[jooq]]></category>
		<category><![CDATA[linq]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=178</guid>
		<description><![CDATA[Недавно, в поисках золотой середины между JDBC и ORM, я натолкнулся на интересную open source библиотеку (лицензия Apache Software License), с помощью которой можно строить SQL прямо в Java-коде достаточно удобно и безопасно. Библиотека называется jooq. jooq включает в себя генератор кода, который парсит структуру вашей базы данных и создает необходимые Java-классы. На деле получается [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно, <a href="http://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java" target="_blank">в поисках</a> золотой середины между JDBC и ORM, я натолкнулся на интересную open source библиотеку (лицензия <a href="http://en.wikipedia.org/wiki/Apache_Software_License">Apache Software License</a>), с помощью которой можно строить SQL прямо в Java-коде достаточно удобно и безопасно. Библиотека называется jooq. jooq включает в себя генератор кода, который парсит структуру вашей базы данных и создает необходимые Java-классы. На деле получается примерно такой код:</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_1"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#codesyntax_1"  onClick="javascript:wpsh_toggleBlock(1)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_1" onClick="javascript:wpsh_code(1)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_1" onClick="javascript:wpsh_print(1)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a> taskId <span class="sy0">=</span> sqlFactory.<span class="me1">select</span><span class="br0">&#40;</span>ID<span class="br0">&#41;</span>.<span class="me1">from</span><span class="br0">&#40;</span>TASK<span class="br0">&#41;</span>.<span class="me1">where</span><span class="br0">&#40;</span>STATUS.<span class="me1">equal</span><span class="br0">&#40;</span>TaskStatus.<span class="me1">QUEUED</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.
    <span class="me1">orderBy</span><span class="br0">&#40;</span>LAST_UPDATED<span class="br0">&#41;</span>.<span class="me1">limit</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span>.<span class="me1">fetchOne</span><span class="br0">&#40;</span>ID<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<p>Как видите, конструирование запроса и его выполнение для простых типов занимает одну строку. Немного о jooq:<br />
<span id="more-178"></span></p>
<h2>Что у нас хорошего?</h2>
<ul>
<li>Поддержка MySQL 5.1.41 / 5.5.8, Oracle XE 10.2.0.1.0, DB2 9.7, PostGreSQL 9.0, H2 1.3.154, HSQLDB 2.1.0, SQLite, Derby 10.7</li>
<li>Планируется поддержка Sybase, MSSQL, Ingres, Firebird</li>
<li>Поддержка генерации кода не только для таблиц / полей, но и представлений, хранимых процедур, UDF, сложных типов вроде ENUM в MySQL, Blob (можно представить их в виде обычных byte[])</li>
<li>Поскольку вся схема базы данных представлена классами, в <a href="http://www.jetbrains.com/idea/" target="_blank">нормальных IDE</a> (и даже <a href="http://www.eclipse.org/" target="_blank">в тех</a>, что <a href="http://netbeans.org/" target="_blank">не очень</a>) <img src='http://ru.fractalizer.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  работает автозавершение языковых конструкций</li>
<li>Отсутствие уязвимости SQL Injection при правильном использовании &#8212; jooq пользуется шаблонами параметров в запросах</li>
<li>По большей части независимый от базы данных синтаксис</li>
<li>Использование обобщенных типов обеспечивает достаточное количество проверок еще при компиляции кода. Плюс невозможно забыть исправить какой-либо кусочек кода, если вы вдруг переименовали столбец в таблице БД. После повторного парсинга БД некорректный код просто не скомпилируется</li>
<li>Базовая поддержка ActiveRecord (полученную из базы данных запись можно изменить и записать назад одним-двумя строчками)</li>
<li>Поддержка не только SELECT запросов, но и INSERT, UPDATE.</li>
<li>Поддержка вложенных запросов, произвольных полей, агрегатных функций, UNION запросов, арифметических и других операций</li>
<li>Удобные методы получения результатов выполнения запроса &#8212; fetch(), fetchAny(), fetchLazy(), fetchMap() и другие.</li>
<li>Хорошая поддержка <a href="http://www.slf4j.org/" target="_blank">SLF4J</a> в том числе и для профайлинга внутреннего устройства Jooq.</li>
<li><a href="https://sourceforge.net/apps/trac/jooq/roadmap" target="_blank">Много чего запланировано</a></li>
<li>Автор постоянно в интернете, очень оперативно отвечает на вопросы в <a href="http://groups.google.com/group/jooq-user" target="_blank">jooq Google Group</a> и на <a href="https://sourceforge.net/apps/trac/jooq/report" target="_blank">тикеты в баг-трекере</a>.</li>
<li>Поддержка <a href="http://maven.apache.org/" target="_blank">Maven</a>. Дистрибутивы jooq доступны через <a href="http://maven.apache.org/guides/mini/guide-central-repository-upload.html" target="_blank">Maven Central</a>.</li>
<li>Поддержка как DSL синтаксиса <em>(select().from().where())</em> конструирования запросов, так и ООП <em>(a=new Query(); a.addSelect(); a.addFrom())</em></li>
<li>Результаты запросов и сами объекты запросов сериализуемы.</li>
</ul>
<h2>Что у нас плохого?</h2>
<ul>
<li><a href="https://sourceforge.net/apps/trac/jooq/ticket/420" target="_blank">Пока нет</a> непосредственной поддержки некоторых специфичных языковых возможностей вроде &#171;FOR UPDATE&#187; или &#171;index usage hints&#187;конструкций в SELECT. Но есть <a href="https://groups.google.com/forum/#!topic/jooq-user/Xoiy4vWODK0" target="_blank">workaround</a>.</li>
<li>Если вы работаете в одном классе более чем с одной таблицей, import static в некоторых случаях использовать затруднительно, что приводит к некоторому усложнению внешнего вида запроса (пример по отношению к тому, что указан сверху):</li>
</ul>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_2"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#codesyntax_2"  onClick="javascript:wpsh_toggleBlock(2)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_2" onClick="javascript:wpsh_code(2)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_2" onClick="javascript:wpsh_print(2)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a> taskId <span class="sy0">=</span> sqlFactory.<span class="me1">select</span><span class="br0">&#40;</span>Task.<span class="me1">ID</span><span class="br0">&#41;</span>.<span class="me1">from</span><span class="br0">&#40;</span>Task.<span class="me1">TASK</span><span class="br0">&#41;</span>.<span class="me1">where</span><span class="br0">&#40;</span>Task.<span class="me1">STATUS</span>.<span class="me1">equal</span><span class="br0">&#40;</span>TaskStatus.<span class="me1">QUEUED</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.
    <span class="me1">orderBy</span><span class="br0">&#40;</span>Task.<span class="me1">LAST_UPDATED</span><span class="br0">&#41;</span>.<span class="me1">limit</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span>.<span class="me1">fetchOne</span><span class="br0">&#40;</span>Task.<span class="me1">ID</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<ul>
<li>Небольшой оверхед при исполнении запросов и обходе результата (думаю, он небольшой, десятки-сотни микросекунд, может быть?)</li>
<li><a href="https://sourceforge.net/apps/trac/jooq/ticket/416" target="_blank">Пока нет</a> непосредственной поддержки LAST_INSERT_ID() в MySQL. Но есть <a href="https://groups.google.com/d/topic/jooq-user/bCTfnqnS1zU/discussion" target="_blank">workaround</a>. Sequences <a href="http://sourceforge.net/apps/trac/jooq/wiki/Manual/META/SEQUENCE" target="_blank">поддерживаются</a>.</li>
</ul>
<p>&nbsp;</p>
<h2>Субъективности</h2>
<ul>
<li>Кода пока нет на GitHub  <img src='http://ru.fractalizer.ru/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> , основная разработка ведется в Subversion</li>
<li>SourceForge страницы проекта слегка тормозят, что немного раздражает.</li>
<li>Мануал вроде бы достаточно подробен, но некоторые простые, но полезные вещи в нем отсутствуют. Он также показался мне не слишком удобным. В нем описано только самое основное без &#171;фишек&#187;, &#171;плюшек&#187; и удобностей. Впрочем, если у вас большой стаж Java, наверное, до всего можно и самому быстро дойти. Кроме того, мне показалось, что он не слишком хорошо структурирован. Информация по нему размазана. Я всегда тороплюсь и хороший мануал для меня must-have&#8230;</li>
<li>Не слишком удобный синтаксис для работы с агрегированными полями (во всяком случае, я по-другому пока не придумал, как можно это сделать удобно)</li>
</ul>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_3"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#codesyntax_3"  onClick="javascript:wpsh_toggleBlock(3)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_3" onClick="javascript:wpsh_code(3)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_3" onClick="javascript:wpsh_print(3)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;">Field<span class="sy0">&lt;</span>Integer<span class="sy0">&gt;</span> jobTypeCountField <span class="sy0">=</span> Job.<span class="me1">JOBTYPE_ID</span>.<span class="me1">count</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">as</span><span class="br0">&#40;</span><span class="st0">&quot;JOBTYPE_ID_COUNT&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
Result<span class="sy0">&lt;</span>Record<span class="sy0">&gt;</span> jobTypeCountRecord <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span>
jobTypeCountRecord <span class="sy0">=</span> sqlFactory.<span class="me1">select</span><span class="br0">&#40;</span>Job.<span class="me1">JOBTYPE_ID</span>, jobTypeCountField<span class="br0">&#41;</span>.<span class="me1">from</span><span class="br0">&#40;</span>Job.<span class="me1">JOB</span><span class="br0">&#41;</span>
    .<span class="me1">where</span><span class="br0">&#40;</span>Job.<span class="me1">STATUS</span>.<span class="me1">equal</span><span class="br0">&#40;</span>JobStatus.<span class="me1">EXECUTING</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">groupBy</span><span class="br0">&#40;</span>Job.<span class="me1">JOBTYPE_ID</span><span class="br0">&#41;</span>.<span class="me1">fetch</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span>Record record <span class="sy0">:</span> jobTypeCountRecord<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>record.<span class="me1">getValue</span><span class="br0">&#40;</span>Job.<span class="me1">JOBTYPE_ID</span><span class="br0">&#41;</span> <span class="sy0">+</span> <span class="st0">&quot; - &quot;</span> <span class="sy0">-</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>jobTypeCountField<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>Впрочем, мнения на этот счет могут быть разными. Кому-то такой код покажется более понятным.</p>
<ul>
<li>В версии 2.0 запланированы <a href="https://sourceforge.net/apps/trac/jooq/query?status=assigned&amp;status=new&amp;status=accepted&amp;status=reopened&amp;group=status&amp;milestone=Version+2.0+The+far+away+future" target="_blank">очень интересные плюшки</a>.</li>
<li>Не-wiki документация (Trac) и не слишком удобная по ней навигация. Впрочем, в коде достаточно javadoc чтобы все понимать по Ctrl-Q. Впрочем, просто я считаю Trac не слишком удобным, вот и придираюсь&#8230;</li>
<li>Пока <a href="https://sourceforge.net/projects/jooq/files/Release/stats/timeline?dates=2011-01-01+to+2011-04-22" target="_blank">сравнительно</a> <a href="http://stackoverflow.com/questions/5625832/java-jooq-persistence-framework-performance-and-feed-back" target="_blank">небольшое</a> количество пользователей.</li>
</ul>
<h2><a href="http://stackoverflow.com/questions/5620985/is-there-any-good-dynamic-sql-builder-library-in-java" target="_blank">Аналоги</a> jooq</h2>
<ul>
<li><a rel="nofollow" href="http://www.querydsl.com/">Querydsl</a></li>
<li><a rel="nofollow" href="https://github.com/fuzzylollipop/sqlck">SQL Construction Kit</a> (документации по нему найти не удалось)</li>
</ul>
<p>&nbsp;</p>
<h2>Контакты:</h2>
<ul>
<li>Сайт проекта &#8212; <a href="http://www.jooq.org" target="_blank">http://www.jooq.org</a></li>
<li>Мануал: <a href="http://sourceforge.net/apps/trac/jooq/wiki/Manual" target="_blank">http://sourceforge.net/apps/trac/jooq/wiki/Manual</a></li>
<li>Форум &#8212; <a href="http://groups.google.com/group/jooq-user" target="_blank">http://groups.google.com/group/jooq-user</a></li>
<li>SVN Info: <a href="https://sourceforge.net/scm/?type=svn&amp;group_id=283484" target="_blank">https://sourceforge.net/scm/?type=svn&amp;group_id=283484</a></li>
</ul>
<p>&nbsp;</p>
<h2>Несколько примеров из исходников Jooq (работа с базой information_schema в MySQL)</h2>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;">select<span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">CONSTRAINT_NAME</span>, KeyColumnUsage.<span class="me1">TABLE_NAME</span>, KeyColumnUsage.<span class="me1">COLUMN_NAME</span><span class="br0">&#41;</span>
                .<span class="me1">from</span><span class="br0">&#40;</span>KEY_COLUMN_USAGE<span class="br0">&#41;</span>.<span class="me1">join</span><span class="br0">&#40;</span>TABLE_CONSTRAINTS<span class="br0">&#41;</span>
                .<span class="me1">on</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">TABLE_SCHEMA</span>.<span class="me1">equal</span><span class="br0">&#40;</span>TableConstraints.<span class="me1">TABLE_SCHEMA</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">and</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">TABLE_NAME</span>.<span class="me1">equal</span><span class="br0">&#40;</span>TableConstraints.<span class="me1">TABLE_NAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">and</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">CONSTRAINT_NAME</span>.<span class="me1">equal</span><span class="br0">&#40;</span>TableConstraints.<span class="me1">CONSTRAINT_NAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">where</span><span class="br0">&#40;</span>TableConstraints.<span class="me1">CONSTRAINT_TYPE</span>.<span class="me1">equal</span><span class="br0">&#40;</span>constraintType<span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">and</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">TABLE_SCHEMA</span>.<span class="me1">equal</span><span class="br0">&#40;</span>getSchemaName<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">orderBy</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">TABLE_NAME</span>.<span class="me1">ascending</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, KeyColumnUsage.<span class="me1">ORDINAL_POSITION</span>.<span class="me1">ascending</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.<span class="me1">fetch</span><span class="br0">&#40;</span><span class="br0">&#41;</span></pre></div></div>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">for</span> <span class="br0">&#40;</span>Record record <span class="sy0">:</span> create<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">select</span><span class="br0">&#40;</span>
                    ReferentialConstraints.<span class="me1">CONSTRAINT_NAME</span>,
                    ReferentialConstraints.<span class="me1">TABLE_NAME</span>,
                    ReferentialConstraints.<span class="me1">REFERENCED_TABLE_NAME</span>,
                    ReferentialConstraints.<span class="me1">UNIQUE_CONSTRAINT_NAME</span>,
                    KeyColumnUsage.<span class="me1">COLUMN_NAME</span><span class="br0">&#41;</span>
                .<span class="me1">from</span><span class="br0">&#40;</span>REFERENTIAL_CONSTRAINTS<span class="br0">&#41;</span>
                .<span class="me1">join</span><span class="br0">&#40;</span>KEY_COLUMN_USAGE<span class="br0">&#41;</span>
                .<span class="me1">on</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">CONSTRAINT_SCHEMA</span>.<span class="me1">equal</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">CONSTRAINT_SCHEMA</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">and</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">CONSTRAINT_NAME</span>.<span class="me1">equal</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">CONSTRAINT_NAME</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">where</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">CONSTRAINT_SCHEMA</span>.<span class="me1">equal</span><span class="br0">&#40;</span>getSchemaName<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">orderBy</span><span class="br0">&#40;</span>
                    KeyColumnUsage.<span class="me1">CONSTRAINT_NAME</span>.<span class="me1">ascending</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,
                    KeyColumnUsage.<span class="me1">ORDINAL_POSITION</span>.<span class="me1">ascending</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
                .<span class="me1">fetch</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> foreignKey <span class="sy0">=</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">CONSTRAINT_NAME</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> foreignKeyColumn <span class="sy0">=</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>KeyColumnUsage.<span class="me1">COLUMN_NAME</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> foreignKeyTableName <span class="sy0">=</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">TABLE_NAME</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> referencedKey <span class="sy0">=</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">UNIQUE_CONSTRAINT_NAME</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> referencedTableName <span class="sy0">=</span> record.<span class="me1">getValue</span><span class="br0">&#40;</span>ReferentialConstraints.<span class="me1">REFERENCED_TABLE_NAME</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            TableDefinition foreignKeyTable <span class="sy0">=</span> getTable<span class="br0">&#40;</span>foreignKeyTableName<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
            <span class="kw1">if</span> <span class="br0">&#40;</span>foreignKeyTable <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                ColumnDefinition column <span class="sy0">=</span> foreignKeyTable.<span class="me1">getColumn</span><span class="br0">&#40;</span>foreignKeyColumn<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
                <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> key <span class="sy0">=</span> getKeyName<span class="br0">&#40;</span>referencedTableName, referencedKey<span class="br0">&#41;</span><span class="sy0">;</span>
                relations.<span class="me1">addForeignKey</span><span class="br0">&#40;</span>foreignKey, key, column<span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
        <span class="br0">&#125;</span></pre></div></div>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/H86AqMdhFj0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_178/jooq-linq-%d0%b4%d0%bb%d1%8f-java-%d1%82%d0%b8%d0%bf%d0%be%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d1%8b%d0%b9-%d0%bf%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d0%b5%d0%bb%d1%8c-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_178/jooq-linq-%d0%b4%d0%bb%d1%8f-java-%d1%82%d0%b8%d0%bf%d0%be%d0%b1%d0%b5%d0%b7%d0%be%d0%bf%d0%b0%d1%81%d0%bd%d1%8b%d0%b9-%d0%bf%d0%be%d1%81%d1%82%d1%80%d0%be%d0%b8%d1%82%d0%b5%d0%bb%d1%8c-sql/</feedburner:origLink></item>
		<item>
		<title>Используем CDN Яндекса для jQuery в XenForo</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/ROHx7vPiN9g/</link>
		<comments>http://ru.fractalizer.ru/frpost_171/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-cdn-%d1%8f%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d0%b0-%d0%b4%d0%bb%d1%8f-jquery-%d0%b2-xenforo/#comments</comments>
		<pubDate>Wed, 09 Mar 2011 13:27:19 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[XenForo]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=171</guid>
		<description><![CDATA[Если форум предназначен для России, можно использовать CDN Яндекса. Только нужно немного форум подпатчить. 1. Открываем library\XenForo\Dependencies\Public.php и заменяем метод getJquerySource на такой (просто добавляем еще один case фактически): 2. В Debug режиме идем в панель управления, находим там опцию jQuery Source (CDNjQuery) в разделе Performance (Производительность) и нажимаем карандашик справа (редактирование). Format Parameters (Параметры [...]]]></description>
			<content:encoded><![CDATA[<p>Если форум предназначен для России, можно использовать CDN Яндекса. Только нужно немного форум подпатчить.</p>
<p>1. Открываем library\XenForo\Dependencies\Public.php и заменяем метод  getJquerySource на такой (просто добавляем еще один case фактически):</p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Нажмите, чтобы показать или скрыть блок кода">Исходный код</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Показать код отдельно"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Напечатать код"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Показать информацию о плагине"><img border="0" style="border: 0 none" src="http://ru.fractalizer.ru/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="php" style="font-family:monospace;"><span class="co4">/**
	 * Fetch the path / URL to the jQuery core library
	 *
	 * @param boolean $forceLocal If true, forces the local version of jQuery
	 *
	 * @return string
	 */</span>
	<span class="kw2">public</span> static <span class="kw2">function</span> getJquerySource<span class="br0">&#40;</span><span class="re0">$forceLocal</span> <span class="sy0">=</span> <span class="kw4">false</span><span class="br0">&#41;</span>
	<span class="br0">&#123;</span>
		<span class="re0">$jQueryVersion</span> <span class="sy0">=</span> XenForo_Application<span class="sy0">::</span><span class="re0">$jQueryVersion</span><span class="sy0">;</span>
		<span class="re0">$min</span> <span class="sy0">=</span> <span class="st_h">'.min'</span><span class="sy0">;</span>
&nbsp;
		<span class="co1">// CDN sources from http://docs.jquery.com/Downloading_jQuery#CDN_Hosted_jQuery</span>
		<span class="re0">$source</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re0">$forceLocal</span> ? <span class="st_h">'local'</span> <span class="sy0">:</span> XenForo_Application<span class="sy0">::</span><span class="me2">get</span><span class="br0">&#40;</span><span class="st_h">'options'</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">jQuerySource</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="kw1">switch</span> <span class="br0">&#40;</span><span class="re0">$source</span><span class="br0">&#41;</span>
		<span class="br0">&#123;</span>
			<span class="kw1">case</span> <span class="st_h">'jquery'</span><span class="sy0">:</span>
			<span class="kw1">case</span> <span class="st_h">'mt'</span><span class="sy0">:</span>
				<span class="kw1">return</span> <span class="st0">&quot;http://code.jquery.com/jquery-<span class="es4">{$jQueryVersion}</span><span class="es4">{$min}</span>.js&quot;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">case</span> <span class="st_h">'google'</span><span class="sy0">:</span>
				<span class="kw1">return</span> <span class="st0">&quot;http://ajax.googleapis.com/ajax/libs/jquery/<span class="es4">{$jQueryVersion}</span>/jquery<span class="es4">{$min}</span>.js&quot;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">case</span> <span class="st_h">'microsoft'</span><span class="sy0">:</span>
				<span class="kw1">return</span> <span class="st0">&quot;http://ajax.microsoft.com/ajax/jquery/jquery-<span class="es4">{$jQueryVersion}</span><span class="es4">{$min}</span>.js&quot;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">case</span> <span class="st_h">'yandex'</span><span class="sy0">:</span>
				<span class="kw1">return</span> <span class="st0">&quot;http://yandex.st/jquery/<span class="es4">{$jQueryVersion}</span>/jquery<span class="es4">{$min}</span>.js&quot;</span><span class="sy0">;</span>
&nbsp;
			<span class="kw1">default</span><span class="sy0">:</span>
				<span class="kw1">return</span> <span class="st0">&quot;js/jquery/jquery-<span class="es4">{$jQueryVersion}</span><span class="es4">{$min}</span>.js&quot;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>2. В <a href="http://www.xf-russia.ru/forum/threads/%D0%9A%D0%B0%D0%BA-%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8-%D1%84%D0%BE%D1%80%D1%83%D0%BC%D0%B0-%D0%B2%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D1%84%D0%BE%D1%80%D1%83%D0%BC-%D0%B2-%D1%80%D0%B5%D0%B6%D0%B8%D0%BC-%D0%BE%D1%82%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8.304/#post-9177" target="_blank">Debug режиме</a> идем в панель управления, находим там опцию jQuery  Source (CDNjQuery) в разделе Performance (Производительность) и нажимаем  карандашик справа (редактирование). Format Parameters (Параметры  формата) заменяем на:</p>
<pre>local=Local
google=Google Ajax API CDN
jquery=jQuery CDN
microsoft=Microsoft CDN
yandex=Яндекс CDN</pre>
<p>Вот и все.  Теперь в настройках форума можно выбрать Яндекс CDN и jQuery будет загружаться с Яндекса. Только не забудьте отключить Debug режим.</p>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/ROHx7vPiN9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_171/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-cdn-%d1%8f%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d0%b0-%d0%b4%d0%bb%d1%8f-jquery-%d0%b2-xenforo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_171/%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d1%83%d0%b5%d0%bc-cdn-%d1%8f%d0%bd%d0%b4%d0%b5%d0%ba%d1%81%d0%b0-%d0%b4%d0%bb%d1%8f-jquery-%d0%b2-xenforo/</feedburner:origLink></item>
		<item>
		<title>Регулярка для ника: либо по-русски, либо по-английски, но не смешивая</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/OrnGht3WInI/</link>
		<comments>http://ru.fractalizer.ru/frpost_166/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%ba%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%bd%d0%b8%d0%ba%d0%b0-%d0%bb%d0%b8%d0%b1%d0%be-%d0%bf%d0%be-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8-%d0%bb%d0%b8%d0%b1%d0%be/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 14:02:05 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=166</guid>
		<description><![CDATA[Недавно меня попросили написать регулярное выражение, которое бы пропускало ники на форуме написанные либо целиком русскими буквами, либо целиком английскими (чтобы не допускала смешение букв). На форуме используется кодировка UTF-8. ^(([a-zA-Z0-9_\-\?]+)&#124;(((\xD0[\x80-\xBF])&#124;(\xD1[\x80-\xBF])&#124;([0-9_\-\?]))+))$ Вот она такая получилась. Обратите внимание, что пробелы запрещены. Если требуется их разрешить, можно добавить после 0-9 \x20.]]></description>
			<content:encoded><![CDATA[<p>Недавно меня попросили написать регулярное выражение, которое бы пропускало ники на форуме написанные либо целиком русскими буквами, либо целиком английскими (чтобы не допускала смешение букв). На форуме используется кодировка UTF-8.</p>
<pre><code>^(([a-zA-Z0-9_\-\?]+)|(((\xD0[\x80-\xBF])|(\xD1[\x80-\xBF])|([0-9_\-\?]))+))$
</code></pre>
<p>Вот она такая получилась. Обратите внимание, что пробелы запрещены. Если требуется их разрешить, можно добавить после 0-9 <strong>\x20</strong>.</p>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/OrnGht3WInI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_166/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%ba%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%bd%d0%b8%d0%ba%d0%b0-%d0%bb%d0%b8%d0%b1%d0%be-%d0%bf%d0%be-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8-%d0%bb%d0%b8%d0%b1%d0%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_166/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%ba%d0%b0-%d0%b4%d0%bb%d1%8f-%d0%bd%d0%b8%d0%ba%d0%b0-%d0%bb%d0%b8%d0%b1%d0%be-%d0%bf%d0%be-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8-%d0%bb%d0%b8%d0%b1%d0%be/</feedburner:origLink></item>
		<item>
		<title>Регулярное выражение для русских букв в UTF-8</title>
		<link>http://feedproxy.google.com/~r/FractalizersWebsiteRU/~3/aSY8g06Jh_8/</link>
		<comments>http://ru.fractalizer.ru/frpost_162/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8%d1%85-%d0%b1%d1%83%d0%ba/#comments</comments>
		<pubDate>Mon, 22 Nov 2010 09:23:07 +0000</pubDate>
		<dc:creator>FractalizeR</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Статьи]]></category>

		<guid isPermaLink="false">http://ru.fractalizer.ru/?p=162</guid>
		<description><![CDATA[(\xD0[\x80-\xBF])&#124;(\xD1[\x80-\xBF]) &#8212; одна любая русская буква]]></description>
			<content:encoded><![CDATA[<p>(\xD0[\x80-\xBF])|(\xD1[\x80-\xBF]) &#8212; одна любая русская буква</p>
<img src="http://feeds.feedburner.com/~r/FractalizersWebsiteRU/~4/aSY8g06Jh_8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://ru.fractalizer.ru/frpost_162/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8%d1%85-%d0%b1%d1%83%d0%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://ru.fractalizer.ru/frpost_162/%d1%80%d0%b5%d0%b3%d1%83%d0%bb%d1%8f%d1%80%d0%bd%d0%be%d0%b5-%d0%b2%d1%8b%d1%80%d0%b0%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b4%d0%bb%d1%8f-%d1%80%d1%83%d1%81%d1%81%d0%ba%d0%b8%d1%85-%d0%b1%d1%83%d0%ba/</feedburner:origLink></item>
	</channel>
</rss>

