вторник, 13 октября 2009 г.

Some tips for Gentoo

Несколько полезных моментов

  1. -fomit-frame-pointer Glibc has a glibc-omitfp USE flag. This makes glibc use -fomit-frame-pointer and some other optimizations for the build where it's safe.)
  2. If you are using gcc-4.2.2 or newer you can also use -march=native or -mtune=native.
  3. 64 bit profile (amd64):
CHOST="x86_64-pc-linux-gnu"
CFLAGS="-march=native -mtune=native -O2 -pipe"
CXXFLAGS="${CFLAGS}"




Apache auth in PHP

Пример кода для реализации аутентификации в PHP средствами Apache:
(не тестировалось)
session_start();
error_reporting(2047);
$user = '112';
$pass = 'test';

$authorized = false;

if(isset($_GET['logout']) && (0!=$_SESSION['user_id'])) {
$_SESSION['auth'] = false;
unset($_SESSION['user_id']);
header("Location: ./googby.html");
// session_destroy();
echo "logging out...";
}

if(isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])) {
if (($user == $_SERVER['PHP_AUTH_USER']) && ($pass == ($_SERVER['PHP_AUTH_PW'])) && $_SESSION['auth']) {
$authorized = true;
$_SESSION['user_id']=intval($_SERVER['PHP_AUTH_USER']);

}
}

if ((! $authorized)) {
header('WWW-Authenticate: Basic Realm="Login please"');
header('HTTP/1.0 401 Unauthorized');
$_SESSION['auth'] = true;
print('Login now or forever hold your clicks...');
// header("Location: ./access_denied.html");
exit;
}

?>
?logout">exit

Как выбрать повторяющиеся записи в таблице

Еще один трюк, сам до этого ни за что бы не додумался, где то подсмотрел.

Запрос, показывающий повторяющиеся записи в таблице:

SELECT subject, сount(subject) AS retry
FROM myTable
-- where ....
GROUP BY subject
HAVING ( (Count(subject))>1 );

Количество записей возвращаемых MySQL без учета limit

Иногда нужно получить полное число записей в таблице. При этом в скрипте уже есть запрос, возвращающий часть записей (limit).

Чтобы обойтись одним запросом к базе, можно использовать такой код:
$query="select SQL_CALC_FOUND_ROWS id [, ...] from table_tb limit 1,1";
....
$result=mysql_query($query);
....
$result_=mysql_query('SELECT FOUND_ROWS() as total_count');

Размер таблиц в PostgreSQL

Посмотреть размер таблиц в PostgreSQL не очень то просто, здесь вам не мускуль.Но поможет такой запрос:

SELECT relname AS name, relfilenode AS oid, (relpages /128) as size_mb, reltuples as count
FROM pg_class WHERE relname='myBigTable';

Также он покажет примерное количество записей.

Очень выручает когда база пухнет и нужно выяснить кто виноват.
источник - какой то фак с опеннет.

Важно: нужно обращать внимание на toast таблицы - в них хранятся текстовые поля пользовательских таблиц, и насколько я понял, bytea тоже.

воскресенье, 7 июня 2009 г.

Размер картинки при кодировании DVD с помощью mencoder

Есть домашняя коллекция фильмов в mpeg4. DVD диски принципиально не покупаю - за лицензию платить как то очень дохрена. Смотреть что-то другое, как у нас любят продавать по 10 фильмов на диске - это не для меня. Поэтому уже несколько лет граблю позаимствованные диски у знакомых, иногда сливаю video_ts с винтов, которые проходят мимо меня.

Кодирую mencoder-ом в xvid, картинку не режу, стараюсь чтоб выходной файл был качественный, поэтому на размер - плевать.

Фильмы на dvd в основном размера 720*576, при этом aspect_ratio=16/9=1.778.
Если обрезать черные поля (а обрезать нужно - нахрен нам лишнее:-) - то aspect_ratio нужно менять. Долгое время мучался с подбором значения. Но таки пересилил лень и вывел формулу:
--------------------------
Xorig*Yorig - факт. размер картинки (720*576)
aspectOrig - оригинальный aspect_ratio (1.778)

Xcropped:Ycropped - размеры обрезанной картинки (-vf crop=704:412:8:82)

aspectNew=Xcropped*Yorig*aspectOrig/Ycropped*Xorig = 704*576*1.778/412*720=2.43
--------------------------

а вот сам скрипт для кодирования в 2 прохода:
----------------
#!/bin/bash
# исходник видео и выходной файл
source="/mnt/video/unsorted/королевство/video_ts"
#source="/dev/dvd"
title=2
out="~/movie.avi"

