The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

GitHub опубликовал статистику за 2020 год, opennews (??), 02-Дек-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


11. "GitHub опубликовал статистику за 2020 год"  –5 +/
Сообщение от Аноним (11), 03-Дек-20, 01:23 
че за язык такой Shell ?
Ответить | Правка | Наверх | Cообщить модератору

14. "GitHub опубликовал статистику за 2020 год"  –1 +/
Сообщение от Аноним (2), 03-Дек-20, 02:04 
> че за язык такой Shell ?

Баш наверно, я тут упоролся всё делать на баше. Наибольшее ограничение из встреченных, это то, что в строках нельзя хранить нулевой байт. Несколько ограничивает применимость, постоянно приходится питон брать только из-за этого. И как разделитель для строк его нельзя использовать, но тут хотя бы гнутые утилиты спасают хоть как-то.

Сегодня листал один из древних своих баш скриптов. Интересное ощущение. Некоторые конструкции довольно странные, некоторые мусорные, форматирование отсутствует. Смесь пробелов и табов, упс. Удивительно, что оно работает, местами даже продуманнее, чем я бы сделал сейчас. Только стиль отвратительный. Я тогда ещё сомневался, пихать ли мне башизм на башизме, или же думать о калеках.

Ответить | Правка | Наверх | Cообщить модератору

20. "GitHub опубликовал статистику за 2020 год"  +4 +/
Сообщение от Аноним (24), 03-Дек-20, 03:05 
Нахрена тебе "нулевой байт" в башскрипте? Ты точно выбрал правильный инструмент для своей задачи?
Ответить | Правка | Наверх | Cообщить модератору

21. "GitHub опубликовал статистику за 2020 год"  –1 +/
Сообщение от Аноним (2), 03-Дек-20, 03:13 
> Нахрена тебе "нулевой байт" в башскрипте? Ты точно выбрал правильный инструмент для
> своей задачи?

Ну вот тебе надо прочитать 2 значения из файла, байт 10 там. И ладно бы если данные были записаны как 02 00, но нет же, они будут записаны как 00 02 (это то бишь тебе надо прочитать и поменять их местами). Чё-то уже ой, баш сам такого сделать не может никак, тебе придётся преобразовать байты в цифры и работать уже с ними, конвертируя их туда-сюда. В питоне ты просто берёшь и пишешь i = int.from_bytes(version,'big') и всё.

Ответить | Правка | Наверх | Cообщить модератору

26. "GitHub опубликовал статистику за 2020 год"  +1 +/
Сообщение от Аноним (24), 03-Дек-20, 03:43 
Разумеется не может, баш не для работы с бинарными данными, сколько бы байт они ни занимали. На баше решаются более высокоуровневые задачи.
Ответить | Правка | Наверх | Cообщить модератору

28. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 03:54 
Это очень высокоуровневая и абсолютно примитивная задача. Значит, цитирую (сократил немножко):

f=open(file_name, "rb")
f.seek(6)
hash_length = int.from_bytes(f.read(4),'big')
f.seek(10)
info_hash = f.read(hash_length).hex().upper()

И вот ради этого мне брать питон?

Ответить | Правка | Наверх | Cообщить модератору

30. "GitHub опубликовал статистику за 2020 год"  +5 +/
Сообщение от Аноним (24), 03-Дек-20, 04:12 
Разбор бинарного файла не звучит как высокоуровневая задача. Обычно это задача, находящаяся в самом нижнем уровне. Скажем, если в башскрипте понадобится выдернуть версию пакета из __текстового__ RPM-spec-файла, все равно предпочтительнее пользоваться уже готовыми решениями (rpmspec), чем городить самостоятельный (и обязательно ошибочный) разбор. Для твоего формата таких же инструментов не нашлось? Чтоб в баше ты высокоуровнево написал только это:

INFO_HASH="$(инструмент  --дай-мне-то-то  ./вот-тебе-файл)"

Ответить | Правка | Наверх | Cообщить модератору

31. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 04:34 
Ну теперь я из баша дёргаю питон чтобы получить хеш чтобы потом скормить его сишной программе (которая сама не может догадаться извлечь этот хэш из своего же файла, угу). Питон в этой цепочке совершенно лишний.
Ответить | Правка | Наверх | Cообщить модератору

35. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от svsd_val (ok), 03-Дек-20, 06:41 
file_name="./test";
hash_length=$((16#`dd if="$file_name"  bs=1 skip=6 count=4 | xxd -ps -c 1000`));
hash_info=`dd if="$file_name"  bs=1 skip=10 count=$hash_length | xxd -ps -c 1000`;

echo $hash_length ${hash_info^^}

А если немного ПОДУМАТЬ, то можно обойтись то и без питона )) Это первая мысль которая мне пришла на ум.

Ответить | Правка | Наверх | Cообщить модератору

45. "GitHub опубликовал статистику за 2020 год"  –1 +/
Сообщение от Аноним (2), 03-Дек-20, 08:12 
Какая вторая? Я не помню, почему этот вариант не подошёл, что-то очень похожее у меня и было. Только потом возникли какие-то проблемы. Зачем нужен c и почему такой большой? Это ничего, что у меня в файле big endian, но моя архитектура при этом little endian?
Ответить | Правка | Наверх | Cообщить модератору

68. "GitHub опубликовал статистику за 2020 год"  +1 +/
Сообщение от svsd_val (ok), 03-Дек-20, 10:38 
>>Какая вторая?

Вторая мысль: когда человек умеет программировать он сможет написать на любом яп что угодно..
>>Я не помню, почему этот вариант не подошёл, что-то очень похожее у меня и было. Только потом возникли какие-то проблемы.

