sábado, 28 de julio de 2012

Partición de tablas con MySQL


En sistemas grande o viejos sucede que existen tablas muy grandes, son tablas que cuando hacemos un select y tenemos que recorrerlas impacta en la performance. Son las tablas que tratamos de no tocar cuando hay que desarrollar una nueva funcionalidad.

Si utilizamos oracle o postgres o alguna otra base de datos podemos partir estas tablas de modo que la información vieja quede en otras particiones y podamos trabajar con un rango menor de información, mejorando así la performance de nuestro sistema.

MySQL 5.1 también permite partir tablas!!

Existen 2 tipo de particiones vertical y horizontal, es decir por filas o columnas.


Vamos a empezar con preguntas frecuentes...

Cuando particionar tablas? Cuando tenes una tabla grande.


Que es grande? Depende del servidor que tengas, de cuanto va a crecer la tabla, etc...


Cuando no esta bueno particionar la tabla? Cuando consultas información vieja todo el tiempo, no vas a ver el cambio, en el caso de particion por fila. Y no es conveniente hacer partición por columna si siempre recupero todas las columnas.


Lo aplico en la base de producción y veo que onda? No seas pavo, lo más conveniente es aplicarlo en un servidor de prueba y probar. Podes jugar con la cantidad de registros de la partición; ver cuales son las tablas que conviene partir. Para esto lo ideal es tener una batería de test de performance y medir, medir y medir... Y al final aplicar en producción.


Como particiono? Buena pregunta, ahora voy a explicar un poco más. Como imaginaran la particiones son por tabla, es decir parto una tabla en n partes, el numero n impacta en la performance por lo tanto hay que elegir el mejor posible y ir probando. Para partir una tabla necesito un criterio de partición; por ejemplo las facturas más viejas a esta fecha se encuentran en una parte; las más viejas que esta otra fecha en otra y así …

MySql implementa el particionado horizontal. Básicamente, se pueden realizar cuatro tipos de particionado, que son:

  • RANGE: la asignación de los registros de la tabla a las diferentes particiones se realiza según un rango de valores definido sobre una determinada columna de la tabla o expresión. Es decir, nosotros indicaremos el numero de particiones a crear, y para cada partición, el rango de valores que serán la condición para insertar en ella, de forma que cuando un registro que se va a introducir en la base de datos tenga un valor del rango en la columna/expresion indicada, el registro se insertara en dicha partición.
  • LIST: la asignación de los registros de la tabla a las diferentes particiones se realiza según una lista de valores definida sobre una determinada columna de la tabla o expresión. Es decir, nosotros indicaremos el numero de particiones a crear, y para cada partición, la lista de valores que serán la condición para insertar en ella, de forma que cuando un registro que se va a introducir en la base de datos tenga un valor incluido en la lista de valores, el registro se insertara en dicha partición.
  • HASH: este tipo de partición esta pensado para repartir de forma equitativa los registros de la tabla entre las diferentes particiones. Mientras en los dos particionados anteriores eramos nosotros los que teníamos que decidir, según los valores indicados, a que partición llevamos los registros, en la partición HASH es MySql quien hace ese trabajo. Para definir este tipo de particionado, deberemos de indicarle una columna del tipo integer o una función de usuario que devuelva un integer. En este caso, aplicamos una función sobre un determinado campo que devolvera un valor entero. Según el valor, MySql insertará el registro en una partición distinta.
  • KEY: similar al HASH, pero la función para el particionado la proporciona MySql automáticamente (con la función MD5). Se pueden indicar los campos para el particionado, pero siempre han de ser de la clave primaria de la tabla o de un índice único.
  • SUBPARTITIONS: Mysql permite además realizar subparticionado. Permite la división de cada partición en múltiples subparticiones.

Luego de toda esta teoría solo quedan ganas de partir, de partir tablas! Y se parten así:

CREATE TABLE by_year (
   d DATE
)
PARTITION BY RANGE (YEAR(d))
(
PARTITION P1 VALUES LESS THAN (2001),
PARTITION P2 VALUES LESS THAN (2002),
PARTITION P3 VALUES LESS THAN (2003),
PARTITION P4 VALUES LESS THAN (MAXVALUE)
)

En el siguiente link queda una muestra de particiones por diferentes tipos:



InfoQ, la información de la cola?


InfoQ es una pagina muy buena donde esta la "papa" de las novedades del software. Pero mirando la pagina vi que la Q es de Queue; por lo tanto sería infoQueue que en castellano sería infoCola. Ahora entiendo porque no esta en castellano esta pagina. Busque porque el nombre de la pagina y no encontré nada ... Alguien sabe porque el nombre de esta pagina?

Dejo link:
http://translate.google.com.ar/#en/es/info%20Queue
http://www.infoq.com/

viernes, 27 de julio de 2012

Descarga el ebook gratuito de Windows Server 2012

Inesperado post, la verdad es que no me siento orgulloso de publicar tecnologias microsoft (solo cuestion ideologica). Pero cuando hacen cosas bien, hay que alentarlos. En este caso microsoft nos regala un libro sobre windows server. Me llego esto en un mail:

Descarga y aprende sobre todas las novedades que trae la versión RC de Windows Server 2012, el libro tiene información directa de la gente de producto y nos desvela los motivos de gran número de las funcionalidades del producto.










Dejo el link:  http://click.email.microsoftemail.com/?qs=480302870c751747f83b2b6e1da543ba0a781d8678618958bf0c19bf77902896d4e4b0b91af58e7d

jueves, 26 de julio de 2012

Crear un proyecto Apache Wicket con Apache Maven



La idea es hacer un proyecto maven de prueba que utilice Wicket, por ejemplo para los que comienzan a programar. 

Instalación de JDK

Bueno tenemos que bajar la JDK de java de aquí: http://www.oracle.com/technetwork/java/javase/downloads/index.html para este tutorial vamos a instalar la JDK 6. Luego de instalarlo tenemos que crear una variable de entorno JAVA_HOME y además agregar en la variable PATH, el path de la JDK.

En linux debemos hacer

export JAVA_HOME=/opt/java

si instalamos java en  /opt/java y luego seteamos esta variable en PATH

export PATH=$PATH:$JAVA_HOME/bin

En Windows sería así:

set JAVA_HOME=C:\java

set PATH=%PATH%;%JAVA_HOME%\bin

Instalacion de maven.

Vamos a bajar Maven de http://apache.xfree.com.ar/maven/binaries/apache-maven-3.0.4-bin.zip

Luego lo guardamos en una carpeta por ejemplo en linux /opt/maven y en Windows c:\maven ahora descomprimimos el zip y nos va quedar una carpeta con el siguiente nombre: apache-maven-3.0.4

Ahora tenemos que configurar la variable MAVEN_HOME esta forma:

En linux :
export MAVEN_HOME=/opt/java
export PATH=$PATH:$MAVEN_HOME/bin

En windows sería así:
set MAVEN_HOME=c:\maven
set PATH=%PATH%:%MAVEN_HOME%\bin

Si todo sali bien al hacer en una consola

mvn -version

Y debe tirar algo parecido se:
Apache Maven 3.0.4 (r1232337; 2012-01-17 05:44:56-0300)
Maven home: /java/apache-maven-3.0.4
Java version: 1.6.0_25, vendor: Sun Microsystems Inc.
Java home: /java/sdk/jdk1.6.0_25/jre
Default locale: es_ES, platform encoding: UTF-8
OS name: "linux", version: "3.2.0-26-generic", arch: "i386", family: "unix"

vamos ahora a hacer nuestro proyecto wicket :
mvn archetype:generate
Ahora nos preguntara un numero, deben escribir el de wicket, en mi caso es el 308; de igual forma busquenlo.

308: remote -> org.apache.wicket:wicket-archetype-quickstart (-)

Y nos va a preguntar el groupId y el archetypeId puede ir lo que quieran por ejemplo: com.ejemplo, prueba.

y listo tenemos nuestro proyecto; ahora a entrar a la carpeta y hacer:

 cd miproyecto
 mvn clean install y luego mvn eclipse:eclipse

Con esto tenemos todo listo para importar nuestro proyecto a Eclipse; abrimos eclipse y vamos al workshop donde en el panel de Package Explore hacer menu contextual y poner import...
En la ventana que aparece elegimos "General -> Existen Projects into Workspace" y luego ponemos la carpeta del proyecto y listo!


