Como diseñar software bueno en Haiku (2)

 Convenciones de Haiku

Así como una persona generalmente no irrumpe en la casa de un extraño y comienza a redecorar y a sentirse como en casa simplemente porque el propietario no tiene una escopeta, su programa debe tener buenos modales para llevarse bien tanto con el sistema operativo como con el otros programas que el usuario haya instalado en el sistema. Algunas de estas son simplemente buenas prácticas de codificación destinadas a facilitar su trabajo y otras son para garantizar que su programa se pueda mantener más fácilmente. Ninguno de ellos son difíciles o mucho trabajo, por lo que hay. Ahora no tienes más remedio que seguirlos. :D

Configuración del programa: formato y ubicación

Si bien hay muchas formas de almacenar la configuración del programa, el método más fácil y recomendado es colocarlos en un BMessage y aplanarlo en un BFile. Al usar BMessages como su contenedor, no tiene que preocuparse por escribir y depurar otro código. La ubicación exacta utilizada para almacenarlos depende de la cantidad de archivos que necesitará. Si su software necesita solo un archivo y solo necesitará uno, lo más simple es colocarlo en la carpeta de configuración/configuración del usuario. Sin embargo, si necesita más de un archivo, colóquelos en su propia carpeta para minimizar el desorden. La carpeta debe seguir el formato home/config/settings/your_app_name_here o home/config/settings/your_company_name_here/your_app_name_here.

Mantener la capacidad de respuesta

Probablemente, la cualidad más conocida de BeOS y Haiku como sistemas operativos es la velocidad. Esto proviene en gran medida del uso extensivo de subprocesos múltiples en las aplicaciones. Ser receptivo no significa necesariamente que su programa nunca deba estar ocupado. Solo debe responder a las solicitudes de entrada y redibujar incluso cuando está haciendo algo. Una experiencia común con la que se encuentran los usuarios de Linux y Windows es el "borrado" de una ventana o de un programa completo porque está ocupado haciendo otra cosa. Esto se debe a dos cosas: el programa tiene un subproceso de ejecución dedicado a todas sus ventanas y ese subproceso está ocupado realizando algún tipo de trabajo que requiere mucho tiempo. En lugar de caer en esta trampa, que es poco profesional para usted y confusa para el usuario, genere otro subproceso para realizar el procesamiento real y permita que el subproceso de manejo de mensajes continúe haciendo su trabajo. Esto asegura que el usuario sepa que su aplicación todavía se está ejecutando correctamente y no se ha congelado.

Evite las rutas de archivos codificadas

Siempre que su programa necesite especificar una ubicación particular en el sistema, use la función find_directory() para generarla. Siempre y cuando llegue el día en que Haiku admita múltiples usuarios, su aplicación hará una transición sin problemas a la nueva arquitectura. Esto también permitirá la compatibilidad con versiones anteriores de BeOS, como el cambio de ubicación de B_COMMON_FONTS_DIRECTORY en un lugar diferente para Haiku que en R5. find_directory() es compatible con entornos C y C++.

Haga que el aspecto de su aplicación encaje con los demás

Ciertas llamadas a funciones se han proporcionado en la API para ayudar a garantizar que su software comparta el mismo aspecto general que otras aplicaciones y permita al usuario realizar personalizaciones en el sistema al mismo tiempo. A menos que haya una muy buena razón para ello, obtenga colores para su programa con ui_color() y las constantes que lo acompañan. Determine el tamaño de sus controles dinámicamente: use ResizeToPreferred y GetPreferredSize para los controles del sistema y calcule el tamaño de sus propios controles en función de los tamaños de fuente obtenidos del sistema en lugar de los valores codificados. Si está escribiendo código específicamente para Haiku y no le importa la compatibilidad con otras versiones de BeOS, use la nueva API de diseño. Todo esto permitirá una mayor facilidad de uso para el usuario que prefiere fuentes pequeñas para aumentar el uso de espacio en el escritorio y también para usuarios mayores que necesitan tamaños de fuente más grandes para adaptarse a una agudeza visual más débil. Los gráficos son una parte importante de la apariencia de un programa, pero no vuelva a implementar la apariencia de los botones y otros controles estándar solo para que su aplicación se destaque del resto. Al mantener la coherencia visual con el resto del sistema operativo, evita confundir al usuario con botones en los que no parece que pueda hacer clic en ellos, menús de acción extraña, etc.

