INTRODUCCION A UNDERSCORE.JS

Posted: domingo, 11 de marzo de 2012 by Skuarch in Etiquetas: , , , ,
0


Introduccion
underscore.js es una libreria para javascript que provee mucha programacion funcional, cuenta con 60 funciones para ayudarte a hacer tareas,  es el complemento ideal para backbone.js y jquery, todas las funciones de underscore empiezan con un "_", en los ejemplos puedes entender mas sobre esta libreria.

Ejemplos

_.each
var arrayNums = [1,2,3];
_.each(arrayNums, function(num){
   alert(num);
});
La funcion _.each recibe dos parametros el primero es un array y el segundo es una funcion, lo que hara _.each es recorrer el array y llamar la funcion que se paso como segundo parametro en cada posicion del array, el arrayNum tambien se podria declarar dentro de la funcion _.each.

_.filter
var evens = _.filter([1, 2, 3, 4, 5, 6], function(num){
   return num % 2 == 0; }
);
alert(evens);
la funcion filter regresara un array con los numeros que pasen como true en la segunda funcion.

_.without
_.without([1,2,3,4,5,6], 0,1);
Esta funcion regresara una copia del array sin los numeros que se le pasaron como segundo parametro.

_.isFunction
_.isFunction(alert);
Evaluara si lo que se le paso como parametro es una funcion, regresa un booleano.

_.isNull
_.isNull(object);
regresa true si object es null.


Como puedes ver nos facilita algunas de las cosas usando arrays y en evaluaciones, te recomiendo que le eches un vistaso a la documentacion para que veas todas las funciones que tiene esta libreria


pagina web de underscore.js

PROGRAMACION ORIENTADA A OBJETOS

Posted: martes, 6 de marzo de 2012 by Skuarch in Etiquetas: ,
0


Estos son algunos conceptos que se utilizan en la programacion orientada a objetos. El objetivo de esto es dar una introduccion breve a la programacion orientada a objetos.

INTRODUCCION
La programacion orientada a objetos (POO) tiene como fin ver las cosas como el mundo real, en el mundo real tenemos objetos y estos objetos tienen caracteristicas propias como peso, altura, color. En la POO se trata de sumular los objetos del mundo real dentro de la programacion infomatica.

OBJETO
Un objeto es cualquier cosa tangible, por ejemplo: una television, un telefono..., estos objetos tienen sus propias caracteristicas, color, tamaño, peso..., en POO un objeto es una entidad con sus propias caracteristicas (propiedades), estas entidades pueden ser cualquier cosa, un objeto de tipo reporte u otro objeto de tipo cliente, en donde el cliente tiene un nombre, una direccion etc.

CLASE
Las clases son la parte fundamental de cualquier programacion orientada a objetos, las clases se pueden definir como el molde del objeto, son las que definen a los objetos.

INSTANCIA
La instancia se produce cuando se crea un objeto y se dice que es una instancia de la clase.

METODOS
Todos los objetos tienen una funcion a realizar, por ejemplo el telefono es un objecto y su funcion es hacer una llamada o recibirla, entonces tendriamos que el telefono tienen dos funciones principales que son llamar y recibir llamada, en POO la palabra funcion se cambia a metodo, aunque en algunos lenguajes se sigue preservando, entonces los metodos son los que ejecutan las acciones.

CONTRUCTORES
Los constructores son los metodos que se ejecutan primero, usualmente este metodo se utiliza para inicializar las variables. Si la clase tiene mas metodos el primero en ejecutarse sera el constructor. el constructor se llama automaticamente cuando se crea la instancia.

HERENCIA
En una familia la jerarquia seria algo asi, el papá tiene hijos y esos hijos tienen los ojos de su papá, entonces los hijos heredaron los ojos de su papá, en POO pasa lo mismo pero la herencia se crea entre clases, una clase que hereda de otra clase tiene los mismo metodos que la clase padre, como lo que pasa entre la familia, los hijos heredaron los ojos de su papá.



CONEXION ORIENTADA A OBJETOS PHP Y MYSQL

Posted: lunes, 5 de marzo de 2012 by Skuarch in Etiquetas: , , , ,
0




Como todos sabemos las ventajas de la programacion orientada a objectos es poder reutilizar el codigo, aqui les muestro como hacer una clase en PHP para conectarse a la base de datos, tambien se creara una capa superior a la conexion para poder reutilizar nuestro codigo.

La clase no sera un singleton, debido a que si en cualquier momento se requiere cambiar de servidor de base de datos o se utilizen varias conexiones a diferentes bases de datos, el singleton no nos funcionaria.

Unos de los principios de la clase para conectarse es que pueda ser utilizada por cualquiera, recibira todos las parametros necesarios para crear la conexion y como servidor de base de datos se utiliza MySQL.


