domingo, 29 de abril de 2012

Feria de lenguajes JVM


Scala y Groovy  al parecer no bastan, conforme pasa el tiempo siguen apareciendo nuevos lenguajes de programación que funcionan gracias a  la  máquina virtual Java.

Me parece bien la diversidad, pero creo también pueden llegar a confundir a más de uno tantos lenguajes.


¿No son suficientes los lenguajes de programación existentes? , ya sea  variantes de C:  C++, C#, y Objetive-C y otros más. 

#include < stdio.h >
int suma(int a,b);
/* código en C*/
void main(){
   int a=12, b=43;
   printf("La suma de %d  y  %d  es: %d",a,b,suma(a,b));
}

int suma(int a, int b){
  return a+b;
}

Por lo general los lenguajes nuevos pretenden conservar la esencia de los lenguajes más usados. Por ejemplo el código equivalente en Ceylon sería algo así:

void run(){
  Integer suma(Integer a, Integer b){
    return a+b;
  }
  print("La suma de  12 y 43 sería " suma(12,43)  " ");
}



Programar en Java si que es difícil, el lenguaje ha evolucionado mucho. Basta con ver la cantidad de librerías y frameworks que existen.  Originalmente el lenguaje no estaba pensado para trabajar en aplicaciones Web, poco a poco fueron integrando nuevas tecnologías para competir con ASP y PHP.

Promesa de los nuevos lenguajes

Básicamente es seguir usando el API de Java, pero sin conservar su verbosidad, ser fáciles de aprender (ups ... ahi te hablan Clojure) y promover buenas prácticas.


Lista de lenguajes dependientes de la JVM



sábado, 28 de abril de 2012

Ceylon ... funcionando correctamente




Ahora que tuve un poco de tiempo quise probar este lenguaje.  Al inicio tuve una experiencia no muy buena (un error de capa 8), pero bueno decidí darme otra oportunidad.

La única forma de aprender es tener iniciativa y no esperar resultados mágicos.

La verdad no se mucho de este lenguaje, por lo poco que he leído (y entiendo) en este lenguaje  se tiene que tener "cuidado" al elegir las variables con las que se va trabajar ya que estas no cambian a lo largo del programa. Entre otras cosas más como la ausencia de punteros nulos, etc.

En general cambia la filosofía de trabajo.

A primera vista se parece a lenguajes como Scala y Groovy, pero solo "visualmente".  Groovy a mi parecer es más "amigable", si no conoces algo del lenguaje basta que escribas en código Java y tu programa funcionará.

Scala y Ceylon son más "estrictos", el programador debe conocer realmente el lenguaje.  Nada de  "haber si esto funciona" ...


Ej 0 ... primer programa en Ceylon


void run(){
String[] lenguajes={"Ceylon","Clojure","Groovy","Jabaco","JRuby","Jython","Scala"};
String titulo="*** Lista de lenguajes dependientes de la JVM ***";
print("[Ceylon funcionando correctamente]\n");
print(titulo);
for(lenguaje in lenguajes){
  print(lenguaje);
}
}


Compilar: ..\..\bin\ceylon compile source\prog.ceylon
Ejecutar:..\..\bin\ceylon run default