Ahora a configurar la variable de entorno M2_REPO en eclipse, tenemos que ir a "Windows-Preference" y hay ir a "Java -> Build Path -> Classpath variables" y agregar una variable llamada M2_REPO que apunte a la carpeta .m2/repository normalmente se encuentra en la carpeta home del usuario; en windows sería la carpeta del usuario; ojo que esta oculta. 


Con todo esto tenemos el proyecto compilando, ahora a instalar Jetty para esto ir a help -> eclipse marketplace buscar jetty y instalar run-jetty-run y luego que se instale se puede correr jetty desde el debug y por defecto va a levantar en localhost:8080.


Espero que puedan hacer todo esto, sino escucho dudas. 



Apache Flex 4.8.0-incubating.


Apache anuncia la versión de Apache Flex 4.8.0 no tiene nada nuevo, solo se implemento código que antes era privativo. Para el que no conoce la historia Adobe dono Flex a Apache dando vida a Apache Flex.  La noticia de la nueva versión es una gran alegría para la comunidad que ha trabajado mucho.

Apache Flex esta incubadora pero esperamos que salga pronto. Apache Flex se distribuye con licencia Apache 2. 

Que piensan de esta noticia? Tiene sentido en un mundo gobernado por HTML 5? Apache Flex sera competidor de JavaFX? Vale la pena esta tecnología?

Dejo Link:
http://incubator.apache.org/flex/


IronJS

IronJS es una implementación de ECMAScript 3.0 en Dynamic Language Runtime DLR (es un runtime para lenguajes dinámicos de .net). IronJS fue creado por  Fredrik Holmström y permite demostrar la facilidad de uso del DLR y la potencia de Javascript. 


Dejo links: 
http://ironjs.wordpress.com/
http://www.infoq.com/news/2012/07/ironjs

Programming and human factors




Jeff Atwood el creador de Stack Overflow, tiene un blog dedicado al humor, en el cual se ríe de las particularidades de la programación; es muy recomendable.

Dejo el link:  http://www.codinghorror.com/blog/

miércoles, 25 de julio de 2012

Analiza terabyte de información con un click


Este es el slogan de Google BigQuery. Google BigQuery es un servicio web que te permite hacer un análisis interactivo de enormes conjuntos de datos-hasta miles de millones de filas. Escalable y fácil de usar, análisis de datos de gran alcance.

Google BigQuery es un servicio que permite buscar en gran cantidad de datos

https://developers.google.com/bigquery/
https://developers.google.com/bigquery/docs/developers_guide
https://developers.google.com/bigquery/docs/getting-started

Dejo un video:



martes, 24 de julio de 2012

Coursera

Es como que puedas hacer un curso de lo que se te de la gana en Michigan o Pennsylvania o Standford o Princeton o Toronto o etc... Es una buena iniciativa y sin más dejo el link:

https://www.coursera.org/courses

domingo, 22 de julio de 2012

Entity Framework ahora es Open Source!!!


Increíble el cambio de Microsoft los ultimos años pero esto, nunca lo esteraba. Entity Framework esta disponible bajo licencia Apache 2.0

Me parece un gran aporte, usan EF? que piensan que ahora sera open source?

Dejo el link:

http://www.infoq.com/news/2012/07/EF-Open-Source

viernes, 20 de julio de 2012

jueves, 19 de julio de 2012

Metasploit


Escribo este post porque nunca vi algo similar y me gusto, quede sorprendido cuando lo vi funcionando. Metasploit es un proyecto open source de seguridad informática que proporciona información acerca de vulnerabilidades de seguridad y ayuda en tests de penetración y en el desarrollo de firmas para Sistemas de Detección de Intrusos.

Entre las características podemos nombrar:



  • Es gratuito y de código abierto
  • Se actualiza constantemente (algunas veces agregan exploits a las horas de salir el full-disclosure)
  • Es altamente modificable, (con un código en ruby bastante sencillo de entender)
  • Multiplataforma (corre en los sistemas operativos mas populares)
  • Gran base de datos de exploits y auxiliares0



Nunca probé una aplicación por su grado de seguridad y eso que tengo varias hechas.  Es una falencia mía y creo del mercado en general, no probamos la seguridad intensiva.

Dan muchas ganas de usarlo.

Dejo libros:
http://www.wowebook.be/book/metasploit-penetration-testing-cookbook/
http://www.paginasprodigy.com/jez2904/files/metasploit.pdf


Y Dejo links:
http://www.metasploit.com/
http://www.dragonjar.org/completo-curso-de-metasploit-en-video.xhtml

miércoles, 18 de julio de 2012

Mi blog es CO2 Neutral

¡Desde hoy YO TAMBIÉN puedo gritar al mundo que mi blog es de impacto cero!

Participando en la iniciativa ecológica promovida por Geniale.es lograré que se plante un árbol en una zona con riesgo de desertificación.

Geniale es la web que reúne y permite hojear online todos los catálogos promocionales DE LAS TIENDAS MÁS CERCANAS A TI.


La iniciativa es muy sencilla: por cada blog o web que se une al proyecto, Geniale se planta un árbol, cuya producción de oxìgeno compensará las emisiones de dióxido de carbono que produce mi blog o web.


Según el Dr. Alexander Wissner-Gross, un activista del medio ambiente y físico de Harvard, una sola página web es responsable de la emisión de 3,6 kg de CO2 de media al año, mientras que un árbol es capaz de absorber 5 kg. El resultado final es a favor del oxígeno: gana mi blog y gana el ambiente.

Geniale.es, a través de la distribución de catálogos en formato electrónico, promueve una filosofía verde enfocada a disminuir el uso y desperdicio de papel para fines comerciales. Los catálogos más importantes y conocidos están disponibles ahora también online, como por ejemplo, Fnac, Leroy Merlin, Media Markt, y se pueden consultar no sólo en el ordenador sino también a través de aplicaciones para iPhone e iPad .

Los catálogos son muy fáciles de hojear, como puedes comprobar:
Ikea -> http://www.geniale.es/folleto/ikea
Carrefour -> http://www.geniale.es/folleto/carrefour
Decathlon -> http://www.geniale.es/folleto/decathlon

La iniciativa está teniendo una gran acogida entre los blogger. El objetivo de CO2 Neutral es plantar 1.000 árboles en 12 meses, y hoy, gracias a vuestra ayuda, hemos podido plantar un pequeño bosque que cuenta ya con 300 árboles. Si llegamos a la meta, añadiremos al total de árboles un extra como premio al activismo de los blogger españoles.

Para conocer todos los detalles sobre la iniciativa pincha aquí:http://www.iplantatree.org/project/7

Ahora quiero mi árbol!!

martes, 17 de julio de 2012

Jigsaw se va a hacer esperar...

Al parecer Project Jigsaw no va a llegar a la fecha que esta programado Java 8, por lo tanto vendrá en Java 9 o Java 8 no cumplirá la fecha de su entrega.

En fin pero creo que se preguntaran, que es Jigsaw? Bueno Jigsaw es un proyecto que intenta llevar la modularidad a Java, si estas pensando en OSGI te diría que no estas tan errado. El objetivo de este proyecto es diseñar e implementar un sistema de módulos estándar para la plataforma Java SE, y aplicar ese sistema a la misma plataforma y el JDK.

Como sabrán la JDK actual es monolítica; por ejemplo una aplicación que utiliza SWT debe de igual manera  bajar el sdk con Swing; aunque no lo ocupe en su vida. El proyecto Jigsaw dará fin a todo esto y a la vez nos proveerá un estándar de modularización. 


A esperar un poco más entonces!! 


Dejo link: 
http://openjdk.java.net/projects/jigsaw/

Curso de Coffeescript


Excelente curso de Coffeescript un framework que extiende javascript y forma su propio lenguaje.

Dejo link:
http://coffeescript.codeschool.com

Jquery Air



Un curso para hacer los primeros vuelos con jquery. Si no saben lo que es jquery es un framework javascript que nos hace la vida mucho más fácil.

Dejo el link:
http://jqueryair.com

domingo, 15 de julio de 2012

Cómo aprender a programar y no morir en el intento??


Se hace muy difícil aprender a programar o aprender a utilizar otro lenguaje aunque es muy divertido. Por suerte hoy en día existen paginas que nos permiten aprender de forma más interactiva; haciendo nuestra vida más fácil.

