<?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>AE Devs</title>
	<atom:link href="http://aedevs.ru/feed" rel="self" type="application/rss+xml" />
	<link>http://aedevs.ru</link>
	<description>мы разрабатываем няшечки</description>
	<lastBuildDate>Tue, 24 Apr 2012 14:47:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Безопасное квотирование</title>
		<link>http://aedevs.ru/posts/99</link>
		<comments>http://aedevs.ru/posts/99#comments</comments>
		<pubDate>Tue, 24 Apr 2012 14:47:39 +0000</pubDate>
		<dc:creator>Astraller</dc:creator>
				<category><![CDATA[Вне категорий]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=99</guid>
		<description><![CDATA[В продолжение темы habrahabr.ru/post/142599&#8230; Кроме проверки цифровых данных посредством приведения их функциями intval() и floatval(), есть случаи когда не стоит использовать mysql_real_scape_string(). Приведу пару примеров. Логины, например при авторизации. Практически везде пространство логинов ограничено определенным набором символов. Например у нас разрешены латинские буквы и цифры в логине. Кроме того логин не должен быть длиннее 8 [...]]]></description>
			<content:encoded><![CDATA[<p>В продолжение темы habrahabr.ru/post/142599&#8230;</p>
<p>Кроме проверки цифровых данных посредством приведения их функциями <span style="color:#990000;">intval</span>() и <span style="color:#990000;">floatval</span>(), есть случаи когда не стоит использовать <span style="color:#990000;">mysql_real_scape_string</span>().</p>
<p>Приведу пару примеров.</p>
<p><strong>Логины</strong>, например при авторизации. Практически везде пространство логинов ограничено определенным набором символов. Например у нас разрешены латинские буквы и цифры в логине. Кроме того логин не должен быть длиннее 8 символов. Тогда прежде чем использовать введенную пользователем строку в запросе стоит выполнить следующий простой код:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="php"><pre class="de1"><span class="re0">$login</span> <span class="sy0">=</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&quot;#[^a-z0-9]#i&quot;</span><span class="sy0">,</span> <span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="re0">$login</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="re0">$login</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re0">$login</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">8</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p><strong>Ключи</strong> &#8211; разнообразные ключевые строки, напимер хеши md5 и sha1, которые используются как ключ при восстановлении пароля или подтверждении регистрации из E-mail. Хеши опять же имеют известную длинну и набор символов. Так что к ним можно применить предыдущий код соответственно его модифицировав.</p>
<p>К чему я все это пишу &#8211; к тому что если вы можете предвидеть структуру значения поля, её надо проверять избегая <span style="color:#990000;">mysql_real_scape_string</span>(). Потому как ваша проверка, ручная всегда будет более точной.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/99/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>jQuery: Отмена активных ajax запросов</title>
		<link>http://aedevs.ru/posts/90</link>
		<comments>http://aedevs.ru/posts/90#comments</comments>
		<pubDate>Thu, 27 Oct 2011 15:18:53 +0000</pubDate>
		<dc:creator>Lucus</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[.xmlhttprequest]]></category>
		<category><![CDATA[abort all ajax requests]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=90</guid>
		<description><![CDATA[Иногда требуется отменить все активные XHR, либо какую-то часть из них. Для этой нужны я накидал плагин  для jQuery, которые автоматически добавляет все XHR в коллекцию с возможностью указать тег. &#160; &#40;function&#40;$&#41; &#123; $.xhrPool = &#123;&#125;; &#160; $.xhrPool.abortAll = function&#40;&#41; &#123; $.each&#40;this, function&#40;pool, map&#41; &#123; $.each&#40;map, function&#40;idx, jqXHR&#41; &#123; jqXHR.abort&#40;&#41;; $.xhrPool&#91;pool&#93;.splice&#40;idx, 1&#41;; &#125;&#41;; &#125;&#41;; &#125;; [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда требуется отменить все активные XHR, либо какую-то часть из них. Для этой нужны я накидал плагин  для jQuery, которые автоматически добавляет все XHR в коллекцию с возможностью указать тег.</p>
<p>&nbsp;</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>$<span class="br0">&#41;</span> <span class="br0">&#123;</span>
	$.<span class="me1">xhrPool</span> <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
	$.<span class="me1">xhrPool</span>.<span class="me1">abortAll</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
		$.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>pool<span class="sy0">,</span> map<span class="br0">&#41;</span> <span class="br0">&#123;</span>
			$.<span class="me1">each</span><span class="br0">&#40;</span>map<span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>idx<span class="sy0">,</span> jqXHR<span class="br0">&#41;</span> <span class="br0">&#123;</span>
				jqXHR.<span class="me1">abort</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
				$.<span class="me1">xhrPool</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span>.<span class="me1">splice</span><span class="br0">&#40;</span>idx<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
	$.<span class="me1">xhrPool</span>.<span class="me1">abort</span> <span class="sy0">=</span> <span class="kw2">function</span><span class="br0">&#40;</span>pool<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">typeof</span> <span class="kw1">this</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span> <span class="sy0">!=</span> <span class="st0">&quot;undefined&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			$.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span><span class="sy0">,</span> <span class="kw2">function</span><span class="br0">&#40;</span>idx<span class="sy0">,</span> jqXHR<span class="br0">&#41;</span> <span class="br0">&#123;</span>
				<span class="kw1">try</span> <span class="br0">&#123;</span>jqXHR.<span class="me1">abort</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span>e<span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span>
				$.<span class="me1">xhrPool</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span>.<span class="me1">splice</span><span class="br0">&#40;</span>idx<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span>
			<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
	<span class="br0">&#125;</span><span class="sy0">;</span>
&nbsp;
	$.<span class="me1">ajaxPrefilter</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>options<span class="sy0">,</span> originalOptions<span class="sy0">,</span> jqXHR<span class="br0">&#41;</span> <span class="br0">&#123;</span>
		<span class="kw2">var</span> pool <span class="sy0">=</span> options.<span class="me1">xhrpool</span> <span class="sy0">||</span> <span class="st0">&quot;global&quot;</span><span class="sy0">;</span>
&nbsp;
		<span class="kw1">if</span> <span class="br0">&#40;</span> <span class="sy0">!</span> $.<span class="me1">xhrPool</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
			$.<span class="me1">xhrPool</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy0">;</span>
		<span class="br0">&#125;</span>
&nbsp;
		$.<span class="me1">xhrPool</span><span class="br0">&#91;</span>pool<span class="br0">&#93;</span>.<span class="me1">push</span><span class="br0">&#40;</span>jqXHR<span class="br0">&#41;</span><span class="sy0">;</span>
	<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>jQuery<span class="br0">&#41;</span></pre></div></div></div></div></div></div></div>


<p>Тег указывается в вызове $.ajax() опцией xhrpool. Без указания этой опции все XHR будут добавляться в $.xhrPool.global. Также доступны 2 метода: $.xhrPool.abortAll() — останавливает все запросы и $.xhrPool.abort(&#8220;%pool%&#8221;) — останавливает запросы в коллекции с указанным тегом.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/90/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Отправка большой формы через Ajax</title>
		<link>http://aedevs.ru/posts/83</link>
		<comments>http://aedevs.ru/posts/83#comments</comments>
		<pubDate>Tue, 11 Oct 2011 10:48:14 +0000</pubDate>
		<dc:creator>Astraller</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=83</guid>
		<description><![CDATA[Любой кто хотя-бы раз отправить большую форму через Ajax &#8211; сталкивался с проблемой, когда в функции отправки приходилось перечислять заново все поля. Решение проблемы достаточно просто: нам нужна функция которая сама разберет форму. Первый вариант который приходит в голову: function parseForm&#40;identifier&#41;&#123; // Получаем все инпуты содержащиеся в форме var inputs = document.getElementById&#40;identifier&#41;.getElementsByTagName&#40;'input'&#41;; // Инициализируем массив [...]]]></description>
			<content:encoded><![CDATA[<p>Любой кто хотя-бы раз отправить большую форму через Ajax &#8211; сталкивался с проблемой, когда в функции отправки приходилось перечислять заново все поля.</p>
<p>Решение проблемы достаточно просто: нам нужна функция которая сама разберет форму.</p>
<p>Первый вариант который приходит в голову:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">function</span> parseForm<span class="br0">&#40;</span>identifier<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="co1">// Получаем все инпуты содержащиеся в форме</span>
  <span class="kw2">var</span> inputs <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>identifier<span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'input'</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="co1">// Инициализируем массив для результатов</span>
  <span class="kw2">var</span> values <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span>
  <span class="co1">// Перебираем элементы</span>
  <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> inputs<span class="br0">&#41;</span><span class="br0">&#123;</span>
    values<span class="br0">&#91;</span>inputs.<span class="me1">n</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> inputs.<span class="me1">n</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'value'</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Но тут есть проблема, в частности с input&#8217;ами типа checkbox и radio.</p>
<p>Немного модифицируем функцию что-бы корректно обрабатывать их.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">function</span> parseForm<span class="br0">&#40;</span>identifier<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="co1">// Получаем все инпуты содержащиеся в форме</span>
  <span class="kw2">var</span> inputs <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>identifier<span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">'input'</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="co1">// Инициализируем массив для результатов</span>
  <span class="kw2">var</span> values <span class="sy0">=</span> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">;</span>
  <span class="co1">// Перебираем элементы</span>
  <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> inputs<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span class="kw1">if</span><span class="br0">&#40;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'type'</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="st0">&quot;checkbox&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span class="co1">// Если тип - checkbox, то получаем значение checked</span>
      values<span class="br0">&#91;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'checked'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span><span class="kw1">else</span> <span class="kw1">if</span><span class="br0">&#40;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'type'</span><span class="br0">&#41;</span> <span class="sy0">==</span> <span class="st0">&quot;radio&quot;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span class="co1">// Если тип - radio, получаем список всех input с этим именем</span>
      <span class="kw2">var</span> radios <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>identifier<span class="br0">&#41;</span>.<span class="me1">getElementsByName</span><span class="br0">&#40;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="co1">// Перебираем их</span>
      <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="kw1">in</span> radios<span class="br0">&#41;</span><span class="br0">&#123;</span>
        <span class="co1">// Если текущий элемент выделен то ложим в результат его значение</span>
        <span class="kw1">if</span><span class="br0">&#40;</span>radios<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'checked'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
          values<span class="br0">&#91;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> radios<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'value'</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
      <span class="br0">&#125;</span>
    <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span>
      values<span class="br0">&#91;</span>inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> inputs<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'value'</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
  <span class="br0">&#125;</span>
&nbsp;
  <span class="kw1">return</span> values<span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Вот казалось бы и все, но мы еще забыли про select.<br />
Для него придется добавить в функцию еще часть:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">var</span> selects <span class="sy0">=</span> document.<span class="me1">getElementById</span><span class="br0">&#40;</span>identifier<span class="br0">&#41;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;select&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">for</span><span class="br0">&#40;</span>s <span class="kw1">in</span> selects<span class="br0">&#41;</span><span class="br0">&#123;</span>
    <span class="kw2">var</span> options <span class="sy0">=</span> selects<span class="br0">&#91;</span>s<span class="br0">&#93;</span>.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;option&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="co1">// Перебираем их</span>
    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="kw1">in</span> options<span class="br0">&#41;</span><span class="br0">&#123;</span>
      <span class="co1">// Если текущий элемент выделен то ложим в результат его значение</span>
      <span class="kw1">if</span><span class="br0">&#40;</span>options<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'selected'</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
        values<span class="br0">&#91;</span>selects<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'name'</span><span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="sy0">=</span> options<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">getAttribute</span><span class="br0">&#40;</span><span class="st0">'value'</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div></div></div></div></div>


<p>Реализация этого кода на jQuery останется домашним заданием <img src='http://aedevs.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/83/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSD и Linux</title>
		<link>http://aedevs.ru/posts/76</link>
		<comments>http://aedevs.ru/posts/76#comments</comments>
		<pubDate>Mon, 03 Oct 2011 06:16:12 +0000</pubDate>
		<dc:creator>raver119</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[HDD]]></category>
		<category><![CDATA[hdparm]]></category>
		<category><![CDATA[SSD]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=76</guid>
		<description><![CDATA[Наверное все знают, что SSD это круто в плане скорости чтения. Но совсем не круто в плане скорости записи, и еще менее круто в плане живучести. Особенно MLC устройства. Для того, чтобы решить обе эти проблемы в среде Windows, к каждому SSD девайсу прилагается тулз который позволяет настроить over-provisioning.  Но что делать *nix-администраторам? Для того [...]]]></description>
			<content:encoded><![CDATA[<p>Наверное все знают, что SSD это круто в плане скорости чтения. Но совсем не круто в плане скорости записи, и еще менее круто в плане живучести. Особенно MLC устройства.</p>
<p>Для того, чтобы решить обе эти проблемы в среде Windows, к каждому SSD девайсу прилагается тулз который позволяет настроить over-provisioning.  Но что делать *nix-администраторам?</p>
<p>Для того чтобы все было айс и тру &#8211; нам нужна тулза hdparm, и SSD винт должен быть подключен не в рейд-контроллер, а напрямую к SATA порту.</p>
<ol>
<li>Устанавливаем мастер-пароль для SSD.<br />
<strong>hdparm &#8211;user-master u &#8211;security-set-pass 123 /dev/sdb</strong></li>
<li>Выполняем secure erase.<br />
<strong> hdparm &#8211;user-master u &#8211;security-erase 123  /dev/sdb</strong></li>
<li>Ограничиваем доступный размер диска. Нужное вам количество секторов посчитайте сами.<br />
<strong>hdparm -Np1234567890 /dev/sdb</strong></li>
</ol>
<p>Если по какой-то причине с пунктом 3 у вас не сложилось, например как у нас &#8211; проблема с HPA, которую лениво решать, то можно его заменить: при создании рейда (если планируете использовать SSD  в рейде) либо при создании разделов (если планируете использовать SSD как самостоятельное устройство) вы должны указать только часть реального объема диска. Например &#8211; 80%. Или 50%. Все оставшееся после подобной разметки пустое место SSD автоматически применит для wear-off leveling, что значительно продлит жизнь вашему SSD и однозначно придаст ему бодрости при записи.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/76/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кроссдоменный AJAX</title>
		<link>http://aedevs.ru/posts/50</link>
		<comments>http://aedevs.ru/posts/50#comments</comments>
		<pubDate>Sat, 24 Sep 2011 09:35:52 +0000</pubDate>
		<dc:creator>Lucus</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[cross-domain ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jsonp]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=50</guid>
		<description><![CDATA[Самое простой способ — использование объекта XMLHTTPRequest в современных браузерах(Chrome 6+, Firefox 3.5+, Internet Explorer 8+, Safari 4+) и наличие у сервера заголовка Access-Control-Allow-Origin: * Все бы хорошо, вот только заметили ли вы в списке Оперу? Нет, она еще не поддерживает XMLHTTPRequest 2. Да и то что IE не поддерживает в 7-ой версии может оказаться для кого-то [...]]]></description>
			<content:encoded><![CDATA[<p>Самое простой способ — использование объекта XMLHTTPRequest в современных браузерах(<em>Chrome 6+, Firefox 3.5+, Internet Explorer 8+, Safari 4+</em>) и наличие у сервера заголовка <strong><code>Access-Control-Allow-Origin: *</code></strong></p>
<p>Все бы хорошо, вот только заметили ли вы в списке Оперу? Нет, она еще не поддерживает XMLHTTPRequest 2. Да и то что IE не поддерживает в 7-ой версии может оказаться для кого-то критичным. Ниже последуют другие способы кроссдоменного ajax&#8217;a.</p>
<p><strong>Проксирование</strong></p>
<p>Довольно популярный метод, представляет из себя отправку запроса на серверный скрипт, который получает целевой url и возвращает его в ответе на запрос. Привязка к серверному скрипту делает этот метод недопустимым в некоторых случаях. Да и как минус можно задержку отметить.</p>
<p><strong> JSONP</strong></p>
<p>JSON Padding или так называемый &#8220;JSON с подкладкой&#8221; — способ с JSON при котором имя калбэка указывается в аргументах запроса. При этом запрос подгружается через тег script, а в ответе json-объект должен быть заключен в вызов того самого переданного калбэка. Пример:</p>
<p><code>запрос http://example.com/?q=somevalue&amp;<strong>callback=mycallback</strong><br />
ответ  <strong>mycallback(</strong>{"foo": "bar", "a": "x"}<strong>)</strong></code></p>
<p>Из минусов возможность использовать только GET-запрос.</p>
<p>Политика безопасности также позволяет загружать css&#8217;ники с любых доменов, поэтому аналогично JSONP появился метод CSSHttpRequest. Особой выгоды в нем не вижу, кому интересно могут глянуть на <a href="http://nb.io/hacks/csshttprequest">странице проекта</a>.</p>
<p><strong>XHRIframeProxy</strong></p>
<p>Метод основан на том, что ифреймы находясь на разных доменах могут общаться через url hash.</p>
<p>Для использования необходимо 2 ифрейма, первый &#8211; клиентский, с тем же url, что и основное окно. Второй &#8211; внутри клиентского, с серверным url. Данные отправляем через форму с указанным target=имя фрейма. Затем запускаем ф-цию с интервалом в 1 секунду и ждем пока хэш страницы не изменится &#8211; тогда мы получили ответ от сервера. Идентификатор изменяется серверным скриптом через <strong>self.parent.location = &#8216;&#8230;&#8217;</strong></p>
<p>Стоит иметь ввиду, что в Internet Explorer есть ограничение на кол-во символов в url и составляет  2048 символов. Так что при передачи большого кол-ва данных придется делить на различные запросы. Кроме того необходимо в серверный фрейм передавать url основного окна &#8211; серверный фрейм его узнать не сможет.</p>
<p>При использовании https  этот способ корректно работать не будет.</p>
<p><strong>postMessage (HTML 5)</strong></p>
<p>В спецификации HTML 5 был введен метод</p>
<pre>otherWindow.postMessage(message, targetOrigin);</pre>
<p>в котором otherWindow &#8211; ссылка на другой объект window (например ифрейм на этой странице), message &#8211; данные которые должны послать, targetOrigin &#8211; домен на которой должны отослать данные, либо &#8220;*&#8221; &#8211; для всех доменов. targetOrigin должен соответствовать url объекта window на который посылаются данные.</p>
<p>В окне-приемнике должен быть зарегистрирован обработчик onmessage чтобы получить сообщение. Пример:</p>
<div><span style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 11px; line-height: normal;">if (window.addEventListener){ </span></span></div>
<div><span style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 11px; line-height: normal;">    window.addEventListener(&#8220;message&#8221;, listener,false);</span></span></div>
<div><span style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 11px; line-height: normal;">} else {</span></span></div>
<div><span style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 11px; line-height: normal;">    window.attachEvent(&#8220;onmessage&#8221;, listener);</span></span></div>
<div><span style="font-family: monospace;"><span class="Apple-style-span" style="font-size: 11px; line-height: normal;">}</span></span></div>
<p>Ф-ция listener получается один параметр &#8211; объект event, по свойству origin которого можно узнать домен, с которого отправляли данные.</p>
<p>Работает postMessage в FF3+, IE8+ , Chrome, Safari 5, Opera10+. Стоит отметить что в IE8 нельзя общаться через окна/табы.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/50/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Практика работы с AoE</title>
		<link>http://aedevs.ru/posts/69</link>
		<comments>http://aedevs.ru/posts/69#comments</comments>
		<pubDate>Sat, 24 Sep 2011 09:09:30 +0000</pubDate>
		<dc:creator>raver119</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[aoe]]></category>
		<category><![CDATA[kernel]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=69</guid>
		<description><![CDATA[Пост пишу с планшета, потому не будет пространных объяснений, только резюм и факты &#160; Для AoE Target используем только GGAoED. Для AoE Initiator используем только свежие модули, и компиляем руками. Пакетные из ядра &#8211; в /dev/null На таргете direct-io=true На инициаторе io scheduler ставим noop. На обоих сетевухах и свитче между ними включаем опцию Jumbo [...]]]></description>
			<content:encoded><![CDATA[<p>Пост пишу с планшета, потому не будет пространных объяснений, только резюм и факты <img src='http://aedevs.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<ul>
<li>Для AoE Target используем только GGAoED.</li>
<li>Для AoE Initiator используем только свежие модули, и компиляем руками. Пакетные из ядра &#8211; в /dev/null</li>
<li>На таргете direct-io=true</li>
<li>На инициаторе io scheduler ставим noop.</li>
<li>На обоих сетевухах и свитче между ними включаем опцию Jumbo Frames. Размер фрейма 8192.</li>
<li>Hardware flow control.</li>
<li>noatime, nodiratime &#8211; без вариантов.</li>
<li>XFS и Ext3/4 желательно использовать с barrier=1</li>
<li>Буфера на сетевых картах поднимать сверх всякой меры.</li>
<li>Процессу GGAoED приоритет ionice &#8211; максимальный. Вплоть до realtime.</li>
</ul>
<div>Применяя эти маленькие хитрости, оверхед на аое у вас крайне редко будет превышать 1мс.</div>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/69/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL и битые таблицы</title>
		<link>http://aedevs.ru/posts/63</link>
		<comments>http://aedevs.ru/posts/63#comments</comments>
		<pubDate>Tue, 20 Sep 2011 15:33:33 +0000</pubDate>
		<dc:creator>raver119</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=63</guid>
		<description><![CDATA[Положим, вам не повезло, и у вас побился файл таблицы mysql.users, а бэкапа нет. И repair не помогает. И войти на сервер уже нельзя. И пользователи негодуют. Как быть? Расскажу, как мы решили подобную проблему однажды. Выключаем покалеченный сервер. Подкладываем содержимое var/mysql с любого &#8220;здорового&#8221; сервера аналогичной версии Запускаем сервер, и входим с логином/паролем &#8220;здорового&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>Положим, вам не повезло, и у вас побился файл таблицы mysql.users, а бэкапа нет. И repair не помогает. И войти на сервер уже нельзя. И пользователи негодуют. Как быть?</p>
<p>Расскажу, как мы решили подобную проблему однажды.</p>
<ol>
<li>Выключаем покалеченный сервер.</li>
<li>Подкладываем содержимое var/mysql с любого &#8220;здорового&#8221; сервера аналогичной версии</li>
<li>Запускаем сервер, и входим с логином/паролем &#8220;здорового&#8221; сервера.</li>
</ol>
<p>Начиная с этого момента, у нас уже есть рут-доступ к серверу бд. Теперь нужно восстанавливать пользователей.</p>
<p>Если ваши условия схожи с нашими, то файлы  у вас разложены в в определенном порядке и с определенной структурой.  В нашем случае логины мы знаем зная путь к папке пользователя.<br />
Т.е. фактически из тройки сервер-логин-пароль, два элемента мы уже знаем. Остается узнать установленные ранее пароли. И сделаем мы это просто:</p>
<p><strong>find /directory -type f -exec grep &#8216;{sql.server.ru}&#8217; \; &gt;mysql.log<br />
</strong></p>
<p>На выходе, в файле mysql.log мы получим список файлов, в котором встречается указанный вами адрес сервера.</p>
<p>После этого остается только распарсить файлы на предмет паролей, и затулить их обратно в базу данных.<br />
Что опять же, не очень сложно, если формат пароля более-менее стандартизирован, и основные CMS известны: Joomla, WordPress, Drupal, e107, SMF, phpBB итд. Детали парсинга, если пожелает, раскроет fer0x.</p>
<p>Несколько часов жужжания &#8211; и 95% паролей восстановлено. Оставшиеся 5% &#8211; восстанавливать прийдется руками, по мере обнаружения не восстановленных.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/63/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>В жизни каждого админа наступает момент,</title>
		<link>http://aedevs.ru/posts/51</link>
		<comments>http://aedevs.ru/posts/51#comments</comments>
		<pubDate>Mon, 19 Sep 2011 10:06:53 +0000</pubDate>
		<dc:creator>raver119</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[HDD]]></category>
		<category><![CDATA[raid]]></category>
		<category><![CDATA[WD]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=51</guid>
		<description><![CDATA[когда он судорожно вспоминает дату  создания последнего бэкапа Сегодня я расскажу о прошедших выходных, и мертвом винте на рейде. MegaCli64 -LDInfo -LALL -a0 Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0) Name : RAID Level : Primary-6, Secondary-0, RAID Level Qualifier-3 Size : 8.177 TB State : Partially Degraded Strip Size [...]]]></description>
			<content:encoded><![CDATA[<p>когда он судорожно вспоминает дату  создания последнего бэкапа <img src='http://aedevs.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Сегодня я расскажу о прошедших выходных, и мертвом винте на рейде.</p>
<p><strong>MegaCli64 -LDInfo -LALL -a0</strong></p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="console"><pre class="de1">Adapter 0 -- Virtual Drive Information:
Virtual Drive: 0 (Target Id: 0)
Name                :
RAID Level          : Primary-6, Secondary-0, RAID Level Qualifier-3
Size                : 8.177 TB
State               : Partially Degraded
Strip Size          : 64 KB
Number Of Drives    : 20
Span Depth          : 1
Default Cache Policy: WriteBack, ReadAheadNone, Cached, No Write Cache if Bad BBU
Current Cache Policy: WriteBack, ReadAheadNone, Cached, No Write Cache if Bad BBU
Access Policy       : Read/Write
Disk Cache Policy   : Disk's Default
Encryption Type     : None
Default Power Savings Policy: Controller Defined
Current Power Savings Policy: None
Can spin up in 1 minute: Yes
LD has drives that support T10 power conditions: No
LD's IO profile supports MAX power savings with cached writes: Yes</pre></div></div></div></div></div></div></div>


<p>Значиццо в рейде есть мертвый диск.</p>
<p>Ищем и находим:</p>
<p><strong>MegaCli64 -PDList -a0</strong></p>
<p>Вывалит инфу по всем дискам. Ищем наш:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="console"><pre class="de1">Enclosure Device ID: 31
Slot Number: 12
Enclosure position: 0
Device Id: 20
Sequence Number: 4
Media Error Count: 2
Other Error Count: 4
Predictive Failure Count: 0
Last Predictive Failure Event Seq Number: 0
PD Type: SATA
Raw Size: 465.761 GB [0x3a386030 Sectors]
Non Coerced Size: 465.261 GB [0x3a286030 Sectors]
Coerced Size: 465.25 GB [0x3a280000 Sectors]
Firmware state: Unconfigured(bad)
SAS Address(0): 0x5003048000d01f58
Connected Port Number: 0(path0)
Inquiry Data: WD-WMAYP1206128WDC WD5003ABYX-01WERA0 01.01S01
FDE Capable: Not Capable
FDE Enable: Disable
Secured: Unsecured
Locked: Unlocked
Needs EKM Attention: No
Foreign State: None
Device Speed: 3.0Gb/s
Link Speed: 3.0Gb/s
Media Type: Hard Disk Device
Drive: Not Certified
Drive Temperature :31C (87.80 F)</pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p>Смотрим в лог контроллера, что там произошло:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="console"><pre class="de1">/17/11 22:46:23: EVT#06910-09/17/11 22:46:23: 267=Command timeout on PD 14(e0x1f/s12) Path 5003048000d01f58, CDB: 28 00 01 bf 1e 80 00 00 80 00^M
09/17/11 22:46:23: EVT#06911-09/17/11 22:46:23: 267=Command timeout on PD 14(e0x1f/s12) Path 5003048000d01f58, CDB: 28 00 27 a0 23 80 00 00 80 00^M
09/17/11 22:46:23: EVT#06912-09/17/11 22:46:23: 267=Command timeout on PD 14(e0x1f/s12) Path 5003048000d01f58, CDB: 28 00 0d 5d 1d 17 00 00 08 00^M
...........
...........
...........
09/17/11 22:50:13: Disc-prog= 0....resetProg=0 aenCount=0 transit=0 ^M
09/17/11 22:50:14: EVT#06995-09/17/11 22:50:14: 113=Unexpected sense: PD 14(e0x1f/s12) Path 5003048000d01f58, CDB: 28 00 0b 77 f3 3f 00 00 08 00, Sense: 6/29/00^M
09/17/11 22:50:14: Raw Sense for PD 14: 70 00 06 00 00 00 00 0a 00 00 00 00 29 00 00 00 00 00^M
09/17/11 22:50:14: HDD read error from RDM!!!!!^M
09/17/11 22:50:14: HDD Read FAILURE!!!! Id 71 line 0^M
09/17/11 22:50:14: FAILED: Id 71 block 57fca2d7 num 16^M</pre></div></div></div></div></div></div></div>


<p>&nbsp;</p>
<p>Во как. Винт перестал отвечать, видимо занимался реаллоком, и рейд-контроллер его вырубил.</p>
<p>&nbsp;</p>
<p>Смотрим в смарт, чего там с пострадавшим винтом:</p>
<p><strong>smartctl -a -d megaraid,20 /dev/sda</strong></p>
<p>Интересует нас раздел значений и порогов.</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="console"><pre class="de1">ID# ATTRIBUTE_NAME          FLAG     VALUE WORST THRESH TYPE      UPDATED  WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate     0x002f   198   198   051    Pre-fail  Always       -       66784
3 Spin_Up_Time            0x0027   164   143   021    Pre-fail  Always       -       2758
4 Start_Stop_Count        0x0032   100   100   000    Old_age   Always       -       41
5 Reallocated_Sector_Ct   0x0033   134   134   140    Pre-fail  Always   FAILING_NOW 1363
7 Seek_Error_Rate         0x002e   200   163   000    Old_age   Always       -       0
9 Power_On_Hours          0x0032   097   097   000    Old_age   Always       -       2238
10 Spin_Retry_Count        0x0032   100   253   000    Old_age   Always       -       0
11 Calibration_Retry_Count 0x0032   100   253   000    Old_age   Always       -       0
12 Power_Cycle_Count       0x0032   100   100   000    Old_age   Always       -       38
192 Power-Off_Retract_Count 0x0032   200   200   000    Old_age   Always       -       37
193 Load_Cycle_Count        0x0032   200   200   000    Old_age   Always       -       3
194 Temperature_Celsius     0x0022   113   110   000    Old_age   Always       -       30
196 Reallocated_Event_Count 0x0032   001   001   000    Old_age   Always       -       1363
197 Current_Pending_Sector  0x0032   200   200   000    Old_age   Always       -       0
198 Offline_Uncorrectable   0x0030   200   200   000    Old_age   Offline      -       0
199 UDMA_CRC_Error_Count    0x0032   200   200   000    Old_age   Always       -       0
200 Multi_Zone_Error_Rate   0x0008   001   001   000    Old_age   Offline      -       79357</pre></div></div></div></div></div></div></div>


<p>Вот:   <strong>5 Reallocated_Sector_Ct   0&#215;0033   134   134   140    Pre-fail  Always   FAILING_NOW 1363</strong></p>
<p>Эта ошибка &#8211; это уже признак неизбежной смерти винчестера.  1363 бэд сектора были переназначены. Это число теперь будет только расти, т.к. диск &#8220;начал сыпаться&#8221;. И мы его уже не можем использовать, для нас это уже мусор.</p>
<p>Итого, осталось достать старый винт из сервера, и вставить новый.</p>
<p>А что касается рейда &#8211; с ним всё отлично, как только умер один жесткий диск, первый из hot-spare дисков был подключен, и рейд автоматически начал восстанавливаться на нем. Сутки ожидания, и &#8211; порядок!</p>
<p>Единственное, отмечу, что на время восстановления рейда среднее время Iowait выросло на 15 миллисекунд.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/51/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Особенности переноса &lt; script &gt;.</title>
		<link>http://aedevs.ru/posts/39</link>
		<comments>http://aedevs.ru/posts/39#comments</comments>
		<pubDate>Sun, 18 Sep 2011 17:10:02 +0000</pubDate>
		<dc:creator>Astraller</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=39</guid>
		<description><![CDATA[Если перед вами встанет задача изменить положение контейнера (DIV&#8217;а, SPAN&#8217;а, etc), содержащего внутри себя тег SCRIPT, при помощи JavaScript то вы столкнетесь с такой проблемой: после переноса все содержимое страницы будет заменено на результат работы содержимого этого SCRIPT (в независимости от того подключает ли этот тег внешний скрипт или содержит внутренний). Есть простое решение, этот [...]]]></description>
			<content:encoded><![CDATA[<p>Если перед вами встанет задача изменить положение контейнера (DIV&#8217;а, SPAN&#8217;а, etc), содержащего внутри себя тег SCRIPT, при помощи JavaScript то вы столкнетесь с такой проблемой: после переноса все содержимое страницы будет заменено на результат работы содержимого этого SCRIPT (в независимости от того подключает ли этот тег внешний скрипт или содержит внутренний).</p>
<p>Есть простое решение, этот скрипт уже отработал и больше запускаться не должен можно просто удалить его перед переносом, например вот так:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">var</span> scripts <span class="sy0">=</span> obj.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts<span class="br0">&#41;</span><span class="br0">&#123;</span>
  obj.<span class="me1">removeChild</span><span class="br0">&#40;</span>scripts<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="co1">// И уже чистый элемент</span>
target.<span class="me1">appendChild</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>То же самое на jQuery:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1">$<span class="br0">&#40;</span>obj<span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span>.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// И уже чистый элемент</span>
$<span class="br0">&#40;</span>obj<span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span>target<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Если же вы хотите что бы скрипты остались в рабочем состоянии то придется немного извратится:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">var</span> scripts <span class="sy0">=</span> obj.<span class="me1">getElementsByTagName</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw2">var</span> scripts_src_backup <span class="sy0">=</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw2">var</span> scripts_content_backup <span class="sy0">=</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="kw1">if</span><span class="br0">&#40;</span>scripts<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">src</span> <span class="sy0">!==</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span>
    scripts_src_backup.<span class="me1">push</span><span class="br0">&#40;</span>scripts<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">src</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span>
    scripts_content_backup.<span class="me1">push</span><span class="br0">&#40;</span>scripts<span class="br0">&#91;</span>n<span class="br0">&#93;</span>.<span class="me1">innerHTML</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
  obj.<span class="me1">removeChild</span><span class="br0">&#40;</span>scripts<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="co1">// Переносим чистый элемент</span>
target.<span class="me1">appendChild</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="co1">// Возвращаем скрипты на место</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts_src_backup<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="kw2">var</span> <span class="kw2">new</span> <span class="sy0">=</span> document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw2">new</span>.<span class="me1">src</span> <span class="sy0">=</span> scripts_src_backup<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="sy0">;</span>
  obj.<span class="me1">appendChild</span><span class="br0">&#40;</span><span class="kw2">new</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">delete</span><span class="br0">&#40;</span>scripts_src_backup<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts_content_backup<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="kw2">var</span> <span class="kw2">new</span> <span class="sy0">=</span> document.<span class="me1">createElement</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="kw2">new</span>.<span class="me1">innerHTML</span> <span class="sy0">=</span> scripts_content_backup<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="sy0">;</span>
  obj.<span class="me1">appendChild</span><span class="br0">&#40;</span><span class="kw2">new</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">delete</span><span class="br0">&#40;</span>scripts_content_backup<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>То же на jQuery:</p>


<div class="wp-geshi-highlight-wrap5"><div class="wp-geshi-highlight-wrap4"><div class="wp-geshi-highlight-wrap3"><div class="wp-geshi-highlight-wrap2"><div class="wp-geshi-highlight-wrap"><div class="wp-geshi-highlight"><div class="javascript"><pre class="de1"><span class="kw2">var</span> scripts_src_backup <span class="sy0">=</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw2">var</span> scripts_content_backup <span class="sy0">=</span> Array<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
$<span class="br0">&#40;</span>obj<span class="br0">&#41;</span>.<span class="me1">find</span><span class="br0">&#40;</span><span class="st0">&quot;script&quot;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span>index<span class="sy0">,</span> element<span class="br0">&#41;</span><span class="br0">&#123;</span>
  <span class="kw1">if</span><span class="br0">&#40;</span>element.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;src&quot;</span><span class="br0">&#41;</span> <span class="sy0">!==</span> undefined<span class="br0">&#41;</span><span class="br0">&#123;</span>
    scripts_src_backup.<span class="me1">push</span><span class="br0">&#40;</span>element.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;src&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span><span class="kw1">else</span><span class="br0">&#123;</span>
    scripts_content_backup.<span class="me1">push</span><span class="br0">&#40;</span>element.<span class="me1">html</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
  <span class="br0">&#125;</span>
<span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">remove</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Переносим чистый элемент</span>
$<span class="br0">&#40;</span>obj<span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span>target<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
<span class="co1">// Возвращаем скрипты на место</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts_src_backup<span class="br0">&#41;</span><span class="br0">&#123;</span>
  $<span class="br0">&#40;</span><span class="st0">'&lt; script type=&quot;text/javascript&quot; &gt;&lt;/ script &gt;'</span><span class="br0">&#41;</span>.<span class="me1">attr</span><span class="br0">&#40;</span><span class="st0">&quot;src&quot;</span><span class="sy0">,</span> scripts_src_backup<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">delete</span><span class="br0">&#40;</span>scripts_src_backup<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> n <span class="kw1">in</span> scripts_content_backup<span class="br0">&#41;</span><span class="br0">&#123;</span>
  $<span class="br0">&#40;</span><span class="st0">'&lt; script type=&quot;text/javascript&quot; &gt;&lt;/ script &gt;'</span><span class="br0">&#41;</span>.<span class="me1">html</span><span class="br0">&#40;</span>scripts_content_backup<span class="br0">&#91;</span>n<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">appendTo</span><span class="br0">&#40;</span>obj<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="kw1">delete</span><span class="br0">&#40;</span>scripts_content_backup<span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div></div></div></div></div>


<p>Таким образом элемент нормально переместился и скрипты остались рабочими.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/39/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Новые шаблоны</title>
		<link>http://aedevs.ru/posts/36</link>
		<comments>http://aedevs.ru/posts/36#comments</comments>
		<pubDate>Sat, 17 Sep 2011 07:24:00 +0000</pubDate>
		<dc:creator>raver119</dc:creator>
				<category><![CDATA[Vexy.ru]]></category>
		<category><![CDATA[новости]]></category>
		<category><![CDATA[шаблоны]]></category>

		<guid isPermaLink="false">http://aedevs.ru/?p=36</guid>
		<description><![CDATA[В связи с запуском тестовой версии templatium.ru на Векси больше не будет премодерации шаблонов. С сегодняшнего дня любой добавленный пользователями шаблон автоматически становится персональным шаблоном.]]></description>
			<content:encoded><![CDATA[<p>В связи с запуском тестовой версии <a href="http://templatium.ru">templatium.ru</a> на Векси больше не будет премодерации шаблонов.</p>
<p>С сегодняшнего дня любой добавленный пользователями шаблон автоматически становится персональным шаблоном.</p>
]]></content:encoded>
			<wfw:commentRss>http://aedevs.ru/posts/36/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

