sábado, 29 de septiembre de 2012

Lazy evaluation, la ventaja de los perezosos

Lazy evaluation o evaluación perezosa permite que un bloque de código sea evaluado luego, esto nos permite realizar código más performante en ciertas situaciones. Vamos con un ejemplo, supongamos que tengo la función multiplicación

mult(a, b) = a * a

Si llamara a esta función de la forma mult(8, 5+2) se ejecutaría así:

mult(8, 5+2)
mult(8,7)
8*8
64

Pero si ejecutamos el código de forma perezosa
mult(8, 5+2)
8 * 8
64

En este caso la ejecución perezosa fue más eficiente que la normal.

Para poner otro ejemplo si tengo la función loop

loop(x) = loop(x)

Esta función nunca termina, veamos que pasa si ejecutamos mult(2, loop(2))

mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
mult(2, loop(2))
... hasta el infinito y más allá...

Pero si ejecutamos de forma perezosa

mult(2, loop(2))
2 * 2
4

Termina y nos da el resultado.

La evaluación perezosa viene del paradigma funcional, es una característica de Haskell y también de Scala. Dándole gran potencia al lenguaje.  

Dejo link:
http://en.wikipedia.org/wiki/Lazy_evaluation

miércoles, 26 de septiembre de 2012

Como nos ven desarrolladores de otros lenguajes y como los vemos nosotros?


Citas celebres del mundo informático.

EL sitio variable not found publico citas sobre el mundo informático; les dejo las que más me gustaron:


“El código nunca miente, los comentarios sí”
-- Ron Jeffries


“El uso adecuado de los comentarios es compensar nuestra incapacidad para expresarnos mediante el código”
-- Robert C. Martin

“La documentación es como el sexo; cuando es bueno, es muy, muy bueno, y cuando es malo, es mejor que nada”
-- Dick Brandon


“Hasta ahora, nuestro ordenador nunca ha tenido un error no detectado”
-- Weisert


“No automatices un flujo de trabajo indisciplinado. El ordenador no va a resolver lo que los directivos del cliente no pueden”
-- Larry Bernstein


“Simplicidad: el arte esencial de maximizar la cantidad de trabajo no realizado”
-- Manifiesto Ágil

“El reto principal de los científicos informáticos es no confundirse con la complejidad de su propia creación”
-- E. W. Dijkstra


“La principal causa de complejidad en el software es que los fabricantes implementan casi todas las características que solicitan los usuarios”
-- Niklaus Wirth


“Una mala gestión puede incrementar los costes del software más rápidamente que cualquier otro factor”
-- Barry Boehm


“Una organización que trata a sus programadores como idiotas conseguirá pronto tener programadores dispuestos y capaces para comportarse como sólo como idiotas”
-- Bjarne Stroustrup


“Gran parte de la excitación que nos produce nuestro trabajo se debe a que realmente no sabemos lo que estamos haciendo”
-- E. Dijkstra

“Los programadores de verdad pueden escribir código ensamblador en cualquier lenguaje”
-- Larry Wall


“Si haces una afirmación, un programador dice ‘Sí, pero…’, mientras que un diseñador dice ‘Sí, y…’”
-- André Bensoussan


“La industria informática es la única que se mueve por la moda más que la ropa de señora”
-- Larry Ellison


“Nada es más permanente que una solución temporal”
-- Primera ley de Thomas


“Si no he podido ver tan lejos como otros es porque tenía gigantes subidos en mis hombros”
-- Hal Abelson


“Sólo hay una cosa más dolorosa que aprender de la experiencia, que es no aprender de la experiencia”
-- Archibald McLeish


“Lo peor de leer citas en Internet es que no puedes estar cien por cien seguro de su autoría”
-- Abraham Lincoln

Dejo link:
http://www.variablenotfound.com/2012/09/101-nuevas-citas-celebres-del-mundo-de.html

lunes, 24 de septiembre de 2012

Curso gratuito de MongoDB


La gente de 10gen nos ofrecen un curso gratuito de MongoDB. El curso se divide en 2 perfiles uno es desarrollador "MongoDB for Developers" y el otro para DBAs "MongoDB for DBAs". MongoDB esta ganando cada vez más un espacio en mercado, estos cursos facilitan su adopción y nos ahorran tiempo.

Dejo link:
http://education.10gen.com/

viernes, 21 de septiembre de 2012

Nuevo curso en codeschool llamado "Assembling Sass"



Me he enrolado en el nuevo curso de codeschool es sobre Sass; para los que no saben Sass (Syntactically Awesome Stylesheets)  es un lenguaje de hoja de estilo inicialmente diseñado por Hampton Catlin y el desarrollador Nathan Weizenbaum.

Sass es un metalenguaje de  Cascading Style Sheets (CSS). Es un lenguaje de scripting que se interpreta en CSS. lo que permite generar CSS dinámicos, facilitando la mantenibilidad y dinamismo de los CSS.

Sass es una forma diferente de trabajar con las CSS, que nos permite mantener un código limpio y fácil de leer.

Dejo los links:

Por que es bueno que aprenda programación funcional??


Los orígenes de la programación funcional pueden rastrearse al matemático Alonzo Church, que trabajaba en la Universidad de Princeton, y, al igual que otros matemáticos de allí, estaba interesado
en la matemática abstracta, particularmente en el poder computacional de ciertas máquinas abstractas. Las preguntas que se hacía eran por ejemplo: si dispusiésemos de máquinas de un ilimitado poder de cómputo, ¿qué tipos de problemas se podrían solucionar?, o ¿se pueden resolver todos los problemas?

Para contestar este tipo de preguntas, Church desarrolló un lenguaje abstracto, denominado Cálculo Lambda, que el cual sólo realizaba evaluación de expresiones usando funciones como mecanismo de cómputo. Este lenguaje abstracto no tenía en cuenta limitaciones concretas de implementación de ningún tipo.

La programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raíces en el cálculo lambda.

La historia estuvo muy linda, pero que agrega a mi vida? Existen muchos conceptos que es bueno saber a la hora de abordar un problema; además estos conceptos no se encuentran solo en lenguajes funcionales.

En la programación funcional, todo es una función, no existen variables, if, while o for o otra estructura de control de flujo de ejecución; solo funciones. Veamos  características de los lenguajes funcionales:

  • Transparencia referencial : Como se apoya en el concepto de función matemática, una función siempre va a devolver el mismo resultado para los mismos parámetros, es decir el resultado de una función no se va modificar a lo largo de la ejecución por algún estado del programa.
  • Evaluación perezosa (Lazy evaluation), permite decirle a una función que se ejecute en otro momento, puedo pasar la una función con sus parámetros por parametro a otra función y cuando la otra función necesite realmente ese valor ejecutar la función.  
  • Closures, es la capacidad de guardar en una variable una función para luego ejecutarla; esto permite que sea más fácil. 
  • Etc...

Hoy en día existen diversos lenguajes funcionales. Se podría considerar como uno de los primeros lenguajes funcionales al LISP, que actualmente sigue en uso, sobre todo en áreas de la inteligencia artificial. También un pionero de este paradigma es APL desarrollado en los años 60 (Iverson 1962). El linaje funcional se enriqueció en los años 70, con el aporte de Robin Milner de la Universidad de Edimburgo al crear el lenguaje ML. Éste se subdividió posteriormente en varios dialectos tales como Objective Caml y Standard ML. A fines de los años 80, a partir de un comité, se creó el lenguaje Haskell, en un intento de reunir varias ideas dispersas en los diferentes lenguajes funcionales (un intento de estandarizar el paradigma). Este año Microsoft Research ha incluido un nuevo lenguaje (funcional), denominado F#, a su plataforma .NET.

Si queres aprender Haskel acrodate de este post:

Y si queres probar Haskell:

miércoles, 19 de septiembre de 2012

No hay nada más fecundo que la ignorancia consciente de sí misma.


Dice José Ortega y Gasset:  No hay nada más fecundo que la ignorancia consciente de sí misma.
Y esto es una realidad, dado que en especial no somos cocientes de nuestra ignorancia hasta que adquirimos conocimiento.

Por lo tanto el conocimiento es esa luz que nos muestra las cosas como son y nos hace ver los espacios que había oscuridad. La luz esta incapacitada para mostrarnos todo lo que no sabemos pero si al tener mas cuartos iluminados podemos calcular un poco mejor los espacios en oscuras o poco iluminados.

