llivejo: (Default)
[livejournal.com profile] avva написал, что Гугл открыл App Engine — инфраструктуру для веб-приложений. Что это значит?

Допустим, вас, как веб-программиста, интересует только ваше веб-приложение. Но для того чтобы оно работало, приходится использовать — плюс настраивать и обслуживать! — кучу других вещей: вебсервер, SQL-сервер, дальше программистское )
llivejo: (Default)
Терпел я, терпел, но похоже эта штуковина переросла тему одного поста. Итак, встречайте:

Bin packing problem - Intro

Понадобилось мне забэкапить на DVD-болванки залежи фото, музыки, фильмов и прочей фигни на своем файл-сервере. Больше шести сотен гигабайт, между прочим. Место занимает, а стереть жалко. Но хотя бы с RAID5 на незарезервированные (JBOD) разделы перенести можно будет при наличии бэкапов, а часть и поудалять насовсем. Болванок накупил, благо что те по 15 рублей стали.

А тут трабл - как бэкапить? Выделять файлы/каталоги кучками, приблизительно влазящими на болванки, мне решительно не хотелось. Не то чтобы я пожалел немножечко денюжков™ на лишние DVD-R, просто делать это руками 670/4.7 = 143 раза посчитал неразумным и недостойным программиста занятием.

Админ бы нашел готовую программу для бэкапов, а программист написал бы свою. Ура, я программист! Ведь я могу написать python-скрипт для автоматической выборки групп файлов и генерации ISO-образов, чтобы потом только болванки в резак толкать...

Сказано - сделано. В процессе написания программы возник вопрос: а по какому, собственно, алгоритму надо выбирать файлы, чтобы они плотно улеглись в болванки, дабы не пропадало зря свободное место?.. Ну, думаю, можно наверное просто решить проблему "в лоб" - тупо попробовать все возможные перестановки файлов и выбрать те, где "хвосты" меньше. Фиг-то там: число возможных перестановок оказалось числом Стирлинга второго рода, полный перебор оказался неподъемной задачей даже для небольшого числа файлов/каталогов.

Ладно, думаю. Полез глубже - а проблема-то давно сформулирована. Встречайте: Bin packing problem (по-русски Задача об упаковке в контейнеры). NP-hard, между прочим. Однако придуманы неплохие эвристические алгоритмы...

Продолжение следует (про чтение научных трудов, про FirstFit и BestFit, про генетические алгоритмы и прочую лабуду)
llivejo: (Default)
Нашел прекрасный питоновский модуль для обхода каталогов: path.
Шаманские пляски с os.walk упрощаются многократно:
                                                                      
import path
d = path.path('.')
for name in d.walkfiles('*.tmp'):
    name.remove()
Это я файловое хранилище из koi8-r в utf8 перевожу. Universal Encoding Detector тоже очень пригодился - кое-что в win-1251 попадается. Скриптик попозже выложу.
llivejo: (Default)

Согласно RFC 3986, все не-ASCII-составляющие URI должны приводиться к UTF-8 и затем перекодироваться в допустимые, путем преобразования всего неформатного в буквы-байты с процентами. А так как lj tags являются составляющими URI, то их нужно преобразовывать.

Вот, пытаюсь научить мой любимый LJ-клиент делать это для русских тегов…

July 2017

S M T W T F S
      1
2345678
9101112131415
16171819202122
23242526272829
3031     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 20th, 2017 09:55 pm
Powered by Dreamwidth Studios