class ConnectionDatabase {

    private $user;
    private $password;
    private $database;
    private $server;
    private $link;
    private $result;

    //===================================================================
function __construct($user, $password, $database, $server) {
$this->user = $user;
$this->password = $password;
$this->database = $database;
$this->server = $server;
} // end __construct


Primero declararemos las variables y en el contructor recibimos los parametros necesarios para inicializar las variables, como puedes ver con esto, esta clase se puede conectarse a cualquier servidor.



//===================================================================
private function connect(){

if(isset($this->link)){

$this->link = mysql_connect($this->server,$this->user,$this->password) or die(mysql_error());
$this->selectDatabase();

}

return $this->link;

} // end connect


//===================================================================
private function selectDatabase(){

mysql_select_db($this->database,$this->link) or die(mysql_error());

}


Estos metodos son privados por que los demas metodos lo utilizaran, entonces no tiene caso que sea publico.

//===================================================================
public function executeQuery($query){

$this->result = mysql_query($query,$this->link);

return $this->result;

}


Este metodo si es publico, puede ejecutar cualquier query que me mandes, insert, update o select.

//===================================================================
public function fetchArray($query){

$fetchArray = null;          
        $this->result = $this->query($query);
        while($array = mysql_fetch_array($this->result)){              
        $fetchArray[] = $array;
        }
       
         $this->disconnect();
        return $fetchArray;

}


Este metodo tambien es publico y si lo observas tiene un while en donde llena un array para poderlo regresar, el array que regresa lo puedes recorrer en un foreach.


//====================================================================
private function disconnect(){

mysql_close($this->link);

}

//====================================================================
private function freeResult(){

mysql_free_result($this->result);

}

} //end class
Estos son los respectivos metodos para liberar y cerra la conexion que tambien son privados




PATRONES DE DISEÑO: PROXY VIRTUAL

Posted: lunes, 26 de diciembre de 2011 by Skuarch in Etiquetas: ,
0


Proxy virtual se utiliza para no tener que estar creando objectos constantemente, especialmente si estos objetos son dificiles o costosos de hacer, un ejemplo de un objeto costoso puede ser la carga de una imagen y la imagen es de un gran tamano, para poder utilizar este patron de diseno se siguen estos pasos.

Crear una clase abstracta
public abstract class Graphic {
public void draw();
}
Creamos una clase que herede de la clase abstracta y sobre escriba el unico metodo de la clase padre


public class Image extends Graphic {
public void draw() { ... }
}

Ahora crearemos una tercera clase que tambien herede de la clase abstracta, tambien sobre escribira el 
mismo metodo pero este se asegura de que el objecto no haya sido creado anteriormente

public class ImageProxy extends Graphic {
private Image _image;
private String _fileName;
public ImageProxy (String fileName) {
_fileName = fileName;
_image = null;
}

public void draw () {
if (_image==null)
_image = loadImage(_fileName);
_image.draw();
}
}
La forma de de utilizar este patron de diseno es la siguente:

Graphic g = new ImageProxy(“imagen.gif”);

Asi evitaremos que se esten creando objetos constantemente


PATRONES DE DISEÑO: ADAPTER

Posted: jueves, 8 de diciembre de 2011 by Skuarch in Etiquetas: ,
0





El patron de diseño adapter nos ayuda a la comunicacion entre clases que hacen lo mismo pero que los metodos tienen nombres diferentes, por ejemplo, las conexiones de los aparatos electricos en America son diferentes a los de Europa, pero el aparato hace lo mismo en cualquiera de los dos continentes, pero no puedes usar un aparato electrico de Europa en America debido a que el tipo de conexion es diferente para poder usarlo debes de utilizar un adaptador


Este patron de diseño en ocaciones es llamado WRAPPER debido a que crea un objeto de otra clase y dentro de un metodo sobre cargado llama al metodo del objeto previamente creado.

Otra forma de explicar este patron de diseño es cuando se encuentran problemas con los nombre de los metodos por ejemplo en una conexion a la base de datos.


public class ConnectionDataBase(){
public Connection getConnection(){
// codigo para hacer la conexion
}
}


Esta clase es solo de ejemplo y esta en ingles, supongamos que tu codigo esta totalemente en español, entonces tendrias problemas de como usar esta clase y para eso creas un adaptador

public interface adaptador{
public Connection dameConexion();
}

Esta es la interface que debes de implementar en otra clase para poder usarla como normalmente lo harias

public class ConexionBaseDatos implements adaptador{
@override
public Connection dameConexion(){
ConnectionDataBase cdb = new ConnectionDataBase();
return cdb.getConnection();
}
}

Entonces implementando el adaptador ya se puede usar la clase que esta escrita en ingles en español.

Adapatador adaptador = new Adaptador();
adaptador.dameConexion();