En cambio la ignorancia no nos muestra nada y desde la ignorancia no podemos ni siquiera medirla. A mi me paso que cuando estaba en tercer año de la facultad pensé, ya se base de datos y un lenguaje de programación; no debe quedar mucho más que aprender y desde esos días no hago más que aprender.

Lo paradójico es que cuanto más sabemos, más somos cocientes de nuestra ignorancia; como el agua salada del mar que cuanto más se toma más sed da. Pero la consciencia de la ignorancia produce más curiosidad; y con un poco de voluntad más conocimiento. Esto es un motor imparable si se lo sabe alimentar.

 En fin cuando se realiza una actividad y es necesario estimar, es necesario reconocer nuestra ignorancia y cuantificarla lo mejor posible.

domingo, 16 de septiembre de 2012

Convertir Java a Object-C con J2ObjC


Los productos de Applet no me apasionan mucho pero es innegable que están tomando cada vez más relevancia. Por lo tanto cuando es necesario hacer aplicaciones nativas a IOS, podemos tomar nuestra aplicación java y llevarla a Object-C con J2ObjC.

J2ObjC es un producto open source de google. Según la wiki J2ObjC, el proyecto fue iniciado por la frustración frente a las aplicaciones de Android que tuvieron que ser reescritos para iOS desde cero. J2ObjC resuelve parte del problema de ser capaz de convertir la lógica de negocio de código Java en su correspondiente object-C.

La herramienta no genera código iOS de interfaz de usuario, ya que sus autores creen que "La unica manera de tenes código eficiente para IOS es escribirlo"  y debido a la complejidad que se ocupan de dicho código.


Dejo links:
http://code.google.com/p/j2objc/
http://google-opensource.blogspot.com.ar/2012/09/j2objc-java-to-ios-objective-c.html

sábado, 15 de septiembre de 2012

The Best Cross Platform Java Tool For Mobile App Developers!

Codename One  promete ser el mejor framework para desarrollar aplicaciones java para todas las plataformas de celulares y tablets, de forma fácil y desplegando nuestras aplicaciones en la nube.

Se puede escribir aplicaciones One en 5 pasos:

  • Bajar el plugin
  • Escribir código en Java
  • Diseñar la aplicación con la herramienta gráfica.
  • Testear la aplicación con el simulador de Codename One
  • Generar aplicaciones nativas



Dejo video:


Dejo link:
http://www.codenameone.com/

miércoles, 12 de septiembre de 2012

Curso de Hibernate

Un lindo curso de Hibernate en español , muy bueno con ejercicios y todo.

Dejo link:

http://www.cursohibernate.es/doku.php

martes, 11 de septiembre de 2012

La Universidad de Berkeley ofrece 14 cursos gratuitos en línea sobre tecnología

Otra buena al parecer la Universidad de Berkeley ofrece cursos gratuitos en línea sobre tecnología. Hay cursos para todos los gustos al parecer estan buenos, vamos a tener que tomar alguno.



Dejo el link:
http://geeksroom.com/2012/09/la-universidad-de-berkeley-ofrece-14-cursos-gratuitos-en-linea/66218


domingo, 9 de septiembre de 2012

Apache Wicket 6.0

Una nueva versión de Apache wicket se ha liberado las novedades son que ahora toda la librería ajax se basa en JQuery lo que va a hacer más fácil de usar y más flexible. Otra mejora es que ahora esta empaquetado de tal forma que hace muy fácil la integración con OSGI.

La verdad que me parece excelente la noticia y me parecen cambios esperados por la comunidad. Nunca me gusto el manejo de ajax de wiket, me parece poco flexible; con esta cambio se gano un seguidor más.

Dejo links:
http://wicket.apache.org/
http://wicket.apache.org/2012/09/05/wicket-6.0.0-released.html

sábado, 8 de septiembre de 2012

Cloud 9 una IDE en la nube


Cloud 9 es una IDE online para Javascript y Node.js además de HTML, CSS, PHP, Java, Ruby y  otros 23 lenguajes. Lo que permite es programar en cualquier lugar donde haya internet y acceder a servicios en la nube más fácilmente. Es una interesante propuesta, existe una versión free y otra de pago que vale 12 dolares al mes. 

Dejo un video:



Dejo link:
https://c9.io/

Crea Aplicaciones Desktop en HTML5, CSS3 y JavaScript

