Translate

sábado, 13 de abril de 2013

Programadores con experiencia.

Hace ya tiempo ley un artículo en java hispano sobre si es mejor un programador con más experiencia; en este articulo se demuestra que no es mejor una persona con más experiencia que un novato programando y al principio pensé que había algo mal, no puede ser que un programador que tiene 3 años en el mercado programe igual que uno que tiene 4 años de experiencia o 2. Me parecía muy raro, pero luego me di cuenta que en realidad alguien con menos conceptos programa igual que los experimentados, con la diferencia de que el desarrollo de software no todo es programar. Es decir nosotros estamos todo el tiempo topándonos con problemas, problemas que puede ser la base de datos o hibernate o algúna otra herramienta y sin embargo se nota a simple vista que alguien que tiene más tiempo programando maneja mejor estas herramientas. Sin hablar de que si hay que diseñar algo con algún patrón; es innegable que el manejo de patrones lleva su tiempo.

Es decir el tiempo te llena de conocimiento y esto vale. Y si no se usa o quedo viejo hay que hacer el esfuerzo de extrapolar el conocimiento, es muy difícil generalizar por ejemplo como se utiliza una herramienta; pero los conceptos siempre quedan; un ejemplo podría ser la gente que sabe flash y diseñar con flash, si bien hubo cambio si una persona que utilizo flash le toca diseñar en html 5 va ser mucho más rápido que alguien que nunca diseño. Por este motivo, hay que esforzarse para entender los conceptos y no solo las herramientas, para que nuestro conocimiento pueda durar en el tiempo.

jueves, 11 de abril de 2013

MoSQL, de mongoDb a postgres!!





Con el crecimiento de NoSQL, las herramientas que permiten convivir NoSQL cn base de datos relacionales estan tomando mayor importancia. Por lo tanto les quiero presentar MoSQL, que permite hacer? Replicar datos desde una base de datos MongoDB a una postgres.


Con MoSQL, se puede ejecutar aplicaciones contra una base de datos MongoDB, pero también mantener una actualización de sus datos en PostgreSQL, listo para realizar consultas con toda la potencia de SQL.


Dejo link:
https://stripe.com/blog/announcing-mosql
https://github.com/stripe/mosql

lunes, 8 de abril de 2013

Libertad y educación


Quiero recomendar el blog Libertad y educación, muy bueno y interesante. Y mi pensamiento es que en todas las entidades educativas se debería enseñar software libre. Por que? Porque el software libre te brinda mayor libertad de aprendizaje, podemos aprender más.

Dejo link:
http://libertadygnu.blogspot.mx/

sábado, 6 de abril de 2013

Rust, un nuevo lenguaje de Mozilla


Mozilla anuncia un nuevo motor de renderizado de paginas Servo, lo que me llamo la atención es que servo va ser escrito en un lenguaje nuevo llamado Rust.

Rust a simple vista se ve como c++, pero es bastante más evolucionado. Veamos un poco de código:




use core::rand::RngUtil;

fn main() {
    for ["Alice", "Bob", "Carol"].each |&name| {
        do spawn {
            let v = rand::Rng().shuffle([1, 2, 3]);
            for v.each |&num| {
                print(fmt!("%s says: '%d'\n", name, num))
            }
        }
    }
}

Que nos ofrece este lenguaje:

  • Inferencia de tipos
  • Tareas concurrentes seguras 
  • Closures
  • Pattern matching
  • Polimorfismo.

Vamos a ver como va evolucionando su uso, por ahora voy mirando su documentación:

http://www.rust-lang.org/
http://doc.rust-lang.org/doc/tutorial.html
http://doc.rust-lang.org/doc/rust.html

Preguntas y respuestas de mi base datos Oracle

Siempre tenemos que mirar nuestra base para cuidar que su crecimiento no sea abrupto, lo peor que nos puede pasar es que las entidades más grandes, sean las que más se consultan y esto suele pasar seguido. Para llevar un control respondamos 3 preguntas:

Cual son los 40 objetos más grande de mi base de datos?


select * from (
select owner, segment_name, bytes/1024/1024 Size_Mb from dba_segments order by
bytes/1024/1024  DESC )
 where rownum <= 40

Cual son las 40 tablas más grande de mi base de datos?


select *
from (select segment_name "Table Name",
round(sum(bytes)/1024/1024, 2) "Size MB"
from dba_extents
where segment_type = 'TABLE'
group by segment_name
order by 2 desc)

Cuales son los objetos más accedidos?


