Tras mucho esperar, liberar varias versiones de desarrollo y enviarlo a revisión, ¡el complemento Input Lock lo ha conseguido! Justo tras liberarse la versión 1.4 estable hoy mismo, ha sido publicado en el sitio web internacional de complementos de NVDA.
La versión 1.4 incorpora mejoras de estabilidad y compatibilidad con WXPython 4, y previene potenciales conflictos y errores en versiones antiguas de NVDA.
Junto a esta actualización, y corrigiendo exactamente lo mismo, también ha llegado Enhanced Aria 2.1.
Para acabar, hoy también ha recibido una actualización el actualizador de complementos, que alcanza la versión 20180816-dev en desarrollo. Esta versión añade Input Lock a la lista de complementos actualizables, intenta corregir un error del que han informado varios usuarios, y prosigue su avance hacia la integración en el núcleo de NVDA, dando soporte a las nuevas listas con casillas de verificación que se están implementando en versiones alpha.
Te recordamos que es importante mantener tus complementos al día para disfrutar de una experiencia óptima e ininterrumpida con NVDA.
¡Feliz día!

El complemento Place Markers se actualiza hoy a la versión 10.2. En esta versión tan sólo se actualizan las traducciones. Paralelamente, en su repositorio, se ha iniciado el desarrollo de la versión 11.0-dev, compatible con WXPython 4 y, por tanto, con NVDA 2018.3.
Puedes actualizar este complemento mediante la descarga manual, o empleando el ya conocido actualizador de complementos.

A pesar de que era una prueba de concepto y morirá tan pronto como se integre en el núcleo de NVDA, el complemento Addon Updater se actualiza a la versión 18.08.4. En esta ocasión, y tras corregir errores y regresiones que impedían que el complemento funcionara con normalidad, se introduce una lista con casillas de verificación. De esta manera, podremos elegir qué complementos queremos actualizar. Es posible que debas actualizarlo manualmente.
Por otro lado, Input Lock, el complemento que permite bloquear nuestros dispositivos de entrada, se actualiza a la versión 1.4-dev. En esta nueva versión todas las órdenes del complemento vienen sin asignar, por lo que tras instalarla podrías tener que hacer una visita al diálogo gestos de entrada. Esto es debido a que se producían conflictos con órdenes incorporadas en el propio NVDA y en otros complementos. Además, esta versión ha superado el proceso de revisión de la comunidad internacional. Pronto se liberará la versión 1.4 estable, ¡que podría llegar al sitio web de la comunidad de NV Access!
¡Feliz sábado!

En esta entrada te presentamos Tifloaudio, un podcast creado por Manolo Álvarez. En él, entre muchas otras curiosidades y tecnologías específicas para personas ciegas, se habla de NVDA. Escuchando en orden los episodios que te mostramos a continuación, harás un recorrido histórico por este lector de pantalla, desde que comenzó a ser un poco más conocido allá por el 2009 hasta la actualidad. Podrás ver su evolución, así como conocer en profundidad cómo funcionan algunas de sus características. Pulsando cada enlace, se abrirá la entrada correspondiente al episodio seleccionado en la web de Tifloaudio. Si estás preparado, ¡allá vamos!
Tiflo Audio 7: Demostración de NVDA
Tiflo Audio 55: Cambiar voces en el lector de pantalla NVDA
Tiflo Audio 70 – Utilizar Windows 10 con el lector de pantalla NVDA y una línea braille
Tiflo Audio 82 – Demostración novedades NVDA 2017.3: Nuevas voces Windows OneCore, Reconocimiento de textos OCR y entradas con líneas braille
Tiflo Audio 94 – Nuevos comandos para líneas braille con el lector de pantalla NVDA 2018
¡Esperamos que los disfrutes!

