August 22nd, 2008 | автор: Filosoff | Linux, Shell | No Comments »
ffmpeg -i videofile.ext -acodec copy -y soundtrack.mp3
Под videofile.ext может скрываться и .avi, .flv и другие форматы. На выходе тоже может быть и не mp3 - формат зависит от того, какой кодек использован для сжатия звуковой дорожки.
August 20th, 2008 | автор: Filosoff | JavaScript, Web | 5 Comments »
В адресной строке браузера достаточно набрать следующее:
JAVASCRIPT:
-
javascript:document.location.replace("get_video?video_id="+swfArgs.video_id+"&t="+swfArgs.t+"&fmt=18");
Можно также это дело добавить в bookmarks. Тогда останется только кликнуть на закладку - и все готово.
August 14th, 2008 | автор: Filosoff | PHP, SQL | No Comments »
Часто встречается ситуация, когда необходимо вручную устанавливать порядок вывода записей в некоем списке. То есть клиент должен иметь возможность двигать строчки вверх-вниз друг относительно друга. Некоторые "программисты" изобретают для этого сложнейшие велосипеды. На самом же деле сделать это очень просто. Просто создаем дополнительное поле `customorder`, которое по умолчанию равно `id` (в случае, усли `id` не auto_increment, можно его ставить в (MAX(`customorder`) + 1)). Затем используем вот такую простую функцию:
PHP:
-
function move_line($id, $up) {
-
-
FROM `thetable`
-
-
-
-
FROM `thetable`
-
WHERE `customorder` '.($up ? '<' : '>').' '.$o.'
-
ORDER BY `order` '.($up ? 'DESC' : 'ASC').'
-
LIMIT 1');
-
-
-
-
SET `customorder` = '.$no.'
-
WHERE `id` = '.$id);
-
-
SET `customorder` = '.$o.'
-
WHERE `id` = '.$nid);
-
}
-
} // move_line
И да, я знаю, что это можно сделать меньшим количеством запросов. Но так нагляднее :).
July 30th, 2008 | автор: Filosoff | SQL | 8 Comments »
Несколько раз натыкался на эту проблему, но только сегодня полноценно ее решил. Проблема проста: есть запрос с несколькими JOIN'ами. При выполнении запроса толком не используются индексы. В результате все ужасно тормозит.
Запрос примерно такой:
SQL:
-
SELECT `a`.*, `b`.*
-
FROM `a` LEFT JOIN `b` ON `a`.`field1` = `b`.`field2`
-
WHERE `b`.`field3` = "something"
-
ORDER BY `a`.`field4`
Понятно, что все может быть сложнее, но для примера сойдет.
Итак, что же надо сделать, чтобы запрос работал максимально быстро (при условии, что запрос и таблицы построены грамотно)?
- Создать индекс по каждому из полей, используемых в
WHERE и JOIN. Отдельно по каждому.
- Убедиться, что в WHERE указано максимально жесткое условие дабы сократить диапазон выборки.
- А теперь - внимание! Убедиться, что у
`a`.`field1` и `b`.`field2` одинаковый collation!
Комментарий по последнему пункту: В моем случае у одного поля был latin1_swedish_ci, у второго - utf8_general_ci. Вроде как по данным выходило правильно. Но запрос работал очень медленно, порядка 3 секунд (использовались три таблицы с большим количеством записей - ~100,000, ~30,000 и ~3,000). После применения пункта номер один и особенно пункта номер три запрос стал выполняться за 0.1 (одну десятую!) секунды.