XML/json конфиги или plain-text (ini) конфиги

XML/json конфиги
5
Нейтральная
сторона
1
plain-text (ini) конфиги
5
Прежде чем писать комментарии или выбрать сторону вы должны авторизироваться!

03-04-2012 14:12 +1

Для совсем уж простых конфигов конечно XML не нужен, но для чего-то более сложного лучшего инструмента просто нет. Тут тебе и возможность создания вложенных/древовидных структур, написания схемы для валидации конфига, написания трансформации в любой формат, десериализация искаропки для всех вменяемых платформ и много-много чего ещё.

7 комментариев
r619 03-04-2012 14:22 0

NightmareZ, Древовидные структуры? Я скорее просто напишу поясняющий комментарий о структуре в plain, или буду использовать табы.
В программе на уровне класса можно реализовать что то вроде удобочитаемых категорий настроек, но имхо незачем, лишний код и вычисления.

NightmareZ 03-04-2012 14:39 0

r619, А теперь давай ты мне расскажешь, какой софт ты писал.

r619 03-04-2012 14:45 0

NightmareZ, АПВС?
U first.

NightmareZ 03-04-2012 14:46 0

r619, nightmarez.net

Тут, например, я обильно юзаю XML: nightmarez.net/flowchartbuilder

Мне просто кажется, что теоретик.

cherepets 03-04-2012 14:55 0

NightmareZ, Попробую воспользоваться твоей прогой для структурных диаграмм в своем курсаче.

NightmareZ 03-04-2012 14:57 0

cherepets, Она недописанная. Лучше возьми Visio :)

cherepets 03-04-2012 14:58 0

NightmareZ, И правда. Ссылки ж нет на скачивание там...
Висио влом качать, у меня структурная простая, а остального есть All Fusion.

03-04-2012 13:28 0

Быстрее парсить, меньше весят.
Но если конфиг сложнее чем тупо пары "параметр - значение", то лучше все же xml и json.

33 комментария
r619 03-04-2012 13:35 0

cherepets, Честно, даже представить не могу себе такой сложный конфиг, который прямо никак нельзя в plain.

Кто то кстати вместо обычного текста использует json для логов, а потом переводит его в удобочитаемый формат.
JSON - неплохая штука, избавляет от теговых недостатков xml, но с кавычками и скобками запутатся можно, если редактировать вручную.

Логи в нем мне даже больше нравятся честно говоря, но на практике не встречал.

cherepets 03-04-2012 13:38 +1

r619, Если есть хороший редактор с подсветкой, а еще лучше автоматическим форматированием, то в JSON'e не запутаешься.

NightmareZ 03-04-2012 14:07 0

r619, Пример конфига, который нельзя сделать в plaintext, например, можно глянуть у CruiseControl.NET

NightmareZ 03-04-2012 14:09 0

cherepets, Легче парсить и меньше весят - не аргументы. Потому что парсишь всё равно не ты, а готовый парсер и занимает это в любом случае миллисекунды, а разница в весе в несколько килобайт в XXI-веке погоды не играет.

cherepets 03-04-2012 14:11 0

NightmareZ, Но зачем тратить хоть сколько то времени и места вообще ни на что?

NightmareZ 03-04-2012 14:13 0

cherepets, Ради удобства. Ты же сейчас используешь нормальный браузер (вроде файрфокса или хрома), а не lynx или wget. Хотя мог бы экономить мегабайты :)

cherepets 03-04-2012 14:20 0

NightmareZ, Internet Explorer 10.
Но браузер я, в отличие от конфига, вижу. Для конфига же я сделаю формочку с галочками и больше его в жизни не увижу.

r619 03-04-2012 14:24 0

NightmareZ, Ради удобства кого? Разработчика?
Пользователей больше, для них можно напрячь мозги, запоминать структуру (если слишком сложное пишем) и пилить в plain.
Алсо, для plain хватает fstream, для xml и json нужны отдельные либы.

Кстати, опера использует plain если не ошибаюсь.

r619 03-04-2012 14:32 0

cherepets, не успел доредактировать комент.
оффтоп

NightmareZ 03-04-2012 14:44 0

r619, Опиши мне дерево в plain. А я поржу.

NightmareZ 03-04-2012 14:47 0

r619, Уже посмотрел, как я тебя просил, конфиги ccnet?

r619 03-04-2012 14:51 0

NightmareZ, Почему нет? можно создать некоторое подобие дерева в plain, несколько отойдя от стандарта ini, при этом используя только то что нужно.
Похоже от аргументов вы перешли к чистому троллингу, но теперь у меня есть чем занять время)

r619 03-04-2012 14:55 0

NightmareZ, посмотрел.

NightmareZ 03-04-2012 14:56 0

r619, Ну покажи же мне пример дерева в plaintext. Чтобы было хотя бы три уровня вложенности.

cherepets 03-04-2012 14:57 +1

r619, Самое странное что все жесты в фоксе по дефолту отключены и включаются через about:settings.
Логичный вопрос: зачем они их тогда вообще делали?

NightmareZ 03-04-2012 14:58 0

r619, Меня вот жутко бесит, что сейчас модно обвинять окружающих в троллинге, когда чувствуешь, что начинаешь сливать.

r619 03-04-2012 15:04 0