Вы писали что не смогли обойтись без питона, в ответ пример и написал выше, как это можно сделать без питона )) Вообще реализации одного и того же действия уйма )).

>>Зачем нужен c и почему такой большой?

по поводу -c, можно было почитать документацию, в том же --help написано что это размер колонок после чего будет разбито новой строкой =)

>>Это ничего, что у меня в файле big endian, но моя архитектура при этом little endian?

А как это с файлом то связано ? как захотите его форматировать так и форматируйте...

Ответить | Правка | Наверх | Cообщить модератору

112. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 22:49 
Я думал, будет вариант получше. Там просто написано, что захардкоженный максимум это 256, а не 1000+, да и дефолта в 32 вполне достаточно на самом деле. Можно и без питона, и я даже где-то использовал dd conv=swab,ucase под это дело, но это такая-то грязь. А, кроме того, swab ведь инвертирует только пары байтов, если мне надо инвертировать больше чем пары он этого уже не может. Кроме того, на нечётном числе будет баг. Вроде с этим я и столкнулся. Нет, всё-таки, для чтения файлов баш очень не подходит, максимум на что он способен это служить клеем и всё остальное изврат. Т.е. мне надо написать однострочник на си, который это сделает и вызывать уже его. Да даже если так, половина конструкций обломается из-за IFS и другая половина уже из-за IFS=. Я только недавно узнал (заново открыл?) о конструкции вида for file do и раньше с именами файлов мне было работать сложнее.

>что угодно

Далеко не что угодно и совсем не как угодно. Проблема ещё и в том, что когда внешних вызовов много, эффективность скрипта снижается весьма значительно и ничего с этим не сделать. В итоге питон оказывается быстрее и эффективнее, поскольку он не спамит процессами. Ещё, например, у меня была задача исправить поломанную кодировку в именах файлов. Обычно, конечно, iconv, но не в с случае с cp932 и cp1252, когда юникод ломается. У питона, кстати, тоже были проблемы, но питон может и работать с любыми байтами без декодирования в локаль и я просто "исправил" их. Я думал свихнуть от жонглирования локалями и кодировками, и всё же нужно передавать так, чтобы баш его не трогал сам. Это было ужасно, питон намного приятней оказался. А ведь задача тоже совершенно элементарная -- поменять кодировку строки из поломанного юникода в корректный юникод. Я выяснил в процессе, что utf8 очень легко сломать и cp1252 вообще похоже не декодируется в utf8 (даже корректный) и только в utf16/utf32, а это дополнительные проблемы.

Ответить | Правка | Наверх | Cообщить модератору

113. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 22:58 
Особенно забавно писать на баше когда ты не знаешь решения задачи. Тебе сначала надо придумать как же это элементарное действие выполнить на баше, потом проанализировать результаты, потом переделать, и так по кругу. Всё это конечно с тысячами и тысячами бойлерплейта, каждый из которых будет содержать ошибку и если ты её нашёл ты уже занимаешься её отладкой. Нет, всё-таки баш это изврат, если бы данные могли быть любыми (в том числе содержащими 0) это избавило бы от многих проблем. Но, совместимость с доисторическими системами, ничего не поделать, и быстро это не изменить (вся надежда на gnu и благоразумие современных программистов).
Ответить | Правка | Наверх | Cообщить модератору

122. "GitHub опубликовал статистику за 2020 год"  +1 +/
Сообщение от svsd_val (ok), 04-Дек-20, 11:39 
Согласен, всё зависит от того что пишешь, многие вещи писать на питоне быстрее и удобнее чем на баше и на оборот, у каждого языка своя ниша.
Ответить | Правка | К родителю #113 | Наверх | Cообщить модератору

62. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (62), 03-Дек-20, 09:59 
Костыль на костыле. Вот он шел во всей красе.
Ответить | Правка | К родителю #35 | Наверх | Cообщить модератору

69. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от svsd_val (ok), 03-Дек-20, 10:40 
Костыль на костыле - любой язык во всей красе ))
Ответить | Правка | Наверх | Cообщить модератору

37. "GitHub опубликовал статистику за 2020 год"  –2 +/
Сообщение от псевдонимус (?), 03-Дек-20, 06:48 
А кроме вашего распаренного бала Шклов не бывает?
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

38. "GitHub опубликовал статистику за 2020 год"  –2 +/
Сообщение от псевдонимус (?), 03-Дек-20, 06:50 
Кроме распиареного баша других шеллов не бывает?
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

47. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 08:20 
Существует ещё зш, он лучше конечно, но его придётся ставить отдельно и он не целиком совместим с башем, а это проблема. Хотя зшизмы конечно упрощают жизнь тоже.
Ответить | Правка | Наверх | Cообщить модератору

48. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от Аноним (2), 03-Дек-20, 08:21 
И если его обвешать плагинами, он тормозит больше баша, и это ещё одна проблема.
Ответить | Правка | Наверх | Cообщить модератору

61. "GitHub опубликовал статистику за 2020 год"  +1 +/
Сообщение от псевдонимус (?), 03-Дек-20, 09:48 
И тсшелл и кшелл и сшелл. И просто Шелл.
Ответить | Правка | К родителю #47 | Наверх | Cообщить модератору

54. "GitHub опубликовал статистику за 2020 год"  +/
Сообщение от lockywolf (ok), 03-Дек-20, 09:17 
Мало кто ими пользуется. Ну может, mksh ещё, на ведре. Но и то это очень нишево.

А всякие eshell, rc, tcl маргинальны.

Ответить | Правка | К родителю #38 | Наверх | Cообщить модератору

71. "GitHub опубликовал статистику за 2020 год"  +1 +/
Сообщение от Аноним (71), 03-Дек-20, 10:52 
а джаву с джаваскриптом тоже путаешь?
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру