Publicado por & archivado en Desarrollo, Noticia.

Seguimos hacia la convergencia que nos llevará (más pronto o más tarde) hacia la esperada versión 5 de la suite migasfree.

Anunciamos en la presente entrada 2 nuevas versiones de migasfree: la 4.14 y la 4.15.

Cambios de la versión 4.14

La versión 4.14 introduce un cambio importante a la hora de instalar el servidor. Ya no distribuimos más paquetes, sino que ahora es un contenedor docker. Con docker hemos conseguido colocar el servidor y sus dependencias en un contenedor virtual (un debian) que puede ejecutarse en cualquier servidor GNU/Linux. Esto nos ha proporcionado una flexibilidad y portabilidad para ejecutar el servidor de una forma muy simple tanto en un equipo físico como en la nube.

Esta versión también contiene cambios de denominación de conceptos, tal y como adelantábamos hace un tiempo.

  • Actualización pasa a ser sincronización. La idea de sincronización es mucho más concreta ya que refleja el conjunto de operaciones que realizan cliente y servidor para dejar en condiciones adecuadas el puesto de trabajo.
  • Versión pasa a denominarse proyecto. Por proyecto se entiende una distribución base (como Fedora 21 o Ubuntu 16.04) más una capa de personalización para una organización concreta.
  • Repositorio se convierte en despliegue. Se despliegan cambios de software a equipos según unos atributos y un calendario. Es algo más que un repositorio clásico de software.

Además, agregamos una nueva funcionalidad: el cuadro de mando. De esta manera se tiene un punto de resumen o de partida a la hora de consultar bastantes datos importantes que va recogiendo el servidor de los clientes.

Cuadro de mando de migasfree

Cambios de la versión 4.15

Esta versión incorpora cambios menores respecto a la anterior, pero igualmente interesantes:

  • Se añaden nuevas comprobaciones, en forma de alertas, para gestionar de manera más eficiente los despliegues. De esta forma, tendremos una comprobación que nos informará de los despliegues que tienen un calendario activo, y otra que nos avisará de los que ya han finalizado el calendario de distribución.
  • Gracias a Rafael Rodríguez Gayoso, se incorpora la traducción al gallego en el servidor.
  • Se han rediseñado varias páginas para conseguir una mejor experiencia de usuario:
    • Página de detalle de ordenador.
    • Detalle del hardware de un ordenador.
    • Página de detalle de despliegue.

Página de detalle de ordenador

Seguid atentos al desarrollo de migasfree, porque los cambios van a ser constantes.

Publicado por & archivado en Tutorial.

Uno de los obstáculos importantes en una migración a un sistema operativo libre es el uso y abuso que hacen los usuarios de Microsoft Access.

dog

WINE es la primera opción para su emulación y es intensamente utilizado para que las aplicaciones Microsoft Access sigan funcionando. Como última opción para aquellas aplicaciones que no son emulables con WINE se plantea el uso de máquinas virtuales VMWare ejecutadas localmente.”

Catalogar las distintas bases de datos Microsoft Access, que han ido creando los usuarios de nuestra organización, para determinar quién y desde qué ordenador accede a un fichero de Microsoft Access, es crucial a la hora de decidir si un ordenador de puesto de trabajo es migrable o no.

Esta información podríamos obtenerla a través de los logs de nuestro servicio de archivos de red pero, ¿y qué hay de las BBDD locales?

Una solución simple y efectiva, haciendo uso de migasfree, podría ser:

  1. Busca: Ejecutar un programa en cada ordenador que periódicamente mire, los archivos abiertos en el sistema y almacene su nombre en un fichero si el nombre del archivo abierto acaba en .mdb o .mde. Pasados unos días tendríamos almacenados localmente en un fichero las rutas de las BBDD a las que accede cada ordenador.
  2. Captura: Crear una fórmula, de tipo lista, que “recolecte” estas rutas como atributos del ordenador.

Venga, manos a la obra:

Busca. Programa python a ejecutar en los clientes:


#!/usr/bin/env python
import psutil
import time
import json
import os
import platform
from datetime import datetime

_format_time = '%Y-%m-%d %H:%M:%S'
_extensions = ('.mdb', '.mde', '.accdb', '.accde')
_capture_time = 300


