sábado, 31 de marzo de 2012

Coding Dojo: Pomodoro Kata

Coding Dojo: Pomodoro Kata

El jueves 29/03/2012, en la clase de "Taller de Desarrollo para Entorno Web", fui partícipe de un Coding Dojo sobre el Pomodoro Kata de 12Katas12Meses. En esta oportunidad, la Kata fue realizado con Ruby, como lenguaje de programación, y Rspec, como herramienta de pruebas a base de ejemplos. Fue interesante realizar el Coding Dojo utilizando la técnica de Pair Programming y más aún realizando un Switch para que cada uno exponga sus puntos de vista y así salir adelante con el reto.

Por otro lado, cabe resaltar la importancia de TDD, ya que me pude dar cuenta, una vez más, que es una herramienta que nos da mayor confianza al momento de mantener el código de un aplicativo. Asimismo, el mantener un codigo limpio y eficaz es una tarea que facilmente puede ser aplicada utilizando el Refactoring, ya que contribuye al mejoramiento en la perfomance del software desarrolado.

En conclusión:

Un Coding Dojo es un buen momento para recibir conocimiento, poder transmitirlo y ver otros puntos de vista, por lo que es recomendable ir con una perspectiva muy abierta. También sirve para que se te caigan los dogmas ó malas practicas de como afrontar el desarrollo de un programa, aprendiendo el buen uso de las practicas basandose en TDD, refactorizando y evitando el uso, más bien abuso, del debugger, que nos puede hacer perder un tiempo precioso y hacernos menos eficientes.
También es un buen momento para conocer gente de nuestro entorno, con las mismas inquietudes y similares puntos de vista.

Gracias al Profesor Lennon Shimokawa por la experiencia, y por supuesto a todos los que participamos en el Dojo.

sábado, 24 de marzo de 2012

Rails 3, jquery Mobile y google Maps

jquery Mobile es una librería que nos ofrece las capacidades para la realización de aplicaciones web 2.0 haciendo un buen uso del look and feel utilizado en las aplicaciones mobiles.

Aqui podran encontrar una guia para poder mostrar un mapa con Rails y jQuery mobile:

http://fuelyourcoding.com/getting-started-with-jquery-mobile-rails-3/
http://comdynamics.net/blog/468/jquery-mobile-with-google-maps/

Suerte!!!

Rails 3 y oAuth de Twitter

El oAuth de Twitter nos ofrece el poder utilizar autenticación de usuarios de twitter via http socket. Esta implementacion es muy comun en web 2.0 applications para poder centralizar la autenticación de usuarios y poder hacer uso de la información que ofrece Twitter.

Este es un enlace que me recomendaron revisar para poder implementar oAuth con Rails:

https://rubygems.org/gems/​omniauth-twitter

Gracias, Monica Momiy!!!

lunes, 12 de marzo de 2012

Scrum y Kanban

Scrum es básicamente una manera de establecer micro ciclos de desarrollo, para que el proyecto pueda redirigir su curso en base a lo que se percibe al final de cada ciclo.
También ayuda a ver con más claridad hacia dónde se va, qué se está haciendo, qué funciona mejor y cómo cuánto demora hacer cada cosa (para no ofrecer plazos que no son fáciles de cumplir).

Kanban ayuda en la parte de visualizar el proceso. Puede usarse solo o también como complemento de Scrum. Básicamente es un tablero con varias columnas. La más a la izquierda sirve para colocar las tareas propuestas y la más a la derecha las tareas finalizadas. En medio hay columnas para los estados intermedios entre esos dos. Cada equipo es libre de definir sus columnas, a veces empiezan con un esquema básico (PROPUESTOS / LISTOS PARA EMPEZAR / EN PROCESO / LISTOS PARA PRUEBA / FINALIZADO) que va evolucionando. Las notas se hacen en post-its para que sea fácil de mover de columna en columna.
Lo ideal es que sea algo físico, que el equipo haga suyo, y de información casi de un vistazo.

jueves, 16 de diciembre de 2010

Cakephp: Swift Mailer Component


Requisitos:
  • Windows XP, o Linux
  • Apache 2 instalado
  • PHP 5.2 instalado (extension openssl para SSL o TLS)
  • CakePhp 1.2, instalado
  • MySQL 5, opcional
Objetivo:

Implementar un mecanismo para el envio de email (Sin CakeMailer).


Instalación:

  1. Desacargar SwiftMailer y copiarlo en /app/vendors/swift_mailer
  2. Copiar este componente a /app/controllers/components/swift_mailer.php

Uso:

Ubicar la libreria...

La carpeta vendors debería tener este aspecto:



Crear los layouts...

Para que el componente funcione correctamente se debe de crear un layout por defecto (default.ctp) para los emails: html y text. Estos últimos deben de estar ubicados en la carpeta /app/views/layouts/email/.

La carpeta de los layouts debería tener este aspecto: (Ej. default.ctp)



Crear las vistas...

Para el contenido de los emails se necesitarán plantillas, los cuales deben de estar ubicados en la carpeta /app/views/elements/email/.

La carpeta de las plantillas del contenido del email debería tener este aspecto: (Ej. default.ctp)



En el controlador...

