18 Apr 2016

Mis tablas Firebird en un txt

La mayoría de mis programas almacenan sus datos en una base Firebird y si bien hasta ahora los clientes que “repetían” base de datos eran pocos (un problema derivado del desarrollo a medida), desde el año pasado empecé a trabajar seriamente en un par de productos enlatados, lo que me llevó a organizarme de otra manera tanto en la forma de entregas como en el proceso de seguimiento de errores. Derivado de esta nueva forma de trabajo, con actualizaciones frecuentes, seriadas y 100% remotas, me encontré con que más de una vez el script de actualización falló en algún punto y la instalación quedó sin crear tablas o alterar campos.

Anteriormente, una forma de solucionar esto era o pidiéndo por correo el archivo fdb (en el caso de bases pequeñas) o yendo al domicilio del cliente y revisando el script en persona (el acceso remoto también cuenta como “ir a hacerlo al domicilio” :) ). Lo cual es altamente ineficiente y poco escalable en la nueva estructura de desarrollo que estoy montando

Escribí scmFirebird como parte de una idea un poco más ambiciosa, pero como está “funcionando”, ya lo publiqué en GitHub y dejo un enlace al ejecutable. Esta es una versión muy verde (de momento levanta solamente las tablas y sus campos, la idea es que levante SP, triggers, vistas, etc), pero me sirve para empezar a probar otra parte del desarrollo que justamente trabaja con el archivo de salida generado por scmFirebird.

La forma de uso actualmente es solo via GUI (en breve sale la parte que trabaja desde línea de comandos). Para no hacer lío de librerías raras, usé Lazarus y sus componentes de conexión, y a fin de simplificar esta primera versión (no quería tener muchos archivos dando vueltas para una tarea tan simplona), todo el código está en el mismo formulario principal. El programa en si lo único que hace es ejecutar una consulta SQL que levanta la información y la parsea en un archivo txt.

El formato del archivo de salida es:

Tipo de Objeto; Nombre del Objeto; Nombre de la columna; tipo de dato; Longitud del tipo de dato; Precisión del tipo de dato

Tipo de Objeto por ahora es siempre T, de Tabla. A medida que produzca más objetos, se van a ir agregando identificadores. El nombre del objeto, al ser de tipo T, es el nombre de la tabla. El resto de los campos se explican por si solos.

La versión compilada para windows la dejo en este enlace, mientras que el código fuente está en el repositorio de GitHub.

Ideas y aportes, son siempre bienvenidos :)

07 Mar 2016

Recursos de C++

Cerca de fin del año 2015 decidí volver a asomarme seriamente a C++. Más que para tenerlo como una referencia y el conocimiento necesario para meter mano en un proyecto ajeno, para profundizar y así poder avanzar en un proyecto 100% propio.

Para esto, decidí actualizar los conocimientos oxidados (los libros que venía usando eran todos anteriores al año 2011..) y la verdad que la sorpresa que me llevé fue más que grata al descubrir un lenguaje totalmente renovado y que facilita muchísimo tanto su uso por parte de programadores recién inciados como el desarrollo más veloz de aplicaciones sin perder la robustez del lenguaje.

Para empezar a leer libros sobre el tema, arranqué con uno de Stroustrup Programming – Principles and Practice Using C++ , ya que en su momento (año 2002~2005) leí la edición especial del libro The C++ Programming Language” y si bien está muy bueno como libro de consulta (teniendo siempre la última versión ), es un ladrillo para aprender el lenguaje.

Volviendo a Programming – Principles and Practice Using C++, si bien me gustó el enfoque y el lenguaje, el mismo Bjarne Stroustrup avisa en el prólogo que es un libro para un curso de no menos de seis meses y es para personas que se quieran iniciar en el mundo de la programación desde cero. Por lo menos en mi caso, el exceso de simplificación se fue tornando pesado (el libro asume que el lector nunca programó), haciendo que el avance del libro fuera bastante lento.

Después llegué al libro C++ Primer, un libro que no solo me encantó, sino que no paro de recomendar a todo el que se me cruza. Está muy bien explicado, sabiendo cualquier otro lenguaje se puede leer tranquilamente, avanza poco a poco profundizando en cada tema y con un apartado cada tanto señalando las novedades a partir de la versión C++11. No se si se puede llamar un libro de referencia, es mas bien un libro de lectura obligatoria para los que como en mi caso, se quedaron con C++ hasta antes del 2011 y quieren tener un acercamiento al lenguaje que resalte todas las novedades incluidas en las últimas versiones de C++. Toca todos los temas básicos del lenguaje sin enredarse ni repetirse con definiciones ni perder mucho tiempo con cada tipo de dato, método o estructura.

Por el lado de los blogs sobre C++, los que estoy leyendo actualmente son: Simplify C++, El blog de Meeting C++ y Andrzej’s C++ blog

Un párrafo aparte merece el podcast CppCast, contenido excelete y ya con un año de vida y 47 episodios publicados

26 May 2015

Sitio Nuevo

