find -type f -name *.php -print | xargs perl -pi -e «s|set_magic_quotes_runtime\(\\\$mqr\);|ini_set\(\’magic_quotes_runtime\’,\\\$mqr\);|ig»
да-да… чтобы не забыть, как это ($ — знак доллара) экранируется записал тут.
find -type f -name *.php -print | xargs perl -pi -e «s|set_magic_quotes_runtime\(\\\$mqr\);|ini_set\(\’magic_quotes_runtime\’,\\\$mqr\);|ig»
да-да… чтобы не забыть, как это ($ — знак доллара) экранируется записал тут.
Всем здоровья, счастья и успехов в новом и последующих годах!
Устраняем погрешности применения ФЗ РФ от 03-июня-2011 №107-ФЗ «Об исчислении времени»
wget http://ftp.us.debian.org/debian/pool/main/t/tzdata/tzdata_2011k-0squeeze1_all.deb
dpkg -i tzdata_2011k-0squeeze1_all.deb
ntpdate europe.pool.ntp.org
Пока не забыл, чтобы сделать многокадровую флэшку руками, не используя Adobe Flash CS,
можно использовать следующую команду:
mxmlc Preloader.as -frame 1 <класс-1> -frame 2 <класс-2> ... -output test.swf
в итоге получим первый фрейм из исходника, во втором будет класс-1, в третьем класс-2 и т.д.
также во фреймы можно индивидуально включать библиотеки .swc.
Пришлось писать самому, то ли я плохо искал, то ли еще чего, но варианта удовлетворяющего меня я не нашел. Выкладываю в паблик, копирайты ради приличия сохраняйте =).. пусть мои непрофессиональные закавыки будут видны всем =)
Есть конечно официальный код (находится здесь), но он мне показался сильно большим, а мне нужен был маленький кусочек, копаться там стало лень.
Быстродействие моего кода и оф.кода не сравнивал.
Собственно сам код (не более 3кб, вместе с комментариями):
/* * XMLRPC query builder , singletone class * 2011, Written by Wizard * http://awlee.ru */ class xmlrpc { private static $_instance = null; private function __construct() {} // restrict constructor private function __clone() {} // restrict clone public static function get_instance() { if (self::$_instance == null) self::$_instance = new self(); return self::$_instance; } // check for associative array private function _is_hash($a) { if (is_array($a)) foreach ($a as $k=>$v) if (!is_numeric($k)) return true; return false; } // own type detector private function _get_type($v) { if ($this->_is_hash($v)) return "struct"; if (is_array($v)) return "array"; if (is_bool($v)) return "boolean"; if (is_float($v)) return "double"; if (is_numeric($v)) return "int"; if (is_string($v)) return "string"; return strtolower(gettype($v)); } // basic xmlrpc value wrapper private function _item($name=null,$value,$type = null) { $have_type = !is_null($type); $v = ($have_type?"<$type>":"").$value.($have_type?"</$type>":""); if (is_null($name)) return "<value>".$v."</value>"; if ($name == "") return "<param><value>".$v."</value></param>"; return "<member><name>$name</name><value>".$v."</value></member>"; } // core xmlrpc function // array is: // array( // array(value, type), // array(value, type), // array(value, type), // ... // ) private function _array($arr, $is_root=false) { if (!is_array($arr)) return ""; $r = ""; $is_hash = $this->_is_hash($arr); // parent array is hash foreach ($arr as $k=>$v) { $t = $this->_get_type($v); if ( is_array($v) && (count($v)==2) && (!$this->_is_hash($v)) && (!is_array($v[1]))) { $t = $v[1]; // type $v = $v[0]; // value } switch ($t) { case "array": $r .= $this->_item( $is_hash?$k:($is_root?"":null), "<data>". $this->_array($v). "<data>", "array" ); break; case "struct": $r .= $this->_item( $is_hash?$k:($is_root?"":null), $this->_array($v), "struct" ); break; default: $r .= $this->_item( $is_hash?$k:($is_root?"":null), ($t=="boolean")?($v?1:0):$v, $t ); } } return $r; } // build full xml-query public function build_query($method, $params=null) { $r = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; $r .= "<methodCall>"; $r .= "<methodName>$method</methodName>"; $r .= "<params>".$this->_array($params, true)."</params>"; $r .= "</methodCall>"; return $r; } };
и пример использования:
include("xmlrpc.php"); $b = xmlrpc::get_instance(); echo $b->build_query("method_without_params"); echo "\n\n"; echo $b->build_query("method_with_params", array( array(true, "boolean"), array(true, "boolean"), array("hello world", "string"), array("100500", "int"), array( array( array(12,"int"), array(144,"int") ), "array" ), // struct array array( array( "a"=>array(2,"int"), "b"=>array(3,"int") ), "struct" ) // struct param ) // params array ); // build_query
Надеюсь что это решение будет полезно еще кому-нибудь, кроме меня :).
П.С. Сей блог есть костыль для мозга :)
Расшарил я диск в системе, и обнаружил, что потерял контроль над частью файлов и каталогов. При попытке перейти в нужный мне каталог, я получал замечательную надпись «Access denied». Чтобы исправить эту ситуацию надо:
После выполнения этих действий, контроль на файлами должен восстановиться и можно, как и раньше, радоваться доступу в любое место вашей файловой системы.
Рисовать картинками было лень, надеюсь, что тот кому это понадобится, разберется и по такому, довольно подробному и конкретному, списку действий.
При отдаче больших по размеру файлов нгинксом, иногда возникает ситуация, когда сервер периодически падает, встает, делает что-то еще, что делать совершенно не нужно.
Одна из причин почему это происходит — нехватка дискового пространства, особенно когда файловая система распределена на несколько разделов. А не хватает места на диске от того, что нгинкс создает временные файлы и находятся они в / var / lib / nginx .
Бывает такое, что файловую систему делят на корневой раздел, разделы /home и /usr. В итоге /var остается в корневом разделе, и если туда поставить веб-сервер и напихать пачку 300-400 мегабайтных файлов + базу побольше — места может не хватить (в конкретно рассматриваемом случае под корень было выделено 5гб места).
Зайдя в консоль и выдав команду df -h можно отметить, что свободное пространство периодически скачет. В то же время du -h —max-depth=1 не даст никаких видимых изменений в размерах каталогов.
Решение было довольно простым — перенести каталог с временными файлами на более свободное устройство и, соответственно, создать линк в том месте, откуда его перенесли.
Чтобы данный пакет откомпилировался компилятором версии 16.00, нужно поправить пару строк в исходниках:
pubkey.h
строка 243: return HashIdentifier((const byte*)NULL, 0);
zdeflate.cpp
строка 389: #if defined(_STDEXT_BEGIN) && !(defined(_MSC_VER) && (_MSC_VER < 1400 || _MSC_VER >= 1600)) && !defined(_STLPORT_VERSION)
после этого вы не получите ошибок компилятора с номерами C2439,C2440.
Всех с прошедшими праздниками, однако. Ранее выйти не мог, ибо провайдер праздновал и отрубил мне все выходы. Всем здоровья, благ и успехов во всех начинаниях!
С 27 декабря 2010 года регистрация и поддержка доменов третьего уровня .net.ru , .pp.ru и .org.ru переходит от РосНИИРОС в компанию RU-Center (nic.ru). Причем на _платной_основе_ (!). Стоимость регистрации нового домена составит 450р, стоимость продления — 360р. (Тупая мысль пробилась: интересно какова цена отката?)
..
Мотивируясь этим незамысловатым сообщением, зарегил себе другой домен :) Один фиг платить надо, так пусть будет хотя бы нормальный вид у домена.
Поиски бесплатной среды для быстрой разработки приложений наткнулись на несколько распространенных вариантов:
Qt — оно конечно здОрово, красиво, и судя по отзывам удобно, но есть один такой небольшой затык: коммерческая лицензия стоит более $3.5к, для моего личного пользования дороговато, бесплатная лицензия LGPL позволяет править исходники фреймворка с открытием исправленного/дополненного кода, исходники приложения могут быть закрыты… в принципе, если цеплять библиотеки динамически, то можно и продавать свой продукт, правда тащить все .dll-ки за собой тоже гадство :)..
wxWidgets — первое впечатление было неплохое, потом все потухло, внутренности меня просто убили. Больше всего мне это напомнило MFC. Но MFC я как-то с детства не смог переварить, не нравится почему-то.
Ultimate++ — впечатления двойственные, вроде все хорошо, фреймворк довольно компактный, очень легко расширяется, использует бесплатные компиляторы MSVS/MSSDK/Mingw (ставятся отдельно). Дополнительно я бы хотел в нем видеть следующее: более удобную среду разработки, расширенную документацию. Это конечно не Qt, и не борланд-rad, но что-то на нем делать можно, как в принципе и на обычном WinAPI.
C++ Builder/Delphi даже не рассматривал они по умолчанию стоят около $3.5к.
Вот уж не думал, что попадусь :). Я обычно достаточно осторожен, чтобы самому себя не заражать, но у меня были причины запустить исполняемый файл.
Сейчас в сети присутствует достаточное количество партнерских программ со своей оболочкой архиватором. Распаковал я один такой архив и запустил, чтобы проверить, что же это есть, почему оно пользуется популярностью.
Программка запустилась все в порядке. Посмотрел, никуда не тыкал…
Dr.Web (гад, кстати) начал орать только через пару минут (!) .. а за это время почти все (!) исполняемые файлы заразились вирусом Neshta (год выпуска 2005, Беларусь).
Сия гадость, в принципе не критична (судя по описанию в вики), но мешает ужасно.
Я, дурак (!), не посмотрел в той же вики, как от нее избавиться руками, а там все просто.. вот ссылка на вики
Т.к. я не знал, как избавиться от записи в реестре (в том смысле, что не знал какой ключ поправить) — и я .. (еще раз дурак) .. просто тупо переставил систему.
PS.
Чтобы запустить regedit, его надо просто переименовать / скопировать с расширением .com