domingo, 5 de junio de 2011

Grabar Escritorio

Hola que tal compañeros, en esta entrada dire dos herramientas que nos serviran para grabar el escritorio, pongo esta entrada, ya que varios compañeros ultimamente me han estado preguntando de algun programa para hacerlo. El programa a utilizarse se llama "Record my Desktop" y "XVidCap".


Instalacion:

Record my Desktop
Para el primero, abrimos Synaptic y en la barra de busqueda ponemos recordmydesktop y marcamos los paquetes gtk-recordmydesktop y recordmydesktop, despues le damos aplicar para instalar.


Una vez instalado, lo podemos encontrar en Aplicaciones/Sonido y Video.

Ya una vez abierto el programa solo es cuestion que indiquemos la calidad, donde se guardara y enseguida ya podemos hacer nuestras grabaciones.



XvidCap
Para este la instalacion de XvidCap, es un poco mas facil, ya que tan solo abrir la terminal y poner "sudo apt-get install xvidcap".

Una vez instalada, XvidCap, la podemos encontrar en Aplicaciones/Sonido y Video.

Para su uso viene siendo casi igual que el anterior, lo bueno de este programa es que antes de grabar te da la oportunidad de indicar la parte que quierese grabar.


Por lo pronto seria todo, espero y que esta entrada les sea util, como quiera cualquier duda o pregunta que tengan al respecto, haganmela saber.

jueves, 12 de mayo de 2011

Diseño de Interfaces graficas Codigo

Aquí va el código pero aun falta...

miércoles, 30 de marzo de 2011

Código de patrones de diseño

Aquí les posteo mi código de diseño de patrones


//Patron Singleton
class SingletonUS
{
//Aquí se pueden edclarar las demas variables para el query y la db, éstas solo son como la escructura
private static $singleInstancia;
private function __construct(){ }

public static function getInstancia(){
if(!self::$singleInstancia){
self::$singleInstancia = new self();
}
return self::$singleInstancia;
//Patron Strategy
class StraUs {

public function CreateOrUpdate($name, $mail, $userid = null, $father)
{
if( is_null($userid) ) {
// Esto significa que el usuario aún no existe, crear nuevo registro
}
else {}

if( is_null($father) ) {
// Si tiene papa el empleado
}
else {}

}
}}

/* Aquí se va añadiendo los métodos de la clase */
function Metodo(){
var_dump(self::$singleInstancia);
}

}

$mysingleton = SingletonUS::getInstancia();
$mysingleton->Metodo();

$mysingleton = SingletonUS::getInstancia();
$mysingleton->Metodo();




//Patron Strategy
class StraUs {

public function CreateOrUpdate($name, $mail, $userid = null, $father)
{
if( is_null($userid) ) {
// Esto significa que el usuario aún no existe, crear nuevo registro
}
else {}

if( is_null($father) ) {
// Si tiene papa el empleado
}
else {}

}
}




//Patrones Factory
abstract class FactoriCnva {
protected $_html;
}

public function getHtml()
{
return $this->_html;
}
}

class ImageFactoriCnva extends FactoriCnva {
protected $_html = "...";
}

class InputFactoriCnva extends FactoriCnva {
protected $_html = "...";
}

class FactoriCnvaFactory
{
public static function createFactoriCnva($type)
{
$baseClass = 'Boton';
$targetClass = ucfirst($type).$baseClass;

if (class_exists($targetClass) && is_subclass_of($targetClass, $baseClass)) {
return new $targetClass;
} else {
throw new Exception("El tipo de botón '$type' no existe.");
}
}
}

$FactoriCnvas = array('image','input');
foreach($FactoriCnvas as $b) {
echo FactoriCnvaFactory::createFactoriCnva($b)->getHtml()
}

abstract class FactoriCnva {
protected $_html;
}

public function getHtml()
{
return $this->_html;
}
}

class Nodo extends FactoriCnva {
protected $_html = "...";
}

class Linea extends FactoriCnva {
protected $_html = "...";
}

class FactoriCnvaFactory
{
public static function createFactoriCnva($type)
{
$baseClass = 'Canva';
$targetClass = ucfirst($type).$baseClass;

if (class_exists($targetClass) && is_subclass_of($targetClass, $baseClass)) {
return new $targetClass;
} else {
throw new Exception("La canva '$type' no existe.");
}
}
}

$FactoriCnvas = array('Nodo','Linea');
foreach($FactoriCnvas as $b) {
echo FactoriCnvaFactory::createFactoriCnva($b)->getHtml()
}


Patrones de Diseño

Hola que tal otra vez compañeros, ahora lo que vamos a hablar es acerca de los patrones de diseño.

Antes que nada hay que definir o dar la idea acerca de los patrones de diseño

Un patrón de diseño es una solución, que fue analizada, de un problema de programación y que éstas se pueden volver a utilizar en otros problemas de programación, para su mejor funcionamiento (Es una plantilla que se aplica a una situación).
Hay que tomar en cuenta que si un patrón se aplica erróneamente, nos puede traer problemas y dificultames para su trabajo ó manejo.

