Бяка, Мяка, бла-бла-бла

find -type f -name *.php -print | xargs perl -pi -e «s|set_magic_quotes_runtime\(\\\$mqr\);|ini_set\(\’magic_quotes_runtime\’,\\\$mqr\);|ig»

да-да… чтобы не забыть, как это ($ — знак доллара) экранируется записал тут.

Рубрика: Консоль *nix | Оставить комментарий

С наступающим 2012 годом!

Всем здоровья, счастья и успехов в новом и последующих годах!

Рубрика: Новости | Оставить комментарий

Корректировка часов Debian в 2011.

Устраняем погрешности применения ФЗ РФ от 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

Рубрика: Консоль *nix, Новости, Сервера | Оставить комментарий

Flex, как вручную сделать флэшку с несколькими кадрами

Пока не забыл, чтобы сделать многокадровую флэшку руками, не используя Adobe Flash CS,
можно использовать следующую команду:

mxmlc Preloader.as -frame 1 <класс-1> -frame 2 <класс-2> ... -output test.swf

в итоге получим первый фрейм из исходника, во втором будет класс-1, в третьем класс-2 и т.д.
также во фреймы можно индивидуально включать библиотеки .swc.

Рубрика: Программирование | Метки: , , | Оставить комментарий

Исходник простого генератора XMLRPC-запросов.

Пришлось писать самому, то ли я плохо искал, то ли еще чего, но варианта удовлетворяющего меня я не нашел. Выкладываю в паблик, копирайты ради приличия сохраняйте =).. пусть мои непрофессиональные закавыки будут видны всем =)

Есть конечно официальный код (находится здесь), но он мне показался сильно большим, а мне нужен был маленький кусочек, копаться там стало лень.

Быстродействие моего кода и оф.кода не сравнивал.

Собственно сам код (не более 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

Надеюсь что это решение будет полезно еще кому-нибудь, кроме меня :).

П.С. Сей блог есть костыль для мозга :)

Рубрика: Программирование | Метки: , | Оставить комментарий

Windows XP Pro, отказ доступа (2)

Расшарил я диск в системе, и обнаружил, что потерял контроль над частью файлов и каталогов. При попытке перейти в нужный мне каталог, я получал замечательную надпись «Access denied». Чтобы исправить эту ситуацию надо:

  • зайти в «Панель управления», «Свойства папки», вкладка «Вид» — снять галку с пункта «Использовать простой общий доступ к файлам»
  • нажать «ОК» («Применить»)
  • после этого появятся дополнительные вкладки в «Свойствах» каталогов и дисков
  • зайти в «Мой компьютер», правый клик на расшареном диске (или каталоге), «Свойства», вкладка «Безопасность»
  • тыкнуть в кнопочку «Дополнительно»
  • в появившемся окне вкладка «Владелец»
  • выбрать свой аккаунт
  • поставить галку в «Заменить владельца субконтейнеров и объектов»
  • нажать «ОК» («Применить»)
  • на вопрос «…хотите заменить разрешения для этой папки так, чтобы иметь права полного доступа?..» — отвечать утвердительно

После выполнения этих действий, контроль на файлами должен восстановиться и можно, как и раньше, радоваться доступу в любое место вашей файловой системы.

Рисовать картинками было лень, надеюсь, что тот кому это понадобится, разберется и по такому, довольно подробному и конкретному, списку действий.

Рубрика: Система | Метки: , , , , , | Оставить комментарий

nginx и большие файлы

При отдаче больших по размеру файлов нгинксом, иногда возникает ситуация, когда сервер периодически падает, встает, делает что-то еще, что делать совершенно не нужно.

Одна из причин почему это происходит — нехватка дискового пространства, особенно когда файловая система распределена на несколько разделов. А не хватает места на диске от того, что нгинкс создает временные файлы и находятся они в / var / lib / nginx .

Бывает такое, что файловую систему делят на корневой раздел, разделы /home и /usr. В итоге /var остается в корневом разделе, и если туда поставить веб-сервер и напихать пачку 300-400 мегабайтных файлов + базу побольше — места может не хватить (в конкретно рассматриваемом случае под корень было выделено 5гб места).

Зайдя в консоль и выдав команду df -h можно отметить, что свободное пространство периодически скачет. В то же время du -h —max-depth=1 не даст никаких видимых изменений в размерах каталогов.

Решение было довольно простым — перенести каталог с временными файлами на более свободное устройство и, соответственно, создать линк в том месте, откуда его перенесли.

Рубрика: Консоль *nix, Сервера, Система | Метки: , , | Оставить комментарий

CryptoPP 5.6.0 и MSVC 2010 (C2439,C2440)

Чтобы данный пакет откомпилировался компилятором версии 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р. (Тупая мысль пробилась: интересно какова цена отката?)
..
Мотивируясь этим незамысловатым сообщением, зарегил себе другой домен :) Один фиг платить надо, так пусть будет хотя бы нормальный вид у домена.

Рубрика: Новости | Оставить комментарий

Поиск Free RAD

Поиски бесплатной среды для быстрой разработки приложений наткнулись на несколько распространенных вариантов:

  • Qt
  • wxWidgets
  • Ultimate++

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

Рубрика: Безопасность, Система | 1 комментарий