Varios complementos se han actualizado recientemente. En primer lugar, el complemento para VLC Media Player llega a la versión 2.7-dev en desarrollo, solucionando un error al detectar el idioma del sistema en la clase que gestiona los cuadros de edición del motor de interfaces QT.
Por otro lado, el complemento para el gestor de libros Calibre se actualiza a la versión de desarrollo 1.0-dev6 con un par de novedades, que copiamos aquí tal y como su autor las ha redactado:

  • Mejora la accesibilidad de los cuadros combinados, por ejemplo el de búsqueda.
  • En versiones de NVDA 2018.2 y siguientes se puede seleccionar en preferencias> opciones > calibre  el modo de lectura de los encabezados de tabla:
    • None (ninguno)
    • Standar: leerá todos los encabezados, de columna y de fila.
    • Classic: leerá sólo los encabezados de columna tal como hacía en versiones anteriores a la 2018.2.

Te recordamos que estos complementos no han sido declarados estables. A pesar de que cada vez funcionan mejor, su uso no se recomienda en entornos de producción.
El complemento estable que sí se ha actualizado es, valga la redundancia, el actualizador de complementos. La versión 18.08.1 añadió la posibilidad de buscar actualizaciones automáticamente cada 24 horas. La versión 18.08.1r2 soluciona un error crítico. Aquellos que tengan la 18.08.1 deberán actualizar manualmente. El resto recibirán esta nueva versión a través del propio complemento.
Como siempre, te recomendamos mantener tus complementos bien actualizados. Gracias a ellos se mejoran la experiencia y las características de NVDA.
Si te gusta el contenido que te ofrecemos, por favor, haz una donación para ayudar a sostener nuestra web y el trabajo que hacemos para que NVDA llegue día a día más lejos.

El complemento Windows 10 App Essentials, que mejora la accesibilidad de muchas aplicaciones en Windows 10, se actualiza a la versión 18.08. Los principales cambios de esta versión son:

  • Se ha añadido soporte para la nueva interfaz IUIAutomation6, garantizando que el complemento se adapte a NVDA 2018.3, donde probablemente este soporte irá ya integrado de serie.
  • En Windows 10 Redstone 5, se mejora el rendimiento de NVDA en algunas situaciones empleando funciones introducidas en IUIAutomation6, particularmente al cambiar entre aplicaciones cuando una tarea de larga duración se está ejecutando en segundo plano.
  • Se han actualizado diversas zonas del código para reflejar los cambios introducidos en 2018.
  • Al rastrear eventos, se registra el objeto que envió el evento.
  • Al rastrear eventos de notificación de UIA, se escuchará un tono con propósitos de depuración si la notificación viene desde otro lugar distinto de la aplicación actual.
  • Se procesan los submenús expandidos en lugares distintos al host de experiencia shell de Windows, ya que Microsoft Edge introduce un menú de este tipo en Redstone 5 (pulsando alt+x).
  • Se elimina el manejador personalizado para ciertos controles de reloj, alarmas y configuración, ya que su accesibilidad mejora en versiones recientes de Windows 10 y ya no es necesario.
  • Se añade soporte para las nuevas versiones de la aplicación Personas (mediante un módulo de aplicación).
  • Teclado moderno: al abrir los elementos del portapapeles en Redstone 5, NVDA ya no anunciará «Portapapeles», el título de la lista en cuestión.
  • Personas: NVDA ya vuelve a verbalizar sugerencias de búsqueda al buscar contactos en versiones recientes de la aplicación.

Después de ver todas estas novedades, actualizar es más que recomendable, ¿no crees? Puedes hacerlo desde el actualizador automático incluido en el complemento, o desde la página de información sobre Windows 10 App Essentials de nuestra web.
Por otro lado, Javi Domínguez ha liberado la versión 2.6-dev del complemento para el reproductor VLC Media Player. Esta es una versión de desarrollo, por lo que podría contener fallos. Sin embargo, en ella se soluciona un fallo que había cuando VLC se ejecutaba en pantalla completa, y se mejora el soporte para los cuadros de edición hechos con el motor de interfaces qt. De momento esta última mejora sólo es perceptible en VLC, pero quién sabe si en el futuro podría llegar a más lugares.
Descargar complemento para VLC 2.6-dev
¡Feliz domingo!

