jueves, 2 de abril de 2009

CodMACs: Una aplicación que programa por vos

CodMACs

Creating an application, easily in 4 steps:


1 - Reads your database and builds the XML file (containing DataBases Structure) .
The XML file is editable. You can use plain xml or "Treeview-Like" edition.
2 - Using the Editor + Highlighter, create .COD file which contains your own source code (in any language) + the CodMAC code embedded .
3 - Based on the .COD and XML Structure files, generates automatically all the source code your application will need.
4 - Finally, you can edit the result source code.

Simple menus will allow you to accomplish all these actions easily, very quickly, increasing your productivity.


Si, parece una mentira. Pero no. Es cierto. O casi. No es que la aplicación "programe" por si sola sino que, basandose en un código fuente básico (que es la base de tus programas) + un sistema de tags y marcas embebidos dentro del mismo, se logra generar código fuente en segundos.
Por ejemplo, si uno programa en Java, el template tendría la base en dicho lenguaje y, además, el código CodMAC embebido. El programa genera un resultado que es, sencillamente código fuente en Java. Se reemplaza el código escrito en CodMAC. (así como PHP genera puro HTML, por poner un ejemplo paralelo) por el resultado en el lenguaje deseado (en este caso, Java)

Cómo funciona?? Acá es donde puedo explicarlo bien debido a que soy el desarrollador.
Muchas veces en los sistemas o programas comerciales, las aplicaciones (tipo ingresos en grid, ABMs, etc) son similares. Esto es lo que aprovecha CodMACs.
La aplicación posee tres elementos:

1- Editor de texto para templates con iluminador. Ejemplo, un programa tuyo en C con los "tags" o marcas propios de CodeMACs.
2- Información acerca de las bases de datos. Esto es necesario tenerlo en formato XML. El programa posee además un módulo de conexión (por ahora sólo con SQL server) que toma las bases de datos deseadas y genera la documentación necesaria en el formato XML.
El mismo se puede editar y visualizar de forma plana y con un editor tipo TreeView.
3- Editor de texto para "Funciones" o MACROS si se las quiere llamar así. También tiene iluminador.

Entonces, primero tomamos un pedazo de un programa nuestro. La base, digamos. Entonces, tomamos el código fuente base y, donde haya referencias a una tabla, o campos se lo reemplaza por marcas de propias de CodMACs, ya sean marcas simples, funciones o Loops. Todo eso posee CodMACs.

Detallo algunas:
@@!FileName : El nombre del archivo
@@!TableName : El nombre de la tabla
@@!Index : Un índice, sirve como contador dentro de un LOOP
@@LOOP : Marca de inicio de loop. Loopea una vez por cada campo de la tabla.
@@/LOOP: Marca de fin de loop.

Entonces, dentro de nuestro código fuente metemos estas marcas. Sería un pseudo lenguaje embebido.
Es decir que si una tabla se llama Clientes, y tiene los campos clie, nomb, cuit, en todos lados donde aparezca la marca @@!TableName se reemplazará por el nombre de la tabla, en este caso Clientes. Y si ponemos un loop así:

@@LOOP
Const C@@!Identifier as integer = @@!Index
@@/LOOP

Nos quedaría:

Const Cclie as integer = 0
Const Cnomb as integer = 1
Const Ccuit as integer = 2

Además, puede pasar que
deseemos hacer algo en un caso, por ejemplo, si el campo es numérico o si el campo es de texto. Eso se resuelve con las funciones. Un ejemplo de una función:

BEGIN Function Defitipo2(Value)
CASE 'nvarchar['+* || tString
CASE 'datetime' || tsFecha
CASE 'smalldatetime' || tsFecha
CASE 'money' || tNumeric
CASE 'real' || tNumeric
CASE 'int' || tNumeric
END Defitipo2

Si el campo es int, vemos que pone tNumeric. Entonces, poniendo

@@CASE(@@!Format,Defitipo2)

Estas funciones son totalmente editables por el usuario. Es decir, pueden haber tantas como se desee y se creen en un apartado especial. Sería igual que crear funciones en cualquier lenguaje de programación.
En el ejemplo, le estamos diciendo con @@CASE que se trata de una función. Con @@!Format es que le estoy pasando ese valor a la función, y Defitipo2 es el nombre de la función. En ese caso le estaría pasando a la función DefiTipo2 el formato del campo en el que estoy. Y ya vimos lo que hace, si el campo fuera int, todo el texto

@@CASE(@@!Format,Defitipo2)

Sería reemplazado por:

tNumeric

Una vez que tenemos el "template" lo guardamos como extensión cod. Luego, generamos la documentación sobre la/s tabla/s de nuestra/s base/s de datos (en un XML). Ahora, podemos si se desea guardar el proyecto (un archivo con extensión mrt) esto nos permite en un futuro, abriendo el *.mrt, tener el xml y el cod que queramos.
Una vez que tenemos el XML y el cod, le tememos que decir al programa que nos genere un codigo fuente. Basicamente, se elige las tablas que queremos, la extensión que deseamos y listo.

La estructura que usé en el XML es muy simple.

Postearé un video y, cuando esté más maduro, la primera beta. Ahora, dejo unos screenshots del CodeMAcs trabajando. En este caso se puede ver código fuente en VB6 con código de CodMACs embebido.
Saludos


ScreenShots:


Comparación de código fuente generado(visto en notepad) contra el código que lo generó dentro de CodMACs.
Se puede ver como un loop cambió por una lista grande de los campos.



CodeMACs guardando un archivo frm generado desde un template.



Selector de tablas. En este caso hay una sola.



Editor de Funciones.


Vista de XML



Editor de templates con menu de ayuda(insertando tags)



Icono principal de la aplicación.

Web Oficial: http://codmacs.tk