jueves, octubre 14, 2010

OpenEtna y el driver msm_hw3d 3D

He estado estos dias tratando de migrar a un kernel 2.6.29 el nuevo driver msm_hw3d con algunos resultados...

Tuve que modificar del repositorio git de openetna los archivos



Y todo funciona a medias... el driver necesita 3t tipos de memorias SMI, EBI y RES.... marca un error al montar la memoria EBI... asumo que la colocación de la memoria de la GPU1 es dinamica y debe ser antes de la inicializacion del driver... por que el hw3d toma la memoria EBI del segmento de memoria de la GPU1...

IDEAS

Hacer el direccionamiento EBI estatico aunque solo funcione con mi dispositivo...
Realizar la colocación de la memoria de la GPU1 antes de la inicializacion del driver
Probar deshabilitando el soporte de EBI2
Probar cambiando la memoria EBI1 a EBI2

NOTAS

Como aun soy medio noob en esto del kernel Android tengo que flashear mi telefono cada vez que quiero probar algo... imagino que debe haber una manera de simularlo... pero aun no la descubro...

miércoles, mayo 19, 2010

Consumir WebServices NuSoap desde Java con Axis2

Bueno.... hoy me toco pelear de nuevo contra las malignas fuerzas de los frameworks no estandarizados... el enemigo era NuSoap.

NuSoap es una herramienta que sirve para crear y consumir servicios web desde PHP.... escucharon bien... PHP!!!

Y pues... como era de esperarse hace cosas raras... genera en webservices estilo RPC codificados... y pues... ya desde ahi nuestro buen amigo JAX-WS no funciona... hay que volver al temible JAX-RPC

Yo no le se muy bien al JAX-RPC... he tenido experiencias traumaticas.... nunca funciona... debe tener alguna configuración rara o algo...

Asi que siempre recurro al poderoso Axis2... normalmente puede contra todos esos webservices locos a los que me he tenido que conectar...

Hay que descargar Axis2

Ponerlo en cualquier lado...

Entrar con consola a la carpeta bin y ahi...


  1. mkdir output
  2. ./wsdl2java.sh -uri http://ruta/a/webservice?wsdl -o output/prueba/
  3. cd output/prueba
  4. AXIS2_HOME="/ruta/a/axis2" ant

Nos generara en la carpeta output/prueba/bin/ un jar con el codigo Stub para llamar al webservice...

Desde Netbeans... deben agregar las librerias de Axis2... esas las agregan desde Herramientas->Complementos->Plugins disponibles->Axis2 Support... luego Propiedades->Bibliotecas->Agregar Jar/Carpeta... buscan el jar que generamos... ahi mismo deben entrar a Agregar Biblioteca y buscar Axis 2

Y pues.. el codigo java depende mucho de como se llame el paquete de tu webservice... seria simple como

  1. ws.claseStub servicio = ws.claseStub();
  2. ws.claseStub.Metodo met = new ws.claseStub.metodo();
  3. met.setParametro("Algo");
  4. //La magia para el NuSoap esta aqui!!
  5. servicio._getServiceClient().getOptions().
    setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED,
    Boolean.FALSE);
  6. servicio.metodo(met);

Y asi amigos... nos comunicamos con NuSoap.... el maldito no soporta el tipo de transporte HTTP chunk como un webservice normal... pero tuvieron que pasar varios tcpdumps para llegar a esa conclusión... espero que le quite el dolor de cabeza a alguien


lunes, febrero 01, 2010

JAX-WS 2.2 Web Methods ocultos y polimorfismo

Pues siguiendo con la nueva especificación de los JAX-WS 2.2... vemos que por default todos los metodos declarados dentro de una clase con la anotacion WebService se vuelven publicos, cosa que antes no era asi, antes todos estaban ocultos y solo colocando la anotacion WebMethod se volvian publicos.

Esto me marco error en algunas clases de WebServices donde tenia polimorfismo interno, o metodos que estaban desactivados para el uso publico.

La solucion fue colocar la etiqueta

@WebMethod(exclude=true)

Que excluye a metodo dentro de la definición del webservice.

Esta nueva especificación parece traer algunas mejoras que no he logrado revisar a fondo debido a que es muy nueva y existe poca documentación al respecto, . pero cuando vea algo interesante ya lo veran por aqui...

Netbeans 6.8 Error de JAX-WS 2.2 API Endorsed

Algunos tendran el problema que sus proyectos de Netbeans 6.7 o anteriores con referencias a Webservices, no compilan en el 6.8 esto es por que no se actualiza el proyecto, ya que el 6.8 usa JAX-WS 2.2, y nosotros veniamos usando el 2.1.

Pues bien... Netbeans 6.8 añade a nuestro proyecto en el archivo nbproject/project.properties la linea

endorsed.classpath=

Pero el buen Netbeans no le asigna un valor... su valor correcto seria

endorsed.classpath=${libs.javaee-endorsed-api-6.0.classpath}

Ademas... el Netbeans no le agrega al wsimport (generador de clases del Webservce) la linea que permite el uso de carpetas endorsed. Para hacer esto nos vamos a Proyectos/Web Service Reference/Servicio hacemos click derecho... luego Edit Web Service Attributes... wsimport options... add... y en option escribimos xendorsed y como valor ponemos true... y listo.. ya podemos compilar otra vez..

martes, diciembre 22, 2009

Tomcat no enciende.. error jvm.dll o Procrun

Bueno... hay veces que uno instala Tomcat.. y este no enciende.. este error se me ha aparecido... varias veces que he instalado un servidor windows (maldito windows!!)... pero siempre olvido apuntarlo.. y debo volver a buscar como corregirlo.. :-P.. y es que aun que se ve fácil... pero soy algo olvidadizo...

En fin.. lo unico que deben hacer es descargar el archivo msvcr71

Copiarlo en system32 dentro de tu windows_home... y ya.. a correr Tomcat... me imagino que Tomcat no incluye esta dependencias dentro de las descarga.. por cuestión de licencias..




jueves, diciembre 10, 2009

Google Chrome sobre Gentoo Linux 64... con flash!!!

Pues... ya hace tiempo que no escribía.. pero pues.. que mas da... asi esto de las gelatinas...



Hoy les enseñare como instalar Google Chrome en Gentoo amd64.. aunque funcionaria en teoria para x86 tambien...

Primero que nada... debo decir que esto solo funciona si ya han pasado su peregrinar hacia Gnome 2.28 y Firefox 3.5... con peregrinar me refieron... a la actualizacion del GCC, nss,nspr y pulseauido... si no han hecho esto.. es probable que no funcione.. por que Chrome usa todo esto...

Primero que nada descargamos el famoso deb de prueba.. en su sabor Debian/Ubuntu

http://www.google.com/chrome?hl=es

Ya descargado.. nos procedemos a entrar al .deb pueden hacerlo desde el file-roller (la aplicacion para descomprimir de Gnome, solo basta hacer doble click) o con dpkg.. etc... etc...

file-roller google-chrome-beta_current_amd64.deb

dpkg -X google-chrome-beta_current_amd64.deb .

Una vez ahi.. nos interesa el archivo data.tar.lzma... de nuevo tenemos al file-roller.. haciendo doble click sobre el.. y a tar con

tar xf data.tar.lzma

Bien... ahora tenemos la ruta opt/google/ que hay que mover en /opt/google

$ mv opt/google /opt/

una vez ahi.. entramos a /opt/google/chrome/ y establecemos permisos

$ chown root *
$ chgrp root *
$ chmod 755 google-chrome
$ chmod 755 chrome
$ chmod 4755 chrome-sandbox

Chrome.. utiliza la ruta de Debian/Ubuntu para las librerias nss y nspr... asi que hay que hacer enlaces para que las encuentre... donde el cree que estan..

$ ln -s /usr/lib/nss/libnss3.so /usr/lib/libnss3.so.1d
$ ln -s /usr/lib/nss/libnssutil3.so.12 /usr/lib/libnssutil3.so.1d
$ ln -s /usr/lib/nss/libsmime3.so.12 /usr/lib/libsmime3.so.1d
$ ln -s /usr/lib/nss/libssl3.so.12 /usr/lib/libssl3.so.1d
$ ln -s /usr/lib/nspr/libplds4.so/usr/lib/libplds4.so.0d
$ ln -s /usr/lib/nspr/libplc4.so /usr/lib/libplc4.so.0d
$ ln -s /usr/lib/nspr/libnspr4.so /usr/lib/libnspr4.so.0d

