Статьи в категории Без рубрики

Печать документа Word в виде брошюры

// Октябрь 30th, 2010 // 7 Comments » // Без рубрики

Иногда бывает актуально распечатать текст таким образом, чтобы из него можно было собрать брошюру. До сих пор для этой цели использовались внешние надстройки, например широко известный макрос А. Орлова » http://orlovs.pp.ru/ Пакет макрокоманд для верстки текста книжкой «.
При этом, наверное, не все знают, что в последней версии Word 2003 имеется штатная аналогичная возможность. Вот ее описание, взятое отсюда (текст незначительно отредактирован):

Share

SphinxQL. Теперь Sphinx поддерживает SQL запросы к индексам!

// Август 27th, 2010 // 3 Comments » // Highload, MySQL, Без рубрики

В этой статье будетрассказано о двух новых мега-фичах в Sphinx.
Обе фичи добавлены в версии 0.9.9-rc2, опубликованной в начале апреля 2009го. Версия традиционно (слишком) стабильная, известных серьезных багов нету, тесты проходятся, итп. Отважные люди, а также коммерческие клиенты с контрактами про поддержку, уже успешно используют в продакшне, несмотря на отличный от «release» тег.

1я мега-фича. Теперь Sphinx поддерживает сетевой протокол MySQL (внутренней версии номер 10, которую поддерживают все версии сервера и клиента, начиная с MySQL 4.1 и по MySQL 5.x включительно).

(далее…)

Share

CloudStack 2.1 Ubuntu Installation

// Июль 24th, 2010 // 2 Comments » // Без рубрики

Компания Cloud.com после двух лет разработки анонсировала доступность исходных текстов системы CloudStack, предназначенной для упрощения организации и управления работой приватной, гибридной или публичной cloud-инфраструктуры, доступной только внутри предприятия или нацеленной на предоставление публичного сервиса, похожего на Amazon EC2. В разработку системы было инвестировано более 17 млн. долларов. Разработка велась под руководством Sheng Liang, создателя виртуальной машины JVM и сооснователя компании Teros, позднее поглощенной Citrix.

(далее…)

Share

Новое в PHP 5.3 PHP Quebec 2008

// Июль 23rd, 2010 // No Comments » // Без рубрики

Доклад Илья Алшанетского с конференции PHP Quebec 2008

(далее…)

Share

PHP for Android

// Июль 14th, 2010 // 1 Comment » // Без рубрики

PHP for Android

Проект PHP for Android

Анонсирован проект «PHP for Android» в рамках которого представлена система для выполнения на платформе Android приложений, написанных на языке PHP. В настоящий момент для телефонов на базе платформы Android подготовлен установочный APK-файл, интегрирующий поддержку PHP 5.3 в созданную разработчиками Google подсистему Android Scripting Environment (ASE). Исходные тексты разработки распространяются в рамках лицензии Apache.

PHP-скрипты могут выполняться в окружении Android из командной строки, функционировать как фоновые процессы или выступать в роли обычных GUI приложений. Для использования в PHP-приложениях API платформы Android в комплект входит специальный интерфейсный модуль Android.php, который представляет собой обвязку вокруг стандартного JSON RPC платформы Android и позволяет использовать из PHP-скриптов функции телефонии, отправлять SMS, получать данные с GPS, web-камеры и акселерометров, обрабатывать события, использовать функции синтезатора речи (text-to-speech), формировать интерфейс пользователя.

Пример простейшего приложения:

require_once("Android.php");
$droid = new Android();
$name = $droid->getInput("Hi!", "What is your name?");
$droid->makeToast('Hello, ' . $name['result']);

$droid->vibrate();

$droid->dialogCreateAlert();
$droid->dialogSetItems(range(0, 9));
$droid->dialogShow();

Кроме PHP, в настоящий момент подсистема Android Scripting Environment поддерживает выполнение скриптов на таких языках, как Python, Perl, JRuby, Lua, BeanShell, JavaScript, Tcl и shell.

Сайт проекта: http://www.phpforandroid.net/

Share

Работа с MySQL кластером в Doctrine

// Июль 14th, 2010 // No Comments » // Без рубрики

В этой статье я хочу рассказать, как настроить Doctrine таким образом, чтобы использовать master-сервера для записи, а slave-сервера для чтения данных. Эта стратегия позволит добиться распределения нагрузки между серверами БД. Речь идет именно о нескольких серверах, на которых реплицируются базы, а не о ndbcluster, как некоторые могли бы подумать.

Итак, сначала мы должны сконфигурировать все дсотупные соединения в Doctrine.

$connections = array(
    'master'  => 'mysql://root:@master/dbname',
    'slave_1' => 'mysql://root:@slave1/dbname',
    'slave_2' => 'mysql://root:@slave2/dbname',
    'slave_3' => 'mysql://root:@slave3/dbname',
    'slave_4' => 'mysql://root:@slave4/dbname'
);

foreach ($connections as $name => $dsn) {
    Doctrine_Manager::connection($dsn, $name);
}

Теперь, когда у нас есть один master-сервер, и 4 slave-сервера мы можем переписать классы Doctrine_Record и Doctrine_Query для добавления логики по разделению запросов для чтения и для записи. Все запросы на запись мы будем отправлять на master-сервер, а все запросы на чтение на случайно выбранный slave-сервер. См. статью про мульти-мастер репликацию

