El Blog de Murphy

7 Diciembre 2008

¿Que es javaFX? – Parte 3

Archivado en: JavaFX — Etiquetas:, , — Julio Cesar Cachay Pérez @ 11:07 pm

Hoy domingo, estaba viendo spanglish y se me ocurrio avanzar un poco de este post, ademas me siento un poco mal de la borrachera de ayer y no tengo muchas ganas de salir

Siguiendo con el pequeño(haciendose grande) tutorial, es hora de hablar de algunas de las caracteristicas mas interesantes de javaFX, Bindings y triggers

/**
 * @author Julio Cesar Cachay Perez
 */

/* cuando usas un bind, lo que hacemos es decirle a la variable
 * que lo declara que su valor cambiara de acuerdo a los cambios que
 * sufra la variable en la vida del script, ejemplo:
 */

var x = 0;
def y = bind x;
x = 1;// cambiamos la var
println(y); // 1
x = 47;
println(y); // 47

/* Binding y Funciones
 * existen 2 funciones, funciones bound y non-bound
 * */
var escalar = 1.0;

bound function makePoint(xPos : Number, yPos : Number) : Point {
     Point {
          x: xPos * escalar
          y: yPos * escalar
     }
}

class Point {
     var x : Number;
     var y : Number;
}

//bound se usa con bind

var myX = 3.0;
var myY = 3.0;
def pt = bind makePoint(myX, myY);
println(pt.x);

myX = 10.0;
println(pt.x);

escalar = 2.0;
println(pt.x);

/* Imprime:
 * 3.0
 * 10.0
 * 20.0
 * */

/* Secuencias y Binding
 * podemos usar binds con las expresiones for
 * */
var sec1 = [1..10];
def sec2 = bind for (item in sec1) item*2;
printSeqs();

function printSeqs() {
     println("Primera Secuencia:");
     for (i in sec1){println(i);}
     println("Segunda Secuencia:");
     for (i in sec2){println(i);}
}
/* imprime:
 * Primera Secuencia:
1
2
3
4
5
6
7
8
9
10
Segunda Secuencia:
2
4
6
8
10
12
14
16
18
20
 * */

/*
 * Trigger (disparadores) son bloques arbitrarios de codigo para
 * las variables que se ejecutan cuando cambia el valor de una
 * de estas
 * */
var password = "foo" on replace oldValue {
     println("\nALERTA! El Password cambio!");
     println("Valor antiguo: {oldValue}");
     println("Valor nuevo: {password}");
};

password = "bar";

/*
 *ALERTA! El Password cambio!
Valor antiguo:
Valor nuevo: foo

ALERTA! El Password cambio!
Valor antiguo: foo
Valor nuevo: bar
*/

Por ahora lo voy a dejar ahi, necesito seguir avanzando con java2d (ia bastante tiempo que no lo veo) bueno voy a permitir dar un pequeña opinion de javaFX antes

Despues de darle unas vueltas a la pagina de javafx, me di cuenta que es mucho menos de lo que esperaba, demoran en cargar, muchos mensajes de advertencia y mas cosas que ia no vale la pena mencionar, creo que fue liberado prematuramente, y aunque hay mucho por mejorar tambien tiene cosas interesantes, y creo que si se mantiene la linea podra ser utilizable para el 2010 XD naaa En fin esta bonito, lastima que no han puesto enfasis en la experiencia del usuario.

Hey antes d eirme, si estan interesados en hacer juegos en appletrs pero de manera espectacular, hasta mejor que flash segun bubblemarks, utilizen pulpcore, original de David Brackeen, su libro para desarrollar juegos es espectacular, es alucinnate, sino jueguen esto

Bueno eso es todo, con suerte despues seguire con FX, alaoz

¿Que es javaFX? – Parte 2

Archivado en: JavaFX — Etiquetas:, , — Julio Cesar Cachay Pérez @ 12:51 am

Y seguimos con nuestro pequeño tutorial de JavaFX.

Todo el post anterior fueron atributos, pero javaFX tiene mas que atributos, pero es hora de conocer que hacer con eso atributos y algunos truquitos para hacer con ellos

/**
 * @author Julio Cesar Cachay Perez
 */

var resultado = 0;
resultado += 1;
println(resultado); // 1

resultado -= 1;
println(resultado); // 0

resultado = 2;
resultado *= 5; // 10
println(resultado);

resultado /= 2; // 5
println(resultado);

resultado = 1; // 1

resultado--;  // 0
println(resultado);

resultado++; // 1
println(resultado);

resultado = -resultado; // -1
println(resultado);