# битрэйт (в кбит/сек) прикидываем исходя из правила 0.25-0.30 бит на пиксель для хорошего качества: 720*432*25кадров в сек.=2332800 бит/пиксель ~ 2500 kbps
video_bitrate=2500

# размер картинки с учетом обрезанных черных полей. чтоб определить делаем maplayer ... -vf cropdetect
vf="-vf crop=
704:412:8:82"

# наш высчитанный aspect_ratio
aspect=2.43
aspect_ratio=":aspect=$aspect"
aspect="-force-avi-aspect $aspect"

#options='-aid 129'#если дорожка со звуком не одна
# звук кодируем пресетом
audiocodec="-oac mp3lame -lameopts preset=extreme"

# или постоянным битрэйтом
#audio_bitrate=256
#audiocodec="-oac mp3lame -lameopts vbr:br=${audio_bitrate}"
# или просто копируем с источника без пережатия (если к примеру нужен 5+1)
#audiocodec="-oac copy"

# если исходник - мульфильм
#cartoon=":cartoon"

# тут наши опции для xvid с макс. качеством
videooptions_pass1="-ovc xvid -xvidencopts pass=1${aspect_ratio}${cartoon}:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=16"

videooptions_pass2="-ovc xvid -xvidencopts pass=2${aspect_ratio}${cartoon}:chroma_opt:vhq=4:bvhq=1:quant_type=mpeg:threads=16:bitrate=${video_bitrate}"

log=/tmp/encode-xvid.log

# 1 проход
mencoder dvd://$title -dvd-device $source \
$options \
-nosound \
$videooptions_pass1 \
$vf \
$aspect \
-o /dev/null

# 2 проход
mencoder dvd://$title -dvd-device $source \
$options \
$videooptions_pass2 \
$audiocodec \
$vf \
$aspect \
-o $out
----------------

а вот наборы опций для разного качества/скорости, рекомендованные на сайте mplayer

DescriptionEncoding optionsspeed (in fps)Relative PSNR loss (in dB)
Very high qualitychroma_opt:vhq=4:bvhq=1:quant_type=mpeg16fps0dB
High qualityvhq=2:bvhq=1:chroma_opt:quant_type=mpeg18fps-0.1dB
Fastturbo:vhq=028fps-0.69dB
Realtimeturbo:nochroma_me:notrellis:max_bframes=0:vhq=038fps-1.48dB

пятница, 5 июня 2009 г.

offline files и размер c:\windows\csc

Поблема: на win xp при включенном кэшировании серверных ресурсов папка %windir%\csc\ начинает расти. При размере системного раздела в 10 гигов через пару дней кончается место и юзеры начинают плакать. Еще есть подозрение что комп начинает подтормаживать, особенно заметно при работе с перенаправленными на серверную шару документами, рабочим столом, application data.
Иногда проскакивают такие ошибки:
------------------
Тип события: Ошибка
Источник события: Offline Files
Категория события: Отсутствует
Код события: 5
Дата: 02.06.2009
Время: 8:50:05
Пользователь: Н/Д
Компьютер: UF77
Описание:
Часть кэша автономных файлов повреждена. Перезагрузите компьютер для очистки кэша.
---------------------
Чтоб победить - нужно очистить кэш автономных файлов. Как это делать в окошках - везде написано. А бегать лень, через vnc тоже влом, так как нужно зайти под админом - долго.

Поэтому
1) создаем файл formatcache.reg:
--------------
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\NetCache]
"FormatDatabase"=dword:00000001
--------------
2) Далее: psexec -u domain/admin \\host regedit /s \\server\share\formatcache.reg

3) После перезагрузки кэш очистится и этот параметр из реестра автоматически удалится.

источник: микрософт ком

Групповая политика и event id 1202

Проблема: не применяется групповая политика на Windows XP SP2.
В логах такое сообщение:
-------------------------------------
Тип события: Предупреждение
Источник события: SceCli
Категория события: Отсутствует
Код события: 1202
Дата: 01.06.2009
Время: 10:15:49
Пользователь: Н/Д
Компьютер: UF77
Описание:
Выполнено распространение политики безопасности с предупреждением. 0x4b8 : Ошибка расширенного типа.

Для диагностики этого события выполните вход с неадминистративной учетной записью и на http://support.microsoft.com выполните поиск раздела "Troubleshooting Event 1202's" ("Диагностика события 1202").
-------------------------------------
Этот хитрый совет в конце - вообще выносит мозг.

После долгих блужданий по сети набрел на рассказ одного человека - ему помогло удаление файла %windir%\security\database\secedit.sdb

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