def get_filename():
    if platform.system() == "Windows":
        if platform.uname()[2] == "XP":
            return "c:/windows/temp/access.json"
        else:
            return "c:/users/public/temp/access.json"
    else:
        return "/var/tmp/access.json"


def read_json(_filename):
    if os.path.exists(_filename):
        with open(_filename) as json_data:
            data = json.load(json_data)
    else:
        data = {}
    return data


def save_json(_filename, data):
    obj = open(_filename, 'wb')
    json.dump(data, obj)
    obj.close


def main():
    _filename = get_filename()
    data = read_json(_filename)
    while True:
        changed = False
        for proc in psutil.process_iter():
            try:
                for f in proc.open_files():
                    if f.path.lower().endswith(_extensions):
                        if platform.system() == "Windows":
                            archive = f.path.replace("\\","/").replace(":","").lower()
                        else:
                            archive = f.path.replace("/red/","").lower()
                        if not archive in data:
                            data[archive] = datetime.now().strftime(_format_time)
                            changed = True
            except:
                pass
        if changed:
            save_json(_filename,data)
        time.sleep(_capture_time)


if __name__ == "__main__":
    main()

Captura. Fórmula migasfree de tipo Lista y lenguaje python:


import os
import json

def get_filename():
    if platform.system() == "Windows":
        if platform.uname()[2] == "XP":
            return "c:/windows/temp/access.json"
        else:
            return "c:/users/public/temp/access.json"
    else:
        return "/var/tmp/access.json"

def read_json(_filename):
    if os.path.exists(_filename):
        with open(_filename) as json_data:
            data = json.load(json_data)
    else:
        data = {}
    return data

_filename = get_filename()
_ret = ""

if os.path.exists(_filename):
    data = read_json(_filename)
    for key, value in data.iteritems():
        _ret += key + ","

if _ret:
    print unicode(_ret[:-1]).encode('utf-8')
else:
    print "none"

Ya sólo nos quedaría empaquetar esta solución y desplegarla con migasfree.


Resultado:


Una vez capturadas las BBDD como atributos de los ordenadores en el servidor migasfree, ya sólo nos queda analizar la información.

  1. Conocer que BBDD se utilizan en un ordenador concreto es ahora tan sencillo como acceder al ordenador y mirar sus atributos.
  2. Obtener la lista de ordenadores que hacen uso de una BD concreta tambien es posible desplegando su atributo.
  3. Ver todo el catálogo de BBDD, tan simple como ir a los atributos y filtrar por ACCESS.

resultado

Publicado por & archivado en Tutorial.

Gracias a play-with-docker.com puedes instalar un servidor migasfree en Internet y “jugar” durante 4 horas con él. Es una buena manera de empezar con migasfree. ¿A qué esperas?

  • Accede a play-with-docker.com
  • Añade una nueva instancia
  • Copia y pega estos comandos:
    git clone https://github.com/migasfree/migasfree-docker.git
    cd migasfree-docker/mf
    . variables
    docker-compose up -d
    docker logs -f $FQDN-server
  • Ahora, a la derecha de la IP, te aparecerán los puertos abiertos. Pulsa sobre el puerto 80 y espera un minuto a que arranque el servidor. Copia la dirección del servidor (pwd-ip-80.host2.labs.play-with-docker.com)
  • Haz login con usuario admin y contraseña admin.
  • Instala un cliente migasfree en un equipo de pruebas (o mejor en una máquina virtual):
    # wget -O - http://migasfree.org/pub/install-client | bash
  • Modifica el fichero /etc/migasfree.conf para que el cliente apunte al servidor:
    Server = pwd-ip-80.host2.labs.play-with-docker.com
  • Ejecuta el cliente:
    # migasfree -u
  • Aprende más

Publicado por & archivado en Desarrollo, Noticia.

Más bien parece el título de otro capítulo de The Big Bang Theory, pero en realidad es una nueva funcionalidad de la versión 4.13 del servidor migasfree.

Página de inicio de la versión 4.13