Actualizaciones en vivo

Una forma de asegurarse de que su aplicación se comunique de manera efectiva con el usuario es proporcionar actualizaciones "en vivo" de la información que contiene. Esto se relaciona principalmente con los archivos en el sistema. Un buen ejemplo es un programa de libreta de direcciones que automáticamente elimina y agrega entradas cuando se agregan nuevos archivos de Personas a la carpeta Personas. La información ni siquiera tiene que ser datos que estén fuera de su programa. Podría ser tan simple como actualizar una entrada en una lista de elementos a medida que el usuario escribe cambios en un formulario en una parte diferente de la GUI. Una capacidad de respuesta como esta en un programa ayuda al usuario a sentirse más en control del trabajo que está haciendo y evita la posible pérdida de datos.

traductores

Haiku viene con fragmentos de tecnología que permiten a los programadores perezosos ser perezosos y que sus programas sigan siendo buenos. Uno de ellos es el Kit de traducción. Simplemente incluir la biblioteca y hacer uso incluso de algo tan simple como la clase BTranslationUtils ayudará a garantizar que al menos esta parte de su código esté libre de errores. En general, probablemente se encontrará haciendo un uso mayoritario de los traductores de imágenes para cargar los recursos de imágenes que usará su programa. Solo recuerda que los traductores son complementos del sistema y que, a menos que tu programa tenga instalado un traductor para un formato de archivo en particular, dependerán únicamente de los formatos instalados por defecto en el sistema. Aparte, algunos formatos no están documentados o requieren licencia, lo que dificulta que los usuarios accedan a sus propios datos. Utilice formatos abiertos y documentados tanto como sea posible.

Exprimir al máximo BFS: consultas y atributos

El sistema de archivos que Be creó fue increíble en la década de 1990. Incluso con la evolución gradual de otros sistemas operativos que han progresado desde entonces, sigue siendo uno de los más poderosos que existen. Los atributos son una herramienta poderosa que le permite almacenar datos sobre un archivo sin ser parte del archivo. Este tipo de potencia se utiliza fácilmente con archivos de audio, como FLAC, Ogg Vorbis y el omnipresente MP3. Al adjuntar atributos a los archivos de audio, puede buscarlos con una consulta. Las consultas también aprovechan la potencia del sistema de archivos. Siempre que el atributo que está consultando esté indexado en el sistema de archivos, no hay lugar para ocultar un archivo con ese atributo. Para colmo, también son una forma rápida de buscar archivos que cumplan con ciertos criterios.

Aunque tanto los atributos como las consultas son muy poderosos, use el sentido común. Lleva bastante tiempo leer una gran cantidad de atributos de un archivo, por lo que es posible que desee almacenarlos en caché si está escribiendo un programa que necesitará leer más que solo algunos de ellos. Las consultas solo pueden hacer uso de atributos que están indexados, y su velocidad disminuye a medida que se indexan más y más atributos.

La bandeja del sistema: ya no es solo para la cena

Debido a que puede abarrotarse muy fácilmente, instale íconos en el estante de la barra de escritorio solo cuando brinde información que se actualice con frecuencia o si brinda funcionalidad a la que el usuario accederá con frecuencia. Ejemplos de este tipo de situaciones serían monitorear la memoria y la carga del procesador, revisar el correo o acceder rápidamente a las funciones proporcionadas por un programa de administración de información personal. Si es poco probable que el usuario necesite acceder a la información o funcionalidad menos de una vez por sesión, no use la barra de escritorio; bastará con acceder a su programa a través del menú Be o un icono en el escritorio.

Rastreador y sus usos