Bien.. ya tenemos instalado google-chrome copiamos el lanzador...

$ cp usr/bin/google-chrome /usr/bin/

Y ahora copiamos los plugins de flash.. java.. etc..

Entramos a nuestro directorio..

cd /home/usuario/.mozilla/plugins/

y creamos los enlaces..

Para flash
ln -s /opt/netscape/plugins/libflashplayer.so libflashplayer.so

Para java
ln -s /usr/share/java-config-2/nsplugin/sun-jdk-1.6-javaplugin.so IcedTeaPlugin.so

Para Moonlight
ln -s /usr/lib64/moon/plugin/libmoonloader.so libmoonloader.so

Para los de Quicktime.. video.. etc.. etc..

cp /usr/lib/mozilla-firefox/plugins/librhythmbox-itms-detection-plugin.* ./
cp /usr/lib/mozilla-firefox/plugins/libtotem-* ./

Y.. listo.. ya solo falta arrancar google chrome.. y probar un video!!! funcionan algunas extensiones, los temas.. y eso si.. corre mas rápido que Firefox.. a mi parecer..

domingo, junio 21, 2009

Dos botones con evento




import javax.swing.*;

import java.awt.*;

import java.awt.event.*;



public class MiVentana extends JFrame {



    JLabel etiqueta;

    JButton boton;

    JButton boton2;

    JTextField caja;

    Papel papel;



    public MiVentana() {

        setTitle("ventanitita");

        setSize(300, 200);

        iniciarComponentes();

    }



    public void iniciarComponentes() {

        getContentPane().setLayout(null);

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        etiqueta = new JLabel();

        boton = new JButton();

        boton2 = new JButton();

        caja = new JTextField();

        papel = new Papel();

        papel.setTF(caja);



        etiqueta.setText("Mete un #");

        etiqueta.setFont(new Font("Arial", Font.BOLD, 12));

        getContentPane().add(etiqueta);

        etiqueta.setBounds(20, 20, 100, 20);



        boton.setText("Validar");

        boton2.setText("Mostrar imagen");

        boton.setToolTipText("has click");

        getContentPane().add(boton);

        getContentPane().add(boton2);

        boton.setBounds(20, 120, 100, 20);

        boton2.setBounds(20, 140, 100, 20);

        getContentPane().add(caja);

        caja.setBounds(20, 60, 100, 20);



        boton.addActionListener(

                new ActionListener() {



                    public void actionPerformed(ActionEvent evt) {

                        codigoBoton1(evt);



                    }

                });

        boton2.addActionListener(

                new ActionListener() {



                    public void actionPerformed(ActionEvent evt) {

                        codigoBoton2(evt);

                    }

                });

    }



    public void codigoBoton1(ActionEvent ev) {

        String cad = caja.getText();

        boolean pasa = true;

        for (int i = 0; i < cad.length(); i++) {

            if (!Character. isDigit(cad. charAt( i)) ) {

                pasa = false;

            }

        }

                



        if (pasa) {

            float valor = Float.parseFloat( caja. getText() );

            etiqueta.setText("resultado de " + valor * 10);

        } else {

            etiqueta.setText("ingresa dato validos");

        }



    }

    public void codigoBoton2(ActionEvent ev) {

        getContentPane().add(papel);



        papel.setBounds(120, 60, 100, 100);

    }

    public static void main(String args[]) {

        new MiVentana().setVisible(true);

    }

}



class Papel extends Canvas {



    JTextField tf;



    public void setTF(JTextField tf) {

        this.tf = tf;

    }



    public void paint(Graphics g) {



        g.setColor(Color.yellow);



        g.drawOval(40, 40, 20, 20);

        g.drawOval(45, 40, 10, 20);

        g.drawOval(40, 45, 20, 10);



        g.drawRect(0, 0, 99, 99);



    }

}