Ej 1 ... uso de for en Ceylon
void run(){
Integer[] numeros={1,2,3,4,5};
print("Uso de for en Ceylon");
for(n in numeros){
print("Hola no. " n " ");
}

Compilar: ..\..\bin\ceylon compile source\prog.ceylon
Ejecutar:..\..\bin\ceylon run default


Ej 2 ... funciones en Ceylon
void run(){

Integer suma(Integer x, Integer y){
return x+y;
}
Integer resta(Integer x, Integer y){
return x-y;
}    
Integer multiplicacion(Integer x, Integer y){
return x*y;
}
Integer division(Integer x, Integer y){
return x/y;
}
print("Aritmetica basica en Ceylon");
print("La suma de 2 y 3 es: " suma(2,3) " ");
print("La resta de 6 y 3 es: " resta(6,3) " ");
print("La multiplicacion de 4 y 8 es: " multiplicacion(4,8) " ");
print("La division de 12 y 4 es: " division(12,4) " "); // debería dar 3
}

Compilar: ..\..\bin\ceylon compile source\prog.ceylon
Ejecutar:..\..\bin\ceylon run default


Por lo que se ve el lenguaje va por buen camino.

El REPL de Ceylon

http://try-ceylon.rhcloud.com/








sábado, 14 de abril de 2012

Aprendiendo java ... [001]

Tutorial completo en: http://www.javamexico.org/blogs/sr_negativo

Este es un tutorial para aprender a programar en Java enfocado a principiantes, debes descargar el jdk y descomprimir el archivo en C:\ (Windows)  y/o  /home/ (Linux).

Colocar la variable de entorno en Windows



Comprobar instalación




Variable de entorno en Linux


JAVA_HOME=”/opt/jdk1.6.0_03″
CLASSPATH=”.”
PATH=”$PATH:/opt/jdk1.6.0_03/bin”
export JAVA_HOME
export CLASSPATH
export PATH

Con esto ya tendrás configurada tu variable de entorno, puede comprobar la instalación tecleando java -version  en la terminal de comandos.



¿Qué necesito?



  • Saber matemáticas y algo de lógica
  • Saber inglés, la mayoría de la documentación viene en ese idioma
  • No necesitas un IDE (el programa para hacer programas), puedes usar  el notepad u notepad++
  • Estudiar mucho
  • Investigar el lenguaje, estructuras de control de de datos
  • Hacer ejercicios de programación

Ayuda .. mi programa no funciona






public class Inicio{ public static void main(String[] args)throws Exception{ if(args.length!=0){ for(String e: args){ System.out.println("Hola: "+e+" bienvenido"); } }else{ System.out.println("nada que evaluar"); } } }

A veces la solución más sencilla es la adecuada. 

Compilamos el programa:
javac -g Inicio.java
Ejecutamos el programa:
java Inicio
Parece no haber un problema el programa se compilo correctamente, sin embargo no podemos ver el "resultado", esto se debe a que no hemos colocado ningún argumento para que el programa lo lea y visualice.





A veces basta con que leas detenidamente el código para comprender que esta mal en el.



Esto es una broma, no es verdad. Sin embargo, a veces los IDEs nos dificultan más las cosas. De preferencia es mejor aprender a usar los comandos del JDK.


Estudiar... es la única forma para aprender

No hay soluciones mágicas, solo con el estudio constante lo puede lograr.



Ejercicios

1. Sumar  cada uno de los elementos de un arreglo
2. Determinar el elemento menor y el mayor de un arreglo de números
3. Calcular el promedio de un grupo de alumnos con calificaciones de 6.5,6.43,7.44,7.32,7.444,8.5,9.0.8,65,4.32,7.433


















Las imágenes de Homero Simpson son propiedad de Matt Groening.

domingo, 8 de abril de 2012

JTarot ... los arcanos en Java

Todavía no esta terminado, pero no podía esperar más.

[JTarot.java]




import javax.swing.JFrame; import javax.swing.UIManager; import javax.swing.JLabel; import javax.swing.JButton; import javax.swing.JTextField; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JPanel; import javax.swing.JOptionPane; import javax.swing.*; import javax.swing.JDialog; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.event.*; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /* @author yo */ public class JTarot extends JFrame{ private JTextField txtNombre,txtDiaNac,txtMes,txtAnyoNuevo; private JTextArea textArea; private JScrollPane scroller; public JTarot(){ super("[JTarot ... los arcanos en Java ]"); setVisible(true); setDefaultLookAndFeelDecorated(true); JPanel panel=new JPanel(); JLabel lblImg= new JLabel(new ImageIcon(Prog03.class.getResource("JTarot.png"))); panel.add(lblImg); panel.add(new JLabel("Tu nombre:")); txtNombre=new JTextField(6); panel.add(txtNombre); panel.add(new JLabel("D�a de nacimiento:")); txtDiaNac=new JTextField(6); panel.add(txtDiaNac); panel.add(new JLabel("Mes de nacimiento:")); txtMes=new JTextField(6); panel.add(txtMes); panel.add(new JLabel("A�o nuevo que inicia:")); txtAnyoNuevo=new JTextField(6); panel.add(txtAnyoNuevo); JButton calcular=new JButton("Calcular"); calcular.setToolTipText("obtener tu carta del tarot"); calcular.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ String c1=obtenerSumaParc(txtDiaNac.getText().trim(),txtMes.getText().trim(),txtAnyoNuevo.getText().trim()); JOptionPane.showMessageDialog(null, txtNombre.getText()+ " la carta que te corresponde es:\n"+tuCarta(obtenerSuma(c1)), "JTarot", JOptionPane.WARNING_MESSAGE, new ImageIcon(imgTarot(c1))); limpia(); } }); panel.add(calcular); JButton quitar=new JButton("Quitar"); quitar.setToolTipText("quitar programa"); quitar.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); panel.add(quitar); add(panel); setSize(900,200); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String ... args)throws Exception{ for(UIManager.LookAndFeelInfo laf:UIManager.getInstalledLookAndFeels()){ if("Nimbus".equals(laf.getName())) try { UIManager.setLookAndFeel(laf.getClassName()); new JTarot(); } catch (Exception ex) { } } } public String imgTarot(String c){ String[] arcanos={"El-Mago.jpg","La-Papisa.jpg", "La-Emperatriz.jpg","El-Emperador.jpg","El-Papa.jpg", "El-Enamorado.jpg","El-Carro.jpg","La-Justicia.jpg", "El-Ermitano.jpg","La-Rueda.jpg","La-Fuerza.jpg", "El-Colgado.jpg","La-Muerte.jpg","La-Templanza.jpg", "El-Diablo.jpg","La-Torre.jpg","La-Estrella.jpg", "La-Luna.jpg","El-Sol.jpg","El-Juicio.jpg", "El-Mundo.jpg","El-Loco.jpg"}; String tarot=null; int aux=obtenerSuma(c); for(int j=0;j<arcanos.length;j++){ tarot=arcanos[aux-1]; } return tarot; } static int obtenerSuma(String cad){ int sumaTotal=0; for(int i=0;i<cad.length();i++){ char caracter=cad.charAt(i); String cadena=String.valueOf(caracter); sumaTotal+=Integer.parseInt(cadena); } return sumaTotal; } static String obtenerSumaParc(String dia,String mes, String nuevo){ int sumaparc=0; int aux=0; String cade=null; if(mes.equals("enero")){ aux=1; } if(mes.equals("febrero")){ aux=2; } if(mes.equals("marzo")){ aux=3; } if(mes.equals("abril")){ aux=4; } if(mes.equals("mayo")){ aux=5; } if(mes.equals("junio")){ aux=6; } if(mes.equals("julio")){ aux=7; } if(mes.equals("agosto")){ aux=8; } if(mes.equals("septiembre")){ aux=9; } if(mes.equals("octubre")){ aux=10; } if(mes.equals("noviembre")){ aux=11; } if(mes.equals("diciembre")){ aux=12; } sumaparc=Integer.parseInt(dia)+aux+Integer.parseInt(nuevo); cade=String.valueOf(sumaparc); return cade; } static String tuCarta(int s){ String horos=null; switch(s){ case 1: horos="El Mago"; break; case 2: horos="La Papisa"; break; case 3: horos="La Emperatriz"; break; case 4: horos="El Emperador"; break; case 5: horos="El Papa"; break; case 6: horos="El Enamorado"; break; case 7: horos="El Carro"; break; case 8: horos="La Justicia"; break; case 9: horos="El Ermita�o"; break; case 10: horos="La Rueda"; break; case 11: horos="La Fuerza"; break; case 12: horos="El Colgado"; break; case 13: horos="La Muerte"; break; case 14: horos="La Templanza"; break; case 15: horos="El Diablo"; break; case 16: horos="La Torre"; break; case 17: horos="La Estrella"; break; case 18: horos="La Luna"; break; case 19: horos="El Sol"; break; case 20: horos="El Juicio"; break; case 21: horos="El Mundo"; break; case 22: horos="El Loco"; break; } return horos; } public void limpia(){ txtAnyoNuevo.setText(""); txtDiaNac.setText(""); txtMes.setText(""); txtNombre.setText(""); } }






 Descarga aqui











miércoles, 4 de abril de 2012

SDK para móviles




[ SDK para móviles]


  1. Sencha http://www.sencha.com/ [sdk para móviles]
  2. Titanium http://www.appcelerator.com/ [sdk para móviles]
  3. Corona http://www.anscamobile.com/corona/ [sdk para móviles]
  4. Android http://developer.android.com/sdk/index.html [sdk para móviles]

Liga: http://www.edu4java.com/

Primer aplicación en Android


Tutorial de programación de Android 






Esto es el resultado del tutorial







martes, 3 de abril de 2012

Clojure ... primer vistazo



¿Cómo entro al REPL de clojure?

java-jar clojure-1.3.0-RC0.jar


Debe salir esto:
user=> 

¿Cómo salgo del REPL?
En Windows: Ctrl + C
En Linux: Ctrl + D

Hace tiempo que quería probar este lenguaje, y aprovechando las vacaciones por fin pude. Si Scala y Ceylon se me hacían algo "extraños", este en verdad si que lo es.

Hacer una sumatoria es bastante fácil (al menos así parece):

user=> (+ 3 4 5 6) 
18



En Java:

Sumatoria.java
package com.pruebas.01;
public class Sumatoria{
   public static void main(String[] args)throws Exception{
    int suma=0;
   if(args.length!=0){
        for(String e: args){
        suma+=Integer.parseInt(e);

       }
  System.out.println("sumatoria: "+suma);

      }else{

   System.out.println("nada que evaluar");
}
   
   }

}


