Después de varios días sin enviar ningún post (intentaré aumentar el flujo de entradas) toca ir informando de las novedades del proyecto.
Como podéis comprobar tenemos web nueva, en la que iremos colgando el código fuente y la documentación que iremos generando. Mas adelante iremos añadiendo otras secciones a la web, como un rincón de usuarios [...]
Ahora vamos a analizar los tipos de instrucción que podemos manejar con el protocolo.
Start Code: Código que indica que se va a empezar la comunicación siempre es el mismo y es 1110
House Code: Código que indica la casa a la que nos vamos a referir, pueden haber hasta un máximo de 16 conectadas a la [...]
¡Muchas cosas! xD Pero lo más inmediato es:
Hoy tenía pensado realizar uno de los tres videos en los que explicar el funcionamiento de miARC (pq pudiendo ver un video para qué vamos a leer… xDD), pero desgraciadamente el micrófono de mi portatil, Ubuntu y gtk-recordMyDesktop no quieren llevarse bien asi que queda aplazado para más adelante.
En su lugar os dejo algunas capturas de la interfaz web de miARC:
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/nc1.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/nc2.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/nc3.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/nc4.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/nc5.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/ncrl1.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/ncrl2.png
http://www.miarc.es/albums_5b29cf310d2d16ce311aee8fbde8a805/Capturas/ncrl3.png
Hugs tiene algunas limitaciones respecto a GHC: no se puede hacer que los módulos se importen de forma recursiva (algo a evitar, pero que en la práctica ayuda de vez en cuando siempre que se haga de forma temporal), no encuentro el modo de acceder a módulos que estén en otro directorio, no trae añadidos interesantes de GHC (como un debugger, o una utilidad para ver a fondo cómo de eficiente es el programa), y de vez en cuando aparece un bug con tipos monádicos (aunque fácil de sortear, y que podría no estar en la última versión de Hugs, solo que yo uso la que trae la distribución estable de Debian).
Aún así, Hugs tiene una diferencia importante respecto a GHC, que a veces es muy ventajosa: es un interprete, no un compilador. Cierto que GHC trae GHCi, que permite hacer todo lo que se puede hacer con Hugs, pero nunca con la velocidad de Hugs.
Cuando uno está programando, si puede comprobar rápidamente si el último cambio que ha hecho funciona, entonces lo prueba. Si no lo va a poder comprobar tan rápidamente, lo deja para más adelante, cuando haya más cambios. Esto es un lastre de GHC, y hacer el código incompatible con Hugs obligaría a todo el mundo a llevarlo encima.
Creative Commons: reconocimiento - sin obras derivadas. Autor: It'sGreg (click en imagen)
Otra consecuencia, quizás más importante, es el modo en que se va a hacer público el programa. Con el intérprete (Hugs) tan solo habría el código fuente, y se le pediría al usuario que descargara el interprete. Con el compilador (GHC) habría que publicar además unos binarios, y en ese caso sería eso lo que la gente descargaría normalmente. La consecuencia es clara: con Hugs se está facilitando que quien descargue el programa “curiosee” el código y añada algo, porque tiene descargadas en el ordenador todas las herramientas necesarias.
Hay una última ventaja para Hugs, y es que se puede aprovechar el propio intérprete como interfaz con el usuario, sin tener que crear una nueva. En el futuro, muy en el futuro, podría ser interesante añadir cosas (por ejemplo, un modo ventana), pero hasta entonces Hugs puede ser incluso mejor solución. GHCi hace lo mismo, pero no creo que guste la idea de hacer descargar un compilador para ejecutar unas fuentes, en lugar de dar el binario: daría la impresión de programa incompleto, y está de nuevo el tema de la lentitud de GHCi (para éste propósito, solo al iniciar).
Por todo ello, me he decidido por Hugs, como estaba desde el principio. Pero con cuidado de que, si se introduce algo que no funcione en GHC, debe modificarse para que se puedan utilizar esporádicamente las ventajas de éste compilador durante el desarrollo. De todos modos es muy improbable que algo escrito en Hugs no funcione en GHC, ya que Hugs es más limitado y los dos respetan el estandar Haskell 98 si no se usan las extensiones. Lo arriesgado sería lo contrario, hacer código GHC compatible con Hugs.
Por varias razones esto del nuevo sistema de plugins me esta llevando mas de lo esperado, por lo que después de casi dos días sin resultados me plantee una alternativa mas liviana. En lugar de atacar el problema de frente, he dado un pequeño giro.
Los plugins van a estar en ~/.tucan/plugins/ y su comportamiento va a depender de la configuración del usuario. Para habilitar un servicio con sus correspondientes plugins deberas aceptar los terminos de uso del servicio, de esta manera no se me puede hacer responsable por un mal uso de este (me lo han recomendado para evitar problemas legales ).
Así que he estado implementando las ventanas de configuración del GUI, para proximamente hacer la gestión de configuración y finalmente terminar el nuevo sistema de plugins. Todo esto puede parecer una excusa para posponer la implementación del sistema de plugins, pero es que prefiero mantener el desarrollo constante.
Bueno, como se que os gustan las capturas, aquí os dejo una buena remesa.
Configuración de los parámetros globales.
Configuración de los distintos servicios.
Haciendo doble click sobre alguno de los servicios de la ventana anterior, aparecerá la configuración de sus plugins, donde podrá gestionar sus cuentas y configurar algunos parámetros.
Por ultimo la configuración avanzada.
PD: Se me olvidaba comentar que el toolbox vuelve a su configuración anterior y la funcionalidad de borrado pasa al nuevo menu contextual haciendo click con el botón derecho sobre el TreeView o al presionar la tecla .
Un saludo, Crak
A espera de la nota, que espero no sea mala… ¬¬ ya (por fin…) soy Ingeniero Técnico en Informática de Sistemas, para “celebrarlo” voy a empezar a subir a la forja el código y la documentación necesaria para que cualquiera con un poco de ganas pueda probar la aplicación, se instala muy fácil asi que no dudeis en probarla
Por cierto, también podreis encontrar todo el código y documentación en http://www.miarc.es
Supongo que habrá quien realmente no sepa qué es una Autoridad de Certificación (CA: Certification Authority) o una Autoridad de Regitro (RA: Register Authority), las dos unidades software de que se compone miARC.
La función de las Autoridades de Registro es controlar la generación de certificados para los miembros de una entidad. Previa identificación, la Autoridad de Registro se encarga de realizar la petición del certificado y de guardar los datos pertinentes.
Modo de funcionamiento
En una infraestructura de clave pública, una RA (autoridad de registro) es una entidad de confianza que:
La Autoridad de Certificación, por sí misma o mediante la intervención de una Autoridad de Registro, verifica la identidad del solicitante de un certificado antes de su expedición o, en caso de certificados expedidos con la condición de revocados, elimina la revocación de los certificados al comprobar dicha identidad. Los certificados son documentos que recogen ciertos datos de su titular y su clave pública y están firmados electrónicamente por la Autoridad de Certificación utilizando su clave privada. La Autoridad de Certificación es un tipo particular de Prestador de Servicios de Certificación que legitima ante los terceros que confían en sus certificados la relación entre la identidad de un usuario y su clave pública. La confianza de los usuarios en la CA es importante para el funcionamiento del servicio y justifica la filosofía de su empleo, pero no existe un procedimiento normalizado para demostrar que una CA merece dicha confianza.
Un certificado revocado es un certificado que no es válido aunque se emplee dentro de su período de vigencia. Un certificado revocado tiene la condición de suspendido si su vigencia puede restablecerse en determinadas condiciones.
Al fín he podido terminar la clase Animación , pero he tenido problemas con el subversión, sino con mucho gusto os pondría en enlace al proyecto para que os lo descargárais.
Ahora estoy trabajando en la documentción para que después de leer la documentación pudierais hacer vuestras propias animaciones o si teneís un poco de arte programando en c++, mejorarlo, que esa es la idea del software libre.
Paralelamente estoy dibujando algunos personajes y la verdad es que me están saliendo muy bien (dentro de lo que cabe que no soy diseñador gráfico).
Un saludo a todos.
NINGÚN EJÉRCITO PUEDE DETENER LA FUERZA DE UNA IDEA CUANDO LLEGA A TIEMPO.
Víctor Hugo
Hasta ahora lo que he hecho casi se puede resumir en una palabra: estudiar. Estudiar Haskell, mónadas y un poco de Subversion. No sé como me atreví a elegir Haskell para el proyecto, ¡si no sabía nada de ese lenguaje al empezar el concurso! xD
Pensé que no tenía nada que escribir en el blog, puesto que no estaba haciendo código, pero ahora he pensado que, ya que muchos programadores no conocen Haskell, podría escribir un poco sobre éste lenguaje funcional. Lo haré más adelante, ahora voy a hablar un poco sobre lo que hay hecho y lo que quiero del proyecto. Para saber más, click aquí (me acabo de dar cuenta de que no está el enlace a la derecha, lo añado en cuanto pueda).
Creo que la mejor manera de entender de que va éste programa es con un ejemplo de ejecución (entiéndase como una declaración de intenciones, no como una ejecución real a día de hoy):
(trazaInversa.eval) (True AND ((True AND True) AND False) )
Salida:
True AND ((True AND True) AND False <=> False
(True AND True) AND False <=> False
True AND True <=> True
Uno de los propósitos del proyecto queda claro: no solo se trata de que salga “False”; se trata de que si no se entiende directamente, se pueda seguir leyendo pasos más pequeños.
Creí que ésto iba a ser muy difícil de conseguir, pero hay una herramienta matemática que en Haskell se usa mucho, las mónadas. Cada mónada es un tipo de datos (normalmente abstracto) que contiene a otros tipos; lo más importante sobre ellas es que sirven para contener datos y para añadir efectos secundarios a las operaciones que se hagan sobre esos datos.
Con ellas, uno puede ocuparse de crear la función eval casi olvidándose por completo de que la mónada se encarga de ir guardando la traza. Esto hace que, sea muy fácil modificar de forma independiente el código relacionado con la traza y el código relacionado con el cálculo del valor de la expresión.
Puede leerse más sobre las mónadas en éste artículo de la Universidad de Glasgow. La mónada Traza que utilizo en Principia es una modificación de una de las que ahí aparece. Hay que tener en cuenta que, al tratarse de un artículo académico, ésto no provoca ningún problema de licencia; si no, no podríamos aplicar a ningún programa casi nada de lo que aprendiéramos en la universidad