En este episodio, que ya tiene algún tiempo, se hace una introducción y se resuelven dudas comunes a la hora de dar el paso de Jaws a NVDA. No ha cambiado gran cosa desde que se publicó, salvo el nuevo diálogo de opciones. En él participan José María Ortiz, Daniel Montalvo, Juan Buño y José Manuel Delicado.
Visita la entrada con el episodio en la web de José María Ortiz
¡Que lo disfrutes!

¡Hola!
Ha pasado ya algún tiempo desde que abrimos la convocatoria para participar en el primer encuentro anual de la comunidad de NVDA en español, y desde entonces no habéis dejado de mostrar vuestro interés por este evento. En primer lugar, lo hemos fijado de manera provisional para los días 19, 20 y 21 de octubre, muy cerca del primer aniversario de esta web. En segundo lugar, hemos tomado la decisión de contaros, poco a poco, un poquito más sobre cada ponente de los que ya están confirmados. Haremos esto una vez a la semana, aproximadamente. Pero antes de empezar, me gustaría deciros que el servidor de Teamtalk vuelve a estar operativo, tras solucionar un insignificante error en la configuración que hacía imposible establecer conexión con él. Dicho esto, ¡allá vamos!
El ponente del que vamos a hablaros hoy es Jordi Montserrat. Desde tierras catalanas, viene con un proyecto con el que pretende hacer llegar la accesibilidad a las personas con discapacidad visual, pero aportando un enfoque distinto. Más concretamente, uno de sus objetivos es ayudar a aquellas personas sin discapacidad que nos acompañan, ya sea de forma puntual o permanente, a comprender bien conceptos tales como qué es un lector de pantalla y cómo funciona. NVDA, como no podía ser menos, tiene dedicada una sección bastante extensa en su web, que aunque mayoritariamente se encuentra en catalán, contiene partes en castellano. Si te apetece visitarla antes de la ponencia, entra a http://to.fundacio.coaatt.org/grup-de-treball-tecnologia-oberta/index/indice-de-paginas-en-castellano/.
Os recordamos que la convocatoria de participación sigue abierta hasta el 15 de septiemmbre.
Ir al formulario de registro

Otros avances

Además del encuentro, en estos últimos meses hemos estado ocupados con otras muchas tareas. La más importante, sin duda alguna, es la traducción del libro de formación básica de NVDA, que pondremos a vuestra disposición tan pronto como NV Access le dé el visto bueno. Para aquellos que conozcan el sitio web de NV Access, se trata de la primera de las «training guides». Los libros de Word, Excel y Outlook (cuando se publique) tampoco se van a quedar sin traducir, ya que nuestro objetivo es traeros todo el material posible en español. Estos libros estarán a la venta tanto en la web de NVAccess como en nuestra tienda.

¿Por qué últimamente no hay tantas actualizaciones de complementos?

Esta es una pregunta que nos habéis hecho mucho, y lo cierto es que no os faltan motivos. La respuesta es que, bien sea por vacaciones u otras razones, la comunidad internacional últimamente se está moviendo un poquito menos. Sin embargo, con la llegada de NVDA 2018.3 y WXPython 4, esperamos otra avalancha de actualizaciones. ¡Estad atentos!

Pronto llegarán más podcasts

Uno de los objetivos cuando creamos esta web era recopilar todos los podcasts en español que hablasen de NVDA, pero con la cantidad de complementos y actualizaciones que había lo fuimos dejando… hasta ahora. Pronto comenzaremos a publicar entradas recopilándolos. Algunos son ya algo antiguos, otros más recientes, pero a pesar de ello todos siguen siendo perfectamente válidos para conocer un poco más a fondo nuestro lector de pantalla. Si conocéis algún podcast que hable de NVDA y a lo mejor no ha tenido la difusión suficiente, no dudéis en contactar con nosotros.
¡Hasta la próxima!