javac -g Sumatoria.java
java Sumatoria 3 4 5 6
sumatoria: 18


Otros lenguajes

Python   .py

msg="Un simple mensaje en Python"
print msg

Scala   .scala

var msg="Ahora en Scala";
println(msg)

Groovy .groovy

def msg="Y otro más en Groovy"
println("${msg}")

Ceylon   .ceylon

String msg="Y además en Ceylon";
print(msg);


Java   .java

String msg="Y en el poderoso Java";
System.out.println(msg);

Clojure   .clj

user=> "Tratando de usar clojure"
"Tratando de usar clojure"

user=> (new java.util.Date)
#Date Tue Apr 03 11:23:43  CDT 2012

Lista.java


import java.util.List;
import java.util.ArrayList;

public class Prog22{
   public static void main(String[] args)throws Exception{
    List<Integer> lista=new ArrayList<Integer>();
   if(args.length!=0){
        for(String e: args){
        lista.add(Integer.parseInt(e));

       }
  System.out.println("lista: "+lista);

      }else{

   System.out.println("nada que evaluar");
}
   
   }

}


En clojure

user=> (list 12 33 21)
(12 33 21)


Otros ejemplos


Ejecutar programa *.cjl


java -jar clojure-1.3.0-RC0.jar  prog01.cjl


Cambiar el prompt dentro del shell


user=> (ns programador-clojure
                 (:use clojure.xml))


Crear una función
(fn [x,y] (* x y))
(def producto (fn [x,y] (* x y)))
;; para usar
(producto 5 43)  ;; debe dar 215 







¿Qué es Clojure?


Links

  1. http://www.moxleystratton.com/article/clojure/for-non-lisp-programmers
  2. http://clojure.org/downloads
  3. http://in.relation.to/Tutorials/IntroductionToCeylon
  4. http://try-ceylon.rhcloud.com/
IDEs para clojure
  1. clooj https://github.com/arthuredelstein/clooj [IDE]
  2. Clojure Box http://clojure.bighugh.com/ [IDE]
  3. lazytest https://github.com/stuartsierra/lazytest[IDE para pruebas]
  4. enclojure http://enclojure.org/[Plugin para NetBeans]