Dejo un par de paginas que no pueden ayudar a aprender un nuevo lenguaje:

http://www.aprenderaprogramar.com/
http://www.programr.com/
http://www.tutorialspoint.com/
https://p2pu.org/en/

Scala agregara Macros en su próxima versión


Scala va agregar Macros a su lenguaje. Empecemos por el principio que sería Macros en los lenguajes de programación? Las macros son funciones que son llamadas por el compilador durante la compilación. Dentro de estas funciones, el programador tiene acceso a las API del compilador. Por ejemplo, es posible generar, analizar y código typecheck.

Esto era en C declarado mediante el #define, por ejemplo en C podemos hacer:

#define ADIOS "espero verte pronto"

En List podemos utilizar macros de la siguiente manera:

(defmacro Nand (&rest Args)
  '(not (and ,@Args)))

Definimos la macro Nand y la podemos utilizar en nuestro programa.

Desde el release 2.10.0-M3 las macros son ahora oficialmente una parte del lenguaje Scala. Se puede importar Macros mediante el paquete language.experimental.macros.

Las Macros simplifican de forma significativa el análisis de código y generación de código, lo que los convierte en una herramienta de elección para un gran número de casos del mundo real. Los escenarios que tradicionalmente implican la escritura y el mantenimiento repetitivo se puede tratar con macros en forma concisa y fácil de mantener.

Dejo Link:

viernes, 13 de julio de 2012

PostgreSQL 9.2 con soporte nativo a JSON


Sip, como lo escuchan PostgreSQL 9.2 va a soportar JSON. JSON es una notación que se ha extendido rápidamente, como sabrán esta basada en Javascript y es un formato que es soportado de forma nativa por Javascript.  Mira lo que dice la wikipedia:


"La simplicidad de JSON ha dado lugar a la generalización de su uso, especialmente como alternativa a XML en AJAX. Una de las supuestas ventajas de JSON sobre XML como formato de intercambio de datos en este contexto es que es mucho más sencillo escribir un analizador sintáctico (parser) de JSON. En JavaScript, un texto JSON se puede analizar fácilmente usando el procedimiento eval(), lo cual ha sido fundamental para que JSON haya sido aceptado por parte de la comunidad de desarrolladores AJAX, debido a la ubicuidad de JavaScript en casi cualquier navegador web."




En  PostgreSQL 9.2 vamos a poder hacer lo siguiente: 



CREATE TABLE test(gid serial PRIMARY KEY, title text, geog geography(Point, 4326));

INSERT INTO test(title, geog) 
 VALUES('a'
 , ST_GeogFromText('POINT(-71.057811 42.358274)'));

INSERT INTO test(title, geog) 
 VALUES('b'
 , ST_GeogFromText('POINT(42.358274 -71.057811 )'));


SELECT array_to_json(array_agg(t))
FROM test As t;
Y esto nos devolvera las filas en formato JSON. También podemos utilizar la función row_to_json;

Y esto para que me sirve? Bueno si usan frameworks como node.js estan hechos pueden trabajar todo bajo javascript y json. Sino por ejemplo para paginas pequeñas donde no es necesario tener una aplicación multicapa podemos llenar objetos javascript, por ejemplo en PHP:

var mi_variable = <?php echo buscarAlgo(); ?>

o un uso ideal es para funciones ajax.

Dejo link:
http://www.postgresql.org/docs/9.2/static/functions-json.html

miércoles, 11 de julio de 2012

Aprende a usar Git en 15 minutos


Leyendo GenBetaDev me encontre con la siguiente noticia :

"Si vienes de Subversion quizás la primera barrera que te bloquea para empezar a usar Git son la variedad de comandos nuevos y algunos de los conceptos que hacen a Git tan versátil. Con el curso de Github podrás empezar a trastear con Git de una forma fácil y segura en el entorno de un navegador sin ninguna complicación adicional que te desvíe del objetivo de aprender a usar Git. Todo lo que hagas se verá reflejado en un repositorio (try_git) que crea Github automática en tu cuenta para que vayas incluyendo ficheros de las sucesivas pantallas y luego puedas ver que todo ha sido real.

El curso está desarrollado directamente por los ingenieros de GitHub, expertos en el asunto, y en colaboración con Code School que si no conoces te recomiendo que eches un vistazo por su gran cantidad de cursos interactivos sobre tecnología."

Una buena idea una forma de ir aprendiendo de forma interactiva.

Dejo link:
http://try.github.com/levels/1/challenges/1
http://www.genbetadev.com/sistemas-de-control-de-versiones/aprende-a-usar-git-en-15-minutos

lunes, 9 de julio de 2012

Mono for Android

Siempre que pensamos correr .net en una plataforma que no sea windows pensamos en la gente del proyecto mono. Han tenido una idea muy buena correr codigo .net sobre la plataforma android. La idea es simple instalar otra maquina virtual (aparte de Dalvik) que corra codigo .net. 



De esta forma podemos desarrollar aplicaciones para nuestro android con tecnología .net; es un buen punto para la gente de .net. La cual va a poder reutilizar código y no va a tener necesidad de aprender Java. 
La verdad todavía no probé del todo la plataforma pero si abrimos nuestro monodevelop nos encontramos con las siguientes soluciones que podemos crear:



Lo malo es que no se puede desarrollar con Linux, esto es muy raro siempre pensé que Mono pensaba en desarrolladores que usan Linux, pero al parecer me equivoque. Cuando tuve que bajar la sdk que me encontré con esto:


El problema es que es necesario la versión 2.8 de mono y en linux no es tan fácil actualizar hay que actualizar los repositorios, ya que hay mucha gente que utiliza 2.4 o 2.6. Habrá que esperar, por lo pronto dejo links:
http://xamarin.com/monoforandroid
http://docs.xamarin.com/android
http://tirania.org/blog/archive/2011/Apr-06.html

domingo, 8 de julio de 2012

Manual y Documentación de Node.js


Dejo una pagina en español sobre Node.js

http://nodejs-es.github.com/api/index.html

¿Colaboras en proyectos de software libre?


En genbetadev publicaron la siguiente pregunta ¿Colaboráis en proyectos de software libre? y alguien muy acertado contesto:

Podríamos decir que cualquier persona que utilice software libre esta colaborando con él.


La respuesta precisa, la mayoria de la gente piensa que es imposible colaborar con el software libre y al contrario es más fácil de lo que se cree, utilizando firefox por ejemplo; ya estamos colaborando. Y esta es la gran virtud del software libre, que podemos dar el feeback o generar una opinión o utilizarlo y encontrar bugs y enviar la información del bug o simplemente compartir nuestra experiencia. 


Un gran paso para ayudar a la comunidad es utilizar el software libre y luego cuando estamos más duchos podemos recomendarlo, informar bugs, postear recomendaciones o manuales. Nuestra ayuda hace que crezca el software que usamos ayudándonos a nosotros y dando más calidad a nuestras vidas. 


viernes, 6 de julio de 2012

Bosón de Higgs, hallado gracias a Linux


Días recientes sucedió uno de los hechos más importantes de la historia de la humanidad y de la ciencia: tras años de investigación se encontró una partícula subatómica llamada Bosón de Higgs, que explicaría un montón de incógnitas referentes a la materia y la energía del universo. Para tal propósito, un centro de investigaciones europeo llamado CERN construyó la mayor máquina jamás realizada por el hombre: el Gran Colisionador de Hadrones, conocido también por las siglas LHC.

Esta super máquina y estructura, consiste en un gran túnel circular de 27 km de extensión y 8 km de radio, está ubicado en la frontera franco-suiza, a varios metros bajo el piso. A su vez, en su recorrido, en este túnel encontramos gigantescas máquinas encargadas de emitir partículas sub-atómicas para que colisionen entre sí, mientras otras máquinas a su vez se encargan de colectar los resultados de esas colisiones.

El análisis de estas colisiones, y por lo tanto, el hallazgo del tan buscado Bosón de Higgs, fue realizado por computadoras dirigidas nada más y nada menos que por un sistema operativo Linux. Este software llamado en realidad Scientific Linux, fue desarrollado en conjunto por el CERN y el FermiLab de los EE.UU., ambos institutos líderes mundiales en la investigación de física de partículas. Scientific Linux es una distribución de Linux clon a nivel binario de la distribución Red Hat Enterprise Linux, compilada a partir del código fuente de RHEL, bajo los términos del EULA de RHEL y de la licencia GPL.

Digno de destacar que siendo Linux software libre, es decir, estando a disposición de toda la humanidad su código fuente de programación, los máximos líderes de la ciencia humana hayan optado por desarrollar a su vez una solución libre, robusta y estable, en lugar de encargar este delicado trabajo a empresas fabricantes de sistemas operativos propietarios, restrictivos e ineficientes.

Dejo links:
http://es.wikipedia.org/wiki/Scientific_Linux
https://www.scientificlinux.org/




Que es la metaprogramación?


La metaprogramación consiste en escribir programas que escriben o manipulan otros programas (o a sí mismos) como datos, o que hacen en tiempo de compilación parte del trabajo que, de otra forma, se haría en tiempo de ejecución. Esto permite al programador ahorrar tiempo en la producción de código. Son programas que escriben programas, me suena a apocalíptico, como la skynet creando robots.

La metaprogramación no es una nueva idea - Nació hace ya más de 40 años, con el lenguaje Lisp, y se popularizó tremendamente en el lenguaje Smalltalk, a principios de los 80.

Como pueden imaginar un lenguaje script o dinamicos, facilita el uso de metaprogramación dado que no tiene que compilar o compilarse, simplemente modifica código y lo va corriendo.


Veamos como crearíamos una clase en Ruby: 



def crea_clase(nombre, clase_padre)
         eval "class #{nombre} < #{clase_padre} ; end"
end

De esta forma podemos hacer lo siguiente:

['Empleado', 'Cliente', 'Otro'].each  do |nombre_de_la_clase|
        crea_clase( nombre_de_la_clase , 'Persona')
end

Y así creamos clases a lo pavote, con 6 lineas de código.

En javascript tenemos el eval que podemos utilizar para correr scripts. Esto esta bueno para hacer ajax de código javascript, por poner ejemplo si el usuario eligió un parametro se muestra el valor del parámetro en un alert o un confirm.


$.get('ajax/test.php', function(dataJavascript) {
    eval (dataJavascript);
});


y en php en la url ajax/test.php tenemos: 


<?php
if (parametro) {
  echo " alert(".parametro."); " ;
}
else {
  echo " confirm(".parametro."); " ;
}
?>

Si podria haber puesto un if en  la función ajax pero era un ejemplo. Existen variados usos para a metaprogramación que nos resuelven problemas de forma elegante.



lunes, 2 de julio de 2012

Ubuntu Manual Project

Se libero una nueva versión del manual de Ubuntu 12.04, en este manual se puede aprender sobre Unity, seguridad, software, configuración de hardware, resolución de problemas, etc. Como indica la pagina del proyecto:

"Primeros pasos con Ubuntu 12.04 es una guía para principiantes del sistema operativo Ubuntu. Se encuentra disponible bajo una licencia de código abierto y su descarga, lectura, modificación y distribución son libres.


El manual le ayudará a familiarizarse con tareas cotidianas como navegar por Internet, escuchar música, escanear documentos y mucho más. Al centrarse en instrucciones fáciles de seguir, es adecuado para todos los niveles de experiencia."

Dejo el link:
http://ubuntu-manual.org/

domingo, 1 de julio de 2012

Una alternativa a Maven: Gradle 1.0 Released


Gradle es un proyecto para la construcción de aplicaciones java similar a maven. Pero este proyecto esta basado en groovy, por lo cual provee un dsl basado en groovy. Y proporciona una forma declarativa para describir todo tipo de construcciones a través de los parámetros por defecto. Gradle está convirtiendo rápidamente en el sistema de compilación de elección para muchos proyectos de código abierto.

Gradle provee una forma declarativa para describir todo tipo de construcciones.

Entre algunas características podemos nombrar:



  • Cualquier configuración están escritos en Groovy (en lugar de XML)
  • Soporte para Java, Groovy y Scala.
  • Soporte dependencias a repositorios Maven
  • Interfaz gráfica de usuario para la integración de todos los entornos de desarrollo populares
  • Experimental de C + + de apoyo




Y además es de código abierto.

Dejo liks:
http://www.gradle.org/
http://www.gradle.org/resources
http://gradle.org/downloads