En total, 5 meses de trabajo y 23 incidencias resueltas, comprenden esta nueva versión del servidor. Versión que se caracteriza por traer más características inéditas que correcciones de bugs. Entre ellas, destacaría:

  • Página de inicio de la aplicación, explicando qué se puede esperar de esta solución y con enlaces relacionados a este blog, a la documentación del proyecto, al código fuente y a la licencia usada.
  • Simulación de la sincronización de un equipo. Además de servir de introducción a este artículo, consiste en, dados los datos que tiene en ese momento el servidor migasfree del equipo, se pueden ver qué paquetes se instalarían o desinstalarían, que repositorios serían visibles para ese ordenador, qué fallas ejecutaría, que dispositivos se le asignarían y si se tendrían que obtener información acerca del hardware.
  • Información de la situación actual en la ficha de ordenador. Esta información agrupa datos del estado del equipo, último login (fecha y usuario), última actualización (y cuánto duró) y si hay errores y fallas por comprobar.
  • Se ha añadido más información relacionada en los elementos clave de migasfree: ordenadores, repositorios, versiones… con la idea de navegar más rápidamente entre los datos. Así, además, se han eliminado varias consultas, ya que ahora han quedado resueltas con estos nuevos enlaces.
  • Ahora es posible asignar dispositivos mediante atributos, en lugar de ordenadores directamente. Pensamos que, de esta forma, se mejora la gestión de los mismos.

Se avecinan nuevos y grandes cambios en el proyecto migasfree… por el momento, vamos puliendo la rama Grape Edition con esta versión que ahora liberamos.

Publicado por & archivado en Desarrollo, Noticia.

Los buenos estudiantes, aprovechan el verano para repasar los conceptos aprendidos e iniciar con ansias renovadas y la mente preparada el próximo curso académico.

Así, migasfree, no ha descansado este verano y tenemos preparada una nueva versión que viene con importantes mejoras de rendimiento y nuevas características.

Una de las carencias que tenía hasta ahora el proyecto, era la explotación efectiva de los datos que recoge de los clientes. Las estadísticas han sido siempre demasiado básicas y han tenido problemas de rendimiento. Hemos logrado disminuir 5 veces el tiempo que costaba mostrar la gráfica de ordenadores actualizados por mes. Además, hemos incluido datos tabulares en las estadísticas temporales para que sean exportables a otras herramientas.

Pero la revolución en cuanto a representación de la información se refiere, viene de la mano de la nueva página de sucesos de un ordenador. Sobre un calendario, desde la fecha de entrada del equipo en el servidor, se pintan las actualizaciones, errores, fallas, migraciones y registros de estado. De un vistazo, sobre todo con las actualizaciones, se puede ver si la máquina en cuestión se utiliza de acuerdo al uso estimado por la organización o hay grandes lagunas sin conexiones al servidor.

Sucesos de un equipo

En esta versión de migasfree también se han corregido algunos bugs y se han hecho mejoras al apartado de instalación de dispositivos.

Un verano de trabajo intenso que tendrá su recompensa al empezar con buen pie este curso académico.

Publicado por & archivado en Desarrollo, Noticia, Teoría.

migasfree actual

A principios del año 2015, comencé el proyecto migasfree-backend con la idea de redefinir el servidor migasfree. Enforcarlo hacia una solución escalable (con alta disponibilidad) y fácilmente explotable a través de una API REST.

Después de unos meses de trabajo, teníamos un prototipo bastante prometedor para empezar a depurar y perfilar. Venía con un nuevo protocolo de comunicación entre cliente y servidor que era a la vez cifrado y autenticado gracias a la tecnología JWT, con un servicio de tareas en segundo plano gracias a Celery y Redis y con muchos cambios en el modelo de datos de la aplicación.

Era demasiado revolucionario y rompedor con la versión del servidor que teníamos en producción. Por eso se nos planteaba el reto de cómo hacer la transición entre uno y otro. Dos eran los escollos más importantes para dar el salto:

  1. Qué hacer con los clientes antiguos que accederían al nuevo servidor.
  2. Realizar una aplicación de IU (migasfree-frontend) para explotar los datos del nuevo servidor a través de la API REST.

Tras darle multitud de vueltas, hemos llegado a la conclusión de que la mejor forma de ir afrontando estos cambios tan radicales, es ir haciéndolos de manera progresiva. Para ello, en breve empezaremos a desarrollar la edición mushrooms del servidor de migasfree. Será la versión 5 y empezará a cambiar el modelo de datos para ir encaminándolo hacia el que tiene migasfree-backend.

