Adiós a jQuery: seleccionando nodos con javascript puro

Hola, soy Fernando y soy un jQuery-adicto.

Pero no por mucho. He decidido rehabilitarme. No debo necesitar jQuery para hacer hasta las más mínimas ediciones en el DOM. jQuery es una librería muy útil, sí, pero si solo necesit o reemplazar atributos, mover nodos, etc., es como usar una aplanadora para matar una mosca… y como las aplanadoras, jQuery es muy pesado y lento para esas funciones. Hay mejores formas, formas que no requieren una librería de 100 kb.

Estoy seguro de que muchos hay como yo. Pensando en ustedes, les presento un primer paso: cómo reemplazar algunas selecciones simples.

Nota: en todos los ejemplos a continuación asumimos el uso de la última versión de jQuery disponible.

Veamos un caso sencillo: quiero obtener un solo nodo mediante su ID.

var nodo = $("#header");

Esto nos devuelve un objeto jQuery con un solo elemento, o null si el elemento no existe.

En vez de esto, podemos recurrir a nuestro viejo amigo, getElementById:

var nodo = document.getElementById("header");

Lo que obtenemos aquí es un objeto que implementa la interfaz Element, que es básicamente un nodo. Si lo que recorremos es un documento HTML (o sea, el 90% de los casos), será un objeto HTMLElement. Con este objeto podemos hacer todas las modificaciones que necesitemos, y también incluye métodos para recorrer el árbol a partir de ese objeto (como parent, sibling, etc.)

Ahora veamos el siguiente caso:

var arts = $("article");

Este código nos devuelve, en la variable arts, un objeto jQuery con una colección de todos los nodos article en el documento. ¿Cómo obtener algo similar con javascript puro?

var arts = document.getElementsByTagName("article");

Lo que hace getElementsByTagName es devolver una colección de Element, en la forma de un objeto Nodelist que si bien puede recorrerse de forma similar a un arreglo, también tiene sus propios métodos para ser recorrido.

¿Qué pasa si deseo referirme a todo lo que tenga cierta clase? Podría usar:

var hls = $(".highlights");

O podría hacer, mejor, esto:

var hls = document.getElementByClassName("highlights");

Lo que getElementsByClassName devuelve también es un NodeList.

Vayamos, por último, a una instancia un poco más complicada:

var v = $("#article01 .first");

En este caso hay dos opciones a seguir. Digamos que no tenemos que soportar navegadores viejos:

var v = document.querySelector("#article01 .first");

querySelector es un recién llegado a javascript; aceptará cualquier cosa que le pudiéramos haber dicho directamente al objeto jQuery, usando selectores de CSS. Bueno, en IE parece que no puede usar sino selectores de CSS2.

querySelector será muy útil si tenemos expresiones complicadas. Sin embargo, si nos preocupan los navegadores viejos y/o la eficiencia (¿y qué no se supone que dejamos de usar jQuery precisamente por eficiencia?), es mejor quedarnos con lo más básico:

var v1 = document.getElementById("article01");
var v2 = v1.getElementsByClassName("first");

La diferencia en desempeño es importante, según decían mis referencias. No me quise quedar con la duda y creé un caso de prueba público… anda, date cuenta por tí mismo. (Spoiler: excepto en Chrome, querySelector es patéticamente ineficiente.)

En fin, esto es solo un primer paso. Lo siguiente será: ¿qué hacer con el objeto de javascript que acabo de obtener? Pero eso ya lo exploraremos en un futuro post.

Las principales referencias para este post han sido el tutorial “From jQuery to Javascript: A Reference” por Jeffrey Way y el artículo “Native JavaScript Equivalents of jQuery Methods: the DOM and Forms” por Craig Buckler.

Bases de conocimiento

En mi trabajo constantemente hay cosas nuevas por aprender, procesos y conceptos novedosos… y yo soy ese tipo de persona que tiende a olvidar las cosas.

“Oye, ¿cómo se hacía X cosa?”

“¿Tienes por ahí el código que usamos para…?”

“¿Con quién me tengo que dirigir ahora para solicitar que…?”

Mis compañeros muchas veces me pueden ayudar; otras veces no saben, o no están a la mano, o la información que tienen es imcompleta o incongruente con la de otros.

Este es un problema común a todas las organizaciones. La información necesaria para trabajar en el día a día está dispersa por muchos lados; no siempre existen manuales de procedimientos o manuales técnicos. Inclusive para dudas técnicas, el internet no siempre es de ayuda: hay cosas demasiado específicas a cada organización.

Ah, si hubiera un solo lugar dónde encontrar toda esa información… un repositorio donde pudiera encontrarla fácilmente, en cualquier momento y sabiendo que está actualizada y apropiada para mi consumo…

Bueno, pues lo hay. Les presento a las bases de conocimiento.

Qué son las bases de conocimiento

El concepto se refiere a dos cosas: a los datos y al software. Los datos de la base de conocimiento  compilan el saber completo de una empresa: manuales técnicos; instrucciones; descripciones de procesos; mejores prácticas, historiales de clientes y proveedores, etc. de manera enciclopédica.

Idealmente, capturaremos también el conocimiento oculto de la organización, ése que cada persona acumula empíricamente a través de su experiencia; por ejemplo, cómo solicitar determinadas cosas a cierto departamento o persona. Claro está, la misma naturaleza de estos datos hace que su compilación pueda ser difícil y delicada.

En cuanto al software, una base de conocimientos se refiere a un sistema que permita que cada persona en la empresa pueda encontrar fácilmente lo que busca, actualizar los datos fácilmente y proteger los datos sensibles utiizando esquemas de niveles de seguridad (por ejemplo, los datos sobre nómina solo deben ser visibles para los altos ejecutivos y los encargados de Recursos Humanos).  