class TestsController extends AppController {
var $name = 'Tests';
var $helpers = array('Html');
var $components = array('SwiftMailer');
var $uses = null;

function testEmail() {
// se configuran los datos del email
$datos = array(
'nombre' => 'Cake User',
'asunto' => 'Email Test',
'mensaje' => 'Body Message'
);
$asunto = 'Email Test';
$destinatario = 'test@test.com';
$plantilla = "default";

// se configuran los parametros SMTP
$this->SwiftMailer->smtpHost = "mail.myhost.com";
$this->SwiftMailer->smtpPort = 25;
$this->SwiftMailer->smtpUsername = test@myhost.com;
$this->SwiftMailer->smtpPassword = "mypassword";

// se configuran los parametros de envio
$this->SwiftMailer->sendAs = 'html';
$this->SwiftMailer->from = "test@gmail.com";
$this->SwiftMailer->fromName = "Swift Mailer";
$this->SwiftMailer->to = $destinatario;
$this->SwiftMailer->replyTo = "replayto@gmail.com";
$this->SwiftMailer->bcc = array('bcc@host.com');

// se obtiene la fecha actual
$fechaHoraActual = date('d-m-Y H:i:s');

// se envian los parametros necesarios a la vista
$this->set('datos', $datos);
$this->set('fechaHoraActual', $fechaHoraActual);

try {
$exito = $this->SwiftMailer->send('default', $asunto);
if(!$exito) {
$this->log("Error sending email");
}
} catch(Exception $e) {
$this->log("Failed to send email: ".$e->getMessage());
$exito = false;
}

if(!$exito) {
$this->Session->setFlash('El email no pudo ser enviado.', 'default', array('class' => 'error'));
return false;
}

$this->Session->setFlash('El email fue enviado con exito.', 'default', array('class' => 'success'));
return true;
}
}

Listo!!!


Enlace Original:

- http://bakery.cakephp.org/articles/sky_l3ppard/2009/11/07/updated-swiftmailer-4-xx-component-with-attachments-and-plugins

miércoles, 15 de diciembre de 2010

Cakephp: Zip Component


Requisitos:

  • Windows XP, o Linux
  • Apache 2 instalado
  • PHP 5 instalado (php_zip)
  • CakePhp 1.2, instalado
  • MySQL 5, opcional

Objetivo:

Implementar un mecanismo para comprimir archivos y/o carpetas.

Instalación:

  1. Copiar este componente a /app/controllers/components/zip.php
Uso:

En el controlador...

class FilesController extends AppController {
var $name = 'Files';
var $components = array('Zip');

function zip() {
// se establece la ruta del folder a comprimir
$folder = WWW_ROOT.'files'.DS.'backup';

// se valida la existencia del folder
if(!file_exists($folder)) {
if(!mkdir($folder)) {
$this->Session->setFlash('Error al crear la carpeta.', 'default', array('class' => 'error'));
return false;
}
}

// se genera el archivo zip
if(is_dir($folder)) {
// se establece la ruta del zip a generar
$dmy_his = date('dmy-his');
$zip_file = $folder.DS.'bk-'.$dmy-his.'.zip';

// se realiza el zip
$this->Zip->begin($zip_file);
$this->Zip->addDir($folder, 'bk-'.$dmy-his);
$this->Zip->close();
if(!file_exists($zip_file)) {
$this->Session->setFlash('Error al generar el archivo zip.', 'default', array('class' => 'error'));
return false;
}

// se forza la descarga del zip generado
$this->redirect('/files/backup/bk-'.$dmy-his.'.zip');
return true;
} else {
$this->Session->setFlash('La carpeta no existe.', 'default', array('class' => 'error'));
return false;
}
}
}

Listo!!!

Enlace Original:

- http://bakery.cakephp.org/articles/SeanCallan/2007/07/18/zip-component

martes, 14 de diciembre de 2010

CakePhp: Webservices con NuSoap


Requisitos:

  • Windows XP, o Linux
  • Apache 2 instalado
  • PHP 5 instalado
  • CakePhp 1.2, instalado
  • MySQL 5, opcional

Objetivo:

Implementar un mecanismo para publicar y/o consumir servicios web.

Instalación:

  1. Copiar esta version hackeada de nusoap a /vendors/nusoap/nusoap.php
  2. Copiar este controlador de los servicios web a /vendors/nusoap/web_services_controller.php
  3. Copiar este componente a /app/controllers/components/soap.php

Uso:

Creando el Servidor

Los servicios estarán publicados en el url http://my_host/my_cake/wsuserservices
(escriba la url en el web browser para ver la información del servicio web)

En el controlador...

App::import('Vendor', 'nusoap/web_services_controller');

class WsuserservicesController extends WebServicesController {
var $name = 'Wsuserservices';
var $uses = null;
var $api = array(
'add'=> array (
'doc' => 'crea un usuario',
'input' => array(
'id' => 'xsd:integer',
'name' => 'xsd:string'
)
),
'name' => array(
'doc' => 'obtiene el nombre de un usuario',
'input' => array(
'id' => 'xsd:integer'
)
'output' => array(
'return' => 'xsd:string'
)
)
);

function add($id, $name) {
$data['User']['id'] = $id;
$data['User']['name'] = $name;
$this->User->save($data);
}

function name($id) {
$this->User->id=$id;
$data=$this->User->read();
return $data[0]['User']['name'];
}
}

Creando el cliente

En el controlador...

class WsclientservicesController extends AppController {
var $name = 'Wsclientservices';
var $components = array('Soap');
var $uses = null;

function getUserName() {
$url = "http://my_host/my_cake/wsuserservices";
$func = 'name';
$param=array(’id’=>’34′);
$name=$this->soap->client($url,$func,$param);
$this->set(’name’,$name);
}

Listo!!!

Enlace Original:

-
http://rossoft.wordpress.com/2006/02/16/webservices-in-cakephp-other-approach/

Las + Populares