Tracker puede ser una herramienta bastante útil para su programa que requiere poco esfuerzo para proporcionar algunas cortesías al usuario que de otro modo serían mucho trabajo. Las ventanas Abrir y Guardar ya se han hecho por usted. Por favor, úsalos. Si solo se necesita un determinado tipo de entrada, como una carpeta o un tipo de archivo específico, cree un filtro que muestre solo esos tipos de entradas. Al eliminar los elementos innecesarios de la ventana de navegación de archivos, reduce la cantidad de opciones entre las que deben elegir los usuarios y también evita que abran los tipos de archivos incorrectos. Tenga en cuenta que puede haber archivos que no tengan identificado su tipo MIME, así que tampoco los excluya. También puede hacer que Tracker muestre una ventana para una carpeta en particular para mostrarle al usuario dónde se ha almacenado un archivo en particular y darle acceso directamente.


Obtener información del usuario

Si bien puede parecer un caso simple obtener información del usuario, a menudo no es el caso si desea tener en cuenta muchos factores externos, como la accesibilidad, la velocidad y la experiencia del usuario.

Vocabulario del ratón, también conocido como "¿Qué hace este botón?"

El ratón, aunque es el roedor favorito de la mayoría de los usuarios, no es un dispositivo muy intuitivo: las habilidades con el ratón deben aprenderse. La mayoría de las veces, las habilidades del mouse no son un problema porque el usuario hace clic en botones, menús, etc., pero a veces un programa debe lidiar directamente con los clics y movimientos del mouse. Las operaciones del mouse se dividen en una de tres categorías.

Habilidades que puede esperar que tenga el usuario:

Un solo click

Haga doble clic en el botón principal del mouse

Un solo clic con el botón secundario del mouse

Arrastrar con el botón principal del mouse

Habilidades que el usuario puede tener:

Arrastrar con el botón secundario del ratón

Un solo clic con el botón del mouse terciario

Haga un clic en el botón principal del mouse con la tecla modificadora

Triple clic con el botón principal del mouse

Desplácese con la rueda de desplazamiento

Desplácese con la rueda de desplazamiento y la tecla modificadora

Arrastre con el botón terciario del mouse

No use estos:

Clic y medio: ratón hacia abajo + ratón hacia arriba + arrastre con un segundo ratón hacia abajo

Clic múltiple con el botón del mouse no principal

Más de 3 clics consecutivos (cuádruple clic o más)

Arrastre con el botón del mouse terciario

Arrastrar con teclas modificadoras

Clic secundario/terciario con teclas modificadoras

En el caso de que su programa deba manejar directamente la entrada del mouse, existen ciertas reglas generales sobre cómo se debe usar cada una de las habilidades esperadas. Los clics individuales se utilizan para las acciones más comunes al operar un control. Esto sería seleccionar elementos en una lista, presionar un botón, elegir un elemento de menú y colocar el cursor de texto parpadeante en un BTextView. Los dobles clics se utilizan para funciones secundarias, como invocar un elemento en BListView o seleccionar una palabra en BTextView. Los clics secundarios del mouse (más comúnmente llamados "clic con el botón derecho") generalmente se usan para un menú sensible al contexto o, en el caso de programas de gráficos, para dibujar con el color secundario. El arrastre del mouse se usa para seleccionar texto o mover cosas. El arrastre del mouse con B_TERTIARY_BUTTON generalmente se usa para panoramizar. La rueda de desplazamiento por sí sola debe usarse solo para desplazarse, pero su programa puede tener un uso para la rueda de desplazamiento cuando se usa con una tecla modificadora, como se muestra a continuación:

Rueda de desplazamiento +

B_COMMAND_KEY:

Zoom in/out

B_OPTION_KEY:

Scroll by one full page

B_CONTROL_KEY:

Increase/decrease font size

Aceleradores de teclado: los autos deportivos de las GUI

A los usuarios más avanzados a menudo les gusta usar atajos de teclado para tareas comunes porque reducen la cantidad de tiempo considerable que pasan cambiando entre el teclado y el mouse.

B_COMMAND_KEY + N:New document

B_COMMAND_KEY + O:Open document

B_COMMAND_KEY + S:Save document

B_COMMAND_KEY + Shift + S:Save as… (show Save dialog window)

B_COMMAND_KEY + P:Print

B_COMMAND_KEY + W:Close active window