var exito = false;
println(exito); // false
println(not exito); // true

resultado = 3;
resultado++;
println(resultado); //  4
++resultado;
println(resultado); // 5
println(++resultado); // 6
println(resultado++); // = 6! resultado cambiara despues de ejecutar la impresion
println(resultado); // 7

def num1 = 1;
def num2 = 2;

println(num1 == num2); // ==(igual a) //imprime false
println(num1 != num2); // diferente // true
println(num1 > num2);  // mayor a // false
println(num1 >= num2); // mayor igual a // false
println(num1 < num2);  // menor a // true
println(num1 <= num2); // menor igual a // true

def str1="Hello";
println(str1 instanceof String);  // se traduciria: ¿es un string? // true

def num = 1031;
println(num instanceof java.lang.Integer);// se traduciria: ¿es un Integer? // true

Ok hasta aca creo que todo lo que se puede hacer con variables y operadores en JavaFX, como ven tienen una amplia ganma de posibilidades… ahh pero eso no es todo, ni remotamente, no hemos hablado de las expresiones en JavaFX todavia. Y uds diran ¿Qué… ahora hablan tambien? si vieron Mickey Ojos Azules me la captan (la escena del restaurant XD)

Pues no, expresiones, en java, son pedazos de codigo que evaluan el valor de un resultado, y que combinados pueden ser expresiones más grandes.

Sin mas preambulos les presento a las expresiones:

/**
 * @author Julio Cesar Cachay Perez
 */

 /* Las expresiones if, sirven si acaso quieras ejecutar algun
 * codigo dependiendo si algo es cierto o false, osea algo asi como:
 * si es verdad: haz "esto", sino "eso"
 * Ejemplo:
 * Imaginemos que los pasajes en avion a Cuzco - Perú se dividen:
 * Personas de 12 a 65 años pagan $100, los mayores y menores a
 * esa edad pagan $50, pero por oferta si es menor a 5 años va
 * gratis
 *  */
def edad = 8;// persona de 8 años
var pasaje;

if (edad < 5 ) { // si edad es menor a 5
    pasaje = 0;
} else // sino
if (edad < 12 or edad > 65) {
    pasaje = 50;
} else {
    pasaje = 100;
}
println("Edad: {edad}, Pasaje: ${pasaje}.");//"Edad: 8, Pasaje: $100."

//¿mucho codigo? todo lo de arriba puede ser comprimido en esto
pasaje =
if (edad < 5) 0 else
if (edad > 5 and edad < 12) 50 else 100;

/* Ahora que estamos en condicionales quiero enseñarles algo:
 * Existen 2; "and" y "or" , "y" y "o", osea imaginemos que tenemos
 * que cumplir cualquiera de 2 condiciones, como arriba (edad < 12 o edad > 65)
 * entonces usamos or
 * */
def login = "foo";
def password = "bar";

if ((login == "foo") and (password == "bar")) {
    println("Test 1: login Y password son correctos");
}

if ((login == "") and (password == "bar")) {
    println("Test 2: login Y password son correctos");
}

if ((login == "foo") or (password == "bar")) {
    println("Test 3: login O password son correctos");
}

if ((login == "") or (password == "bar")) {
    println("Test 4: login O password son correctos");
}
/* se imprime:
 Test 1: login Y password son correctos
 Test 3: login O password son correctos"
 Test 4: login O password son correctos
 Test 2 no se imprime porque al no cumplir la condicion
 salta su codigo */

 /* Cansado de los arrays? pues mejor no porque vienen los
 * expresiones para rangos
 * ejemplo: Queremos un array con los numeros impares hasta el 10
 * */
var nums = [1..10 step 2];
println(nums);//[ 1, 3, 5, 7, 9 ]

// ahora lo queremos de forma descendente
nums = [9..1 step -2];
println(nums);// [ 9, 7, 5, 3, 1 ]

//si colocan nums = [10..1 step 1]; tendran un aviso de error
// y el resultado seria []

/* Las expresiones for:
 * les gusto las sequencias? pues aca habra mas
 * han escuhado de lo que es bucle? un bucles es algo que
 * se repite una y otra vez, bueno for hace lo mismo en javafx
 */
var dias = ["Lun","Mar","Mie","Jue","Vie"];

for (dia in dias) { // dias tiene algo? si, pasalo a dia
    println(dia); // imprimelo

}
//imprime Lun Mar Mie Jue Vie

// for no solo devuelve un resultado tb puede devolver un array
//cuales son los cuadrados del 1 al 10?
var cuadrado =
for (i in [1..10])
i * i; //[1,4,9,16,25,36,49,64,81,100]