SELECT ROWNUM AS RANK, Seg_Lio.*
  FROM (  SELECT St.Owner,
                 St.Obj#,
                 St.Object_Type,
                 St.Object_Name,
                 St.VALUE,
                 'LIO' AS Unit
            FROM V$segment_Statistics St
           WHERE St.Statistic_Name = 'logical reads'
               AND St.Owner='TN32_UAT'
        ORDER BY St.VALUE DESC) Seg_Lio
 WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_r.*
  FROM (  SELECT St.Owner,
                 St.Obj#,
                 St.Object_Type,
                 St.Object_Name,
                 St.VALUE,
                 'PIO Reads' AS Unit
            FROM V$segment_Statistics St
           WHERE St.Statistic_Name = 'physical reads'
               AND St.Owner='TN32_UAT'
        ORDER BY St.VALUE DESC) Seq_Pio_r
 WHERE ROWNUM <= 15
UNION ALL
SELECT ROWNUM AS RANK, Seq_Pio_w.*
  FROM (  SELECT St.Owner,
                 St.Obj#,
                 St.Object_Type,
                 St.Object_Name,
                 St.VALUE,
                 'PIO Writes' AS Unit
            FROM V$segment_Statistics St
           WHERE St.Statistic_Name = 'physical writes'
               AND St.Owner='TN32_UAT'
        ORDER BY St.VALUE DESC) Seq_Pio_w
 WHERE ROWNUM <= 15

Con el resultado de estas consultas podemos tomar decisiones antes que la base se vuelva lenta.



Aprender Python con Pythonmonk


De los creadores de rubymonk  llega pythonmonk, es un manual online para aprender python. Una gran idea  , y si no hicieron el de ruby se los aconsejo.

A ponerse a estudiar pequeños saltamontes.

Dejo link:
http://pythonmonk.com

jueves, 4 de abril de 2013

Mi nuevo linux Fedora!!

Por cuestiones de la vida me he movido a fedora, la verdad es que extraño un poco a Mint pero hay que seguir adelante en el camino me encontré con Yum extender, que me parece que va ser mi mejor amigo. Me encontré con gnome-shell y me divorcie a los pocos días, y ahora estoy conviviendo con KDE que me esta tratando bien.

Dejo una foto de mi escritorio:



Dejo links:
http://gomix.fedorapeople.org/software-management-guide/f18/html-single/

martes, 2 de abril de 2013

Libros de programación gratuitos

Un montón de libros sobre programación y lenguajes lo encontraran en el siguiente link:
http://www.onlineprogrammingbooks.com/

Getting Started with DB2 Express-C


DB2 Universal Database es el sistema de administración de bases de datos que brinda una plataforma de base de datos flexible y efectiva en costos para construir aplicaciones robustas de negocios on demand.

Esto es lo que nos indica IBM en su pagina, tambien existe una versión express de la base de datos llamada DB2 Express-C, esta buena, lo que quiero compartir es un libro gratuito sobre esta base.

Dejo link:
http://www.ibm.com/developerworks/wikis/display/DB2/FREE+Book-+Getting+Started+with+DB2+Express-C

lunes, 1 de abril de 2013

Visualizador de código Python online

Los que están aprendiendo a programar y los que estamos aprendiendo python, es de mucha ayuda ver que esta sucediendo cuando corremos el código. Les dejo un vizualisador en el que se puede ver los valores de las variables y como ejecuta el programa linea por linea.

Dejo una pantalla de ejemplo:



Dejo link:
http://pythontutor.com/visualize.html

doctest, Usando la documentación para testear.



Me encontré con este framework de python y la verdad que quede sorprendido, su facilidad de uso y pragmatismo. La idea es que cuando realizamos funciones debemos documentarlas, que no mejor que luego de documentarla dejar un ejemplo de como funciona y el resultado que devuelve la función. Bueno la idea de este framework es utilizar esta documentación para testear nuestra función.

Veamos un ejemplo:

"""
This is the "example" module.

The example module supplies one function, factorial().  For example,

>>> factorial(5)
120
"""

def factorial(n):
    """Return the factorial of n, an exact integer >= 0.

    >>> [factorial(n) for n in range(6)]
    [1, 1, 2, 6, 24, 120]
    >>> factorial(30)
    265252859812191058636308480000000
    >>> factorial(-1)
    Traceback (most recent call last):
        ...
    ValueError: n must be >= 0

    Factorials of floats are OK, but the float must be an exact integer:
    >>> factorial(30.1)
    Traceback (most recent call last):
        ...
    ValueError: n must be exact integer
    >>> factorial(30.0)
    265252859812191058636308480000000

    It must also not be ridiculously large:
    >>> factorial(1e100)
    Traceback (most recent call last):
        ...
    OverflowError: n too large
    """

    import math
    if not n >= 0:
        raise ValueError("n must be >= 0")
    if math.floor(n) != n:
        raise ValueError("n must be exact integer")
    if n+1 == n:  # catch a value like 1e300
        raise OverflowError("n too large")
    result = 1
    factor = 2
    while factor <= n:
        result *= factor
        factor += 1
    return result


if __name__ == "__main__":
    import doctest
    doctest.testmod()