B_COMMAND_KEY + Q:Quit

B_COMMAND_KEY + C:Copy

B_COMMAND_KEY + X:Cut

B_COMMAND_KEY + V:Paste

B_COMMAND_KEY + F:Show find window

B_COMMAND_KEY + G:Find again

B_COMMAND_KEY + B_OPTION_KEY + F:Show Replace window

B_COMMAND_KEY + L:Replace and Find

B_COMMAND_KEY + ,:Settings window

B_COMMAND_KEY + B:(Word processor) Bold font

B_COMMAND_KEY + U:(Word processor) Underline font

B_COMMAND_KEY + I:(Word processor) Italicized font

B_COMMAND_KEY + A:Select allB_COMMAND_KEY + Z:Undo

B_COMMAND_KEY + B_SHIFT_KEY + Z:RedoTab / Shift + Tab:Keyboard navigation

B_CONTROL_KEY + Tab:Switch programs


Al elegir aceleradores de teclado para su programa, úselos solo para tareas de uso común. No utilice una de las combinaciones de sistemas para una tarea diferente de la lista anterior. Hacerlo solo confundirá y frustrará a los usuarios. Elija combinaciones de teclas que se asocien fácilmente con las funciones que las acompañan. Por ejemplo, Tracker usa Alt + Arriba para ir a la carpeta principal de la ventana actual. La tecla Comando debe ser la tecla de método abreviado principal. La tecla Opción generalmente se usa para modificar un atajo existente con una función estrechamente relacionada. Comando + F muestra la ventana Buscar. Comando + Opción + F muestra la ventana Reemplazar.

Diseño para evitar ajustes

Según el Sr. Fitts, cuando se usa un mouse u otro dispositivo señalador, la cantidad de tiempo que lleva señalar algo es proporcional a qué tan lejos está ese algo y qué tan grande es. Si bien puede parecer obvio, esto a menudo se pasa por alto cuando se diseña un programa. Los lugares más fáciles para que un usuario haga clic son las cuatro esquinas de la pantalla y el píxel directamente debajo del cursor. La razón de esto es que no es necesario mover el mouse para hacer clic en el píxel debajo de él. El usuario tampoco tiene que pensar mucho cuando mueve el cursor a una esquina porque tan pronto como llega a un borde, no puede ir más lejos en esa dirección sin importar cuánto se mueva el mouse. El Deskbar está en una esquina de la pantalla por este motivo.

Cuando diseñe la interfaz gráfica para su programa, haga que los controles sean fáciles de hacer clic. Las barras de herramientas que tienen una etiqueta de texto como parte de cada botón son inherentemente más fáciles de hacer clic porque las etiquetas aumentan el tamaño de los botones. Varios programas de edición de imágenes existentes usan el botón secundario del mouse para un menú emergente para acceder a funciones comunes porque el mouse no tiene que moverse para abrir el menú. Los investigadores incluso han experimentado con menús circulares, llamados menús circulares, que aprovechan la Ley de Fitts para hacer un menú lo más rápido posible. Su programa no necesita ir a tales medidas, pero tenga en cuenta que los controles pequeños ralentizan a los usuarios.

Intercambio dinámico de datos: pasar datos entre aplicaciones

Arrastrar y soltar

No debe confundirse con los reptiles que caen, la capacidad de un usuario de hacer clic en un objeto, arrastrarlo a algún objetivo y soltarlo para que el objetivo haga algo con él es familiar y fortalecedor, al igual que otros métodos de manipulación directa. No obstante, el paradigma de arrastrar y soltar debe usarse solo donde tenga sentido hacerlo: reorganizar elementos en una lista, administrar archivos, abrir un archivo arrastrado a su aplicación desde Tracker, etc.

Si planea admitir el arrastre dentro de su programa o hacia otros programas, aunque sea un poco, debe admitir caídas en los objetivos más probables de su programa. Normalmente, esto no debería ser tan difícil porque las caídas en su programa provendrán de Tracker (en forma de entry_ref) o desde su propio programa. No se requieren las entregas de otros programas, pero si son especialmente convenientes, pueden ser una buena viñeta en una propaganda de marketing para su programa.