PROGRAMACION MULTICORE EN JAVA

Posted: martes, 6 de diciembre de 2011 by Skuarch in Etiquetas: , , , ,
0


Si alguna vez te preguntaste si java (JVM) por si sola corre en varios nucleos a la vez, pues la respuesta es que si , pero en tu programa se debe de habilitar esto, y como diablos habilito esto ???, pues se tiene que crear ciertas funcionalidades en el codigo para usar multicore, lo primero que tenemos que hacer es saber cuantos nucleos tiene nuestro procesador

int processors = Runtime.getRuntime().availableProcessors();


Con esa simple linea de codigo sabes cuantos procesadores tenemos disponibles ahora nececitamos crear nuestro procesos independientes, la forma mas comun es esta.
ExecutorService executor = Executors.newFixedThreadPool(processors);

ExecutorService es una interface que hereda de Executor, como se puede apreciar se crea un pool de Threads y como parametros le mandamos el numero de procesadores que tiene el cliente donde se ejecutara. Ahora solo falta lanzar nuestros procesos
executor.execute(new Runnable(){
public void run(){
//aqui se hace algo ...
}
});

La mejor forma de iniciar un proceso es creando un hilo, hasta el final debemos de dar de baja el executor con la siguiente instruccion
executor.shutdown();

Esto te puede servir como introduccion para el manejo de diferentes procesos en java solo ten cuidado en no dejar Threads vivos asi como tambien la concurrencia.

PATRONES DE DISEÑO

Posted: lunes, 5 de diciembre de 2011 by Skuarch in Etiquetas: ,
0


Un patron de diseño es una solucion a un problema de diseño, algo que no se contemplo en el modelado del programa, los patrones de diseño son guias no reglas rigurosas,los patrones de diseño no solo resulven problemas, si no que tambien pueden ayudarte a evitarlos, los siguente es una lista de los patrones de diseño mas comunes
  • Factory Method
  • Decorator
  • Proxy (Protection)
  • Template Method
  • Abstract Factory
  • Facade
  • Proxy (Remote)
  • MVC
  • Adapter
  • Iterator
  • Proxy (Virtual)
  • Simple Factory
  • Command
  • Observer
  • Strategy
  • Composite
  • Singleton
  • State
En este blog comentare algunos de estos en futuras entradas, la idea de esta entrada es mostrar un panorama sencillo sobre los patrones de diseño mas usados, los que se muestran en la lista no son los unicos pero si los mas populares.

BORRAR PROYECTOS EN SVN

Posted: viernes, 14 de octubre de 2011 by Skuarch in Etiquetas: , ,
0


Para poder borrar algun projecto en Subversion puedes seguir este sencillo comando
svn delete -m "comentario" http://localhost/nombreDelRepositorio/nombreDelProyecto

esto solo sirve cuando subversion esta configurado para usarse por web

5


Requisitos
Telefono con andriod 2.3.4 (el mio es galaxy ace) no se si sirva en otros pero supongo que si
Tener el acceso de root en el telefono
Tener instalada una terminal en el telefono para poder hacer comandos yo use terminal emulator que puedes descargar desde el market

Este tutorial solo nececita de dos cosas fundamentales, tener acceso de root en el telefono y tener cualquier aplicacion para acceder via consola.

En esencia lo que se hace es montar una unidad y despues borrar las aplicaciones a mano, no nececitas instalar (comprar) root explorer ni cualquier otra aplicacion, con este sencillo tutorial te mostrare como hacerlo
Paso 1

abrir la terminar y poner el comando su (para poder hacer las cosas como super usuario)
Paso 2

montar una unidad con este comando mount -o rw,remount -t yaffs2 /dev/block/mtdblock3 /system
Paso 3

entrar a la carpeta donde estan las aplicaciones cd /system/app
Paso 4

ultimo paso borrar las aplicaciones de la siguiente manera y una por una rm nombreDelArchivo.apk
suguerencia de aplicaciones a desinstalar

AMXNotification.apk
AMXSearch.apk
Dlna.apk
Dlna.odex
LauncherEmail.apk
Email.apk Email.odex Forest.apk Forest.odex AMX_YahooSearch.apk
GameMenu.apk
GenieWidget.apk
iApps.apk
IdeasMenu_TassGB_BeniGB_CooperGB.apk
IMusic.apk
iRadio_v4.5.57.apk
iTV.apk
LauncherBrowser_AMX.apk
LauncherCalendar_AMX.apk
LauncherCamera_AMX.apk
LauncherContact_AMX.apk
LauncherEmail_TCE.apk
LauncherGallery_AMX.apk
LauncherMessage_AMX.apk
LauncherMusicplayer_AMX.apk
LauncherSettings_AMX.apk
LauncherStk_AMX.apk
MSNGR.apk
PluggerLauncher.apk
Plugger_TCE.apk
POPZ_SMS_GTS5830L_ML_AMX_306.apk
TN55-Telcel-Stub-1000.apk
WindowsLive.apk