Tipos:
En los patrones de diseño contamos con 3 tipos los cuales son: estructural, creacional y de compartamiento.
  • En el estructural, tenemos las relaciones entre las clases y objetos, que nos ayudan y facilitan el trabajo en conjunto.
  • En el creacional, tenemos los mecanismos de instalación, facilitandonos la creación de objetos a adaptarse a dicha situación.
  • En el de compartamiento, ayuda a facilitar la comunicación entre las clases y objetos.

Ahora pontré algunos de los patrones mas usados en PHP
Hay que tomar en cuenta que cuando vamos a usar patrones de diseños, éstos pueden ser aplicables a casi cualquier lenguaje de programación si acaso algunos varían por su forma de procesarlos, pero en sí son casi idénticos. Para ésto yo les hablaré de los más usuales que hay en el lenguaje de PHP.
  • Patrón Singleton: Éste es uno de los patrones más faciles y que con mayor frecuencia veremos en programas a poder aplicar, consiste en una clase que unicamente tiene una instancia y ésta provee un lugar global que se tiene acceso en ella (osea, devolver la clase en futuras llamadas que se hagan a ésta).
  • Ventaja: Es fácil de usar y de entender, éste patrón lo podemos usar en la gestión de conexión y query con la base de datos.


  • Patrón Observer: En éste patrón se crean objetos que mantienen una lista de observadores y éste notifica algún cambio que haya en su éstado.
  • Ventaja: Éste patrón nos puede ser muy útil al momento de tener un sistema acceso a información o loggin (un ejemplo podría ser el de facebook, que nos indica cuando alguien publico algo de nosotros o relacionado a nosotros).


  • Patrón Factory: En éste patrón se basa se basa en un método de una clase que crea objetos cuando no se sabe exactamente la clase del objeto que se va a crear (osea, una clase general que heredará subclases).
  • Ventaja: Éste patrón nos puede ser muy útil al momento de identificar objetos a crear y éste los valla identificando y asociandolos respectivamente.


  • Patrón Chain-of-command-pattern: Éste patrón también es conocido como cadena de mando, éste se basa en la creación de objetos receptores y un objeto emisor, que manda una petición y éste recorre todos los posibles receptores hasta que se responda con una acción o ejecución en el comando.
  • Ventaja: El objeto emisor, no conoce de las clases que se va a manejar y sirve para tener una arquitectura de acoplamiento (un ejemplo a éste patrón por si no entendieron del todo bien, sería en un formulario, en la cual dependiendo de los valores dados por el usuario, nosotros, podemos hacer cierta acción como si es hombre o mujer, clasificarlos ó mandar una notificación ya sea por correo o por mensaje a celular si proporcionó el correo o el número de celular).

  • Patrón Strategy: En éste patrón los algoritmos de extraen de clases complejas, para que éstas puedan ser más fácil.
  • Ventaja: Ayuda en un mejor manejo de los recursos o más bien para el mejor desarrollo de ésta o de su algoritmo (un ejemplo podría ser al tener un listado de usuarios y éste nos da un método para encontrar un conjunto de usuarios).


Por el momento serán todas a mencionar, pero cabe recordar que aún hay otras, que nos puede ser también útiles o importantes, como el patrón adapter, patrón decorator, patrón proxy, etc.

Patrones de diseños aplicados en mi proyecto
Como ya vimos 5 patrones de diseños, que son los mas importantes (factory, singleton, observer, chain-of-command and strategy), lo que resta es saber cuál aplicar a mi proyecto, hay que recordar lo comentado con anterioridad, que si un patrón lo aplicamos erróneamente a nuestro proyecto o programa, éste nos puede producir fallas o dificultades para seguir con éste.

En mi proyecto los patrónes a usar podrían ser:
  • Patrón Strategy: Éste patrón lo puedo emplear al momento de crear registros, o si ya hay uno existente, como por ejemplo que un empleado tenga de id como NULL, tener en el registro de quien es padre de ese empleado (jefe).


  • Patrón Factory: Éste patrón lo puedo usar en lo botones a crear, para indicar si hay que agregar, eliminar o editar algun empleado, ya que depende de la situación que se vaya a crear y también en la creación de las canvas


  • Patrón Singleton: Éste patrón lo puedo emplear, para declarar las instancias de la clase árbol y en la clase listar, ya que habra la conexion de la base de datos y el guardado o edición de los empleados.


A continuación les pongo mi diagrama completo:



En sí así sería como quedaría mi diagrama, por el momento es todo y en la otra entrada publicaré el código de éstos patrones de diseño aplicados a mi proyecto.
Si tienen alguna duda o comentario, no olviden en hacerlo o si creen que sería otro patrón necesario haganmelo saber.
Saludos.

Aquí dejo algunas ligas de interés y que me fueron útiles:
http://craftyman.net/patrones-de-diseno-en-php/
http://www.ibm.com/developerworks/library/os-php-designptrns/?ca=dgr-lnxw98PHP-Patterns
http://www.baluart.net/articulo/introduccion-a-los-patrones-de-diseno-con-php
http://www.davidrojas.net/

También recomiendo éste libro
http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/
http://www.amazon.com/First-Design-Patterns-Elisabeth-Freeman/dp/0596007124/ref=sr_1_1?ie=UTF8&qid=1301566231&sr=1-1-spell
En la cuál, leí un poco de éstos y me ayudaron en algunas cosas para comprender, aparte que varios autores de donde estuve investigando recomendaban el primero.

miércoles, 23 de marzo de 2011