четверг, 12 февраля 2009 г.

java ConcurrentModificationException

Эта ошибка может возникнуть в случае, когда происходит попытка изменить коллекцию внутри итерации этой же коллекции. Например:
List originalList = new ArrayList();
for (Iterator it =
originalList.iterator(); it.hasNext(); ) {
originalList.add(someObject);
}

Решение: создать копию коллекции и изменять нужную коллекцию внутри итерации по копии. Пример:
List copy = new ArrayList(originalList);
for (Iterator it = copy.iterator(); it.hasNext(); ) {
originalList.add(someObject);
}

Заметка: можно также использовать специальные классы колекций (что-то типа
CopyOnWriteArrayList), но в большинстве случаев лучше использовать копии.
Для дополнительной информации:

Class ConcurrentModificationException (англ.)

описание решения проблемы на форуме Sun (англ.)

вторник, 3 февраля 2009 г.

дата в нужном формате

Задача: вывести текущую в следующем формате год.месяц.день
Решение:
date +%y.%m.%d:%T
Обсуждение: такой формат удобен для сортировки файлов или директорий.
Точки и время (%T) можно убрать

Задача: установить текущую дату системы
Решение:
# date +%Y%m%d -s "20090203"
Обсуждение: выполнять под рутом.
Для дополнительной информации смотрим man date

понедельник, 2 февраля 2009 г.

Преобразование форматов wma wav ogg mp3

Кратко:

c wma в wav:
mplayer ws_30075.wma -ao pcm:file=out.wav
Пример скрипта, который конвертирует все файлы в текущей папке:
n=0
for i in $(find . -maxdepth 1 -name "*.wma"); do
let "n += 1"
mplayer $i -ao pcm:file=$n.wav
done

с wma в ogg
mpg321 ws_30075.wma -w raw && oggenc raw -o output.ogg

с ogg в wav
oggdec *.ogg

с wav в mp3 (всю текущую директорию)
for i in *.wav ; do lame $i `echo $i|awk -F . '{print $1 ".mp3"}'`; done