Comments 59
Программа умеет скачивать файлы в N потоков, однако случаи N больше одного пока не поддерживаются
Жму руку неизвестному гению!
Это не production-код, здесь не место костылям
Пф-ф-ф-ф. Зачем же Вам люди, которые не умеют писать production-код?
Самый правильный способ — выбросить все написанное и написать с нуля с учетом пропущенных требований.
А вот интересненько, неужели такая большая разница, что нельзя добиться своего рефакторингом + изменениями в нужных местах?
Я когда-то думал что библиотеки это фигня и начал делать игру на андроид на канвасе. Потом для следующих уже использовал фреймворк. А когда продолжал делать первую — приходилось доделывать старый, ужастный, костыльный код. Лучше бы я сразу его выбросил и переписал на фреймворк — заняло бы день, код уменьшилься раза в 2 точно. П.С. и писал я все в двух файлах, да, жесть.
Так вот, к чему я все это. Тут рефакторинг 100% невозможен.
Желательно так что стандартный ютюб HTTP линк(стопкой) и качает в mp3 формате.
Не претендую на правильный ответ, но посмотрите документацию youtube-dl. Программа (ладно, скрипт) точно умеет качать отдельно аудио по ссылкам и точно позволяет создавать очередь, читая из файла.
Но для конвертации в mp3 необходимо поставить ffmpeg с подключением lame
В последний раз слушал фестиваль электронной музыки: в одном окне качал видео в best качестве, в другом записывал аудио напрямую в mp3.
Да, он скачает что есть, а не то что хочется. Потому что далеко не факт, что звуковая дорожка там в mp3. Поэтому конвертировать придётся любым удобным способом. Ну или продолжать искать программу skacahat-youtube-v-mp3-bez-sms.
Как последний шаг, делю получившиеся звуковые файлы на 3-5 минутные куски с помощью mp3splt для упрощения навигации
Если хочется с UI, то у Media Human есть неплохой клиент.
Это не production-код, здесь не место костылям.
Унёс в мемориз =)
* А вот ещё, видимо, очень неглупый человек, который прислал один класс с пустой main-функцией (и больше ничего) и пояснил «Вот как-то в таком стиле я планирую делать это задание. Надеюсь, моя мысль уже ясна?».
IMHO это был сарказм — типа *вы издеваетесь?*
было бы весьма клево если бы еще было подписано на какую вакансию эти задания и, если, такое дали сеньору — то я, от части, даже его понимаю
Имхо одна и та же, пусть и очень простая задача написанная разными людьми отлично покажет их уровень, да и вообще много чего покажет. Не понимаю если честно этого высокомерия, мол мы слишком круты для такого.
Мы поэтому и выложили задания на GitHub чтобы человек мог выбрать что ему больше нравится. Нравится ему делать консольный качальщик — ну прекрасно. Если пресловутый senior сам выбрал качальщик и сам отказался его делать — я даже не знаю что сказать :)
Более того, задание можно вообще не делать и так часто бывает. Человек просто приходит, мы с ним разговариваем и я понимаю что нет смысла давать ему задание, а надо сразу предлагать работу :)
Прямо даже завидую, что это не я придумал 8-)
Оставшаяся половина делится примерно так:
- 40% — работает с недочетами «средней» тяжести
- 10% — работает очень хорошо
Однако, если такой вариант грамотно «упаковать» и прислать — почему нет, посмотрю с интересом. Мне ведь, по большому счету, не нужен еще один качальщик, мне хочется посмотреть что человек знает и умеет, как он выражает свои мысли в виде кода
P.S. Я изначальный автор этого текста и тот, кто проверяет эти тестовые :)
Может там был код в стиле brainfuck с невидимыми utf-символами: пробелы, табуляция итп?)
Возьмете на удаленку?
У кадого потока есть "бюджет". Мастер каждую секнду добавляет в "бюджет" заданную скорость. Данные вычитываются из сокета, если етсь положительный бюджет. При получении данных их объем вычитается из бюджета.
Очень напоминает [Deficit Weighted Round Robin](https://en.wikipedia.org/wiki/Deficit_round_robin), только на вход.
Интересно, если придет автор Reget, вы бы его взяли?
История одного тестового задания