|
|
|
4.12, Аноним (-), 09:13, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
> SHELL
Увы, для больших проектов он не годится. Vagrant не такой уж и большой, но на shell он будет выглядеть страшно. Вспомните inxi на 10 тысяч строк баша.
| |
|
5.17, Michael Shigorin (ok), 09:46, 12/09/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
>> SHELL
> Увы, для больших проектов он не годится.
Тут дело не столько в величине проекта, сколько в сложности структур данных. На шелле прекрасно организовывается поток (а-ля функциональные языки в своём роде) с применением более других средств в качестве основных, но вот манипулировать чем-то вроде хэшей оказывается уже нетривиально.
> Vagrant не такой уж и большой, но на shell он будет выглядеть страшно.
Не настолько хорошо читал/помню Vagrant, но на шелле тоже можно писать очень по-разному. Желающие могут посмотреть, скажем, http://git.altlinux.org/gears/c/control.git?p=control.git;a=blob;f=control/fu -- это "движок" http://altlinux.org/control на четыре *килобайта* (разработка Owl/ALT, которую давно бы могли позаимствовать практически любые пакетные дистрибутивы с большой для себя пользой).
> Вспомните inxi на 10 тысяч строк баша.
Да много чего можно вспомнить, тот же main() в mplayer. Для оценки пригодности языка всё-таки стоит брать лучшие примеры, а не худшие, как мне кажется.
| |
|
6.21, Аноним (-), 11:06, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Тут дело не столько в величине проекта, сколько в сложности структур данных.
> На шелле прекрасно организовывается поток (а-ля функциональные языки в своём
> роде) с применением более других средств в качестве основных, но вот
> манипулировать чем-то вроде хэшей оказывается уже нетривиально.
Да, я именно это и пытался сказать, но ещё до конца не проснулся, не смог адекватно сформулировать, стёр и и написал то что выше с надеждой, что кто-то укажет на написаннок вами. Я написал про размер проекта подразумевая то, что с ростом кодовой базы растёт сложность проекта и его структур данных, а красиво скомпоновать их на баше не так уж и просто. Баш прекрасен, но он не серебряная пуля.
> Да много чего можно вспомнить, тот же main() в mplayer. Для
> оценки пригодности языка всё-таки стоит брать лучшие примеры, а не худшие,
> как мне кажется.
Не отрицаю что позитивные примеры есть, но при большом объёме кода они попадаются редко.
| |
|
|
|
5.25, VINRARUS (ok), 14:57, 12/09/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
echo free -df | sed -e 's%d%r%' -e 's%^f%%' -e 's%$% /%' -e 's%$%*%' -e 's%e.%m%'
| |
|
|
|
|
|
6.16, Michael Shigorin (ok), 09:42, 12/09/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
> Его синтаксис всяко лучше Руби.
Такое ощущение, что любители питона -- как любители демократии: в упор не желают видеть очевиднейших проблем своего фетиша и при этом крайне навязчивы.
_Чем_ синтаксис питона "всяко лучше" рубёвого, Вы уточнять не стали.
PS: спокойно отношусь к _разработчикам_ на питоне, которые спокойно делают дело, а не устраивают вот эти вот змей-парады.
| |
|
7.20, Аноним (-), 10:55, 12/09/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
Да пожалуйста, объясню. Мне регулярно приходится иметь дело с Vagrantfile, котрый записывается на чистом Ruby. Там мне не нравится неинтуитивная запись вроде такой:
config.vm.provision :shell, :inline => "mv /tmp/vagrantfile-user-data /var/lib/coreos-vagrant/", :privileged => true
Или
$shared_folders.each_with_index do |(host_folder, guest_folder), index|
config.vm.synced_folder host_folder.to_s, guest_folder.to_s, id: "core-share%02d" % index, nfs: true, mount_options: ['nolock,vers=3,udp']
end
(Скопипащено с первого попавшегося примера, а именно отсюда: https://github.com/coreos/coreos-vagrant/blob/29b611d5dce5976efbbf749192747044)
Я знаю зачем оно надо, но со стороны выглядит как мешанина. И, пожалуйста, не надо сравнивать с перлом.
Я уже, конечно, привык, но всё ещё путаюсь от непривычки. В случае с питоном синтаксис довольно однообразен и по нему легко догадаться что есть что (этому способствует человекочитаемая запись типа "... as var", "for var in iterable", запись диктов через двоеточие почти как в json и т.д.), и при первом знакомстве с ним (уже зная синтаксис баша, C и js) читать ман мне не пришлось (да, я плевался на отступы, как и все, и предотвращая вопросы - я js-хейтер). Впоследствии оказалось, что я не знал лишь пары мелочей, вроде "что значит запись вида u'foo' и b'foo'" и отличия записи списков и кортежей, а намного позже пришлось узнать, как записать inline conditional statements, list comprehensions, лямбды и прочее.
| |
|
|
9.32, Анонии (?), 22:14, 12/09/2017 [^] [^^] [^^^] [ответить] | +1 +/– | Много есть вариантов, но предлагать нет смысла - Vagrant никто переписывать не с... текст свёрнут, показать | |
|
8.35, Аноним (-), 23:03, 12/09/2017 [^] [^^] [^^^] [ответить] | +3 +/– | Множество проблем решается простым форматированием или использованием короткого ... текст свёрнут, показать | |
|
|
|
|
|
3.9, AntonAlekseevich (ok), 07:21, 12/09/2017 [^] [^^] [^^^] [ответить]
| +1 +/– |
> что может быть лучше руби для скриптов?
Python, BASh, !!!Perl!!!
Конечно если умеете на этом писать.
| |
|
4.10, Аноним (-), 08:30, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
не проще ли просто писать на руби? Хотя бы потому, что из всего выше перечисленного он банально самый молодой
| |
4.14, freehck (ok), 09:23, 12/09/2017 [^] [^^] [^^^] [ответить]
| +2 +/– |
Поддерживаю, только без python.
Странные там вещи. Ну вот взять хотя бы fsutil. Ну вот кому пришло в голову, что при копировании файлов, надо копировать и время, и отменить этого никак нельзя? По-моему адекватнее всего было бы сделать копирование полностью аналогичным команде cp.
| |
|
5.18, Аноним (-), 10:27, 12/09/2017 [^] [^^] [^^^] [ответить]
| –2 +/– |
Как будто при наличии необходимых полномочий у копирующего, cp не переносит права копируемых файлов.
| |
|
6.19, freehck (ok), 10:35, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Как будто при наличии необходимых полномочий у копирующего, cp не переносит права
> копируемых файлов.
Извиняюсь, другое было в голове, когда писал коммент. Не привилегии, а время. atime, ctime, mtime.
| |
|
5.37, Аноним (-), 21:02, 20/09/2017 [^] [^^] [^^^] [ответить]
| –1 +/– |
> Странные там вещи. Ну вот взять хотя бы fsutil
Взять можно, откуда-нибудь, потому что в питон такого нет, есть shutil. Что сразу показывает степень познания. И, конечно же, в https://docs.python.org/2/library/shutil.html видим вагон вариантов: с копированием времени и без.
Почему-то ругают питон чаще всего люди, которые о нём понятия не имеют..
| |
|
6.38, freehck (ok), 04:38, 21/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
>> Странные там вещи. Ну вот взять хотя бы fsutil
> Взять можно, откуда-нибудь, потому что в питон такого нет, есть shutil. Что
> сразу показывает степень познания. И, конечно же, в https://docs.python.org/2/library/shutil.html
> видим вагон вариантов: с копированием времени и без.
> Почему-то ругают питон чаще всего люди, которые о нём понятия не имеют..
Пфффф, я и не утверждал, что я в этой бяке разбираюсь. Ну попутал названия, с кем не бывает? :)
Но факт вот какой: мне подсунули install-скрипт на питоне, который для рекурсивного копирования директорий использовал copytree. Который, внезапно, использует copy2, копирующий ещё и stat-ы.
А мы по разнице atime-ов определяем список файлов, которые войдут в пакет. Угадайте, на что мы нарвались.
Так что может там и есть вагон вариантов, но как всегда почему-то нету того, который был нужен нам. Не, мы конечно всё написали, но противно, жуть: почему я, не питонист ни разу, должен тратить время, чтобы находить вот такие вот заморочки, дебажа то, что должно просто работать прямо из коробки?
И вот ещё забавная какая штука: в новых версиях питона можно в copytree подменить copy2 на copy, в старых -- нельзя. У нас как раз старая. Но собственно забавно не это, а скорее вот что:
https://github.com/python/cpython/blob/master/Lib/shutil.py#L353
То есть для директорий stat-ы всё равно копируются, хоть ты тресни. Ну вот и расскажите мне теперь, что они не наркоманы.
Может я ничего и не понимаю в питоне, но я точно понимаю, что вот данный кусок кода -- это дрянь, и так писать не надо. А это, между прочим, ваши стандартные библиотеки.
| |
|
7.40, freehck (ok), 13:13, 12/12/2017 [^] [^^] [^^^] [ответить]
| +/– |
Напишу сюда, чтоб не забыть, ибо часто обращаюсь к этому посту.
Где в Python нормальный модуль для работы со Stream-ами? Что стриму нужно-то? Если по минимуму, то это конструктор, null-чекер и next.
Ну вот например как в OCaml это сделано: http://caml.inria.fr/pub/docs/manual-ocaml/libref/Stream.html
А в Python я смог максимум что нарыть -- это IO. Но чёрт возьми, это именно что IO, и к стримам это всё имеет весьма опосредованное отношение: https://docs.python.org/2/library/io.html
Может быть я чего-то не доискал, конечно, но мне весьма грустно от того, что по стримам ничего не смог найти толкового. Такое чувство, что каждую элементарную вещь в Python-е надо писать самому, ибо в стандартных библиотеках целая куча всяких разных штуковин, очень похожих на то, что тебе надо, но ни одна толком не является именно тем, что ты ищешь, и ни одну нельзя использовать в качестве строительного кирпичика того, что ты ищешь... :/
UPD: Понял. Похоже, питонисты решили, что куда круче использовать повально генераторы вместо стримов. Короче.
[CODE]
def read_in_lines(file_object):
while True:
line = file_object.readline()
if not line:
break
yield line.rstrip("\n")
s = read_in_lines(open('data'))
[/CODE]
UPD2: или даже короче
[CODE]
def stream_of_file(filename):
return (line.rstrip("\n") for line in open(filename))
[/CODE]
C open я возможно неправ -- надо ведь закрывать... Ну да фиг с ним.
UPD3: а стрим по файлу они, значит, организуют вот так
[CODE]
def stream_of_fd(fd):
return (line.rstrip("\n") for line in fd)
def stream_of_file(filename):
fd = open(filename)
for line in stream_of_fd(fd):
yield line
fd.close()
for line in stream_of_file('data'):
print(line)
...
[/CODE]
Ну, что ж, просто я не привык к генераторам... Хотя вообще-то не очень понятно, зачем применять в обязательном порядке генераторы там, где без них можно обойтись.
| |
|
|
|
|
|
2.15, Michael Shigorin (ok), 09:39, 12/09/2017 [^] [^^] [^^^] [ответить]
| +2 +/– |
> Неплохо было бы переписать этот руби-ужас на js
Вчерась рассматривал кишки очередного ужаса по имени meson.
[CODE]Makefiles also have a syntax that is very unpleasant to write
which makes them a big maintenance burden.[/CODE]
Эти... смузливые милашки, не осилившие нормальный зрелый инструментарий, начали лепить своего горбатого, мотивируя это вот так. Как угодно, конечно, но вообще-то такое к психиатру.
Разумеется, шаг вправо-влево -- и из него полезли черви. А с тем же scons и шагать не надо было, достаточно хлопка в ладоши прямо на gcc/linux/x86_64.
Но кому-то так жить проще.
PS: и ведь все такие на старте орут "быстрее, быстрее, а этот init/make/younameit вообще никак нельзя сделать быстрее!"; как только ввязываются в бой, вдруг выясняется, что скорость -- не такое уж и большое достоинство, и вообще.
| |
|
3.31, Яков (?), 22:03, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
А вот за "смузливых милашек" - огромное инженерное спасибо! Буду широко использовать термин.
| |
|
|
|
2.13, Аноним (-), 09:14, 12/09/2017 [^] [^^] [^^^] [ответить]
| +/– |
> Хотя вроде как его хотели прикрыть. Но...
Да не, с чего бы? Это они Otto прикрыли, как я понял - в пользу Atlas.
| |
|
|