A la hora de programar un complemento que tiene algún tipo de interfaz gráfica, o hacer modificaciones a la propia interfaz de NVDA, todos los desarrolladores ciegos nos hacemos la misma pregunta tarde o temprano: ¿cómo se ve en pantalla esto que estoy programando? Podemos probar distintas combinaciones de constantes, posiciones y tamaños para los controles, pero al no poder verlos, probablemente el resultado no sea el que esperamos. En la entrada de hoy vamos a hablar del módulo guiHelper, disponible desde la versión 2016.4 de NVDA. La misión de este módulo es abstraernos un poco de los detalles más visuales del diseño de nuestra interfaz, de tal forma que sólo debamos preocuparnos de añadir controles y funcionalidad. El módulo no hace magia, pero nuestras interfaces quedarán probablemente un poquito mejor que antes. Si quieres conocer este módulo un poco más, sigue leyendo. ¡Allá vamos!
Nota: en este artículo se asume que el lector tiene conocimientos sobre la programación de complementos con interfaz gráfica.

Importar el módulo

El módulo guiHelper se encuentra en el paquete gui. Si nuestro complemento tiene interfaz gráfica, en algún momento seguramente habremos importado los módulos gui y wx, por lo que sólo haría falta escribir esto:
from gui import guiHelper
Una vez hecho esto, ya podremos acceder a sus constantes, funciones y clases.

Constantes de guiHelper

Estas constantes vienen incluidas directamente en el módulo.

  • BORDER_FOR_DIALOGS: es el borde que se encuentra alrededor de cada control dentro de un diálogo.
  • SPACE_BETWEEN_VERTICAL_DIALOG_ITEMS: cuando los elementos de un diálogo se disponen de manera vertical, esta constante se puede emplear para indicar cuánto espacio hay entre cada elemento.
  • SPACE_BETWEEN_BUTTONS_HORIZONTAL: especifica el espacio que hay entre botones dispuestos de manera horizontal.
  • SPACE_BETWEEN_BUTTONS_VERTICAL: igual que en el caso anterior, pero se aplica cuando los botones están dispuestos verticalmente unos sobre otros.
  • SPACE_BETWEEN_ASSOCIATED_CONTROL_HORIZONTAL: es el espacio que separa a dos controles relacionados dispuestos en horizontal.
  • SPACE_BETWEEN_ASSOCIATED_CONTROL_VERTICAL: lo mismo que en el caso anterior, pero en disposiciones verticales.

Funciones de guiHelper

A día de hoy, guiHelper sólo dispone de una función a nivel de módulo: associateElements. Esta función introduce dos controles en un objeto Sizer de wx, situándolos en horizontal o vertical y separándolos adecuadamente según su tipo. Su cabecera es la siguiente:
def associateElements( firstElement, secondElement)
Los controles deben pasarse en el orden en que queremos que se asocien. Las posibles asociaciones son:

  • wx.StaticText y wx.Choice, wx.TextCtrl o wx.Button: asocia una etiqueta con un cuadro combinado, un cuadro de edición o un botón, en disposición horizontal.
  • wx.StaticText y wx.ListCtrl o wx.ListBox o wx.TreeCtrl: asocia una etiqueta con una presentación en lista, un cuadro de lista o una vista en árbol, en disposición vertical.
  • wx.Button y wx.CheckBox: asocia un botón y una casilla de verificación, disposición horizontal.
  • wx.TextCtrl y wx.Button: asocia un cuadro de texto y un botón en posición horizontal.

En todos los casos, los controles deben ser objetos ya instanciados. La función devuelve el objeto Sizer que los contiene, listo para añadirlo a un diálogo u otro Sizer.

Clases de guiHelper

El módulo guiHelper dispone de cuatro clases que nos ayudan a construir nuestra interfaz. Aunque vamos a verlas todas, la que más se usa es BoxSizerHelper. Todas ellas tienen el atributo sizer, empleado al construir el resto de la interfaz.

La clase ButtonHelper

Esta clase sirve para añadir el espacio adecuado entre botones, tanto en horizontal como en vertical. Al instanciar objetos a partir de ella, se debe especificar la orientación del Sizer que va a generar, ya sea wx.VERTICAL o wx.HORIZONTAL. Por ejemplo:
bh=guiHelper.ButtonHelper(wx.VERTICAL)
Una vez construido el objeto, podemos agregar botones llamando al método addButton:
bh.addButton(mydialog, label=_("Test button 1"))
El método addButton construye un nuevo botón con los parámetros que le pasemos, o también puede añadir un botón previamente creado. Es imprescindible indicar en el primer caso el diálogo o ventana padre que contendrá al botón, y una etiqueta por razones de accesibilidad con el parámetro label. Al acabar, se devuelve el botón creado para que podamos hacer cosas con él, como asociarle acciones.