Al implementar el arrastre, asegúrese de que su programa proporcione información sobre lo que se está arrastrando. A menudo, esto se hace mejor usando una imagen que represente fielmente lo que se está arrastrando. Si esto no es posible, se debe usar un rectángulo del tamaño de la selección del elemento arrastrado en lugar de la imagen.

Una característica que es muy útil para un usuario es dejar comentarios. Cada vez que el usuario está arrastrando algo y el cursor pasa sobre la ventana de su programa, puede reaccionar para mostrarle al usuario que su programa aceptará el objeto arrastrado. La retroalimentación puede tomar una variedad de formas:

Un control de lista dibuja una línea entre dos elementos para mostrar dónde se colocaría el elemento arrastrado si el usuario soltara el botón.

Los controles BTextView muestran una línea donde se colocaría el texto arrastrado si se soltara.

Si el usuario arrastra una entrada sobre una carpeta, Tracker la sombrea ligeramente.

Un color bien podría resaltar su borde

Hay otras formas posibles, pero estas deberían ser suficientes para que te hagas una idea. Como se mencionó anteriormente, la retroalimentación es algo bueno (TM). Le permite al usuario comprender mejor cómo usar su programa para hacer algo.

el portapapeles

Otra forma de pasar datos de un programa a otro es a través del portapapeles del sistema. A diferencia de otras formas de intercambio de datos, el uso del portapapeles requiere muy poco esfuerzo o código porque lo que tiene que hacer es colocar los datos en un BMessage en particular. Algunos de los controles estándar ya lo hacen por ti. La clase BTextView ya implementa copiar, cortar y pegar mediante aceleradores de teclado. En casos como estos, todo lo que querrá hacer es agregar algunos elementos de menú para usuarios menos avanzados.

Portapapeles estandarizados/Formatos de datos de arrastre

Texto sin formato


Es más fácil describir los conceptos básicos con este fragmento de código. portapapeles->AddData("text/plain", B_MIME_TYPE, your_text_string_here);

Texto con estilo

Utilice el mismo formato que para el texto sin formato, pero agregue también un campo de matriz de ejecución de texto al mensaje. Probablemente no tengas que preocuparte por esto a menos que estés escribiendo un procesador de texto o algo similar. portapapeles->AddData("aplicación/x-vnd.Be-text_run_array", B_MIME_TYPE, run_array, run_array_size);

Referencias de archivos genéricos

Si la cantidad de datos que desea pasar a otro programa es demasiado grande para colocarlos en el portapapeles sin forzar el sistema, descargue los datos en un archivo temporal y coloque una entrada_ref que apunte a ellos en el portapapeles en su lugar. Los archivos de audio y video comúnmente sufren este problema. Para hacer esto, llame a AddRef() con el nombre de campo "refs" y agregue un entry_ref que apunte al archivo que desea pasar este mayo. Se pueden enviar múltiples objetos entry_ref simplemente haciéndolo más de una vez. Si su programa va a manejar este tipo de referencias de archivos de eliminación, debe buscar múltiples entradas en el campo 'refs' a menos que sea inapropiado hacerlo.

Datos de imagen

Si su programa utiliza un tipo de datos diferente al que ya se ha estandarizado, existen algunas pautas que puede seguir para que otros programas puedan utilizarlo. Primero, asegúrese de que los datos que se colocan en el portapapeles estén en la forma más generalizada posible.

Campo Tipo Nombre Descripción

B_STRING_TYPE clase "Bmapa de bits"

B_RECT_TYPE _frame Un BRect que contiene los límites de los datos de mapa de bits en píxeles

B_INT32_TYPE _cspace La constante de espacio de color para los datos de la imagen, como B_RGBA32

B_INT32_TYPE _bmflags El argumento Flags() de BBitmap

B_INT32_TYPE _rowbytes El número de bytes por fila, incluido el relleno

B_RAW_TYPE _data Los datos de imagen sin procesar

B_POINT_TYPE be:ubicación La ubicación desde la que se copiaron los datos de la imagen. Puede ser ignorado.

replicantes

