Sunday, February 7, 2010

Прогресс с поддержкой 3d в linux

Или до обновлялся теперь 3d работает быстрее, но появились очень интересные особенности: в QuakeII мигает отображение, в кубе втором отсутствуют стены и пол. В общем еще немного подождать и все будет работать. Надеюсь ждать осталось недолго.
P.S.S.: При отключении эффектов рабочего стола QuakeII не мигает и нагрузка не процессор значительно меньше(сейчас любое 3d приложение сильно нагружает процессор).

Hybrid graphics on linux

На этой неделе произошло очень интересное событие в руки разработчика драйверов под ATI попался ноутбук с гибридной графикой, и он решил решить такое обидное состояние, что под linux переключение не работает. В общем лед тронулся. Надеюсь скоро появиться полная поддержка таких конфигураций под linux(ранее только собирали слепки конфигураций)

Если судить по информации, что я имею:
  • эта технология нормально работает только в Vistе - есть нормальные драйвера и поддержка производителей ноутбуков;
  • для XP отсутствует поддержка в графической системе переключения;
  • Seven - есть только сентябрьский драйвер находящийся в вечной бете - хотя вполне рабочий, но вечно удаляемый системой, так она считает его устаревшим и без вопросов удаляет. И работает только самая слабая видеокарта и на второй стоит отметина проблемы инициализации. И если в биосе переключить нельзя - то никак уже не подключишь.
P.S. Hybrid graphics(оно же: PowerXpress(ATI), HybridPower(Nvidia)) - это когда системе присутствует более одной видеокарты и при смене нагрузки или питания происходит переключение видеокарты: при низкой нагрузке работает интегрированная видеокарта с низким потреблении энергии, если нужна большая производительность или дополнительные выходы(HDMI например, хотя для основных они могут кросится и сами, работает мощная, но вывод идет через выходы более слабой) включается более мощная.

symfony

  • Получить в форме значение поля - работает в обоих случаях для нового объекта установили значение по умолчанию (через setDefault) и в случае редактирования существующего объекта: $form['имя поля']->getValue();
  • Если нужно получить значение от select с установленным multiple нужно чтобы имя заканчивалось [] иначе получим только первое значение вместо списка. 

Thursday, January 14, 2010

Особенности WebKit

Обнаружил интересную особенность браузеров удостоенных на WebKit: если js функции вызываются не в порядке объявления, то возникает исключение при попытке их вызвать на обработку события(Uncaught ReferenceError: somefunc is not defined). В ff все работает нормально он может вызывать функции, если они объявлены в другом порядке(хотя бы в одном файле).

Причиной по моему мнению является: (хотя бы для Chrome звучит правдоподобно) попытка браузера перед выполнением(на этапе парсинга) перевести весь js во внутренний байт код - в результате чего он может сразу выявить и заменить вызовы функций на их адреса и проверить корректность кода с проверкой корректности использования свойств объектов. (Выдать ошибку, если у объекта не какого-то свойства к которому обращаются - то есть: есть проверка типов для объектов с однозначно определяемым типом).

Пояснение об изначальных данных - была страница на которой не срабатывали нажатия на кнопки в Safari, при однозначном возврате из функции(alert('A');return;) до вызова функции идущего ниже по коду все работает, без возврата исключение при вызове функции(сообщается что функции не определена).

P.S.: В обычном состоянии исключения не показываются нужно открыть окно отладки(инспектор элементов).

Sunday, December 13, 2009

3D ускорение на radeon3200

Включение 3d ускорения на r600 для ubuntu 9.10 Karmic Koala.

Добавляем в дополнительный источник в репозиторий:
  • xorg-edgers. Это позволит установить последнюю версию mesa.
    Версия установленная по умолчанию имеет одну неприятную особенность отсутствует библиотека поддержки r600, хоть версия mesa 7.6 уже содержит поддержку. Но установка полной версии, в моем случае ничего не дала - только отключила поддержку программного рендеренга и выдавала ошибку рендеренга - неправильный порядок пакетов. В новой версии эта проблема решена.
  • и установить новое ядро отсюда:
    2.6.32, для 64 битной платформы нужно установить пакеты:


    • linux-headers-2.6.32-020632-generic_2.6.32-020632_amd64.deb
    • linux-headers-2.6.32-020632_2.6.32-020632_all.deb
    • linux-image-2.6.32-020632-generic_2.6.32-020632_amd64.deb



Как результат 1432.709 FPS в glxgears, и glxinfo:
direct rendering: Yes
OpenGL vendor string: Advanced Micro Devices, Inc.
OpenGL renderer string: Mesa DRI R600 (RS780 9612) 20090101  TCL
OpenGL version string: 1.5 Mesa 7.7-rc2. 


Но пока в quake2 играть с opengl нельзя достаточно чувствительно притормаживает. Но прогресс очевиден:-)

Sunday, November 29, 2009

Иcправление DTD

Некоторые пакеты генерируются документацию через xmlto которая в свою очередь проверяет xml на валидность, иногда там прописаны более новые файлы чем установленные в дистрибутиве, чтобы исправить это мелкое неудобство можно использовать такой скриптик:
list=`grep 'OASIS//DTD DocBook XML V4.4' * -r | sed 's/:/ /' | awk '{print $1}'| grep '.xml'`
for file in $list
do
    sed -i 's/DTD DocBook XML V4.4/DTD DocBook XML V4.2/' $file
    sed -i 's/http\:\/\/www.oasis-open.org\/docbook\/xml\/4.4\/docbookx.dtd/http\:\/\/www.oasis-open.org\/docbook\/xml\/4.2\/docbookx.dtd/' $file
    echo 'fix for '$file'done'
done

Friday, November 27, 2009

symfony мелкие советы


Symfony logo

Создание меню загрузки файлов:

Создаем простое текстовое поле(logo например) для хранения пути файла и в наследнике от автоматически созданной формы в функцию configure дописываем:
$this->widgetSchema['logo'] = new sfWidgetFormInputFileEditable(array(
          'label'     => 'Attachments',
          'file_src'  => '/uploads/'.$this->getObject()->getLogo(),
          'is_image'  => true,
          'edit_mode' => !$this->isNew(),
          'template'  => '
          %input%
          %delete% %delete_label%
          %file%
',
        ));

      $this->validatorSchema['logo'] = new sfValidatorFile(array(
        //если указан путь, то кроме проверки еще и сохраняет,
        //путь относительно uploads
        'path' => sfConfig::get('sf_upload_dir').'/',
        'required' => false,
        'mime_types' => 'web_images'
      ));
      $this->validatorSchema['logo_delete'] = new sfValidatorPass();

создание дополнительной проверки по полю(не стандартной):

Добавлять туда же:
$this->validatorSchema['name'] =  new sfValidatorAnd(
            array(
                new sfValidatorCallback(
                    array('callback'=>
                            array($this->getObject(), 'check')
                    )
                ),
                $this->validatorSchema['name'] /*previous value*/
            )
       );
В модели создаем дополнительную функцию check вида:
public function check($validator, $value) {
       if(haveError($value))
            throw new sfValidatorError($validator, $message);
        }
        return $value;
   }

для проверки более чем одного поля одновременно:

(Приходят все поля после проверки по каждому полю отдельно):
form:
 $this->mergePostValidator( new sfValidatorCallback(
                array('callback'=>
                        array($this->getObject(), 'check')
                )
model:
  public function check($validator, $values) {
       if(haveError($values))
            throw new sfValidatorError($validator, $message);
        }
        return $values;
   }

sfPropelPager

Особенность в sfPropelPager - при подсчете количества страниц он сбрасывает поля группировки - результат может быть больше чем реально существует.

Формирование сложных запросов:

Нахождение имени в нескольких полях:
select * from people where (name like ('%abc%') ) OR (last_name like ('%abc%') );
Выглядит таким образом:
$name = $c->getNewCriterion(PeoplePeer::NAME, '%abc%', Criteria::LIKE);
 $last = $c->getNewCriterion(PeoplePeer::LAST_NAME, '%abc%', Criteria::LIKE);
 $last->addOr($name);
 $c->addOr($last);
Основная особенность нужно объединить сначала части запроса, а уже потом добавлять в основной запрос.