La clase LabeledControlHelper

Esta clase permite crear controles etiquetados y asociar etiqueta y control entre sí en un Sizer. Se apoya en la función associateElements que vimos más arriba. La cabecera de su constructor es:
def __init__(self, parent, labelText, wxCtrlClass, **kwargs)
Por lo tanto, para construir un objeto de tipo LabeledControlHelper necesitamos pasar como parámetros el diálogo o ventana padre, el texto de la etiqueta que acompañará al control, la clase del control (cuidado, aquí no valen controles previamente creados), y cualquier argumento que necesite el control para construirse. Veámoslo de forma más clara con un ejemplo:
lch=guiHelper.LabeledControlHelper(mydialog, "Selecciona una fruta", wx.Choice, choices=['pera', 'manzana', 'fresa'])
En el ejemplo anterior hemos pasado como clase wx.Choice para crear un cuadro combinado, y como parámetros adicionales las opciones que presentará.
La clase LabeledControlHelper dispone de dos atributos para que podamos trabajar cómodamente: sizer, igual que en el resto de clases, y control, que hace referencia al control de wx que hemos creado.

La clase PathSelectionHelper

Esta clase nos permite crear de una forma rápida, sencilla y abstrayéndonos de todos los detalles, un cuadro de edición y un botón «Examinar…» como los que aparecen en muchos programas, con el objetivo de que podamos fabricar un selector de rutas. En el constructor le pasamos el padre, como siempre, el texto del botón Examinar, y el título del diálogo que se desplegará para seleccionar una ruta cuando pulsemos dicho botón. Por ejemplo:
psh=guiHelper.PathSelectionHelper(mydialog, "Examinar...", "Selecciona la carpeta que contiene los documentos")
Como en los casos anteriores, tenemos la propiedad sizer, pero además aquí nos acompaña otra: pathControl, que contiene una referencia al cuadro de texto donde está escrita la ruta.
En caso de que sea necesario, se podría crear una clase que herede de esta y sobreescribir o extender los métodos getDefaultBrowseForDirectoryPath y onBrowseForDirectory. El primero devuelve la ruta por defecto que muestra el diálogo de seleccionar carpeta, y el segundo muestra este diálogo y almacena el resultado en el cuadro de edición.

La clase BoxSizerHelper

Llegamos a la clase más importante de este módulo, la más usada, y la que emplea la funcionalidad expuesta en casi todas las otras. BoxSizerHelper permite configurar la disposición interna de un objeto Sizer. La cabecera de su constructor es:
def __init__(self, parent, orientation=None, sizer=None)
Como siempre, el primer argumento que espera recibir es la ventana padre. Después, podemos pasar una orientación (wx.VERTICAL o wx.HORIZONTAL), en cuyo caso se creará internamente un objeto Sizer, o un Sizer ya creado, a ser posible vacío. Si pasamos ambos parámetros, se produce un error.
Al igual que sucede en los casos anteriores, tenemos un atributo sizer. Esta clase, además, presenta los siguientes métodos:

  • addItem(self, item, **keywordArgs): añade un control wx ya creado y lo sitúa adecuadamente. El último argumento es opcional y sólo se usa en raras ocasiones. El método devuelve el elemento que se pasa como parámetro, para que podamos asociarle acciones y hacer otras cosas con él.
  • addLabeledControl(self, labelText, wxCtrlClass, **kwargs): añade un control etiquetado. El primer parámetro que recibe es el texto con la etiqueta del control, seguido de la clase del control y los parámetros adicionales que se quieran pasar. Fíjate en el ejemplo anterior del cuadro combinado. Este método devuelve el control que se acaba de agregar.
  • addDialogDismissButtons(self, buttons): agrega y alinea los botones Aceptar, Cancelar y Aplicar de los diálogos estándar. Este método debería llamarse cuando ya se han añadido todos los demás controles. Buttons puede ser un objeto wx.Button, un objeto wx.Sizer o un objeto guiHelper.ButtonHelper. Devuelve el mismo objeto que se le pasa como parámetro.

