===== Как был сделан день КИШок ===== Как и было написано выше, писуар изначально задумывался для автоматизации вещания радивы, а вот скриптования пока нет. Врочем, скриптование изначально задумывалось, и более того, в него была заложена идея коллективного творчества. Коллективное творчество можно сравнить в сосудом, куда каждый может вложить что-то от себя. Отсюда и раннее название этого проекта - pisspond. Такова жизнь. Кратко: создаем директорию где будет запущен писуар и настраиваем туда испражнение треков любимым методом, хоть скриптами на любимом языке, хоть файловым менеджером, хоть скайпом и передачей файлов по нему. Вариантов много. Но приступим к той опердени, которая была написана на день киша: use Data::Dumper; $urine = "z:/urine/"; # это директория, которую наполняем # gen list / readdir # shuffle # every # а это контент, которым будем наполнять # тут у нас джинглы # анимешность пополам с дискографией скриллекса # модульная музыка, которую я хотел ставить по утрам # голосовые нарезки, которые я посвятил кишу @jingles = &shuffle(getRecursiveFiles("/jingles/")); @anime = &shuffle(grep{/mp3$/i}getRecursiveFiles("tmp/Skrillex - Discography - 2007-2014"),getRecursiveFiles("Mitsudomoe [MP3]")); @kish = &shuffle(grep{/mp3$/i}getRecursiveFiles("tmp/Король и Шут/")); @mods = &shuffle(getRecursiveFiles("morning/")); @voices = &shuffle(getRecursiveFiles("cutter/")); # Формируем плейлист с весовыми коэфициентами @playlist = every(\@mods, 1, \@jingles, 1, \@anime, 1); @playlist = every(\@playlist, 3, \@voices, 1, \@kish, 1); $count = 0; foreach(@playlist) { print "$_\n"; # Копируем файлы и ждем open(dd, $_); binmode(dd); s/.+\///s; open(oo, ">" . $urine . "/" . $_); $count++; binmode(oo); print oo =5) { sleep 5; } } sub every { my @pos = (); my @src = (); my @rate = (); my @weight = (); while(@_) { push(@src, shift); push(@weight, shift); } my @res = (); my $num = @src; my @finished = (1..$num); my $q, $min, $found; while(grep{$_>0}@finished) { $min = 0xFFFFFFFF; for($q = 0; $q < $num; $q++) { if($min > $rate[$q]) { $min = $rate[$q]; $found=$q; } } $q=$found; print "found $q $pos[$q]\n"; if($pos[$q] == @{$src[$q]}) { $pos[$q] = 0; $finished[$q] = 0; } $rate[$q] += $weight[$q]; push(@res, $src[$q]->[$pos[$q]]); $pos[$q]++; } return(@res); } sub getSeq { my $pref = shift; my $nums = shift; return(map{$pref.$_}(1..$nums)); } sub getRecursiveFiles { my $df; opendir($df, $_[0]); my @l = readdir($df); close($df); return(map{-d $_?getRecursiveFiles($_):$_}map{$_[0]."/".$_}grep{!/^\.{1,2}$/}@l); } sub shuffle { my @src=@_; my $q, $r; my $tmp; for($q=0; $q < @src; $q++) { $r = int(rand() * @src); $tmp = $src[$r]; $src[$r] = $src[$q]; $src[$q] = $tmp; } return(@src); }