¿Cuál es el formato de archivo de configuración legible por humanos más simple? [cerrado]

13

El archivo de configuración actual es el siguiente:

mainwindow.title = 'test'
mainwindow.position.x = 100
mainwindow.position.y = 200

mainwindow.button.label = 'apply'
mainwindow.button.size.x = 100
mainwindow.button.size.y = 30

logger.datarate = 100
logger.enable = True
logger.filename = './test.log'

Esto se lee con python en un diccionario anidado:

{
  'mainwindow':{
    'button':{
      'label': {'value':'apply'},
       ...
  },
  'logger':{
     datarate: {'value': 100},
     enable: {'value': True},
     filename: {'value': './test.log'}
  }, 
  ...    
}

¿Hay una mejor manera de hacer esto? La idea es obtener un tipo de comportamiento XML y evitar XML el mayor tiempo posible. Se supone que el usuario final es un analfabeto informático casi totalmente y básicamente usa el bloc de notas y el copiar y pegar. Por lo tanto, el tipo estándar de "encabezado + variables" de Python se considera demasiado difícil.

El usuario ficticio edita el archivo de configuración, los programadores capaces manejan los diccionarios. El diccionario anidado se elige para una división fácil (el registrador no necesita o incluso no puede tener / editar los parámetros de la ventana principal).

Juha
fuente
11
Lo más simple sería crear una pequeña aplicación para su cliente que no haga más que editar estos archivos de configuración.
Patrick Hughes
11
El archivo de configuración más simple para humanos es: Do what I want.Sin embargo, es el más difícil para las computadoras: P
Sjoerd
@PatrickHughes Supongo que ya existe uno. ¿Conoces ese programa? No me gustaría tomarme el tiempo para "imprimir bonitas" cosas simples. El problema es que agregar pequeños descansos de programa requiere más. Me refiero a que cada computadora tiene vim, textedit o bloc de notas.
Juha
@sjoerd Esto es lo que quería saber. ¿Hay algoritmos que están más en el lenguaje humano que los programas en este sentido?
Juha
2
Los usuarios pueden romper cualquier cosa. Si van a editarlo manualmente, prepárese para dar soportemainwindow.title =='test"
MSalters el

Respuestas:

15

Podrías usar algo como YAML . Aquí hay un enlace a un ejemplo:

http://www.yaml.org/start.html

--- !clarkevans.com/^invoice
invoice: 34843
date   : 2001-01-23
bill-to: &id001
    given  : Chris
    family : Dumars
    address:
        lines: |
            458 Walkman Dr.
            Suite #292
        city    : Royal Oak
        state   : MI
        postal  : 48046
ship-to: *id001
product:
    - sku         : BL394D
      quantity    : 4
      description : Basketball
      price       : 450.00
    - sku         : BL4438H
      quantity    : 1
      description : Super Hoop
      price       : 2392.00
tax  : 251.42
total: 4443.52
comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

Puede encontrar enlaces de Python para ello en PyYAML . Es un poco más fácil de usar que JSON (que es el aspecto de su segundo ejemplo).

jmq
fuente
10
YAML es elegante, pero definitivamente no es el más simple.
9000
1
Pensé más simple en el contexto de su pregunta: "obtener el tipo de comportamiento XML y evitar XML el mayor tiempo posible". No estoy seguro de nada más simple, mientras cumplo con este requisito.
jmq
hmm, así es mi primer YAML de bloque de código si cambio el "." y "=" a ":" y perder los apóstrofes? Hay un poco de datos redundantes, pero entonces dependerá del usuario qué notación le gusta más.
Juha
3
Estoy bastante seguro de los usuarios no técnicos se van a poner el mal muesca - por no hablar de las cosas más oscuras como el >después comments:, y la &y *frenteid001
Izkata
6

Lo mejor que puede hacer es proporcionar una maqueta de su solución, y tal vez una maqueta de un par de otras soluciones, y preguntar a dos o tres usuarios representativos de su sistema. Serán mucho mejores para decirle lo que les gusta que las personas autoseleccionadas que responden preguntas en este sitio.

Dicho esto, para los usuarios "básicamente analfabetos informáticos", creo que el formato que muestra en su pregunta es probablemente el mejor formato de texto sin formato. Si realmente son analfabetos informáticos, es posible que desee considerar una GUI simple para que no tengan que editar manualmente los archivos de configuración.

Bryan Oakley
fuente
3

Pierde todo lo que puedas perder. name.name.name=value, cada uno en una línea separada, es lo más simple posible. No necesita las comillas para analizar, sabe cuándo truees un booleano y cuándo truees una cadena, no haga que el "humano tonto" le diga eso. Para cadenas, si el campo no debe tener espacios en blanco iniciales / finales, quítelos usted mismo.

Ross Patterson
fuente
3

Imagine una persona china que no sabe inglés y que está tratando de leer su archivo de configuración. Alternativamente, imagine que el archivo de configuración está en árabe (y que no sabe árabe). Ahora pregúntate, ¿esto es realmente legible por humanos?

Incluso si el lector sabe inglés, todavía no tiene idea de si "logger.datarate = 100" significa 100 caracteres por segundo, o 100 GiB por hora, o 100 pollos por tonelada métrica.

El formato de archivo más legible para humanos es un archivo binario con un cuadro de diálogo / asistente / configurador decente basado en GUI (con internacionalización, sistema de ayuda, etc.).

Brendan
fuente
2

Estoy con Patrick Hughes. Cree una aplicación simple para editar configuraciones. El archivo de configuración en sí mismo podría ser un poco más complejo y podría contener atributos para que el editor los use (nombre para mostrar, texto de ayuda, tipo de valor, valor mínimo / máximo, etc.).

Misko
fuente
1
El problema aquí es que la aplicación tiene que soportar osx, win y ubuntu y tener acceso al sistema de archivos. Entonces, mi única alternativa es el ejecutable estático de Python (y wx para el aspecto nativo). ¿O hay otros idiomas? ¿Puedes hacer ejecutables estáticos de Java?
Juha
Una aplicación QT sería una solución simple y conforme en su caso
Riga
2

Digo que lo que tienes (archivo de propiedades) ya es el mejor formato de configuración legible por humanos. :)

Aquí están mis argumentos:

  • El archivo de propiedades es solo un par clave / valor. Fácilmente legible por humanos.
  • Sintaxis concisa, no como xml.
  • Fácilmente anidable, con '.', Como en su ejemplo.
  • La estructura plana permite una fácil diferenciación en un entorno controlado por fuente.

Ese último punto es realmente bastante importante. Dado que los proyectos hoy en día están divididos en ramas, el archivo de configuración puede causar mucho dolor al fusionar ramas. El formato de archivo plano como el archivo de propiedades es más fácil de combinar que el archivo de estructura de árbol.

ming_codes
fuente