Aplicaciones prácticas

Al igual que en una entrada anterior, vamos a poner como ejemplo el complemento Enhanced Aria (aunque esta vez no vendrá solo), para demostrar lo fácil que es adaptar nuestros complementos para que se apoyen en guiHelper. En la versión 1.3, para agregar la primera casilla de verificación del diálogo de ajustes de aria mejorada, se hacía esto:
self.bannerenabled=wx.CheckBox(self, wx.NewId(), label=(u"Report banners")) # Como self es una clase que hereda de wx.Dialog, se pasa como padre
self.bannerenabled.SetValue(config.conf['aria']['reportBanner']) # Se establece el valor de la casilla

sizer.Add(self.bannerenabled,border=10,flag=wx.BOTTOM) # se añade la casilla sizer
Como se puede comprobar, hay que crear la casilla con su etiqueta correspondiente, asignarle el valor adecuado y añadirla al objeto que va a contenerla, con indicadores de borde y alineación. Sin embargo, en la versión 2.0 basta con hacer esto:
def createSettings(obj, sizer):
helper=guiHelper.BoxSizerHelper(obj, sizer=sizer)
obj.bannerenabled=helper.addItem(wx.CheckBox(obj, wx.NewId(), label=
("Report banners")))
obj.bannerenabled.SetValue(config.conf['aria']['reportBanner'])

Como se puede ver, creamos un BoxSizerHelper pasando como parámetro el Sizer que nos dan en el método makeSettings, y que en el caso particular de esta implementación se pasa a createSettings. A continuación, agregamos una nueva casilla de verificación llamando a addItem, y luego establecemos su valor.
Veamos el diálogo de Windows 10 App Essentials, que también se apoya en este módulo. Lo podemos encontrar en el archivo w10config.py. Se trata de un diálogo completo, una clase que hereda de wx.Dialog. Por lo tanto, construirlo implica más esfuerzo, al no tener a nuestra disposición la clase SettingsDialog de NVDA o la clase SettingsPanel. En lugar del método makeSettings, que ya nos da un Sizer, las operaciones de construcción se hacen en el constructor del diálogo.
En primer lugar, se crea un objeto de tipo BoxSizer:
mainSizer = wx.BoxSizer(wx.VERTICAL)
Y a continuación, se crea un BoxSizerHelper con un Sizer nuevo, que será hijo del que se acaba de crear:
w10Helper = gui.guiHelper.BoxSizerHelper(self, orientation=wx.VERTICAL)
Teniendo el BoxSizerHelper, ya se pueden añadir controles. Vamos a ver dos de ellos, la casilla de verificación y el cuadro combinado.
self.autoUpdateCheckbox=w10Helper.addItem(wx.CheckBox(self,label=_("Automatically check for add-on &updates"))) # Se crea la casilla
self.autoUpdateCheckbox.SetValue(config.conf["wintenApps"]["autoUpdateCheck"]) # Se establece su valor
labelText = _("&Add-on update channel:") # Etiqueta del cuadro combinado
self.channels=w10Helper.addLabeledControl(labelText, wx.Choice, choices=["development", "stable"]) # Cuadro combinado

Ya para acabar, se añaden los botones Aceptar y cancelar, y se hace de una forma muy particular, ya predefinida en wx:
w10Helper.addDialogDismissButtons(self.CreateButtonSizer(wx.OK | wx.CANCEL))
En este caso no existe acceso directo a los botones, como sí pasa con el resto de los controles, así que las asociaciones se hacen de esta manera:
self.Bind(wx.EVT_BUTTON, self.onOk, id=wx.ID_OK)
self.Bind(wx.EVT_BUTTON, self.onCancel, id=wx.ID_CANCEL)