for (numero in cuadrado) {
    println(numero);
}

var mayusculas =
for (dia in dias)
dia.toUpperCase();//imprime cada dia en mayusculas
// no afecta a dias!!!

/* La expresion While
 * Esta es una expresion que me encanta,fusiona el for con el if
 * esto es, genera un bucle deacuerdo a si una condicion se cumple
 * o no
 *   */
var contador = 0;
while (
contador < 10) { //contador es menor a 10
    println("contador = {contador}"); // imprime contador
    contador++; //sumale uno a contador

} //repite hasta que contador valga 10

/* imprime: contador = 0
 contador = 1
 contador = 2
 contador = 3
 contador = 4
 contador = 5
 contador = 6
 contador = 7
 contador = 8
 contador = 9
 /*
 /* las expresiones break y continue
 * Se unen a while y for para poder manipularlos mejor
 * son el tipo Void, break sirve para romper el bucle
 * continue sirve para saltar la iteracion
 */

for (i in [0..10]) { //mientras i este entre 0 y 10, i avanza
    if (i > 5) { //si es mayor a 5
          break; //cortamos por lo bueno
    }

    if (i mod 2 == 0) {//si su residuo es igual a 0
          continue; //regresa arriba
    }

    println(i);// si paso lo anterior imprime
}
/*imprime:
 * 1
 * 3
 * 5*/

/* Expresiones de bloque: Son una lista de expresiones o declaraciones
* dentro de llaves {}. El valor de un bloque es el valor de la ultima
 * expresion , si no hubiera una ultima expresion el bloque seria
 * de tipo Void (no regresa ningun valor)
 * Nota: "var" y "def" son expresiones
 */
nums = [5, 7, 3, 9];
var total = {
    var sum = 0;
    for (a in nums) {
        sum += a
    };
    sum;
}
println("El Total es {total}.");

/* Las expresiones: throw, try, catch y finally
 * Imaginemos que necsitamos caragr un archivo (si se puede ¬¬)
 * y resulta que el archivo no esta donde deberia ¿que sucede?
 * una exepcion, para poder capturar estas excepciones y de
 * alguna manera controlarlas (evitar que el script se cuelgue)
 * para eso sirven estas expresiones
 */
import java.lang.Exception;

//foo();
//
//println("El script se ejecuta bien... ");

function foo() {
     var algoraropaso = true;

     if(algoraropaso){
          throw new Exception("Algo raro paso!");
     } else {
          println("La funcion no tuvo problemas.");
     }
}
/* imprime:
 * La funcion no tuvo problemas.
 * El script se ejecuta bien...
 *
 * pero si ponemos: var algoraropaso = true, imprime:
 *
 * java.lang.reflect.InvocationTargetException
 * ...
 * Caused by: java.lang.Exception: Algo raro paso!
 * ...
*/
try {//intentamos
     foo(); // no olviden borrar la llamada anterior
} catch (e: Exception) { //funciono mal
     println("{e.getMessage()} (pero sabemos que es)");//imprimimos lo que salio mal
} finally { // simpre se ejecuta, aun cuando halla excepciones, es opcional
     println("A pesar de todo imprimimos esto");
}

println("El script se ejecuta bien...");

// imprime : Algo raro paso! (pero sabemos que es)
// A pesar de todo imprimimos esto
// El script se ejecuta bien...

Todo lo deje en codigo porque me dio pereza ponerlo aca XD, lo que viene ahora son data binding y triggers, pero sera para otro post

5 Diciembre 2008

Netbeans 6.5 y JavaFX 1.0

Archivado en: JavaFX — Julio Cesar Cachay Pérez @ 6:44 pm

Y por fin salio el release del SDK de javaFX version 1.0, y ademas han cambiado el diseño interno de wordpress :o

Pero a lo que vamos, resulta que todo lo que hize antes, lo corri con lo ultimo de javaFX y netbeans y taran!! no funciona ¬¬

Bueno pues, ire actualizando los ejemplos, pero he revisado que aunque la sintaxis volvio a cambiar, en general todo sigue igual asi que no habra tantos cambios tampoco.

Buneo este post es solo informativo, alaoz :D

27 Noviembre 2008

¿Que es Java FX?

Archivado en: JavaFX — Etiquetas:, , — Julio Cesar Cachay Pérez @ 4:52 pm

Java Fx es un nuevo lenguaje de java para competir con Adobe y su tan popular Flash, quieren mas detalles, haganle una visita a google, ahora tutoriales no es lo que falta, aunque estuve revisando algunos y son muy pasados (javafx estaba en fase Beta, cambio constantemente), yo hago el mismo basandome en unas diapositivas de Sun que publicaron hace menos de 1 mes y encontraran mas informacion, por ahora solo les mostrare un poco de programacion en javafx.