Los replicantes siguen el ejemplo de la oveja Dolly al permitir que se clone un BView y que usted pueda hacer Really Neat Things(TM). Tan genial como es la tecnología replicante, es solo una tecnología emergente en otros sistemas operativos y no es familiar para la mayoría de los usuarios en general. Como tal, es mejor dejarlo como una característica adicional y no como el modo principal de operación de un programa. Sin embargo, aquí hay algunas pautas para usarlos.

Es apropiado que un programa sea un replicante si es un programa ligero que proporciona información o una función a la que el usuario querrá poder acceder con frecuencia.

Tenga en cuenta el tamaño del controlador de arrastre al calcular el diseño.

Asegúrese de que sea lo suficientemente grande para no perderse cuando se coloque en un fondo de escritorio ocupado. Al mismo tiempo, no se haga cargo del escritorio del usuario a menos que quiera que esto suceda. 32 píxeles cuadrados es un buen tamaño mínimo, por ejemplo.

Proporcione una forma confiable para que el usuario controle su replicante. No confíe en el menú proporcionado por el controlador de arrastre porque el propio controlador puede estar oculto. En su lugar, proporcione otro medio que sea inmediatamente obvio o, como mínimo, muestre un menú emergente si el usuario hace clic en él (con cualquiera de los botones) y no hay otros controles en los que se pueda hacer clic.

Coloque un marco alrededor del borde del replicante para que se destaque de su entorno.

No lo hagas demasiado distraído visualmente. Esto equivale principalmente a evitar muchos colores brillantes para los controles y limitar la cantidad de animación y movimiento.


Uso de texto en la GUI

Casi sin excepción, si está escribiendo un programa, deberá prestar al menos un poco de atención a cómo usa el texto. Hay, lo crea o no, formas correctas y formas incorrectas, y aunque la mayoría de las pautas para el texto pueden parecer triviales, prestar atención a lo que parecen pequeños detalles molestos es lo que distingue a un buen programa del resto.

Por encima de todo lo mencionado en este capítulo, utilice un lenguaje apropiado para su audiencia (la mayoría de las veces, esto significa evitar los términos técnicos) y sea claro y conciso.

Mensajes de error o "Lo siento, Dave, pero no puedo hacer eso".

Quizás el lugar donde más deberías usar texto es en los mensajes de error. Deberían aparecer con la menor frecuencia posible porque anticipó y manejó tantas condiciones de error como fue posible y luego trató de explotarlo realmente bien, ¿verdad? ;) Cuando su programa no puede manejar un error en particular, el mensaje de error dado al usuario debería hacer lo siguiente:

Explique lo que sucedió en palabras cotidianas.

Brindar información suficiente para saber qué sucedió sin brindar detalles que puedan confundir al usuario. Por ejemplo, si un cliente de correo envía una solicitud de correo electrónico a un servidor y el servidor no responde, una manera de explicar esto podría ser algo como "MyMailApp no ​​pudo verificar su correo electrónico. El servidor de correo no respondió cuando contactado".

Ofrezca sugerencias para ayudar al usuario a solucionar el problema, si es posible. Usando el ejemplo anterior, una posible sugerencia podría ser "Intente verificar su conexión a Internet con su navegador web. Si su navegador web funciona, es posible que el servidor de correo no funcione correctamente y que desee volver a intentarlo más tarde".

…Elipses…

Los puntos suspensivos son una serie de 3 puntos (...) que se utilizan para decirle al usuario que un control, a menudo un elemento de menú o un botón, requerirá más entrada. Por ejemplo, un elemento de menú llamado "Nuevo..." mostrará una ventana con el título "Nuevo". Sin embargo, si crear un nuevo documento no requiere mostrar una ventana, entonces no se deben usar puntos suspensivos. Asegúrese de utilizar el carácter B_UTF8_ELLIPSIS en lugar de 3 puntos. La mayoría de los mapas de teclas de Haiku le permiten escribir puntos suspensivos con el método abreviado de teclado Opción + punto.

Abreviaturas, acrónimos y contracciones, ¡vaya!