Interesante framework que nos permite crear aplicaciones multiplataforma con HTML 5, CSS 3 y Javascript. La verdad todavía no lo he probado pero pinta lindo.

Dejo link:
http://www.tidesdk.org/

viernes, 7 de septiembre de 2012

SolusOS, una distribución Linux que brinda elegancia y comodidad.

SolusOS esta ganando mucho mercado, porque? Por su interfaz, SolusOS trabaja sobre Gnome 3 pero brinda las mismas comodidades que Gnome 2. Con la llegada de Gnome shell; Gnome perdio algunos adictos, los cuales eligieron este gran sistema operativo basado en Debian.



Dejo link:
http://solusos.com/

jueves, 6 de septiembre de 2012

Entrevista con Angel "Java" Lopez

Muy interesante la entrevista a Angel Java Lopez; dejo el link:

http://charliedontcode.com/entrevistas/2012/08/12/entrevista-angel-java-lopez.html

JBoss Developer Framework


Recientemente Jboss ha liberado JBoss Developer Framework o JDF para los amigos.  El Framework en realidad es un centro de documentación central para todas las tecnologías relacionadas con JBoss y JBoss AS. Este esfuerzo de consolidación permite a los desarrolladores centrarse en un recurso único de documentos en lugar de tomar varias guías individuales de las diferentes tecnologías de JBoss (por ejemplo, una guía de Hibernate y otra para Seam).

JDF incluye más de 50 quickstarts  que son proyectos Maven que se generan con archetypes. Lo interesante es que la mayoría de los quickstarts generan los proyectos con varias capas,  Estos pueden servir ya sea como tutoriales o como la base para las aplicaciones más complicadas. Algunas de las tecnologías que incluyen: EJB, JAX-RS, JPA, JSF, CDI, HTML5, JTA, Apache Wicket...

Dejo links:
http://in.relation.to/Bloggers/AnnouncingJdfJBossDeveloperFramework
http://www.jboss.org/jdf/news/2012/06/05/welcome/

miércoles, 5 de septiembre de 2012

Queres aprender Neo4j?

Si queres aprender sobre la base orientada a grafos más popular te dejo unos link del sitio oficial:

http://neo4j.org/learn/
http://neo4j.org/resources/

Oracle habla de BigData

Oracle nos regala esta revista virtual donde habla de BigData.

Dejo link:
http://oracle.com.edgesuite.net/ebook/bigdata/

select * from Dual en Oracle



En Oracle existe una tabla llamada DUAL, normalmente se usa para referenciar consultas que no tienen una tabla sino que son resultado de una función; por ejemplo:

Select SYSDATE from dual;

De esta forma podemos saber la fecha del servidor. Pero que pasa si queremos saber que tiene dual podemos hacer lo siguiente:

desc dual


Name                    Null?    Type
 ----------------------- -------- ----------------
 DUMMY                            VARCHAR2(1)

Claro en realidad DUAL es una table con un solo registro, de esta forma siempre nos devuelve un valor las consultas a dual: Vamoa a hacer un select * from Dual para ver que nos devuelve:

select * from Dual

Y nos retornara una sola fila con un único valor X para la tabla Dual. Supongamos que migramos de oracle a otra base y hacemos uso de la tabla dual o estamos acostumbrados a usarla. Por ejemplo en Postgres no existe esta tabla solo debemos hacer el select si From:


SELECT SYSDATE
o como deberia ser en PostgreSQL
SELECT now()
o
SELECT current_date


Otra solución es crear la tabla DUAL de la siguiente manera:

 CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)

Luego insertamos el único valor: 

INSERT INTO DUAL (DUMMY)
VALUES ('X')

Eso es todo amiguitos...

Dejo link:

martes, 4 de septiembre de 2012

¡Aprende Haskell por el bien de todos!



Bienvenido a ¡Aprende Haskell por el bien de todos! Si estás leyendo esto probablemente quieras aprender Haskell. Pues bien, has venido al sitio adecuado, pero primero vamos a hablar un poco sobre esta guía.

Decidí escribir esta guía porque quería arraigar mi propio conocimiento de Haskell y porque pensé que podía ayudar a la gente que empezaba con Haskell. Existen bastantes manuales y guías sobre Haskell por la red. Cuando empecé con Haskell no lo leí un único documento. La forma en la que aprendí Haskell fue leyendo varios artículos y guías, porque explicaban el mismo concepto de diferentes formas. Así, yendo a través de varios documentos, fui capaz de juntar todas las piezas y entonces todo encajó. De modo que, esto es un intento más de añadir otro útil documento para aprender Haskell de forma que tengas más oportunidades de encontrar uno que te guste.

