Решать не абстрактные, а прикладные задачи всегда интереснее. Недавно меня попросили записать крестнику-карапузу подборку старых и добрых, как известно, советских мультфильмов. Выдали стопочку CD-R, флаг в руки и напутствие сделать всё в лучшем виде. Мультиков много, размер их варьируется, а записать ведь хочется с максимальным КПД...
Лирическое отступление. С младых ногтей наблюдаю непонятную закономерность. Сталкиваюсь с новой информацией либо объектом, проходит некоторое непродолжительное время и, бац, опять судьба сводит нас вместе. Например, услышал географическое название/фамилию актёра/etc, а на следующий день читаю новости связанные с этим.
Аналогичная ситуация не преминула приключиться. Через пару дней прочитал в релизе GNOME 2.28 об изменениях в Brasero. Было сказано, дескать, функция, позволяющая записывать данные на несколько дисков уже готова к использованию. В обновлениях Karmic Koala новая программа появилась оперативно. Первый тест-драйв выявил лишь номинальное присутствие функции, кнопка записи после выбора файлов осталась недоступной.
«Со мною — нож, решил я: что ж, меня так просто не возьмёшь...»
Подумалось, почему бы не написать скрипт самому. Некоторые навыки написания bash-скриптов есть. Только представить примерную реализацию на bash'е мне так и не удалось. Тогда вспомнил про python. В системе интерпретатор уже установлен, можно хотя бы попробовать. Алгоритм к тому времени я выбрал. Суть его такова: создаётся массив с именами файлов и их размерами, сортируется по размеру от большего к меньшему, а затем в цикле происходит проверка, если файл меньше размера блока, добавляем в очередь, иначе — сравниваем следующий.
Спасибо ребятам из juick'а, помогли разобраться с кодировкой и методом получения списка файлов в директории. Fun от программирования на python'е колоссальный, даже учитывая отсутствие знаний. Не ожидал.
Тем временем лавры питонопокорителя требовали новых ощущений, потому переключился на использование DVCS Git. Всё как у больших дядек. Результат отправил на github. Вы же понимаете, какого качества будет код от дилетанта? Людям со слабой психикой не рекомендую читать листинг скрипта. Я предупреждал ;-) Если вы подскажете, как улучшить скрипт, буду признателен.
Вывод
Python не так страшен, как его малюют. Можно смело писать и комбинировать скрипты, обладая туманными навыками. По результатам выполнения скрипта было записано 7 дисков, свободное пространство которых варьируется от 8 Mb до 500 Kb, что весьма и весьма неплохо.
4 комментариев: ответить
Просмотрел. Прикольно. :) Сам прусь от написания чего-нибудь на питоне. ;) Хотя сам тоже не программер, так, мелочь как правило какую-то для себя кропаю.
По поводу скрипта: все хорошо, только вот алгоритм не оптимальный. На вскидку пока не предложу как его улучшить, но если его удумаю, то свистну. :)
Я знаю о существовании более прогрессивных алгоритмов. Друг посоветовал использовать дерево решений. Отказался, чтобы не усложнять скрипт, точнее его восприятие. Несколько мегабайт погоды не сделают.
Не понял - питон как раз весьма простой язык и как раз подходит для написания таких скриптов. На мой вмеру дилетантский взгляд ничего такого в скрипте нет.
P.S. Акулович, панелька внизу страницы выглядит, конечно, круто, но отрисовку страницы тормозит очень сильно.
> питон как раз весьма простой язык
Если имеется ввиду фраза "не так страшен, как его малюют", тут моё упущение. Писал для красного словца. Всецело согласен, при наличии навыков чтения и технической смекалки змея можно приручить.
> панелька внизу страницы выглядит, конечно, круто, но отрисовку страницы тормозит очень сильно.
Экспериментирую. Во время собственных тестов панелька не особо мешала, грузится в последнюю очередь. Люди, судя по статистике, даже пользуются, хотя не скажу об ощутимой активности.
Неужели так режет глаза?