A veces el espacio es escaso. Las abreviaturas, los acrónimos y las contracciones pueden resultar muy útiles en estos casos, pero también pueden ser confusos. Siempre que sea posible, evite usarlos. Muchas veces, la razón por la que no hay suficiente espacio es porque no se utiliza de la manera más eficiente posible. Cuando utilice una abreviatura, asegúrese de que sea absolutamente necesaria, que sea común y clara, y que sea apropiada para la audiencia objetivo de su programa. Por ejemplo, el uso del octothorpe (símbolo #) como abreviatura de la palabra 'número' en el idioma inglés se ajusta a estos criterios en la mayoría de los casos. Estas mismas pautas también se aplican a las siglas. Por ejemplo, el acrónimo CMYK (cian, magenta, amarillo, negro) es aceptable en un selector de color para una aplicación de procesamiento de imágenes diseñada para profesionales gráficos, pero no en una destinada a niños. Los menús y las etiquetas de los botones nunca deben abreviarse ni contener un acrónimo.

Se debe tener especial cuidado con las contracciones. Pueden ser una trampa para los usuarios que no utilizan un programa en su idioma nativo. Debido a que requieren un dominio más avanzado de un idioma, evite usarlos en un lugar donde su papel es crucial para transmitir el significado de un mensaje. Por ejemplo, una casilla de verificación para un cuadro de diálogo de mensaje con una casilla de verificación marcada como "No volver a mostrar este mensaje" que está desmarcada de forma predeterminada debe reformularse como "Mostrar siempre este mensaje" y tener la casilla de verificación marcada de forma predeterminada.


Mayúsculas y ortografía

Nada es menos profesional que los errores de ortografía y mayúsculas. Si la ortografía no es su punto fuerte, consulte a un corrector ortográfico, diccionario o al menos a un amigo. Esto es particularmente importante si está trabajando con un idioma que no es su idioma nativo. Use mayúsculas en las oraciones en todos los lugares, es decir, siga las reglas gramaticales normales del idioma. Para el inglés, esto significa solo poner en mayúscula nombres específicos como "Tracker" o "Deskbar".

Uso de fuentes

El buen uso de las fuentes puede hacer que su programa sea más atractivo visualmente, pero cuando no se usa bien, puede volverlo feo, difícil de leer o peor. Apéguese a las fuentes del sistema planas, en negrita y fijas para mantener cierta consistencia visual general en todo el sistema operativo. Es perfectamente aceptable usar diferentes tamaños de fuente, pero hágalo solo cuando necesite un encabezado o algo similar e intente limitar la cantidad de tamaños diferentes a solo unos pocos. Una ventana que tiene muchos estilos y tamaños de fuentes diferentes es más difícil de leer y se ve poco profesional. Las etiquetas de control siempre deben estar en la fuente normal del sistema y el tamaño especificado por el sistema.

Al calcular el diseño de los controles, asegúrese de no depender de que la fuente del sistema esté configurada en un tamaño de fuente particular. La mayoría de los controles derivados de BControl implementan los métodos GetPreferredSize y ResizeToPreferred para tener en cuenta el tamaño de fuente. Se puede calcular una idea básica de la altura de línea de una fuente llamando a BFont::GetHeight() y sumando los valores de la estructura font_height.

Por último, no dependa de que el usuario tenga una fuente en particular instalada en el sistema a menos que esté dispuesto a asegurarse de que el usuario la tenga instalada en el sistema. El manejo de fuentes para su programa es su responsabilidad, no la del usuario. Si sigue esta ruta, asegúrese de verificar si tiene derechos de redistribución para la licencia de la fuente en cuestión.

Caso especial: la línea de comandos

Al diseñar un programa para que funcione en un entorno de línea de comandos, hay algunas consideraciones especiales que deben tenerse en cuenta. La interacción con otros programas, el uso en scripts de shell y una interfaz generalmente consistente para programas de línea de comandos son solo algunas de las cosas que deberá tener en cuenta. Las principales decisiones de diseño que debe tomar son cómo su programa obtendrá sus datos, qué opciones estarán disponibles y qué comentarios recibirá el usuario.

Dedique algún tiempo a pensar en cómo debería interactuar su programa con el shell y con otros programas. La mayoría de las veces, esto se reducirá a si su programa está orientado a archivos o a flujos. Los programas orientados a la transmisión como grep y less funcionan de manera muy similar a los filtros, obteniendo datos de stdin y volcando datos a stdout. Los programas orientados a archivos como zip y bzip2 reciben una lista de archivos en los que luego opera el programa. Sin duda, su programa puede hacer ambas cosas, pero elija un método principal porque influirá en las decisiones de diseño más adelante. Considere seriamente el manejo de comodines en lugar de confiar en el shell para que lo haga por usted si su programa está orientado a archivos. Esto significa más trabajo para usted como desarrollador, pero también reduce la escritura y, por lo tanto, los errores de escritura para el usuario. Por supuesto, si no tiene sentido admitir comodines, no lo haga.


Elija con cuidado las opciones a las que se podrá acceder mediante los interruptores de la línea de comandos. Haga que cada uno esté disponible solo si cumple una tarea razonablemente común. Desde la perspectiva del usuario, agregar una opción es agregar una característica que, a su vez, aumentará la complejidad de su programa. Proporcione modificadores de estilo GNU (doble guión + nombre largo) para todas las opciones. Las opciones más utilizadas también deben tener una contraparte corta (un solo guión + una sola letra). Los modificadores --help y -h están reservados para mostrar información de ayuda. Solo las aplicaciones UNIX estándar (ls, tar, df, etc.) no están obligadas a seguir el estándar para -h para evitar romper la compatibilidad con versiones anteriores. Todos los nuevos programas de línea de comandos deben seguir esto. Además, si su programa requiere uno o más parámetros, hágale un favor al usuario y muestre el mensaje de ayuda si no hay parámetros adicionales en lugar de decirle al usuario que vuelva a escribir el comando con el interruptor de ayuda.

Cuando una opción requiere un valor particular, también existe un estándar sobre cómo el usuario debe proporcionar la información. Las opciones de comando al estilo GNU deben seguir el formato --opción=valor con la opción de encerrar el valor entre comillas. Los valores múltiples para un interruptor deben estar separados por comas. Las opciones de comando de estilo abreviado deben colocar un espacio entre cada valor que le sigue de la siguiente manera: -t valor1 valor2 valor3 ... Como se mencionó anteriormente, el programa debe manejar los comodines, excepto cuando no tiene sentido. Si su programa hace algo que modifica los datos, asegúrese de que su programa requiera algún tipo de parámetro (un interruptor, un archivo o lo que sea) para que los datos no se pierdan si el usuario invoca su programa sin saber lo que hace. Puede suponer que el usuario es más listo que una bola de boliche, pero no espere que el usuario tenga un conocimiento experto del sistema operativo o, en realidad, de su programa. Los programas que simplemente reportan información (me vienen a la mente ls y df) no están obligados a hacer esto siempre y cuando la información mostrada le dé al usuario una idea de lo que hace el programa.

Asegúrese de dar suficiente retroalimentación cuando su programa haga lo suyo. Al igual que los programas gráficos, las tareas largas deben informar al usuario del progreso. Esto puede ser algo tan complejo como un medidor de progreso completo dibujado con texto, una serie simple de períodos, una lista de cada archivo operado o algo más. *Todos* los programas deben proporcionar algún tipo de retroalimentación; la única vez que un programa puede imprimir nada es si hay una opción "silenciosa" que el usuario ha especificado. La retroalimentación que brinda su programa ni siquiera tiene que ser excesiva; sólo puede dar detalles generales. Una opción "detallada" debería proporcionar más detalles que los que proporciona el programa de forma predeterminada. Como se explicó anteriormente en este capítulo, los mensajes de error no deben ser más técnicos que los absolutamente necesarios y deben ser útiles siempre que sea posible. Si su programa requiere un parámetro de algún tipo y no recibe ninguno, muestre el mismo mensaje que para la opción de ayuda o una versión abreviada que aún sea razonablemente informativa junto con algo que dirija al usuario a la opción de ayuda para obtener información más detallada. .

Hora de Libertad

Post a Comment

Previous Post Next Post