El BoxSizerHelper ya está completo, hay que añadirlo al Sizer principal. Una vez más, se pide ayuda a guiHelper, y al propio motor wx para centrarlo y posicionarlo:
mainSizer.Add(w10Helper.sizer, border=gui.guiHelper.BORDER_FOR_DIALOGS, flag=wx.ALL)
mainSizer.Fit(self)
self.Center(wx.BOTH | (wx.CENTER_ON_SCREEN if hasattr(wx, "CENTER_ON_SCREEN") else 2))

Conclusión

Es importante que nuestros complementos e interfaces gráficas en general sean visualmente usables. Aunque NVDA es un lector de pantalla empleado mayoritariamente por personas con discapacidad visual, estas personas suelen estar acompañadas por otras que ven perfectamente, especialmente cuando se introducen en el mundo de la informática. Por tanto, debemos tener en cuenta a todos los posibles usuarios.
En esta entrada hemos conocido el módulo guiHelper, que nos ayuda precisamente en esta tarea. GuiHelper no hace magia, no tiene ningún tipo de «inteligencia artificial» que coloque nuestros controles exactamente como deberían estar para que nuestra interfaz sea atractiva. Sin embargo, nos ayuda un poco a conseguirlo, simplifica nuestro código y por lo tanto facilita el mantenimiento.
Si tus complementos no se apoyan todavía en este módulo, no esperes más para adaptarlos. Tus usuarios lo agradecerán, ¡y tú también!

Esta mañana, NV Access ha anunciado en una publicación que van a producirse cambios en la metodología de desarrollo de NVDA que afectarán tanto a los desarrolladores como a aquellos usuarios que prueban las versiones de desarrollo. Estos cambios se llevan a cabo para aprovechar mejor la infraestructura de Github, y porque existen cada vez más pruebas unitarias que garantizan que el código siempre tendrá cierta calidad. El principal cambio que se llevará pronto a cabo es la descontinuación de la rama next, así como sus versiones de desarrollo. La rama next ya no es necesaria porque las solicitudes de cambios (pull requests) pasan una serie de controles automatizados antes de que los desarrolladores decidan si las mezclan o no. Esto, junto al creciente número de pruebas unitarias automatizadas, hace que ya no sea necesario probar de forma tan exhaustiva el código. Aquellos usuarios que tengan instalada la versión de desarrollo next de NVDA comenzarán a recibir actualizaciones de la versión de desarrollo master. Los que utilicen las versiones de desarrollo master, por su parte, seguirán recibiendo actualizaciones por este canal de desarrollo. Pero cuidado, porque el código que antes llegaba a next ahora se recibe en master, lo que significa que estas versiones dejarán de ser tan estables como hasta ahora.
Pero entonces, ¿qué ocurre con aquellos que quieran ir por delante de las versiones rc y oficiales, pero sin arriesgarse a tener un lector de pantalla lleno de fallos?
Aproximadamente siete semanas antes de la liberación estable de NVDA, comenzarán a ponerse a disposición del público versiones beta. Habrá una rama beta en el repositorio de NVDA. El código de estas versiones de desarrollo será tan estable como el de las versiones master actuales. Para acabar, los traductores y los usuarios de versiones estables no se verán afectados por ninguno de estos cambios.
Hay más cambios específicos para desarrolladores, relacionados con la gestión de solicitudes de cambios. Ya se encuentran disponibles en nuestra traducción del artículo El proceso de liberación de versiones, disponible en inglés en la wiki de NVDA en GitHub.
Por otro lado, NV Access le ha dado un lavado de cara a su sitio web, renovándolo por completo. Ahora, entre otras cosas, ya no es obligatorio introducir una dirección de correo electrónico para descargar NVDA desde allí, los textos de la página de inicio han cambiado para mostrar la filosofía de la organización, y hay nuevas secciones con enlaces para que tengamos todos sus recursos más a mano. ¡Bien hecho!
Esto es todo por el momento. Pronto volveremos con más artículos para desarrolladores, complementos no oficiales descubiertos y detalles sobre nuestro encuentro anual.
¡Hasta la próxima!