Vendrá también con dos protocolos de comunicación para los clientes: el actual y el nuevo basado en JWT. De esta forma, esta versión 5 se convierte en una versión de transición entre lo que hay actualmente en producción y lo que queremos que se convierta la suite migasfree.

Tenemos previsto que en la versión 6 (denominada extraoficialmente como liver), se elimine todo el código de compatibilidad que mantendremos en la versión 5 (tanto de protocolo de comunicación como de interfaz de explotación de datos). Para cuando llegue a las pantallas la versión 6, tendrá que estar listo el proyecto migasfree-frontend para consumir la API REST.

Seguramente, el proyecto migasfree-backend jamás verá la luz como un producto en producción. Sin embargo, nos ha venido que ni pintado para reflexionar sobre ideas nuevas sin tener que arrastrar lastres del pasado.

el migasfree que viene

Nuestro deseo, con los próximos cambios que se avecinan, es convertir nuestro patinete (la versión actual) en un auténtico coche de carreras ;).

Publicado por & archivado en Tutorial.

En la documentación del proyecto, se menciona de pasada el parámetro MIGASFREE_REMOTE_ADMIN_LINK, describiendo brevemente cómo configurar el acceso por VNC y SSH a los equipos, pero sin explicar cómo conseguir que esos protocolos sean accesibles directamente desde nuestro navegador web.

En el siguiente artículo vamos a sacarle más funcionalidades a este parámetro de configuración y a narrar cómo configurar nuestro entorno (se entenderá que es una máquina con Linux) para obtener un acceso directo a los protocolos desde el navegador (Firefox, Chrome/Chromium).

En el servidor migasfree

Para comenzar, tendremos que configurar adecuadamente el parámetro en el archivo /etc/migasfree-server/settings.py de nuestro servidor migasfree. Un ejemplo, podría ser el siguiente:


MIGASFREE_REMOTE_ADMIN_LINK = "mvnc://{{computer.ip}} mping://{{computer.ip}} mssh://root@{{computer.ip}} mupdate://root@{{computer.ip}}"

Para que los protocolos sean “personalizados” y no causen conflictos con otros que pueden tener otra configuración en los sistemas, he preferido anteponerles la letra “m” (de migasfree ;)).

Tras realizar los cambios, deberemos hacer que el servidor web relea la configuración para que se apliquen dichos cambios.

Como se comenta en el libro, después de activar este parámetro, cada vez que se represente un ordenador en la aplicación web de migasfree, tendremos disponibles nuevas acciones que vendrán indicadas por los nombres de los protocolos. Siguiendo el ejemplo serían: mvnc, mping, mssh y mupdate. Eso sí, por mucho que pulsemos sobre ellos en el interfaz, no van a realizar todavía ninguna acción, ya que todavía falta por configurar la parte cliente (nuestra estación de trabajo que se conecta al servidor), para obtener las funcionalidades perseguidas.

En nuestro ordenador cliente

Creamos en primer lugar el fichero /usr/bin/migasfree-protocols, con el siguiente contenido:


#!/bin/bash

_PROTOCOL=$(echo $1 | awk 'BEGIN {FS = "://"}; {print $1}')
_URL=$(echo $1 | awk 'BEGIN {FS = "://"}; {print $2}')

case "$_PROTOCOL" in
    "mssh")
        gnome-terminal --command "ssh $_URL"
        ;;

    "mvnc")
        vncviewer $_URL
        ;;

    "mping")
        gnome-terminal --command "ping $_URL"
        ;;

    "mupdate")
        gnome-terminal --command "ssh $_URL migasfree --update; echo; echo TERMINADO; read"
        ;;
esac

En este fichero, que deberá tener permisos de ejecución, se describe qué hacer con cada uno de los protocolos. En este ejemplo son necesarias las utilidades ssh y vncviewer, pero se podrían cambiar por otras (al igual que gnome-terminal), dependiendo de nuestra distribución Linux.

Ahora sólo falta decirle al navegador qué debe hacer cuando se encuentre con los protocolos. El proceso va a diferir según el navegador web que usemos.

Chrome/Chromium

Tenemos que configurar la asociación de protocolos a nivel de entorno gráfico. Para ello, crearemos el fichero /usr/share/applications/migasfree-protocols.desktop:


[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=migasfree protocols
Exec=/usr/bin/migasfree-protocols %U
Terminal=false
MimeType=x-scheme-handler/mssh;x-scheme-handler/mvnc;x-scheme-handler/mping;x-scheme-handler/mupdate;
NoDisplay=true
StartupNotify=true

Como este lanzador sólo tiene fines de asociación de MimeTypes, no se mostrará en el menú de aplicaciones (NoDisplay=true), por lo que no es necesario que tenga asociado un icono o las categorías definidas.

Después, sólo queda actualizar la base de datos de lanzadores y mimetypes mediante los comandos (con un usuario con privilegios de root):


# update-desktop-database
# update-mime-database /usr/share/mime

Firefox

Para este navegador, además del paso anterior, tendremos que crear el fichero /usr/lib/firefox/defaults/pref/migasfree.js con este contenido:


pref("network.protocol-handler.expose.mssh", false);
pref("network.protocol-handler.expose.mvnc", false);
pref("network.protocol-handler.expose.mping", false);
pref("network.protocol-handler.expose.mupdate", false);

pref("network.protocol-handler.app.mssh", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mvnc", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mping", "/usr/bin/migasfree-protocols");
pref("network.protocol-handler.app.mupdate", "/usr/bin/migasfree-protocols");

pref("network.protocol-handler.warn-external.mssh", false);
pref("network.protocol-handler.warn-external.mvnc", false);
pref("network.protocol-handler.warn-external.mping", false);
pref("network.protocol-handler.warn-external.mupdate", false);

pref("network.protocol-handler.external.mssh", true);
pref("network.protocol-handler.external.mvnc", true);
pref("network.protocol-handler.external.mping", true);
pref("network.protocol-handler.external.mupdate", true);

Y una vez que volvamos a iniciar el navegador ya tendremos disponible el comportamiento esperado.

Corolario

Como puede verse, las posibilidades son amplias y van a depender de nuestro entorno particular para adecuarlo a unas necesidades determinadas. Es por ello que desde el proyecto migasfree no se ha creado un paquete genérico para cubrir esta funcionalidad.

Se deja como ejercicio práctico para cada organización el crear un paquete a medida con los protocolos que allí se consideren prácticos y realizar la configuración adecuada para sus entornos de explotación (navegadores) de la aplicación web de migasfree.

Actualización (2018-03-02)

A partir de la versión 4.14 del servidor migasfree, el parámetro MIGASFREE_REMOTE_ADMIN_LINK se convierte en lista:


MIGASFREE_REMOTE_ADMIN_LINK = [
    "mvnc://{{computer.ip}}",
    "mping://{{computer.ip}}",
    "mssh://root@{{computer.ip}}",
    "mupdate://root@{{computer.ip}}",
]

Publicado por & archivado en Desarrollo, Teoría.

Que significa cuestiónalo todo. Cuestiona lo que tienes alrededor pero, sobre todo, cuestiónate a ti mismo, lo que haces y cómo lo haces. Es reinventarse a sí mismo, mejorando cada día con lo que aprendes por la experiencia adquirida y por la experencia que proporcionan los conocimientos de otras personas.

Con esa intención, desde hace unos meses, estamos construyendo un nuevo migasfree. Que se apoya en conceptos que funcionan en lo que ya está hecho, pero que le da unas cuantas vueltas de tuerca a otros que, a pesar de ser funcionales, no dan la suficiente versatilidad a un proyecto de esta envergadura.

Esta idea de reinvención germinó en Bilbao, el pasado noviembre, mientras asistía a la LibreCon. Allí me di cuenta de dos cosas. La primera, que el concepto de migasfree, aun siendo bueno, no terminaba de calar entre el público por su aparente complejidad. Y la segunda y más importante, que encontré la pista para que fuera más atrayente. Esta pista se basa en algo muy sencillo: deja que otros jueguen con tu aplicación para que la puedan extender y adaptar.

Y para que otros puedan jugar con migasfree, había que facilitar las reglas de juego. Esta idea me llegó durante la charla de Kaleidos sobre Taiga. Habían construido su proyecto dividiéndolo en capas, en otros proyectos independientes pero que se comunicaban con el principal a través de una REST API. Esto posibilita a cualquiera que conozca esta API, interactuar y explotar los datos de la forma en que más le convenga, posibilitando que la comunidad se sienta más atraida porque pueden construir otras piezas a partir de un núcleo sólido. El concepto no es revolucionario, pero de repente, comprendí que eso mismo era lo que le faltaba a migasfree.

Durante 5 años, migasfree se ha ido construyendo con parches sobre parches alrededor de una idea inicial y hay algunas cosas que ya no se aguantan sobre esos inestables andamios. Además, para construir un núcleo sólido había que clarificar y repensar algunos conceptos clave. Los tres más importantes tienen que ver con la semántica y la importancia de escoger nombres adecuados.

  • Repositorio evoluciona a liberación. La denominación de repositorio resultaba confusa porque se podía confundir con los repositorios estáticos de cualquier distribución Linux. Sin embargo, en migasfree se le está dando otra vertiente mucho más dinámica tanto en el eje temporal como en funcionalidades. Por esto se cambia a liberación: se distribuyen cambios de software (instalación/actualización/desinstalación) a equipos según unos atributos y un calendario.
  • El concepto de versión ha sido cambiado por el de proyecto. Versión daba una idea de evolución y de posibilidad de intercambio de los equipos entre otras versiones, pero la idea de proyecto es algo más estanco y deja claro que cada ordenador pertenece a un solo proyecto y no a otro. Por proyecto se entiende una distribución base (como Fedora 21 o Ubuntu 14.04) más una capa de personalización para una organización concreta.
  • Actualización pasa a ser sincronización. La idea de actualización es demasiado genérica ya que cambios en los equipos puede haber muchos. La idea de sincronización es mucho más concreta ya que refleja el conjunto de operaciones que realizan cliente y servidor para dejar en condiciones adecuadas el puesto de trabajo.

Pero hay muchos más cambios. El más relevante se refiere precisamente a la API que pondrá el núcleo (llamado a partir de ahora migasfree-backend) a disposición de quien la quiera usar. Una API mucho más amplia y basada en REST. Otro cambio, también significativo, es la nueva escalabilidad que se va a conseguir al usar un conjunto de tecnologías: Celery, Redis, Circus, Chaussette, Nginx, HAProxy

Escalabilidad de migasfree

El trabajo dista mucho de estar acabado, pero tenemos claro que esta es la dirección sobre la que tenemos que seguir avanzando. Tampoco sabemos qué pasará cuando tengamos una versión funcional y se quiera implantar sobre un migasfree actual. Será algo que nos plantearemos en su momento. El protocolo entre cliente y servidor ha cambiado sustancialmente y, aunque es trivial cambiar los clientes, habrá que pensar muy bien cómo actualizar el servidor.

Cuando hayamos encauzado todos estos cambios, migasfree habrá ascendido de categoría y estará en condiciones de ser usado en organizaciones muy grandes (con más de 10 mil equipos). Además, dará la libertad de programar clientes para cualquier plataforma imaginable y frontends en cualquier tecnología que se quiera. Tan solo tendrán que seguir la API proporcionada por migasfree-backend y añadir algún nuevo PMS si fuera necesario.

Publicado por & archivado en Teoría.

Este es el resumen del proceso GCS en tu organización con migasfree:

  1. Un usuario hace un petición de cambio.
  2. Un desarrollador programa el cambio de la configuración software dentro de un paquete y lo sube a un servidor migasfree.
  3. La liberación es realizada por el servidor migasfree a los ordenadores requeridos.

Y, como se puede ver en el gráfico, migasfree tan sólo aparece al final del proceso, en la fase de liberación.

Publicado por & archivado en Noticia.

Esta vez le tocaba a este blog que estás leyendo. Después de 3 años con el mismo aspecto, era hora de cambiar y de aplicar algunas lecciones aprendidas.

Necesitábamos un nuevo look, más acorde con los tiempos que corren y adaptable a los nuevos dispositivos que tan comunes se han vuelto estos últimos años.

Para el cambio hemos usado:

Aprovechando el uso de Bootstrap, hemos adaptado el contenido de las páginas estáticas para darles un aspecto más atractivo. Como muestra, puedes ver la página About.

Para comprobar el resultado final en distintas resoluciones de pantalla, hemos hecho pruebas con la herramienta online Responsive Web Design Testing.

Además, también estamos de estreno en la Wikipedia.