NightmareZ, >Опиши мне дерево в plain. А я поржу.
>А теперь давай ты мне расскажешь, какой софт ты писал.
Вроде очень подходит под определение троллинга.
Видел программы которые вообще хранят все свои настройки в паре строк одними цифрами. Исключения - стринги, они выносились отдельно вниз. Некий arch-style минимализм.

До просмотра твоего сайта, предположил что ты пишешь на C#/java, угадал)

NightmareZ 03-04-2012 15:07 0

r619, Это не троллинг, это попытка убедить тебя, что ты не понимаешь, о чём говоришь. Дерево будет для plain? Аналог xml-трансформации покажешь?

NightmareZ 03-04-2012 15:08 0

r619, Если в программе нужно хранить всего несколько значений, то, понятное дело, xml там нафиг не нужен. Но мы ж в общем говорим, а не в частности.

r619 03-04-2012 15:10 0

NightmareZ, Она не нужна вообще.
поставь оперу, глянь в operaprefs.ini.
а потом глянь в opera:settings.
Она всегда считалась комбаином, и лет ей немало. Но они используют plain для настроек.

fhfh 03-04-2012 19:48 +1

r619, не всё то хорошо, что в опере

opera.rulez 03-04-2012 21:17 0

fhfh, А в мозилловских браузерах часть настроек в Яваскрипте (о, ужас!), часть в XML, часть в INI-файлах, а часть в двоичном формате SQLite.

Фоторобот автора Фаерфокса должен выглядеть примерно так:


Вывод: не всё то хорошо, что не в Опере.

opera.rulez 03-04-2012 21:23 0

r619, А IE для хранения настроек использует реестр Шиндошз, что затрудняет ручную правку конфига и делает невозможным использование нескольких копий IE на одном компьютере. Либа для доступа к реестру вообще стандартная для данной ОС. Из этого какой вывод?

cherepets 03-04-2012 22:07 0

opera.rulez, Из этого какой вывод?

IE будет тяжело портировать под другие ОС?

opera.rulez 03-04-2012 22:45 +1

cherepets, И слава Ктулху! Стоп, почему же тяжело? В Wine есть библиотека, которая при вызове функций API типа RegCreateKey что-то пишет в INI-файлы. Значит, это не проблема. NightmareZ может даже переписать эту библиотеку, чтобы она создавала XML-файлы. Ведь намного логичнее писать так:
<HKEY_LOCAL_MACHINE>
<Software>
<Microsoft>
<Windows>
<CurrentVersion>
...
</CurrentVersion>
</Windows>
</Microsoft>
</Software>
</HKEY_LOCAL_MACHINE>


Только слабак может написать так:
[HKEY_LOCAL_MACHINE/Software/Microsoft/Wi ndows/CurrentVersion]

Кстати, реестр появился в последней версии OS/2 Warp. Причём системой и стандартными программами вообще никак не используется. Предназначен исключительно для запуска программ, портированных с Винды при помощи пакета Odin.

cherepets 03-04-2012 22:54 0

opera.rulez, Но ведь это костыль какой-то.

opera.rulez 03-04-2012 22:58 0

cherepets, Костыль — использовать XML только для того, чтобы куда-нибудь пристроить библиотеку для его генерации/разбора? Согласен.

NightmareZ 03-04-2012 23:06 +1

opera.rulez, XML тут выглядит монстрообразно лишь потому, что ты в качестве примера привёл описание одной ветки. Представь, что их стопятьсот разного уровня вложенности. Тут XML куда компактнее будет, чем костыль с INI, плюс всякие плюшки бесплатно.

opera.rulez 03-04-2012 23:09 0

NightmareZ, Представил. Если в INI использовать костыль с длинным названием раздела, то будет стопятьсот разделов с похожими названиями. Согласен, в XML такой случай даже сожмётся.

Только как будет со скоростью разбора? Если весь конфиг загружается в память за раз, то без разницы. А если просто нужно найти конкретный ключ, то INI не будет для этой задачи проще?

NightmareZ 04-04-2012 00:02 +1

opera.rulez, Если нужно найти конкретный ключ, то проще будет БД :) *trollface*

opera.rulez 04-04-2012 00:14 0

NightmareZ, И тут не могу не согласиться.

А работы с древовидной структурой есть и другой путь: создавать дерево в виде вложенных директорий файловой системы, а в каждую директорию класть INI-файл или текстовичок. Тогда удаление/копирование ветви можно будет выполнять любым файловым менеджером.

За такой путь карали, когда основной системой была FAT, потому что тратить драгоценные кластеры на маленьких винчестерах было непозволительной роскошью. Даже картинки и карты к игре Doom были собраны в один WAD-файл с собственной файловой системой, чтобы не бороться с ограничениями FAT.

Кстати, тема для холивара: использовать внешнюю файловую систему vs изобретать свою.

NightmareZ 04-04-2012 06:31 +1

opera.rulez, Это идиотизм, делать для конфига стопятьсот файлов. Как ты эту хуиту потом редактировать будешь руками?

03-04-2012 21:10 0

Я бы не стал класть на одну чашу весов XML и JSON. JSON в некоторых языка парсить не просто, а очень просто. Достаточно банального eval. Правда, перед этим можно прогнать через фильтр, чтобы не выстрелить в ногу.

XML же нужен только в том случае, когда нам нужны не просто значения, а значения, обвешанные атрибутами: дата правки, права доступа, версия конфига, ссылка на описание, с чем это значение едят, то есть когда мы пытаемся имитировать хитрожёлтую файловую систему.

0 комментариев