Otras características deseables: control de versiones; jerarquización y administración de documentos por categorías y por etiquetas.

El alcance de la base de conocimientos puede incluir a clientes y proveedores, para compartir con ellos información que ayude a los servicios de posventa, así como a los procesos Just In Time. La Microsoft Knowledge Base es un ejemplo.

Ejemplos de implementación de bases de conocimiento

  • Wikis: común y barata, una wiki es ideal para pequeñas y medianas empresas. Hoy en día todos están familiarizados con el concepto de la wiki gracias a Wikipedia, así que la curva de aprendizaje es menor. En la wiki todos pueden colaborar. Sin embargo, en una wiki no hay control de usuario; esto hace que la información clasificada no se pueda representar. Hay mucho software disponible para crear wikis en la intranet de una empresa, como MediaWiki, que es libre, gratuito y en el que se basa Wikipedia.
  • Sistemas CRM (Customer Relationship Management): Si bien su propósito es asistir la relación con los clientes y proveedores de la empresa, algunos se pueden integrar con bases de conocimientos, especialmente cuando se comparte información de soporte o posventa. Muchas soluciones de CRM en el mercado ofrecen dicha integración, por ejemplo, las de Salesforce o las de Maximizer Software.
  • Sistemas de helpdesk: específicos para las bases de conocimiento usadas como soporte técnico a usuarios; pueden ser automatizadas, con operadores o con sistemas expertos. Ej. http://www.bmc.com/products/remedy-itsm/it-service-management-suite.html
  • Knowledge Management Software independientes o en suite: encontrados en grandes empresas. Con control de usuarios y documentos más complejos / sofisticados, soportando la realidad de corporaciones grandes; p. ej., soportan flujos de aprobación de documentos. Como ejemplo, la compañía BMC ofrece una suite de productos (además del mencionado arriba).
  • Como parte de ERMs: al estar integrados con sistemas expertos, las bases de conocimiento pueden dar información profunda y en tiempo real, en formatos digeribles, a diversos públicos. Al estar atados a ERMs, su implementación es cara y complicada; sin embargo, en el escenario de una empresa que ya tiene un ERM, agregar un módulo de base de conocimiento podría ser la mejor opción; podría hasta reducir curvas de aprendizaje y costos de instalación y administración.

Retos al implementar una base de conocimiento

He aquí una lista no exhaustiva de algunos de los retos cotidianos que, en mi experiencia, existen con respecto a las bases de conocimiento:

  • Curva de aprendizaje del software: Como se ha visto, muchas soluciones están integradas con otros tipos de software. Esto hace que su complejidad aumente y, con esto, la curva de aprendizaje asociada tanto con buscar datos, como con alimentarlos. Inclusive la instalación de una wiki simple tiene sus retos, pues la edición de documentos en este caso debe ser en línea y siguiendo un formato que debe aprenderse.
  • Integración del software y los datos a la realidad de la empresa, y con esto no solo me refiero a la posible integración con un CRM o un ERP, sino a que la estructura de los datos (los documentos) sea la adecuada para que cualquier persona pueda encontrar en ellos lo que busca, rápidamente. Este es un factor frecuentemente pasado por alto, y que se vuelve más relevante conforme más grande es la base de conocimientos. En efecto, se puede necesitar una administración formal de los datos en las grandes empresas, hecha por profesionales de la administración de conocimientos; en los wikis, editables por todos (o al menos por muchos), alguien deberá al menos cuidar que no haya duplicidad de información o inconsistencias.
  • Necesidad de la constante actualización de la base de conocimiento para que ésta sea útil; esto requiere implantar conciencia, procesos y, de nuevo, al menos un responsable. Idealmente serán muchas las personas encargadas de volcar, constantemente, dicha información; nuevos descubrimientos, invenciones y procesos necesitarán ser documentados. Pero este punto también implica cambiar borrar la información obsoleta que puede desorientar a los usuarios.

Una base de conocimientos útil – actualizada, fácil de usar, confiable, al alcance de la mano – se convierte en un valioso aliado para la productividad y la calidad de las personas en la organización… especialmente las que son como yo, que todo andamos preguntando.

Administración de proyectos en la vida real: Propósitos de año nuevo

¿Cómo vas con tus propósitos de año nuevo?

En lo que a mí concierne, no creo en los propósitos, sino en la administración de proyectos; creo en las metas bien definidas y los planes para llegar a ellas. Así que lo que tengo, en vez de propósitos, es un documento con las siguientes secciones:

1. Antes que nada, un breve recordatorio de que un objetivo debe ser específico (debe ofrecer una meta clara), medible, realmente alcanzable, relevante a mis valores y metas finales en la vida, y tener una fecha límite dentro del que debe alcanzarse.

2. Una enumeración de las áreas en las que me desempeño en mi vida, que decidí agrupar de la siguiente manera: Amor, familia y espiritualidad, Desarrollo profesional, Patrimonio, Salud, Contribución social, Viajes y exploración,  Cultura y entretenimiento. Para cada una de estas áreas tengo un objetivo global por cumplir en este año (es decir, una meta a mediano plazo), expresado en una oración sencilla y entendible; por ejemplo, la de “Salud” dice así: 

“Quiero sentirme con vitalidad cada mañana, sin sentirme dormido y enfermarme lo menos posible.”

3. Para cada área, una lista de metas; cada una expresada de manera que sea medible, realizable y con puntos de control definidos.

4. Una sección donde defino cómo llevar mi control: tengo una bitácora diaria para registrar si he cumplido con las actividades diarias y una actividad de revisión semanal de las metas, durante la cual puedo ajustar dichas metas si es necesario.

El año pasado logré el 70% de mis propósitos gracias a este método, que no es sino administración de proyectos aplicada.