bars Bienvenido
jmouriz close ¡Bienvenido!
Inicio authentificallizer libusockets gpstree Union Boxes EggPlayer Visual GTK+ Clutter Coverflow Shell Compiler Sanaviron MOF Mount VDI dia-to-sql Más desarrollos Ideas Preferencias Contacto
Inicio

Hola, esta es mi página personal en GitHub. Un sitio donde guardo algunas de las piezas que voy escribiendo cuando me aburro. Me gusta programar pero no me especializo en ningún lenguaje, la mayoría de los desarrollos están escritos en C aunque aquí encontrarás también códigos en Python, PHP, JavaScript y Shell Script.

Mi carrera se basa es la acumulación de horas de práctica, extensas lecturas, investigaciones, pruebas, noches sin dormir y mucha cafeína que suman un total de 24 años haciendo lo mismo y con el mismo entusiasmo. Desde mi primer contacto con una computadora descubrí el verdadero amor que más tarde se transformó en pasión.

Entre todos mis proyectos, se encuentra este sitio que guarda algunos secretos y es el resultado de un experimento de laboratorio que estoy desarrollando en la actualidad en la medida que el tiempo me lo permite. Encontrarás más información al respecto en la sección de ideas.

authentificallizer

https://jmouriz.github.io/authentificallizer

Este repositorio contiene un ejemplo completo y funcional de cómo usar Satellizer para iniciar sesión usando un servidor local OAuth 2.0 (RFC 6749: The OAuth 2.0 Authorization Framework) y diversos proveedores externos en tu sitio. Incluye el código del lado del servidor para enlazar con tus usuarios y un servidor OAuth 2.0 propio que soporta múltiples scopes (RFC 6749: The OAuth 2.0 Authorization Framework, 3.3. Access Token Scope).

Pantallazos

Usuarios

Los usuarios se encuentran en la tabla oauth_users definida en database/schema.sql. Puedes ampliarla a tu gusto pero no modifiques los campos existentes porque es usada internamente por la biblioteca oauth2-server-php para el grant_type password (RFC 6749: The OAuth 2.0 Authorization Framework, 1.3.3. Resource Owner Password Credentials). Las llamadas SQL se encuentran en authorization/model/user.php que es una clase que extiende un pequeño ORM muy simple que está en authorization/common/model.php.

Importante

Leé el instructivo hasta el final y sólo prueba cuando hayas terminado de configurar los proveedores que vas a utilizar para evitarte dolores de cabeza. Asegúrate de configurar correctamente todas las URL de redirección.

Yahoo no soporta localhost y tampoco permite múltiples URLs de redireccionamiento con lo cual deberás crear dos aplicaciones, una para producción y otra para desarrollo usando la dirección 127.0.0.1 en lugar del nombre localhost. Asegúrate de usar siempre el protocolo cifrado HTTPS.

Requerimientos previos

  1. bower
  2. composer

Dependencias adicionales

PHP debe soportar la extensión PDO.

Instalación

                     
                        bower install
                        cd authorization/libraries
                        composer install
                     
                  

Configuración

  1. Copia authorization/common/config-template.php a authorization/common/config.php y edita este último con los valores de configuración para cada proveedor y los datos de acceso a tú base de datos.
  2. Ve a la dirección http://localhost/authentificallizer/setup.php para crear el esquema de tablas en la base de datos y configura la URL de redirección en cada proveedor.

Pendientes

  1. Agregar más proveedores.
  2. Permitir la instalación del lado del servidor con Composer.
  3. Hacer un módulo para AngularJS y permitir la instalación del lado del cliente con Bower o NPM.
libusockets

https://github.com/jmouriz/libusockets

libusockets es una pequeña biblioteca de funciones para manejar sockets de Internet en Unix que permite:

  • Crear sockets de Internet.
  • Asignar nombres a sockets (bind).
  • Escuchar clientes (listen).
  • Servir a clientes (bind y listen).
  • Aceptar clientes (accept).
  • Conectarse con servidores (connect).
  • Enviar y recibir entre pares (send y recv).
  • Apagar y cerrar conexiones (shutdown y close).

Básicamente funciona como envoltura a la familia de funciones para manejar sockets de Internet en Unix. Cuenta con un sistema rudimentario de manejo de errores.

Compila con C y C++ y es altamente portable. Útil para encapsular en una clase de C++. Agregar las funciones de manejo de sockets de Windows (winsocks). Compilar en Android. O hacer una biblioteca de comunicación portable e insegura.

gpstree

https://github.com/jmouriz/gpstree

gpstree es una herramienta para mostrar gráficamente el árbol de procesos de Unix como lo hace el comando ps.

Su nombre comienza con G porque está enlazada con GTK+ y es un ejemplo de cómo usar algunas características semi avanzadas de GLib, como expresiones regulares y ejecución de procesos asíncronos usando tuberías.

Está escrito en C y es un buen medio de aprendizaje para escribir interfaces gráficas de usuario para comandos de consola.

Union Boxes

https://github.com/jmouriz/union-boxes

Union Boxes es un programa interactivo que une dos rectángulos por el lado más conveniente mediante una curva cúbica de Bézier.

Es una pieza didáctica que pretende mostrar cierto lineamiento para escribir código bueno en C sin extrañar las características que nos ofrece la programación orientada a objetos.

Asimismo es útil para implementar en tu canvas si estás desarrollando algún programa para dibujar diagramas. El algoritmo es claro, fácil de entender y escribir en otros lenguajes, por ejemplo JavaScript. Utiliza las primitivas de dibujo que ofrece Cairo y una pequeña porción de GTK+ para crear la ventana y el widget que representa el canvas.

EggPlayer

https://github.com/jmouriz/egg-player

EggPlayer es un reproductor de video para tus aplicaciones GTK+. Un objeto que reproduce videos. Implementa el mecanismo de objetos de GObject y está escrito en C. Se enlaza con GTK+ y GStreamer para generar una biblioteca dinámicamente enlazable .dll u objeto compartido .so. Esta biblioteca libegg.(dll|so) se puede cargar en el diseñador de interfaces gráficas de usuario Glade. Es un intento de comprender la técnica de incorporación de nuevos widgets a la paleta de Glade y aporta un nuevo ejemplo al objeto EggClockFace de Davyd Madeley con el agregado de una propiedad que se puede manejar cambiar desde Glade.

Visual GTK+

https://github.com/jmouriz/visual-gtk

Visual GTK+ es un plugin para Glade que incluye un hack del objeto GtkBuilderScript de Christian Hergert y permite editar el código JavaScript directamente en Glade.

Del README original de Christian

GtkBuilder + Inline JavaScript.

This is a quick hack to allow writing javascript inside of a GtkBuilder xml file and attaching signals to said javascript functions.

GScriptJs is an object that can be created from within the GtkBuilder file. The "script" property is used to eval javascript into the JSContext.

Use a connect callback similar to connect_func in script.c.

Cheers, and Happy Hacking,

Ejemplos

Una calculadora
Ver código

Un libro telefónico
Ver código

Un afinador de guitarra
Ver código

Un visor de imágenes
Ver código

Clutter Coverflow

https://github.com/jmouriz/clutter-coverflow

Clutter Coverflow es deslizador de portadas CD's al estilo fonola escrito en C usando la biblioteca Clutter. Altamente portable y útil para implementar en reproductores de música. Debido a las transiciones de Clutter, parecidas a las transiciones de propiedades de estilos de CSS se puede traducir para usar en la web.

Shell Compiler

https://github.com/jmouriz/shpc

Shell Compiler (shpc, de Sheel Pseudo Compiler) es un pseudo compilador de Shell Script que te permite transformar tus scripts en un programa compilado (léase erróneamente binario).

shpc convierte un script a código C intermedio y luego lo compila y enlaza para generar un programa en código nativo. De esta forma puedes ocultar parcialmente y de manera poco efectiva el algoritmo. Es útil cuando la demanda de seguridad no es demasiado estricta.

Sirve como ejemplo de uso de algunas características básicas de C como getopt, errno, entre otras.

Al mismo tiempo el código C intermedio escribe un archivo con el script original, lo ejecuta y luego lo borra. Esto hace que el script se ejecute tal y como se espera, pero a su vez, puede quedar el código generado si el programa se interrumpe en el momento adecuado, lo que lo hace inseguro en requerimientos de seguridad estrictos. Por otra parte el script se incluye como una cadena de C que se oculta del programa compilado haciendo un pequeño desplazamiento de bytes para que la cadena no quede visible. Conociendo esto, se puede descompilar cualquier código haciendo el proceso inverso.

Sanaviron

https://github.com/jmouriz/sanaviron

Sanaviron es un programa de dibujo 2D escrito enteramente en Python para representar gráficos vectoriales- Es escencialmente un canvas basado en Cairo y un conjunto de herramientas que usan GTK+ que van alrededor y permiten editar el contenido del canvas. El esfuerzo se focaliza principalmente en el diseño de facturas, presupuestos, etiquetas y cualquier otro tipo de documentos comerciales. Sanaviron ofrece un API simple pero potente que puedes implementar en tus programas. Este widget puede ser usado de manera flexible para mostrar y editar interactivamente graficos vectoriales. Sanaviron es un componente que depende de GTK+ y Cairo, por eso es portable a muchas plataformas. Originalmente 100% escrito en Python puro. Debido a las bibliotecas que utiliza, puede ser traducido de manera más o menos sencilla a C usando GObject y es más fácil de traducir a C++. Algunos añadidos posteriores se escribieron en C, por ejemplo, la interfaz para dibujar códigos de barras y un pequeño código para determinar la posición del cursor en cadenas UTF-8. Ambos códigos son portables y en el repositorio se incluyen los archivos compilados para Unix .so de 32 y 64 bites respectivamente y los archivos .dll para Windows también para procesadores de 32 y 64 bits.

Algunas características que se pueden remarcar son:

  • Dibujo del papel y márgenes.
  • Rejilla de referencia.
  • Salto sobre rejilla (rejilla magnética o pegadiza).
  • Movimiento de objetos.
  • Selección de múltiples objetos.
  • Movimiento de múltiples objetos.
  • Redimensionamiento de objetos usando 8 puntos, 4 cardinales y 4 diagonales.
  • Deformación de objetos usando puntos de control específicos.
  • Creación de nuevos objetos y extensión de existentes de manera simple.
  • Buen abuso de objetos.
  • Conceptos geométricos fáciles de entender.
  • Soporte de código de barras (esta característica requiere compilar algunas piezas escritas en C).
  • Gráficos estadísticos basados en PyCha (barras horizontales, verticales y apiladas, circulares, líneas y puntos).
  • Capacidad de exportar a PDF y PNG.
  • Soporte reciente y experimental de Python 3.x y GTK+ 3.x.
  • Soporta internalización para traducir a múltiples idiomas, actualmente en inglés, español y ruso (gracias a Denis Ivlev).

MOF

https://jmouriz.github.io/mof

MOF significa Mockup Outside Framework (Maqueta Fuera del Marco de Trabajo) y es un pequeño archivo PHP (~3,7Kb) para que incluyas en tus proyectos en la etapa de fabricación de la maqueta. Incluye algunas funciones básicas que serán de utilidad para:

  • Cifrar y comparar contraseñas cifradas de forma más o menos segura (password).
  • Escribir y leer estructuras de datos complejas en archivos (store/restore).
  • Iniciar y cerrar sesión (login/logout).
  • Verificar si un usuario está autorizado (logged).
  • Proteger las páginas con acceso restringido (protect).
  • Leer datos suministrados por el usuario sea por GET o POST (input).
  • Contestar pedidos con datos en notación JSON (json).
  • Contestar pedidos con estilos CSS (css).
  • Leer archivos especificando un contenido de contingencia (read).
  • Redireccionar (redirect).

MOF contiene una serie de funciones mínimas de jugete útiles especialmente para hacer bosquejos de nuevas funcionalidades sin lidiar con bases de datos, modelos y sentencias SQL y olvidarse de las sesiones. Se puede usar dentro o fuera de un marco de trabajo aunque fuera del marco de trabajo se refiere a que no debe ser usado en producción. Consume malas prácticas en favor de prestar una funcionalidad sencilla al programador para la confección de bosquejos de código útiles para maquetar controladores o contestar pedidos de la interfaz frontal.

Mount VDI

https://raw.githubusercontent.com/jmouriz/shpc/master/tests/mount-vdi.bash

Mount VDI es un montador de imágenes de disco VDI de VirtualBox escrito en Bash. Permite convertir las imágenes de tamaño variable en tamaño fijo para poder montarlas. Aparte de su funcionalidad sirve como ejemplo para aprender a escribir Shell Scripts de calidad.

dia-to-sql

https://jmouriz.github.io/dia-to-sql

dia-to-sql es un pequeño código escrito en Perl que convierte un diagrama de dabe de datos (ER) de Dia a SQL. Está basado en el módulo de Perl Parse::DIA::SQL pero no lo usa. A diferencia de éste, dia-to-sql agrega la característica de reconocer las líneas de relación entre tablas calculando por aproximaxión a que columnas se refieren. No encontré hasta hoy alguna herramienta que lo haga ya que las relaciones de los diagramas de base de datos de Dia no incluyen datos acerca de las columnas que relacionan sino que conectan las tablas por puntos de conexión preestablecidos en el borde la de caja que contiene la tabla. dia-to-sql intenta calcular geométricamente por aproximación a que columna se refiere la relación según el punto de unión al que se conecta.

dia-to-sql intenta convertir esto:

en esto:

Bienvenidos a probarlo, espero les sea de utilidad

Más desarrollos

En https://github.com/jmouriz encontrarás mi perfil completo con todos los repositorios.

Ideas

Web Widgets

https://github.com/jmouriz/jmouriz.github.io

Las ideas son para mí la segunda razón de la locura. Éstas afectan mi producción a medida que aumentan y me atormentan. Por eso no puedo producirlas a todas. Concretar una obra lleva tiempo y esfuerzo. Así que sólo me voy a focalizar en la más reciente y actualmente activa.

Como mencioné en el inicio, este sitio esconde algunos secretos y es el resultado de un experimento de laboratorio que estoy desarrollando en la medida que el tiempo me lo permite. Para los más ansiosos, pueden ver el código fuente de esta página en https://github.com/jmouriz/jmouriz.github.io/blob/master/index.html para que se hagan una idea de qué se trata. El concepto está inspirado en Polymer, un proyecto que pretende ayudar a la construcción de componentes reutilizables en aplicaciones web híbridas. A partir de la edición 2015 de ECMAScript encuentro que JavaScript finalmente tiene un nivel más que aceptable a la hora de desarrollar aplicaciones. Estos condimentos, que se fueron gestando con el correr de los años, me empujaron a desarrollar el concepto de este sitio. Debajo del capó, es una simple página compuesta por varios componentes reutilizables. A estos componentes se les llama widgets.

Para resumir, este sitio está compuesto por un conjunto de widgets reutilizables en la construcción de aplicaciones híbridas, sean web, móviles o de escritorio. Cada widget es una página definida en lenguaje HTML con su definición completa, es decir, encabezado, estilos y código JavaScript. De forma tal que funcionan de manera independiente o en conjunto dentro de una aplicación. Al mismo tiempo cada widget incluye estilos propios seleccionados por clase donde cada selector pertenece a un espacio de nombres privado independiente del resto. Esto significa que los estilos no se mezclan entre widgets aún siendo de la misma clase a menos que se definan globalmente para todo el sitio.

Con esta idea pretendo desarrollar aplicaciones un minutos para aumentar la producción logrando un nivel de prolijidad y estilo de código que se pueda describir como impecable a la hora de escribir aplicaciones profesionales.

En el transcurso de estos meses iré trabajando para atar algunos cabos y lograr la primera versión 100% funcional. Aún no existe un repositorio formal de fuentes. Invito a los más ansiosos a bajar esta página si quieren investigar más al respecto para desarrollar, dar forma y aportar más ideas al concepto.

Si estás interesado en producir aplicaciones híbridas, dejo algunos enlaces para comenzar:

Lamentablemente no todo es color de rosa y una aplicación híbrida no es la excepción. Claramente existen pros y contras a considerar en el momento de decidir el camino a tomar en un desarrollo. Entre éstos, puedo destacar:

Contras

  • Una aplicación híbrida ocupa más espacio que una nativa de las mismas características. Que sea portable implica incluir componentes comunes que generalmente reemplazan componentes propios del sistema operativo donde se va a ejecutar.
  • Son mucho más lentas. Y si bien en este punto me gustaría decir que son ligeramente más lentas, tengo que admitir que el consumo de recursos es mucho mayor y requieren de hardware más costoso.
  • La producción inicial es mucho más costosa. Y como regla, la producción es siempre más que el doble de costosa que una aplicación nativa. No es lo mismo compilar uno o varios archivos fuentes y enlazarlos con las bibliotecas provistas por el sistema operativo que compilar y enlazar varios archivos fuentes para generar una aplicación mucho mayor que a su vez va a ejecutar la aplicación final que se va a distribuir.

Pros

  • Una aplicación híbrida es portable de manera casi transparente a múltiples plataformas. Se programa una vez y se producen binarios para todas las plataformas. Los enlaces que suministré anteriormente permiten a una aplicación híbrida generar paquetes para Android, iOS, Windows Mobile, Microsoft Windows, Linux y MacOS. Y esta es una de las más grandes ventajas que podemos encontrar en una aplicación de este tipo.
  • Del punto anterior podemos concluir que se necesita un lenguaje único, en este caso JavaScript y por supuesto HTML. No es necesario conocer lenguajes propietarios o incurrir a una multiplicidad de idiomas. En efecto, si quisiéramos desarrollar una aplicación para Android, tendríamos que escribirla en Java, para iOS o MacOS en Objective-C, para Linux y Windows en C o C++, incluso aquí si bien es el mismo lenguaje las bibliotecas son completamente diferentes con lo cual se escribe la misma aplicación casi dos veces para que funcione en ambos sistemas.
Contacto

Juan Manuel Mouriz <jmouriz@gmail.com>
Desarrollador de software.
Teléfono: 15-4085-4863