miércoles, 22 de julio de 2009

viernes, 17 de julio de 2009

Teorema que demuestra que está todo inventado


Cuando pensé en publicar esto no supe si ponerle como título "La máquina cuantica" o "Teorema que demuestra que está todo inventado" Me decidí por el segundo porque me pareció mas gracioso.

Estaba pensando (cosa rara) acerca de las combinaciones posibles y se me vino a la mente cierto experimento mental:

Supongamos que tengo un programa que genera todas las combinaciones posibles (de todos los valores ASCII posibles) y de todos los tamaños posibles, es decir, 0 hasta X.

Antes de seguir, propongo que lean esto:
Infinitos Monos con Maquinas de Escribir

Bien, entonces, pensemos de nuevo en lo que escribí más arriba.
Tenemos un programa corriendo que genera un archivo con todas las combinaciones posibles de caracteres ASCII iniciando en un tamaño de archivo y progresando el tamaño de 1 en 1 hasta agotar las combinaciones.

Sería logico pensar que, en algún momento, algunas de las combinaciones resultantes van a resultar en un archivo de texto legible o en imagenes o en videos o en programas ejecutables, etc.

La cantidad de combinaciones es monstruosa y que seria casi imposible separar que archivo es "algo" y que es "basura". Ademas, la velocidad de procesamiento hace que sea casi interminable, faltarían vidas enteras para analizar toda la data generada y, la mayoría será "basura"

Pero, olvidemos por un momento estos pormenores, suponiendo que logré todas las combinaciones posibles desde 0 a 1GB. Y supongamos que, con algun metodo, separé lo que es basura de lo que es "algo" y lo clasifiqué en:

- Imagenes (jpg, bmp, gif, etc)
- Peliculas (avi, mov, mpeg, etc)
- Musica (mp3, wav, etc)
- Texto

Esto quiere decir que, si tengo todas las combinaciones posibles tendré, todo lo que esté en el rango de 0 a 1GB. O sea, si el tema "Welcome to the Jungle" en formato mp3 pesara 5MB, estaría allí! Lo mismo, si la película "Sin City" en formato avi pesara 780MB, también estaría allí! Loco?

Más loco: también estarían las fotos (si están en el rango de 0 a 1GB) de mis vacaciones y de las tuyas (lector)

Más escalofriante: también encontraríamos música que nunca fue escrita, peliculas que nunca fueron filmadas, textos y programas jamás escritos! De hecho, habría fotos de nosotros en situaciones que jamás pasaron con gente que ni conocemos!! De hecho, si estuviera en el rango 0 a 1GB, el código fuente del windows vista también estaría allí...

De hecho, este artículo también estaría allí.

Entonces, será que todo en realidad ya existe? O sea, ya existe en cuanto al abanico de lo potencial. No será que cuando sacamos una foto, escribimos algo, filmamos un video, etc, no estamos "creando" sino que estamos "descubriendo", "eligiendo" de una lista casi infinita de posibilidades?

Que pasaría si se pudiera llevar a cabo algo así? Supongamos que tuvieramos computadoras muchisimo mas potentes, capaces de analizar y manejar esa tremenda cantidad de datos. Que pasaría? Estaría, realmente, todo "inventado"?


martes, 7 de julio de 2009

Kit Anti Zombies

KIT ANTI-ZOMBIE 2000





















Nadie es ajeno a los tiempos que corren: pandemias, virus, etc. Nunca se sabe cuando todo puede degenerar en zombies atacandonos y deseando nuestros cerebros. Es por eso que desarrollé el kit anti zombie para estar preparados.
El mismo incluye:

- Máscara de gas. Especial para mantenerse a salvo del contagio
- Escopeta recortada. Ideal para volar cabezas zombies, muy portable y comoda. (municiones no incluidas)
- 150 latas de conserva con alimentos varios. Necesario si se tiene que estar días sin salir a la calle.
- 2 walkie-talkies para comunicarte con tu compañero/a sobreviviente.
- 500 historietas de Mafalda. Es necesario un poco de humor para pasar el rato. Ademas, reir, levanta la moral.
- 1 botella de Vodka. Por su composicion quimica es ideal para fabricar cocteles Molotov y arrojarselo a los reanimados. O en su defecto, empedarse para olvidar. Tambien es util para cauterizar heridas (pero es mejor empedarse).
- Peine o peineta. Porque, vamos, habrá zombies, será el apocalipsis pero no hay razón por la cuál no verse bien.
- Soga. Los usos posibles son miles. Muy útil para colgarse en caso de desesperación.
- Cuchillo de combate (onda rambo). Idem anterior. Además es vital para traicionar a tu compañero/a sobreviviente en caso de escasez de alimentos.
- Cd y reproductor de Cds con el tema thriller de MJ (r.i.p.). Sirve para generar ambiente, además, a los zombies parece gustarles y quizá sea un buen medio de distracción.
- 2 granadas de manos. La utilidad es obvia. También es útil para suicidios masivos.

El kit es personalizable a gusto del cliente. Los precios varían según el combo elegido y se puede encagar por teléfono al 444-5584

EDITADO: Vodka agregado a pedido de Gustavox.

miércoles, 3 de junio de 2009

Inicio "lento" en Debian 5 (Lenny)

Tengo Debian Lenny y me encontré con un problemita (no es grave para nada, pero me gustaría compartir la solución)

Resulta que cuando iniciaba tardaba un poco. Quedaba como frizado en dos lugares, que son:

Código:
Starting Common Unix Printing System: cupsd.
Y después en:

Código:
Starting MTA
Buscando (googleando) encontré como deshabilitar esos (y otros) servicios que quizá no usemos. En mi caso, cupsd (es un servicio de impresión) no tenia uso. El MTA (un servicio relacionado con el mail) tampoco.
Más info:
MTA
cupsd

El procedimiento es simple:

1) cd a /etc/rc2.d
2) Hacer un mv Snombre Knombre.

Ejemplo:

Código:
mv S50exim4 K50exim4
Ahora Lenny inicia en segundos.

Cómo usar PHP como lenguaje de script de consola?

El otro día programando una aplicación web (en PHP) que tenía, por un lado, una búsqueda hecha en PHP con MySQL y por otro lado necesitaba de un daemon. Éste es quién recolectaría la info y la guardaría en MySQL.
Me dispuse a escribirlo y pensé en Perl o Python (por tener algo de portabilidad windows/linux) , pero luego, lo pensé y me pregunté:
Ya que tengo php, no lo puedo usar como lenguaje de script de consola??? La respuesta es SI.


En Linux:

Instalar el intérprete
apt-get install php5-cli

Luego armamos el archivo con un hashbang al comienzo como cualquier otro script (#!)
Ejemplo:

#! /usr/bin/php5


Listo. Al ejecutarlo nos devolverá la salida "Esto es una prueba".


En Windows:

En mi caso uso phptriad y el path al php está en:

C:\apache\php\

Entonces, puedo armar un bat (por ejemplo) y llamar a mi script así:

cd C:\apache\php\
php -f C:\PHP\pru.sh

Es decir, con cd me paré en el directorio del php.exe. Con php -f le pasé como parámetro el script que está en pru.sh. -f es para decirle que queremos parsear un file.
Hay otro métodos (por ejemplo, agregar el path del PHP a la variable de entorno path)

Agrego un link interesante:
Instalación y configuración básica de LAMP en Debian

LAMP = Linux Apache MySQL PHP (o perl o python)
Qué es LAMP?

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