Así comienza el sitio que tiene como objetivo enseñarnos haskell, es muy recomendable.

Dejo el link:
http://aprendehaskell.es/

Yahoo! Hadoop Tutorial


Un excelente tutorial de hadoop hecho por la gente de yahoo!

Dejo link:
http://developer.yahoo.com/hadoop/tutorial/

domingo, 2 de septiembre de 2012

Como instalar oracle 11g en fedora y no morir en el intento


Pruebas muy difíciles me ha dado la vida pero nada tan difícil como instalar Oracle. Es imposible!! Vamos a intentar instalar oracle en fedora 17 64 bits. Para esto vamos a bajar los instaladores de el siguiente link:

 http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

Hay que registrarse y deben compran la licencia.

Luego de bajar los zip hay que descomprimirlo:

unzip linux.x64_11gR2_database_1of2.zip
unzip linux.x64_11gR2_database_2of2.zip

Si todo salio bien se creo una carpeta llamada database
Ahora tenemos que modificar el archivo /etc/hosts porque tiene que tener todo el nombre del servidor. Para esto nos logeamos como root. El archivo debe quedar con la siguiente forma:
<IP-address>  <fully-qualified-machine-name>  <machine-name>

Ahora vamos a agregar unos parametros a /etc/sysctl.conf (como root)

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048586
Ahora corremos el siguiente comando para aplicar los nuevos parametros:
/sbin/sysctl -p

Ahora debemos agregar la siguientes lineas en el "/etc/security/limits.conf"
oracle              soft    nproc   2047
oracle              hard    nproc   16384
oracle              soft    nofile  1024
oracle              hard    nofile  65536

Y ahora debemos modificar "/etc/pam.d/login" y agregar la siguiente linea si no existe:

session    required     pam_limits.so

Despues tenemos que desactivar el firewall eso lo podemos hacer con la aplicaci{on propia para firewall

Ahora a desactivar SELINUX para esto editamos "/etc/selinux/config" y editamos la linea

SELINUX y ponemos:
SELINUX=disabled

Ahora a Instalar librerias:

yum install binutils
yum install compat-libstdc++-33
yum install compat-libstdc++-33.i686
yum install elfutils-libelf
yum install elfutils-libelf-devel
yum install gcc
yum install gcc-c++
yum install glibc
yum install glibc.i686
yum install glibc-common
yum install glibc-devel
yum install glibc-devel.i686
yum install glibc-headers
yum install ksh
yum install libaio
yum install libaio.i686
yum install libaio-devel
yum install libaio-devel.i686
yum install libgcc
yum install libgcc.i686
yum install libstdc++
yum install libstdc++.i686
yum install libstdc++-devel
yum install make
yum install numactl-devel
yum install sysstat
yum install unixODBC
yum install unixODBC.i686
yum install unixODBC-devel
yum install unixODBC-devel.i686

 Ahora debemos crear los siguientes grupos:

groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin

useradd -g oinstall -G dba,oper,asmadmin oracle
passwd oracle

Ahora creamos el directorio donde oracle va a ser instalado:

mkdir -p /u01/app/oracle/product/11.2.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

Vamos a editar el archivo  "/etc/redhat-release" y simulamos que es un red-hat borrando lo que tiene y escribiendo:

redhat release 5

por ultimo tenemos que ir al .bash_profile logeados como usuario oracle y agregamos

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=fedora14.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=DB11G; export ORACLE_UNQNAME
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=DB11G; export ORACLE_SID
ORACLE_TERM=xterm; export ORACLE_TERM
PATH=/usr/sbin:$PATH; export PATH
PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = "oracle" ]; then
  if [ $SHELL = "/bin/ksh" ]; then
    ulimit -p 16384
    ulimit -n 65536
  else
    ulimit -u 16384 -n 65536
  fi
fi

Ahora salimos de la session y nos logeamos como oracle y ejecutamos
./runInstaller y seguimos el wizard...

















Y tuvimos éxito!!

Viste que fácil que era...

Dejo link: