Translate

miércoles, 3 de octubre de 2012

Tipando Javascript con TypeScript


TypeScript es un lenguaje que corre sobre javascript; muy similar a javascript pero con la salvedad de que TypeScript es un lenguaje fuertemente tipado. Es decir esta librería nos da un sistema de tipado para el lenguaje Javascript, además nos da clases; para poder utilizar la orientación a objetos por medio de clases como estamos más acostumbrados, no por prototipado.

En la pagina oficial de TypeScript se puede ver el siguiente ejemplo:


class Greeter {
greeting: string;
constructor (message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}  

var greeter = new Greeter("world");

var button = document.createElement('button')
button.innerText = "Say Hello"
button.onclick = function() {
alert(greeter.greet())
}

document.body.appendChild(button)



A la vez, permite que las IDEs nos ayuden a escribir en código.  Esta librería/lenguaje (no se como llamarlo) es gratuita y open sources.

Dejo links:
http://www.infoq.com/news/2012/10/typescript
http://www.typescriptlang.org/

5 editores de código online y gratuitos (IDEs)


Ya hable anteriormente de las IDES online, las cuales nos permiten tener nuestro código en la nube y nos facilita la comunicación con servicios en la nube. Anteriormente hable de Cloud 9 (la ide de George Harrison)  ahora quiero compartir este link con 5 IDES en la nube:

http://www.elwebmaster.com/general/5-editores-de-codigo-online-y-gratuitos-ides

Play Framework + Eclipse + Postgresql + Mercurial

Simplemente quiero compartir este tutorial que esta muy completo: http://www.welinux.cl/notas/public/alawelinux.html

Que pasaría si no existiría el Null??


Es una pregunta tonta, ya que el null nació como una forma de representar la nada misma. Es decir el null es necesario pero, no creen que esta sobre valorado? ¡esta en todos lados! En javacript por ejemplo se tiene que preguntar si esta definida la variable; porque una variable puede no estar definida; pero además la variable puede ser nula por lo tanto tengo que preguntar si es distinta de null. Para citar otro ejemplo  en java la lucha diaria contra NullPointerException...

No es un problema de la tecnología sino que no nos tomamos el tiempo de definir que puede ser nulo y que no, si existen valores por defecto, etc. Pero la tecnología nos puede ayudar y en este caso me parece correcto el camino que tomo C# o .net; en el cual se puede definir que una variable no puede ser nula (non-nullable)  o se puede definir un valor por defecto cuando no se asigna nada; cosa que se puede hacer en las bases de datos hace años.

Es interesante como en Eiffel se puede definir un contrato en el cual queda claro que por ejemplo para que esta función funcione es necesario que el parámetro no sea nulo y que sea mayor a 0. Dandole seguridad y tranquilidad a los desarrolladores. Me debo un buen post sobre Eiffel.

En conclusión cuando tenemos más tiempo hacemos las cosas mejor; por eso es importante tomarse el tiempo de definir que campos pueden ser nulos y cuales pueden tener datos por defecto. Y esta bueno que la tecnología nos ayude a definir estas restricciones y mejor sería que nos obligue a definirlo.

Dejo links:
http://www.infoq.com/news/2012/10/Null-CSharp
http://twistedoakstudios.com/blog/?p=330

lunes, 1 de octubre de 2012

Python 3.3.0 fue lanzado oficialmente


Python, un lenguaje de programación multiplataforma que permite a los usuarios trabajar con más rapidez e integrar los sistemas más eficazmente, acaba de alcanzar la versión 3.3.0.

Dejo links:
http://www.python.org/
http://www.python.org/download/releases/3.3.0/

Jenkins para Google App Engine



"Integración continua en la nube para aplicaciones Java y Python" Esta es la premisa del nuevo servicio de  CloudBees, básicamente lo que proveen es un Jenkins en la nube para nuestras aplicaciones app engine.

Desarrollado por Jenkins y más de 600 plugins de la comunidad, CloudBees ofrece el servicio se  integración continua en la nube para ayudar a construir y entregar rápidamente software de calidad.

Abra que probarlo dejo el link: https://appengine.cloudbees.com/

BackTrack, el Linux para los chicos malos


BackTrack es una distro Linux para la auditoria de seguridad y relacionada con la seguridad informática en general. Es un Linux con muchas herramientas para auditar la seguridad de tus aplicaciones, tu red, etc.

 Fue incluida en el puesto 7 de la famosa lista "Top 100 Network Security Tools" de 2006.

Dejo un video:


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