te sales de la consola con exit enter exit enter
Lo que borres es bajo tu riesgo asi es que ten mucho cuidado


si no sabes como hacer root tu telefono ve este video tutorial como hacer root a samsung galaxy ace

TUTORIAL DE APACHE MINA

Posted: viernes, 16 de septiembre de 2011 by Skuarch in Etiquetas: , , , , , , ,
0




Requisitos

mina-core.2.0.4.jar
sfl4j-simple-1.6.2.jar
sfl4j-api-1.6.1.jar

Introducción


Apache mina es un framework que nos ayuda a realizar conexiones con redes, udp y tcp, tambien creo que puede hacer algo con el serial (aqui no se menciona) pero este tutorial es solo la introduccion a este framework.

Por que usar mina? por que te ayuda a desarrollar sockets rapidamente es extencible, ampliable y facil.




La imagen de arriba muestra la arquitectura de apache mina.

Programando un time server

Todo el codigo esta dentro del metodo main y utilizaremos un try-catch para controlar las excepciones, lo primero que se debe de hacer es un objecto del tipo IoAcaptor

Primero definiremos el puerto.

Para este tutorial utilizaremos el puerto 9123 y definiremos una variable miembro

private static final int PORT = 9123;


acceptor este objecto es el que se usa para recibir las conexiones de entrada. Con la clase NioSocketAcceptor se puede defiir un handler, el handler sera la clase que haga el trabajo del socket.

IoAcceptor acceptor = new NioSocketAcceptor();


Los siguiente es crear un filtro y agregarlo a la configuracion.

acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));


Ahora definiremos el handler, el handler es el que atendera las peticiones del cliente. Este handler esta separado en otra clase que hereda de IoHandlerAdapter
acceptor.setHandler( new TimeServerHandler() );


Definimos dos metodos mas el buffer y el tiempo de in idle.

acceptor.getSessionConfig().setReadBufferSize( 2048 );
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );


Entonces asi tendremos la primer clase Main

package testmina;

import java.net.BindException;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.SocketAcceptor;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

/**
 *
 * @author skuarch
 */
public class Main {

    public static Logger logger = null;
    private static final int PORT = 9123;

    //==========================================================================
    public Main() {
        PropertyConfigurator.configure("log.properties");
        logger = Logger.getLogger(getClass());
    }

    //==========================================================================
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        new Main();

        try {

            //IoAcceptor acceptor = new NioSocketAcceptor();
            SocketAcceptor acceptor = new NioSocketAcceptor();
            acceptor.setReuseAddress( true );

            //acceptor.getFilterChain().addLast("logger", new LoggingFilter());
            acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));

            acceptor.setHandler(new TimeServerHandler());            
            acceptor.getSessionConfig().setReadBufferSize(2048);
            acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
            acceptor.bind(new InetSocketAddress(PORT));

            acceptor.setCloseOnDeactivation(true);           
                                   

        } catch (BindException be) {
            logger.error("error", be);
        } catch (Exception e) {
            logger.error("error", e);
        }

    } // end main
} // end class

Se utilizo testmina como paquete y el nombre de la clase es Main.

La clase TimeServerHandler


En esta clase de heredo de IoHandlerAdapter pero tambien se puede utilizar la interfaz IoHandler se sobre escriben los metodos exceptionCaught, messageReceived y sessionIdle

exceptionCaught

Este metodo es el encargado de las excepciones solo imprime el stack trace y cierra la conexion, esta es una buen practica.

messageReceived

Este es el metodo que recibe los datos del cliente y escribe la fecha actual, si el mensaje que se recibe es quit se cerrara la conexion.

sessionIdle

Este metodo es llamado segun se configuro en acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );. y solo imprime el numero de idles

La clase se veria de esta forma

import java.util.Date;

import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IoSession;

public class TimeServerHandler extends IoHandlerAdapter
{
    @Override
    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
    {
        cause.printStackTrace();
    }

    @Override
    public void messageReceived( IoSession session, Object message ) throws Exception
    {
        String str = message.toString();
        if( str.trim().equalsIgnoreCase("quit") ) {
            session.close();
            return;
        }

        Date date = new Date();
        session.write( date.toString() );
        System.out.println("Message written...");
    }

    @Override
    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
    {
        System.out.println( "IDLE " + session.getIdleCount( status ));
    }
}

Por ultimo para probar puedes utilizar telnet y el puerto, de esta forma
telnet localhost 9123
y dar entrer

Referencias

apache mina
video tutorial de apache mina
documentacion de apache mina
ejemplos de apache mina
ejemplo cliente servidor