class MyQuery extends Doctrine_Query
{
    // Since php doesn't support late static binding in 5.2 we need to override
    // this method to instantiate a new MyQuery instead of Doctrine_Query
    public static function create($conn = null)
    {
        return new MyQuery($conn);
    }

    public function preQuery()
    {
        // If this is a select query then set connection to one of the slaves
        if ($this->getType() == Doctrine_Query::SELECT) {
            $this->_conn = Doctrine_Manager::getInstance()->getConnection('slave_' . rand(1, 4));
        // All other queries are writes so they need to go to the master
        } else {
            $this->_conn = Doctrine_Manager::getInstance()->getConnection('master');
        }
    }
}

Теперь DQL-запросы будут распределятсья между серверами, а что делать с сохранением записи? Мы сможем указать соединение дял записи, переписав класс Doctrine_Record, и используя его как базовый для наших моделей.

abstract class MyRecord extends Doctrine_Record
{
    public function save(Doctrine_Connection $conn = null)
    {
        // If specific connection is not provided then lets force the connection
        // to be the master
        if ($conn === null) {
            $conn = Doctrine_Manager::getInstance()->getConnection('master');
        }
        parent::save($conn);
    }
}

Отлично! Теперь запросы на чтение буду траспределены между slave-серверами, а на запись пойдут на master-сервер. Вот несколько примеров работы запросоов и моделей:

class User extends MyRecord
{
    public function setTableDefinition()
    {
      $this->setTableName('user');
      $this->hasColumn('username', 'string', 255, array('type' => 'string', 'length' => '255'));
      $this->hasColumn('password', 'string', 255, array('type' => 'string', 'length' => '255'));
    }
}

// The save() method will happen on the master connection because it is a write
$user = new User();
$user->username = 'jwage';
$user->password = 'changeme';
$user->save();

// This query goes to one of the slaves because it is a read
$q = new MyQuery();
$q->from('User u');
$users = $q->execute();

print_r($users->toArray(true));

// This query goes to the master connection because it is a write
$q = new MyQuery();
$q->delete('User')
  ->from('User u')
  ->execute();
Share

eAccelerator и php Reflection

// Июль 13th, 2010 // 1 Comment » // Без рубрики

Оказывается метод ReflectionClass::getDocComment() выдает пустой массив, когда включен eAccelerator.

Сам баг: http://eaccelerator.net/ticket/229

А решение простое, сконфигурировать его с параметром —with-eaccelerator-doc-comment-inclusion

Share

Исходники алгоритма шифрования Skype

// Июль 8th, 2010 // No Comments » // Без рубрики

Один из алгоритмов шифрования Skype раскрыт.

См. http://habrahabr.ru/blogs/infosecurity/98546/

Share

Восстановление с Acer eRecovery

// Июль 8th, 2010 // No Comments » // Без рубрики

Попал тут недавно ко мне ноутбук, на котором сломалась Ось . Ноутбук был Acer и была там волшебная Acer eRecovery. Я понадеялся на то, что быстренько восстановлю ось. Но не тут то было. По Alt+F10 я загрузился со скрытого раздела, и вроде бы процесс пошел. Восстановил Windows на раздел Acer, перезагрузился, и всё. Система не грузится. В результате долгих разборок выяснилось следующее.

  • Acer eRecovery восстанавливает систему строго на первый (ну на самом деле на второй после скрытого) раздел.
  • Если в системе установлен загрузчик Acronis OS Selector, то восстановление невозможно, т.к. он создает для себя скрытый раздел, а eRecovery не может получить букву этого раздеола (а зачем она ей?).
  • Через консоль восстановления Windows войти в развернутую винду тоже нельзя, т.к. фиг знает, какой там пароль. Стандартные не подходят.

Было принято решение поставить Ubuntu, чтобы она поставила свой GRUB, и оттуда уже рулить. Также поставил утилитку startupmanager под Ubuntu, это по сути GUI к grub.conf. Утилитка имеет приятную особенность, при загрузке она смотрит список разделов и обновляет конфиг grub’а, что мне и было нужно.

После всй этой котавасии, я через Gparted я снес раздел с виндой, переразбил диск, сделав такие разделы:

  1. PQSERVICE(fat32) 9,7Гб — оставил в неприкосновенности
  2. ACER(ntfs) 39,7 Гб — раздел для Windows (первый после PQSERVICE)
  3. DATA(ntfs) 197Гб — общий раздлел с данными для Ubuntu и Windows
  4. UBUNTU(ext3) 40,89Гб — собственно Ubuntu :-)
  5. SWAP (Linux-Swap)

Ну а дальше, после перезагрузки все разделы появились в меню груба. Осталось только сделать красивую картинку:

http://aboutubuntu.ru/content/grub-zagruzchik-ubuntu-i-mnogogo-drugogo

И системка готова к работе.

Share

Английский язык интерфейса в NetBeans 6.8

// Июль 8th, 2010 // 18 Comments » // Без рубрики

Установил себе NetBeans 6.8 По -умолчанию она встала с русским языком. Ничего не понял, перевод — просто кошмар. Решил сменить язык. Казалось бы, зайди в настройки да и меняй, ан нет. Всё облазил ничего нет.

Полазил по сети, нашел всё-таки, как сменить язык. Для этого надо запустить NetBeans с параметром локали:

—locale en:US

Аналогично для других языков.

Share