Como vemos en el ejemplo se creo una funcion factorial y se la documento con ejemplos de uso, luego al final de la función se indico que si se corre este modulo como programa principal, se corran los test. Por lo tanto si hacemos:

python example.py -v

La "-v" es para que doctest devuelva una salida. Con la ejecución de esta linea de código se correrán los ejemplos de la documentación devolviendo los siguientes valores:


Trying:
    factorial(5)
Expecting:
    120
ok
Trying:
    [factorial(n) for n in range(6)]
Expecting:
    [1, 1, 2, 6, 24, 120]
ok


Es genial!! Me parece una gran idea, que mal que no lo haya conocido antes. Existe un port para java que se llama doctestj; tendremos que probarlo.

Dejo link:
http://docs.python.org/3.3/library/doctest.html
https://code.google.com/p/doctestj/

sábado, 30 de marzo de 2013

Taller gratuito de introducción a Python

Este taller gratuito te servirá para dar los primeros pasos en Python, un lenguaje de programación multiplataforma y de propósito general que tiene diversas particularidades que lo hacen especial. Python es interpretado y está pensado para que tenga una sintaxis ligera y limpia, lo que lo hace sencillo de aprender.

Así comienza a describir el curso gratuito realizado por escuela It. Vamos a tener que inscribirnos, ojo comienza el 1 de abril.

Dejo link:
http://escuela.it/cursos/taller-python/

jueves, 28 de marzo de 2013

putty y Xming, una potencia!!


Les explico en el trabajo tenemos varios linux y clientes windows (un clásico); y nos conectamos con ssh a los servers; ssh tiene la opción -x que permite desplegar aplicaciones gráficas en el cliente.   Bueno si hacemos ssh -x en linux y queremos ejecutar por ejemplo firefox funciona excelentemente; pero si lo hacemos desde windows, no funciona y es esperable.

Por lo tanto hay que instalar Xming que es un permite ver ventanas de linux en windows. Es decir yo puedo utilizar nautilus desde mi ventana de windows y anda que da calambre.

Dejo link:
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
http://sourceforge.net/projects/xming/
http://www.straightrunning.com/XmingNotes/

getVarName y para que quisiera saber el nombre de la variable?

Ojo lo que van a leer, no es real! No me tomen tan en serio. Se me ocurrió una idea bastante loca, pero va la tiro; a ver que opinión recibo. Porque algún lenguaje o uno nuevo crea o tiene un método que nos indique el nombre de la variable que usamos?

Onda:

String nombre = getVarName(pepe)
print(nombre) // Aca imprime pepe

Es una idea revolucionaria, pero para que la puedo llegar a usar?

Supongamos los mapas, que necesito una key para referenciar un valor bueno podría hacer algo así:

String variable1 = "hola mundo"
miMapa.put(getVarName(variable1), variable1)

Entonces cuando quiero saber el valor puedo hacer:

print(miMapa.get(getVarName(variable1))) // Acá imprimiría "hola mundo"

Esto a pesar que suene loco es bastante fácil de implementar con las macros del lenguaje. Se acuerdan de las macros? Las macros son instrucciones que le damos al compilador. Si nos fijamos en la wiki nos dira:

"Con el fin de evitar al programador la tediosa repetición de partes idénticas de un programa, los ensambladores y compiladores cuentan con macroprocesadores que permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Para utilizar una macro, primero hay que declararla. En la declaración se establece el nombre que se le dará a la macro y el conjunto de instrucciones que representará."

Por ejemplo le podemos decir "che mira antes de compilar pasa por todo el código y donde veas getVarName(nombreDeUnaVariable) vos pone el string "nombreDeUnaVariable". Y listo!

Ahora llega el momento en que flasheo, que tal si se puede implementar orientado a objeto?? En este hipotético caso no se me ocurre una implementación. Pero supongamos que se pueda, puede ser un método de Object todos heredar de Object y listo. Lo bueno es que lo puedo sobrescribir. Por ejemplo quiero llenar otro mapa con objetos de la clase persona (supongamos) entonces puedo hacer esto.

class Persona
      Integer id

      String getVarName()
               String varName = super.getVarName()
               return varName + " " + id
end

En fin con esto puedo hacer algo así:

List personas = getPersonasFromDB();
for (Persona persona in personas)
      mapaDePersonas.put(persona.getVarName(), persona)

En realidad podemos modificar el mapa para que haga mapaDePersonas.put(persona) y ya nos tome el nombre de la variable...

for (String p in mapaDePersonas.keys())
     print(p) // aca imprime persona 1, persona 2, etc...

Y lo mejor de todo es que podria hacer:

 class Persona
      String getVarName()
               String varName = super.getVarName()
               return varName.changeCar("_", " ").upperFirstLetter() + " es mi nombre!"
end

piñon_fijo = Persona.new()

print(piñon_fijo) // y aca imprime "Piñon fijo es mi nombre!"

Que les parece la idea?? Saben si a alguien se le ocurrió antes? se les ocurre otro uso? Les gusto el ejemplo de Piñon Fijo??



miércoles, 27 de marzo de 2013

coderace.me

Aprende programación jugando! Que buena onda! El objetivo es aprender a programar, pero mientras lo hacemos podemos divertirnos. Esta pagina nos ofrece un juego de carrera que va premiándonos mientras hacemos las cosas bien.

Dejo un vídeo:


Dejo el link:
http://coderace.me

sábado, 23 de marzo de 2013

Discover DevTools



Code School abrió un curso gratuito llamado Discover DevTools, en el curso se muestran herramientas de desarrollo web y esta auspiciado por google.

Dejo link:
http://www.codeschool.com/courses/discover-devtools

Welcome to the Principles of Functional Programming in Scala class!


Me llego el mail de comienzo del curso de Programación funcional en scala, en realidad comienza el  25 de este mes, este curso es muy recomendable. Y ojo no es fácil, pero vale la pena.

Dejo link:
https://www.coursera.org/course/progfun

jueves, 21 de marzo de 2013

Xtend 2.4


Ya hable de Xtend hace tiempo... 

Hace tiempo que no teníamos noticia pero ahora tenemos una nueva versión que tiene muchas novedades. Una de las más importantes es que podemos utilizar este lenguaje para escribir aplicaciones android, si android. Además:

  • NuevAnotaciones activas. La nueva característica de anotación activa en Xtend se basa en anotaciones Java y permite participar en el proceso de traducción de código fuente a código fuente Xtend Java. as características del lenguaje.
  • Xtend para el IDE de Eclipse ha sido mejorado, proporcionando un mejor soporte de herramientas de desarrollador de otros idiomas JVM. Esta nueva versión incluye las importaciones, extraer refactorización método, formateador, asistencia mejoradas de contenido, y mucho más. 
  • El plugin Xtend para el IDE de Eclipse ha sido mejorado, proporcionando un mejor soporte de herramientas de desarrollador de otros idiomas JVM.
  • Anotaciones activas. La nueva característica de anotación activa en Xtend se basa en anotaciones Java y permite participar en el proceso de traducción de código fuente a código fuente Xtend Java.
  • Y más!!
Y que más queres? hace todo!


Dejo link:
http://www.eclipse.org/xtend/

Scala IDE 3.0.0 final


Si señores después de un año de desarrollo Scala IDE 3.0.0 esta aquí! Que trae esta nueva versión:

  • Un depurador para Scala
  • Más herramientas de refactoring
  • Generador de código
  • Un editor más rápido 
  • Más colores, semantica resaltada, hipervinculos en los tipos, etc...
  • Y más!!


Ya vamos descargando!!

Dejo link:
http://scala-ide.org/blog/3.0-final-announcement.html

martes, 19 de marzo de 2013

Que es Node.js?

Es así el motor javascript V8, el motor que utiliza chrome; inspiro a hacer un entorno de programación en el lado servidor orientada a eventos. Es decir con javascript podemos programar del lado cliente y servidor. Fue creado con el enfoque de ser útil en la creación de programas de red altamente escalables, como por ejemplo, servidores web. Fue creado por Ryan Dahl en 2009, y su evolución está apadrinada por la empresa Joyent.

Dejo una infografía sobre Node.js:



Dejo link:


sábado, 16 de marzo de 2013

Primeros pasos con Play! Part 5

Y luego de un descanso seguimos aprendiendo play framework. Recuerden que nos habíamos quedado acá:

http://emanuelpeg.blogspot.com.ar/2013/02/primeros-pasos-con-play-part-4.html

Nos habíamos quedado en crear el modelo de Algo:

package models

case class Algo (id: Long, nombre: String, descripcion: String)

object Algo {
 
  def all(): List[Algo] = Nil
 
  def create(nombre: String, descripcion: String) {}
 
  def delete(id: Long) {}
 
}

Bueno creamos la case class Algo que nos sirve de modelo y luego un Objeto que va a realizar las tareas de listar, crear y borrar. Por ahora es un Objeto Dummy, onda que no hace nada pero luego vamos a implementar su interacción con la base de datos.

Para el que no este familiarizado con case class de scala puede leer esto: http://www.scala-lang.org/node/107.

Ahora vamos a hacer la pagina principal:


@(algos: List[Algo], algoForm: Form[String])

@import helper._

@main("Todo list") {
   
    <h1>@algos.size algo(s)</h1>
   
    <ul>
        @algos.map { algo =>
            <li>
                @algo.nombre
               
                @form(routes.Algo.delete(algo.id)) {
                    <input type="submit" value="Delete">
                }
            </li>
        }
    </ul>
   
    <h2>Add a new Algo</h2>
   
    @form(routes.Algo.newAlgo) {
       
        @inputText(algoForm("Nombre"))
       
        @inputText(algoForm("Descripcion"))
       
        <input type="submit" value="Create">
       
    }
   
}

Vamos a explicar un poquito, al principio declaramos una lista de Algo y un formulario; luego imprimimos cuantos algos hay y generamos un listado; permitiendo que se puedan eleminar; y para finalizar permitimos crear nuevos algos.

También importamos helper._ el cual nos ayuda a la creación de formularios. Normalmente un formulario crea un <form> de html.

Ahora vamos al controller a decirle que muestre nuestra nueva pagina:



package controllers

import play.api._
import play.api.mvc._

import play.api.data._
import play.api.data.Forms._

object Algo extends Controller {

  def index = Action {
    val algoForm = Form(
      "Nombre" -> nonEmptyText)
    Ok(views.html.algoIndex(models.Algo.all() ,algoForm))
  }

  def newAlgo = TODO

  def delete(id: Long) = TODO

}


Como vemos hemos hecho un formulario y le dijimos que nombre es requerido. Además que vaya a nuestra pagina.

Si vamos a http://localhost:9000/algo veremos la siguiente pagina:



Hermosa salvo porque todavía no guarda en la base de datos... Pero esto será en el próximo post!


Nuevo versión de Ceylon!!



Si señores Ceylon M5 es ta aquí!! y que nos podemos encontrar en esta nueva versión?

Bueno esta versión viene con varias novedades, por ejemplo las tuplas, interacción directa con javascript, el operador : , verbatim strings (que seria en castellano como cadenas textuales) , tipos de parámetros por defecto, nuevos módulos como ceylon.time para las fechas y ceylon.net.httpd; y más y más!!

A medida que vaya aprendiendo las nuevas características las posteo.

Dejo links:
http://ceylon-lang.org/documentation/1.0/roadmap/#milestone_5_done
http://ceylon-lang.org/blog/2013/02/15/progress-report/

miércoles, 13 de marzo de 2013

¡Llevemos programación a las escuelas!



Porque no enseñar a programar en la escuela secundaria?? Porque no utilizar python?? y por que no hacer vídeos juegos con el fin de alentar el aprendizaje?? Al parecer todas estas preguntas se hizo Hugo Ruscitti y decidió que era muy bueno aprender a programar y que python era un excelente lenguaje para aprender y que hacer vídeo juegos iba a facilitar la tarea.

Por lo tanto decidió sugerir pilas engine. Pilas es un framework para hacer vídeo juegos de manera sencilla.
Está dirigido a personas que comienzan a programar vídeo juegos y quieren lograr resultados interesantes y divertidos en poco tiempo.  Está dirigido a personas que comienzan a programar vídeo juegos y quieren lograr resultados sorprendentes y divertidos en poco tiempo.

Pero ¿Por qué darle importancia a aprender a programar? Hugo contesta lo siguiente en su pagina:

"Porque programar te permite aprender haciendo cosas, se vuelve algo muy significativo y divertido, te da muchas herramientas y oportunidades de aprendizaje: te permite tener el control de la computadora y decirle qué hacer. Podrías crear un videojuego, una aventura multimedia, un sitio web o un puñado de ventanas con botones e imágenes que hacen algo útil (o no).

Hacer programas de computadora no es solamente escribir código, consiste en crear una estrategia paso a paso de lo que queremos lograr. Es algo dirigido a un resultado, es comenzar con una idea básica (a veces incompleta) y convertirla en realidad."


Dejo link:
http://pilas-editor.com.ar/
http://pilas-engine.com.ar/
https://pypi.python.org/pypi/pilas/

martes, 12 de marzo de 2013

Tenemos una nueva versión de Jetty!!


Salio Jetty 9.0 y con todo. La novedad más importante es que soporta el protocolo SPDY, es el protocolo creado por Google para mejorar la performance. También con este protocolo el servidor puede refrescar una parte de la pagina sin que el cliente lo solicite. Si, si, es lo más!! Por ahora este protocolo es soportado por Chrome (claro),  Firefox y Opera.

El propósito de SPDY es reducir el tiempo de carga de las páginas web. SPDY aprovecha TCP, que es el protocolo más extendido para HTTP, por lo que sería más fácil distribuirlo. Sólo es necesario que el servidor y el cliente puedan manejar este protocolo, haciéndose transparente para las aplicaciones que lo usen. Este nuevo protocolo utilizaría una sola conexión TCP para manejar varias peticiones HTTP a la vez de manera concurrente. Además usa SSL como capa subyacente para incrementar la seguridad.

Esto es muy groso!! Pero no es todo también soporta muchas de las características de Servlet 3.1, aunque el soporte no es completo en la versión 9.0, sino que en el futuro cercano habrá una revisión menor del servidor en la que se completará el soporte para Servlet 3.1. Por la parte que a JSP le toca, el Jetty ha pasado a soportar JSP 2.2.

Que otra novedad nos trae? que corre sobre Java 7 pero no en Java 6. Migraron a Java 7.

Conclusión grandes cambios para este pequeño servidor web, que a pesar de ser pequeño y ligero tiene mucho para dar!!

Dejo link:
http://jetty.codehaus.org/jetty/
http://www.eclipse.org/jetty/documentation/current/

WAT!!!!

Este video es muy divertido; pero muy divertido. Cuenta las peripecias con las que se encuentra un programador Ruby o Javascript. Y por suerte cuenta solo algunas ...


Todos los lenguajes tienen algunas malas decisiones de diseño y esta persona las muestra de modo muy divertido.

lunes, 11 de marzo de 2013

Code school nos regala un curso de Heroku


La gente de code school ha publicado un vídeo con el objetivo de enseñar como se deployear aplicaciones en la plataforma Heroku. Heroku es un hosting para aplicaciones hechas en Ruby on Rails o otras tecnologias, un hosting bastante interesante y con un montón de add-ons para agregar mayor funcionalidad a las aplicaciones. Una onda Google App Engine pero para diferentes tecnologías  Esta bueno es buena idea probarlo.

Dejo link:
http://www.codeschool.com/code_tv/heroku?__utma=1.292742160.1349920258.1362364220.1363050406.17&__utmb=1.1.10.1363050406&__utmc=1&__utmk=58240682&__utmv=-&__utmx=-&__utmz=1.1363050406.17.7.utmcsr%3Dmailchimp%7Cutmccn%3Dcode_tv_heroku%7Cutmcmd%3Demail%7Cutmcct%3Dnull


domingo, 10 de marzo de 2013

Learn Java


Quiero compartir una pagina la cual tiene como objetivo aprender java. Con esta pagina podemos probar java de forma online. Podemos leer tutoriales, hacer ejercicios,y aprender!!

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

sábado, 9 de marzo de 2013

Grunt, Un framework javascript para correr tareas.


Node.js es un framework que viene creciendo cada vez más. Grunt, es una herramienta basada en tareas, herramienta de linea de comando escrito en javascript para la plataforma Node.js. Con este framework podemos correr tareas; esta diseñado para ser extensible. Vale la pena darle una mirada..

Dejo link:
http://gruntjs.com

5 libros para aprender Spring Framework y String MVC


Spring Framework es un Framework que nos provee la inyección de dependencia y la programación orientada a aspecto; que puede ser tan fantástico esto? Y nos provee una forma de conectar diferentes tecnologías y frameworks sin acoplarnos a ellos.

Les quiero compartir un link sobre libros para aprender Spring Framework y Spring MVC.

Dejo link:
http://www.dzone.com/links/r/5_good_books_to_learn_spring_framework.html


jueves, 7 de marzo de 2013

Mir, servidor gráfico de Canonical


Canonical ha anunciado que se encuentra desarrollando un servidor gráfico llamado Mir, el cual no tiene nada que ver ni con X.Org ni con Wayland, siendo este último el servidor gráfico por el que está apostando la mayoría de los desarrolladores del mundo Linux.

La razón para pasar olímpicamente de Wayland es el objetivo que tienen en Canonical de hacer de Ubuntu un sistema operativo que sea capaz de correr en móviles, tabletas, televisiones y por supuesto ordenadores. 

«Estamos desarrollando un servidor gráfico de nueva generación llamado Mir. Un componente a nivel de sistema destinado a reemplazar el gestor de ventanas X y cuyo fin es proporcionar experiencias de usuario también de nueva generación tanto en ordenadores con Linux como en dispositivos móviles que funcionan con Ubuntu»

Esto es un paso muy importante para Canonical pero se aleja de la comunidad, creo que cada vez esta dando pasos para alejarse de linux y su comunidad y acercarse a seguir sus propios objetivos.

Creo que estamos rompiendo a linux en pedazos y esto no es malo, lo malo es que desarrollemos los mismos pedazos más de una vez. Linux tiene un grabe problema con la fragmentación, cada vez tenemos linux más diferentes, con mayores problemas de incompatibilidad, con reinventos de la rueda todo el tiempo.  A mi me gusta que cada distro tenga su forma de hacer las cosas, usar gnome, kde, xfce o cualquier otro; pero creo que cuando esto trae problemas de compatibilidad, de duplicidad de trabajo por parte de los desarrolladores, no es bueno.

Dejo link:
https://wiki.ubuntu.com/MainInclusionProcess

martes, 5 de marzo de 2013

Codecademy para PHPs

Codecademy abrió un curso de PHP, esta plataforma que ya la publicite en otros posts, nos brinda la posibilidad de aprender python, javascript, ruby y ahora php!! Que más queres papa!!!

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

Que disfruten!!

domingo, 3 de marzo de 2013

Libro gratuito sobre Erlang



Erlang es un lenguaje funcional y diseñado para la comunicación distribuida. Tiene muchas ventajas y su mayor logro es introducir la teoría de Actores para resolver el problema de la concurrencia. Es un gran lenguaje y les dejo un link a un libro que se puede leer online de forma gratuita.

Dejo el link:
http://learnyousomeerlang.com/

sábado, 2 de marzo de 2013

Por que aprender Clojure?

Por que aprender Clojure? Que gano aprendiendo este lenguaje?
Las repuestas a estas preguntas en el siguiente vídeo:

Tutorial de Python en Español por Python Argentina


La gente de Python Argentina realizo un tutorial sobre Python, la verdad muy bueno!! Que grande cuando la comunidad quiere ayudarnos a aprender. Lo estoy bajando...

Dejo link:
http://docs.python.org.ar/tutorial/index.html

viernes, 1 de marzo de 2013

Google Annotations Gallery @anotacionesDivetidas



No te quedan chicas las anotaciones de java?? Tenes ganas de expresar más con anotaciones Java?? Entonces esta librería es para vos!!

Google Annotations Gallery esta librería contiene un conjunto de anotaciones para dar instrucciones más claras a los demás programadores y para ponerle más diversión al código.

Mira estas anotaciones:


@AhaMoment
@BossMadeMeDoIt
@HandsOff
@IAmAwesome
@LegacySucks
@Magic
@AnimalsHarmedDuringTheMaking

Es decir que tenemos anotaciones para expresarnos muy bien, y es bien completito. Se me ocurren otras anotaciones: @hayAlgoMalQueNoAndaBien, @seLeMamoLaBurra, @etc...

A ustedes se les ocurre alguna otra??

Dejo link: http://code.google.com/p/gag/

martes, 26 de febrero de 2013

Si todo el mundo sabría programar, seria mejor?


Si en todas las escuelas del mundo se enseñara a programar, tendríamos un mundo feliz? Existe un movimiento para intentar que se enseñe programación en todas las escuelas. Que piensan de esta idea? Yo creo que puede ser bueno para nuestra profesión y a la humanidad. Dado que la gente van a entender que hacemos. Y a la humanidad es bueno dado que es bueno enseñar a resolver problemas y es lo que hacemos cuando programamos.




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

Comienza nuevamente Functional Programming Principles in Scala

Según fuentes muy pero muy confiables comienza nuevamente el curso de Functional Programming Principles in Scala en coursera dictado por Martin Odersky. La verdad es muy recomendable, muy buen curso.

Dejo un video:


Dejo link:
https://www.coursera.org/course/progfun



lunes, 25 de febrero de 2013

Hoy comienza el curso de MongoDB para javeros



Hoy comienza el curso de MongoDB para javeros, y no te anotaste? media pila. Yo ahora lo estoy viendo a ver que onda.

Les dejo el link:
https://education.10gen.com

Primeros pasos con Play! Part 4


Seguimos con Play!

Vamos a modificar el ejemplo, primero vamos a modificar la clase Application.scala de la siguiente manera:

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {
 
  def index = Action {
    Ok("Hola!")
  }
 
}





Estamos devolviendo “Hola!” que es texto plano. Pero si nos equivocamos y ponemos así:

def index = Action {
    Ok("Hola!)
}

Play nos ayuda, nos indica donde esta el error:


Bueno vamos a hacer un ABM de algo, primero vamos a modificar el archivo conf/routes de la siguiente manera:

# Algo page
GET     /algo                          controllers.Algo.index
GET     /algo/new                   controllers.Algo.new
GET     /algo/:id/delete            controllers.Algo.delete(id: Long)

Ahora vamos hacer el nuevo action llamado Algo.scala que va a ser así:

package controllers

import play.api._
import play.api.mvc._

object Algo extends Controller {
 
  def index = TODO
 
  def newAlgo = TODO
 
  def delete(id: Long) = TODO
 
}

Dejamos los métodos en TODO, es decir que lo vamos a hacer más adelante. Si corremos el servidor y vamos a http://localhost:9000/algo vemos lo siguiente:


Para que se entienda TODO es un método que devuelve un action es así:

  val TODO = Action {
    NotImplemented[play.api.templates.Html](views.html.defaultpages.todo())
  }

Por lo tanto cuando busca controllers.Algo.index devuelve al action TODO. Pero ahora rápidamente vamos a escribir el model de Algo. Pero esto lo vamos a ver en el próximo post...


domingo, 24 de febrero de 2013

sábado, 23 de febrero de 2013

Primeros pasos con Play! Part 3


Siguiendo con los posts:

http://emanuelpeg.blogspot.com.ar/2013/02/primeros-pasos-con-play.html
http://emanuelpeg.blogspot.com.ar/2013/02/primeros-pasos-con-play-part-2.html

Tenemos que bajarnos Scala-IDE del siguiente link:
http://scala-ide.org/download/milestone.html y tenemos que bajar eclipse del siguiente link: http://www.eclipse.org/downloads/ (juno) y si no queremos usar la ultima versión podemos bajar Indigo : http://www.eclipse.org/downloads/packages/release/indigo/sr2

Descomprimimos el empaquetado y ya tenemos el IDE funcionando.
Ahora vamos a importar el proyecto. Para ello vamos a la carpeta raíz del proyecto y ponemos:

play eclipse

Entonces desde eclipse hacemos import... → “exiting projects into workspace” con esto tenemos nuestro proyecto en eclipse.

Ahora esta todo configurado, podemos programar libremente.

Vamos a ver como se muestra la pagina cuando corremos la aplicación. En conf/routes se define el punto de entrada de la aplicación; sería como un struts.xml en struts. En este archivo podemos ver algo como esto:

# Home page
GET     /                           controllers.Application.index

Esto quiere decir que si vamos a / va a llamar al controlador Application al método index. Si vemos el action podemos ver lo siguiente:

package controllers

import play.api._
import play.api.mvc._

object Application extends Controller {
 
  def index = Action {
    Ok(views.html.index("Your new application is ready."))
  }
 
}

Como pueden ver este controller devuelve el objeto Ok que es un Action. Este action indica que todo salio bien, es decir que termino con código 200. Con el método views.html.index(message: String), se esta llamando a las vista index.scala.html. Si abrimos este archivo podemos ver:

@(message: String)

@main("Welcome to Play 2.1") {
   
    @play20.welcome(message)
   
}

La plantilla permite mezclar contenido html con declaración de Scala, las declaraciones de scala comienzan con el @.

Por ahora no vamos a modificar nada pero en el próximo post, ya lo verán...


jueves, 21 de febrero de 2013

Webinar gratuito sobre MySQL


Me llego un mail de los chicos de oracle al parecer van a dictar un webinar sobre Mysql 5.6. en castellano. Que más queres? me inscribo, les dejo el mail:

"Regístrate gratis para este seminario web en vivo, donde conocerás de los expertos lo nuevo y asombroso de MySQL 5.6, la más reciente versión de la base de datos open source más popular del mundo. Participa en esta sesión interactiva para toda Latinoamérica y libera el potencial de MySQL 5.6!"


Try jQuery


Un nuevo curso gratuito de codeschool llamado "try jquery"... Como pueden sospechar es de jquery. Esto es muy bueno, voy a empezarlo yaaa!!!

Dejo link:
http://www.codeschool.com/courses/try-jquery

miércoles, 20 de febrero de 2013

Ubuntu for tablets esta aquí!!

Ubuntu for tablets esta aquí!! Sip, luego de presentar ubuntu para celulares, ahora la versión para tablets. Creo que era un movimiento cantado, todas las empresas ven como la nueva generación de pcs, las tablets y los celulares. Que piensan?? Otras distribuciones linux se van a volcar a las tables?? Cual les gustaría?

Dejo el vídeo presentación:


martes, 19 de febrero de 2013

Que es List comprehension??


List comprehension seria en español como "Lista de comprensión" pero me suena raro la traducción. Más allá de la traducción, que sería List comprehension? Bueno antes que nada, se acuerdan de las definiciones matemáticas de por ejemplo números pares o múltiplos que veíamos en la escuela? por ejemplo la definición de los números pares mayores a 10 sería así:

s = { 2 * x  | x  € N, 2 * x > 10 }

Esto se lee como los números pares (2*x) que pertenecen (€) a los números naturales (N) y que sean mayores que 10. Esto define la lista de forma compresiva. Es decir se puede conocer el valor de la lista dependiendo de la posición sin enumerar sus elementos. Esto si lo definimos en Haskell sería así:

s = [ 2*x | x <- [0..], x*2 > 10 ]

Como vemos es muy similar a la definición matemática, lo que indica que Haskell es muy buen lenguaje funcional. Se ve que los se define los números naturales como [0..] lo que indica que esta lista es infinita; por lo tanto la búsqueda de cada elemento se hace de forma perezosa.

Otros lenguajes implementan las List comprehension, por ejemplo Python, Scala, Erlang, Ceylon, Clojure, F#, Groovy, Ruby, etc.

En resumen podemos decir que List comprehension es una característica de algunos lenguajes con lo cual podemos definir listas de forma comprensiva y algo importante es que se pueda resolver de forma perezosa, para no tener que calcular elementos que no usamos.


Dejo link:
http://www.haskell.org/haskellwiki/List_comprehension
http://www.erlang.org/doc/programming_examples/list_comprehensions.html
http://en.wikipedia.org/wiki/List_comprehension