Este es un nuevo espacio dedicado exclusivamente a los temas técnicos. Para mis divagues sobre motos, libros, viajes y demás, sigue funcionando el sitio normal de cerodriguez, así que veremos qué sale, ya que hace rato que no escribo sobre temas técnicos.

Para arrancar, y a modo de empezar con algo simple, vamos con la presentación del blog. El sitio es estático, es decir, genero todos los html en mi computadora y los subo al servidor web. Para hacer esto de una manera decente (sin meter mano archivo por archivo), estoy usando Hugo y escribiendo en el editor de texto usando markdown para el formato.

Por qué uso Hugo? Por simplicidad ante todo. Es un solo ejecutable, sin dependencias a instalar y que cumple con mis espectativas, que de momento no pueden ser más simples. Escribir post y publicar. Para ello, primero hice que Hugo creara una estructura básica en blanco: hugo new site ./programador.

Con esto ya tengo la estructura básica para empezar a escribir, solamente agregé a la carpeta themes uno que me gustó de los ya existentes en el sitio github para que se vea bonito y a escribir archivos de texto en la carpeta content generando post.

Todavía me falta entender bastante cómo funciona Hugo, ya que todavía no tengo muy en claro muchas opciones, pero para arrancar ya es bastante. Ahora solamente tengo que hacer hugo para que en la carpeta public tenga todo el sitio creado listo para subirlo al servidor.

Si quiero ver cómo está quedando el sitio final, ejecuto desde la línea de comando hugo server y se ejecutará un servidor web que vía http://localhost:1313 me muestra el sitio funcionando completo.

Como se ve, usarlo es muy fácil y para probarlo no hace falta instalar ninguna librería adicional. Solo descargar el binario y ejecutarlo.

Algunas notas sobre el uso

El formato de una entrada es un archivo escrito en formato markdown, con el siguiente encabezado

+++
date        = "2015-05-26"
title       = "Sitio Nuevo"
description = "Detalles sobre este nuevo sitio"
tags        = [ "general", "web", "hugo"]
slug        = "sitionuevo"
author      = "Magoo"
+++

Contenido de la entrada...

En el encabezado se pueden agregar o quitar parámetros, incluso con la intrucción hugo new ./sitionuevo.md se crea el archivo sitionuevo.md con algunos de los campos ya escritos (por ejemplo la fecha y hora). La forma de crear los archivos en blanco sobre los cuales se escribirá queda a gusto de cada uno, ya que no hay que olvidarse que estamos trabajando con archivos de texto, así que tenemos bastantes libertades sobre su generación.

Algunos de los themes del repositorio necesitan respetar cierta configuración en la generación de las entradas y las categorías así que si al momento de descargarlo y tratar de usarlo no se ve la información en forma correcta, es probable que tengamos que ir al archivo README.md para ver si no nos está faltando configurar algo o declarar algún parámetro.

El archivo de configuración que genera al crear la estructura en blanco con hugo new site ./rutaAlSitioEnDisco es bastante básico y completo. Leyendo un poco la configuración se pueden agregar parámetros.

Actualmente, mi archivo de configuración config.toml es:

theme = "purehugo" 
baseurl = "http://www.programador.com.ar/"
languageCode = "es-AR"
title = "Magoo Carlos Enrique Rodriguez"
uglyUrls = false 
verbose = true 
verboseLog = true 
watch = false 
paginate = 5
paginatePath = "page"

[params]
  description = "Un programador"
  twitter = "magooracss"
  github = "magooracss" 
  

Con el tiempo voy a investigar más en la configuración y los manejos de código en el theme de Hugo, ya que actualmente estoy más que contento con esta forma de generar contenido para la web.

23 Jan 2015

Acerca de mi

Quién soy?

Soy Carlos Enrique Rodriguez, aunque todo el mundo me conoce como Magoo. Nací en la ciudad de La Plata - Argentina, una madrugada del 28 de abril de 1974, y arranqué a programar en el viejo Basic a los 11 años. Por suerte la vida ha sido generosa conmigo y siempre he podido dedicarme a la informática.

Actualmente trabajo en forma independiente, “freelance” suena más cool :), aunque trato de autoproclarmarme empresa escondiéndome atrás de RACSS para los casos en los que por la envergadura o diversidad del trabajo tenemos que ser varios los que participemos.

Qué programo?

Actualmente estoy programando en Lazarus (como una evolución al software libre desde Delphi) para las aplicaciones de escritorio y en PHP (a pelo y con frameworks, dependiendo de lo viejo que sea el desarrollo :) ) para todo lo que sea programación en la web.

También uso Python, Ruby y C++, aunque en menor escala y la verdad es que actualmente no tengo un proyecto activo hecho 100% en alguno de esos lenguajes, aunque de a poco están surgiendo.

Mis enlaces

  • Mi sitio personal: Un lugar donde publico lo que se me cruza por la cabeza y no tiene necesariamente relación con la programación
  • Twitter: Mi cuenta de Twitter
  • Github: Mis repositorios en GitHub
  • Bitbucker: Mis repositorios en Bitbucket
  • Autobombo: Un poco de autobombo gracias a los chicos de Oficina Cero
  • Por correo electrónico me pueden encontrar en: magoo @ programador . com . ar