Reflexión después de los cursos de certificación para PSM I y PSPO I


Luego de haber participado en los cursos “Professional Scrum Master I” y “Professional Scrum Product Owner I” de Scrum.Org en 3Dev Business & Consulting. decidí hacer una reflexión en referencia a los mismos.

  1. Siempre creí que Scrum era una metodología de gestión de proyectos, y aun que estaba errado, trataba de convencerme o hallar una explicación lógica, y es que definitivamente Scrum no da una forma de llevar el proceso, por el contrario, provee las herramientas necesarias para administrar el desarrollo de un producto. ¿ Acaso esto no es un proyecto?, en definitiva, no lo es. Un proyecto esta amarrado a fechas, mientras que un producto esta orientado a si mismo como tal, por tanto, Scrum no se orienta a cumplir fechas, si no, a maximizar el valor de un producto.
  2. Estaba seguro que el Scrum Master era un Jefe de Proyectos, y estaba completamente equivocado, y es que no analizaba tampoco el nombre de este rol por si mismo, es decir, el “Scrum Master” es el “Maestro de Scrum” o experto en Scrum, responsable de de asegurarse que Scrum se cumpla, facilitando el camino y brindando el soporte necesario al equipo para el éxito de Scrum, mas no de dirigir al equipo, ni menos asegurarse del éxito del producto.
  3. Asumía que el Product Owner era el cliente, esto por el nombre del rol, entendía que el dueño del producto era el cliente si mismo, ahora entiendo que esto no es del todo cierto, el Dueño del Producto es en si el responsable de que el producto consiga su éxito, si puedo hacer una analogía, diría que es el gestor del proyecto, pero sin gestionar el equipo, pero si gestionando las prioridades del producto y maximizando el valor del producto.
  4. Estaba convencido que los miembros del Equipo de Desarrollo pueden trabajar cada uno en su especialidad, lo cual no ayuda en la cohesión del equipo como tal, ya que se busca que el equipo sea cross funcional y que no haya un propietario del código. Es importante la comunicación, coordinación e interacción de cada uno de los miembros del Equipo de Desarrollo, además de su compromiso y coraje para enfrentar los retos en el camino a conseguir el mayor valor del producto.

Conclusiones

  1. Scrum es una conjunto de herramientas que nos permite desarrollar productos complejos.
  2. Cada uno de los roles de Scrum son insustituibles, y su éxito radica en el empoderamiento del equipo hacia el producto por parte de la organización.
  3. Poner en práctica lo aprendido tan pronto como sea posible.

Agradecimientos

No puedo concluir este texto sin antes agradecer a Jose Peñarrieta y César López de Inka Labs, quienes me apoyaron para concretar mi participación en estos cursos.

Anuncios

PHP con Apache 2.4


Como desarrollador PHP , mi trabajo diario lo hago sobre un Debian Gnu Linux ( SID ) , que luego de una actualizacion

$ sudo apt-get update; sudo apt-get dist-upgrade -y

Me deja de funcionar la re escritura de direcciones en wordpress y CakePHP ( Por suerte en django no tengo estos problemas ), revisando un poco de documentación, veo que se necesita tener activo la directiva Add Require all granted

Finalmente, edito el archivo /etc/apache2/sites-enabled/000-default.conf

ServerName localhost
ServerAlias localhost
ServerAdmin webmaster@localhost
DocumentRoot /home/csotelo/public_html/
<Directory "/home/csotelo/public_html/">
allow from all
Require all granted
AllowOverride All
Options +Indexes
</Directory>
LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Call current_user_can after init()


This error appears on wordpress when I activate debug mode, and using bbpress and buddypress, the error was a requiremnt on using the init function before use a restriction related with the function current_user_can

After having this using on a theme development, I have check some pages like

Finally my solution was create a function as http://codex.wordpress.org/Plugin_API/Action_Reference/admin_init says and warning disappear

function restrict_admin(){
//if not administrator, kill WordPress execution and provide a message
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __('You are not allowed to access this part of the site') );
}
}
add_action( 'admin_init', 'restrict_admin', 1 );

Gallo has been moved to GitHub


blog-github

After been using source for my project I have decide to move my two projects to GitHub, and now and available here

Both of them were used for me on some pages in order to have a tool for make web sites on a easily and simple and smarty

Testing my blog with drivel


I am tetsing this amazing tool for gnome desktop

Cakephp vs Codeigniter


Este artículo no esta basado en ninún tipo de benchmarking, ni comparativa ni mucho menos prueba de tiempos, solo una recopilación de experiencias a la hora de escoger un framework o no, claro, algo resumido, eso creo, en un solo artículo. Aclaro al lector que esta es solo una opinión personal, no una verdad.

A lo largo del tiempo que llevo como desarrollador, me he visto en ma s de una oportunidad, en la desición de que herramienta usar, desde el lenguage, las bases de datos etc. Por ahora me centrare en PHP como herramienta, por llevar mas tiempo en este lenguaje.

Escoger entre usar o no un framework va mucho de la mano con el proyecto, de hecho proyectos pequeños, no considero que requieran un framework, asi como un gran proyecto requerirá de una herramienta mas productiva, claro que también se podra realizar sin usar un framework, aun que el uso de un framework agilizaria el trabajo, y si trabajamos en un equipo, ayudaria al equipo en el uso de un estandar de codificacion y trabajo.

La pregunta es ¿qué framework debo usar ahora para desarrollar?. La búsqueda en internet me dará muchas respuestas de los aficionados, fanáticos, seguidores, etc. de uno u otro framework, demostrando y dando sus experiencias, asi como yo lo hago en este momento.

Por ahora trabajo con Cakephp, pero en algun momento trabaje con codeigniter. Ahora explico el por qué del cambio.

Codeigniter es un framework super ligero, pero casi todo hay que hacerlo o hay que prepararlo antes de empezar a trabajar; es decir, el modelo de datos, control de accesos, herramientas, etc. Mientras tanto, cakephp ya tiene todo esto hecho, incluso hasta un crud integrado, solo era cuestion de usarlo.

Mi deseo es tener una herramienta lista, que me permita empezar a trabajar ya, por otro lado symfony me ofrecia algo mejor que cakephp, sin ambargo al final decidí por cakephp por una simple razon, eocntrar una comunidad en mi idioma, con uno de los desarrolladores de cakephp como miembro, dispuesto a ayudar y resolver mis dudas. Esto me parecio la razon mas importante.

Conversando con otro desarrolador cambio de cakephp a codeigniter, el proceso inverso de lo que yo hice, y su razon, como me lo cuenta es que codeigniter no lo encasillaba en una forma de trabajo, si no el podia usar la forma que a él mas le agradaba.

Mi conclusión, no solo los factores de tiempo de ejcucion, tiempo de desarrollo, etc y otras pruebas de benchmarking son necesarias, si nola comodidad y el objetivo que un desarrolador persigue, asi como la forma de trabajo y el framework que mas se adapta a esta.

Al final la herramienta debe ser de acuerdo a lo que el desarrollador busca y no al contrario.

Retorno a las ponencias


Luego de un largo tiempo, regrese a las ponencias, siendo la primera “Seguridad Informática: Principios Básicos” que fue en la UTP y ahora en Tacna para el Flisol 2010. Mas adelante publicare las ponencias

Gallo Released


Gallo is a simple php framework

Model Library for Codeigniter


I have made a model library for codeigniter. It is based on the article http://maestric.com/doc/php/codeigniter_models

if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Model extends Model {
    
    var $table = "";
    
    function My_Model() {
        parent::Model();
        $this->load->database();
    }
    
    function find($type = 'all', $options = array()) {
        if ($type == 'first') {
            $this->db->limit(1);
        }
        if(array_key_exists('fields', $options)) {
            $this->db->select(implode(",", $options['fields']));
        }
        if(array_key_exists('where', $options)) {
            foreach ($option['where'] as $key=>$value) {
                $this->db->where($key, $value);
            }
        }
        if(array_key_exists('order', $options)) {
            foreach ($option['where'] as $key=>$value) {
                $this->db->order_by($key, $value);
            }
        }
        if(array_key_exists('limit', $options)) {
            $limit = $options['limit'];
            if(array_key_exists('limit', $limit) && !array_key_exists('offset', $limit)) {
                $this->db->limit($limit['limit']);
            }
            if(array_key_exists('limit', $limit) && array_key_exists('offset', $limit)) {
                $this->db->limit($limit['limit'], $limit['offset']);
            }
        }
        $query = $this->db->get($this->table);
        $result = $query->result_array();
        return (count($result) > 0 ? $result[0] : NULL);
    }
    
    function find_first($options) {
        return $this->find('first', $options);
    }
    
    function find_all($options) {
        return $this->find('all', $options);
    }
    
    function find_id($id) {
        if ($id == NULL) {
            return NULL;
        }
        return $this->find('first', array('where'=>array('id'=>$id)));
    }
    
    function insert($data) {
        $this->db->insert($this->table, $data);
        return $this->db->insert_id();
    }
    
    function update($id, $data) {
        $this->db->where('id', $id);
        $this->db->update($this->table, $data);
    }
    
    function delete($id) {
        if ($id != NULL) {
            $this->db->where('id', $id);
            $this->db->delete($this->table);
        }
    }
}

Cómo poner color a tail


Hacer un tail -f para hacer el seguimiento de alguna tarea o proceso, algunas veces no es mucha ayuda, esto debido a la forma de visualizar dicha información. Una forma de mejorar esta tarea es con el comando ccze. Para esto, habrá que instalar dicho programa.

$ sudo aptitude install ccze

Una vez instalado, lo uso ayudándome de un pipe, por ejemplo para ver el log de los daemons.

$ sudo tail -f /var/log/daemon.log | ccze

El resultado, es un tail con colores, que facilita mucho la visualización.