pd-> El relase de javaFX 1.0 fue esta semana (actualizado)

JavaFX es el regalo prometido para los que no saben nada de programacion, por su simplicidad y facilidad, por ejemplo una clase que hace un circulo

JFrame f = new JFrame();
if(com.awt.sun.util.AWTUtilities.isTranslucentySupported()) {
    com.awt.sun.util.AWTUtilities.setTranslucency(true);
}
frame.setUndecorated(true);
JPanel panel = new JPanel() {
protected void paintComponent(Graphics g) {
Graphics2D gfx = (Graphics2D)g.create();
gfx.setRenderingHints(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIASING_ON):
gfx.setColor(Color.RED);
gfx.drawOval(0,0,100,100);
gfx.dispose();
}
}
frame.getRootPane().setcontent(panel);
frame.setVisible(true);

Ustedes se preguntaran ¿y donde esta lo facil y simple aca? bueno la verdad es que no hay nada de eso aca, esto es para gurus, en realidad es mucho mas facil (solo que me gusta asustar a la gente XD) la programacion para los desarrolladores en general (yo incluido)

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

/**
 * @author Julio Cesar Cachay Perez
 */

Stage {
    title: "Application title"
    width: 250
    height: 250
    scene: Scene {
        content: [ Circle {
                centerX: 100,
                centerY: 100
                radius: 40
                fill: Color.RED
            }
    ]
    }
}

Para entender lo que voy a explicar a continuacion les recomiendo saber lo basico de java, aunque voy a tratar de hacerlo tan entendible como pueda

Ahora paso a paso:

Primero como instalarlo:

1) Necesitamos el SDK de java, eso lo bajamos de aqui

2) Despues de instalarlo se bajan el combinado de netbeans y java FX

3) Abrimos Netbeans, y nos vamos a File-New Project, y escogemos la carpeta que dice javafx y luego escogemos la opcion JavaFX Script Application

Ahora que tenemos todo listo comenzamos

Lo primero que vamos a ver son las variables:

JavaFX soporta 6 tipos primitivos:

  1. String (for java.lang.String)
  2. Boolean (for java.lang.Boolean)
  3. Number (for java.lang.Number)
  4. Null (nulo, nada)
  5. Duration (no para Java)
  6. Void (para funciones)

Ejemplo:

/**
 * @author Julio Cesar Cachay Perez
 */

var x:Number = 0.9;
var name:String = "John";
var y:Integer = 0;
var flag:Boolean = true;
def numero = 100;

//La diferencia entre var y def es que def es final (no cambia)
//mientras que var puede ser cambiado durante la animacion
var numbers:Integer[] = [1,2,3,4,5];

//jugando
var s1 = 'Hola';// 2 formas distintas de declarar un String
var s2 = "Hola";

def nombre = 'Joel';
var s = "Hola {nombre}"; // s = 'Hola joel'

def rpta = true;
var es = "La respuesta {if (rpta) "Si" else "No"}"; // s = 'La respuesta es si'

def one = "Este ejemplo ";
def two = "une dos strings.";
def three = "{one}{two}";      // une string one y string two
println(three);                // 'Este ejemplo une 2 strings.'

def numOne = 1.0; // def numOne : Number = 1.0; (lo mismo)
def numTwo = 1;   // def numTwo : Integer = 1;

function imprimime() : Void { //Esta funcion no devuelve nada
     println("No devuelve nada!");
}

function checka(palabra) {
     if(palabra == null) {
          println("recibi un nulo.");
     } else {
          println({palabra});
     }
}
checka(null);

Ahora los operadores que son diferentes de Java:

* Java: &&
JavaFX: and
* Java: ||
JavaFX: or
* Java: !
JavaFX: not

Es hora de conocer  mas a fondo las funciones en java

/**
 * @author Julio Cesar Cachay Perez
 */

def numuno = 100;
def numdos = 2;
var resultado;

function sumar() {
     resultado = numuno + numdos;
     println("{numuno} + {numdos} = {resultado}");
}

function restar() {
     resultado = numuno - numdos;
     println("{numuno} - {numdos} = {resultado}");
}

function multiplicar() {
     resultado = numuno * numdos;
     println("{numuno} * {numdos} = {resultado}");
}

function dividir() {
     resultado = numuno / numdos;
     println("{numuno} / {numdos} = {resultado}");
}

