Translate

viernes, 3 de agosto de 2012

Javathcript, corriendo Lisp en tu browser!!


Javathcript.js permite correr un lisp en tu browser. Una vez agregado el script Javathcript.js va a analizar los script que tengan como lenguaje type="text/lisp" y va a ejecutar script list en tu browser.

Veamos un ejemplo:


<script type="text/lisp">
(let*
( (button (getElement "btn"))
(nameField (getElement "name"))
(clickHandler (lambda () (alert (concat "Hello " (get nameField "value"))))) )
(set button "onclick" (export clickHandler))
)
</script>


La verdad que es bastante impresionante; dejo links:
http://kybernetikos.github.com/Javathcript/

jueves, 2 de agosto de 2012

Codecademy

Codecademy es una pagina muy buena para hacer cursos, se especializa en la web; javascript, HTML, CSS; Jquery, etc.. pero también tiene cursos de lenguaje como por ejemplo python.

Dejo el link:
http://www.codecademy.com

Ahora comenzó un nuevo curso de python: http://www.codecademy.com/es/tracks/python

miércoles, 1 de agosto de 2012

Node?? js??


Node.js es una plataforma basada en runtime de Chrome para procesar JavaScript, el objetivo es la construcción de aplicaciones web fácil, rápido y de forma escalables. Dejo unos cuantos recursos para ir estudiando:

http://www.ibm.com/developerworks/ssa/java/library/j-nodejs/index.html
http://visionmedia.github.com/masteringnode/ (este es un libro, esta bueno!)
http://stella.laurenzo.org/2011/03/bulletproof-node-js-coding/
http://nodetuts.com/
http://howtonode.org/
http://nodeguide.com/
http://www.nodehispano.com/

y la pagina oficial: http://nodejs.org/



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