sumar();//llamamos a la funcion de sumar (= llamamos a todas las funciones)
restar();
multiplicar();
dividir();

Aja pero ¿y si quiero pasarle yo los numeros? pues javaFX al igual que su papi Java tiene para todos los gustos y colores, miren:

/**
 * @author Julio Cesar Cachay Perez
 */

var resultado;

sumar(100,10);
restar(50,5);
multiplicar(25,4);
dividir(500,2);

function sumar(numuno: Integer, numdos: Integer) {
     resultado = numuno + numdos;
     println("{numuno} + {numdos} = {resultado}");
}

function restar(numuno: Integer, numdos: Integer) {
     resultado = numuno - numdos;
     println("{numuno} - {numdos} = {resultado}");
}

function multiplicar(numuno: Integer, numdos: Integer) {
     resultado = numuno * numdos;
     println("{numuno} * {numdos} = {resultado}");
}

function dividir(numuno: Integer, numdos: Integer) {
     resultado = numuno / numdos;
     println("{numuno} / {numdos} = {resultado}");
}

Ahh, y diran ok, pero quiero hacer algo como (1+300) * (23+52) , bueno eso es muy, demasiado, recontra super facil:

/**
 * @author Julio Cesar Cachay Perez
 */
var resultado;
function sumar(numuno: Integer, numdos: Integer) {
     resultado = numuno + numdos;
     println("{numuno} + {numdos} = {resultado}");
     return resultado;
}
var total;

total = sumar(1,300) * sumar(23,52);
println("Total: {total}");

No pero yo no recibi numeros, recibi palabras… ah pues, ia no se puede hacer nada… mentira ^_^ ahi les va:

/**
 * @author Julio Cesar Cachay Perez
 */

def trescientos:String = "300";
def veintitres:String = "23";

var resultado;
function sumar(numuno: Integer, numdos: Integer) {
     resultado = numuno + numdos;
     println("{numuno} + {numdos} = {resultado}");
     return resultado;
}
var total;

def numuno = java.lang.Integer.parseInt(trescientos);
def numdos = java.lang.Integer.parseInt(veintitres);

total = sumar(1,numuno) * sumar(numdos,52);
println("Total: {total}");

Y eso no es todo… solo he utilizadop pequeñas variables y funciones, pero ahora les voy dar un pequeño codigo que es un curso intensivo de arrays

/**
 * @author Julio Cesar cachay Perez
 */

var dias = ["Lun","Mar","Mie","Jue","Vie"];//var dias: String[] = ["Lun","Mar","Mie","Jue","Vie"];

var semana = [dias, ["Sab","Dom"]]; // semana = ["Lun","Mar","Mie","Jue","Vie","Sab","Dom"]

var numeros = [1..100]; // del 1 al 100

var cinco = [1,2,3,4,5];

var mayoresados = cinco[n | n > 2];// [3,4,5]

//imprimimos cada dia
println(dias[0]);//En los arrays el primero se almacena en 0
println(dias[1]);
println(dias[2]);
println(dias[3]);
println(dias[4]);

println(sizeof dias);// imprime el tamaño del array, osea 5

dias = ["Lun"];// chancamos su contenido anterior ahora solo tiene ["Lun"]

insert "Mar" into dias;//insertamos "Mar", ["Lun","Mar"]
insert "Vie" into dias;//["Lun","Mar","Vie"]

// nos olvidamos de miercoles y jueves :S
insert "Mie" before dias[2];//insertamos antes de "Vie", ["Lun","Mar","Mie","Vie"]
insert "Jue" after dias[2];//insertamos despues de "Mie", ["Lun","Mar","Mie","Jue","Vie"]

insert "cuac" into dias; //["Lun","Mar","Mie","Jue","Vie","cuac"]
//"cuac"?! cuac no es dia :S
delete "cuac" from dias;//["Lun","Mar","Mie","Jue","Vie"]
//o delete dias[5];

//ia no kiero ningun dia ><
delete dias;

var ocnic = reverse cinco;//[5,4,3,2,1]

//seran iguales?
println(cinco == ocnic); // si son iguales imprime true, sino false// false

//ahora a separar la semana
var findsemana = semana[5..6];//o semana[5..], ["Sab","Dom"]

var diasdsemana = semana[0..<5];//["Lun","Mar","Mie","Jue","Vie"]

//queremos todos menos domingo
var nodomingo = semana[0..<];

Uff! ya es un moton de codigo que les estoy dando, y falta mas, pero seguire en otro post

Nota: Este codigo corre en JavaFX1.0 y Netbeans 6.5

Blog de WordPress.com.