domingo, 6 de septiembre de 2015

Guía para utilizar SourceTree

Buenas.

Hace unos días aprendí a manejar una gran herramienta llamada SourceTree y venia a presentárosla.

SourceTree nos permite controlar nuestros repositorios. Es una herramienta de gran utilidad que nos permite tener nuestro código organizado según nuestros intereses. Y nos permite interactuar con código de otros socios (o con el nuestro) de forma “sencilla”, cómoda y estructurada.

Veamos un ejemplo.

En la imagen tenemos una rama principal llamada ‘desarrollo’ y 2 subramas (modificar y borrar).

En el primer punto rojo, lo que hemos hecho ha sido crear una nueva subrama llamada ‘modificar’. Tras la creación de esta subrama, hemos escrito nuestro código y lo hemos subido para que se guarde (commit).
Una vez terminado el código que tiene que ver con la funcionalidad de ‘modificar’, en el segundo punto rojo hemos unido la subrama ‘modificar’ a la rama ‘desarrollo’.
Esto implica que en la rama ‘desarrollo’ se nos guarde el código escrito en la subrama ‘modificar’.

Quedando la rama desarrollo y la subrama modificar así:
class SourceTree extends CI_Controller {
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
    
    }
    
}

Tras ello, hemos creado una nueva subrama (borrar). El crear una nueva subrama, implica que todo el código que tiene la rama se pase a la subrama creada. Por tanto, en la subrama ‘borrar’ tendríamos el código que se escribió en la rama ‘modificar’.
Una vez creada la subrama escribiríamos el código para implementar la funcionalidad de borrar. Y tras terminar, uniríamos esta subrama a la rama principal. Implicando así, que en la rama desarrollo ya tengamos el código de la funcionalidad de borrar y modificar.

Quedando la rama desarrollo y la subrama borrar así:
class SourceTree extends CI_Controller {
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
    
    }

    
    public function borrar() {
        
        //codigo que tiene que ver con el borrar
    
    }
    
}

Pero aquí no acaba la cosa…

Imaginemos que más adelante nos damos cuenta que hemos cometido un error en la funcionalidad de ‘modificar’. Pues con SourceTree sería bastante sencillo de corregir este error.
Simplemente tendríamos que movernos a la subrama ‘modificar’. Una vez nos hemos movido, en nuestro IDLE únicamente nos aparecerá el código que escribimos en su momento sobre esta funcionalidad.

Osea, nos apareceria unicamente este código:
class SourceTree extends CI_Controller {
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
    
    }
    
}

Editamos el código para corregir el error y subimos los cambios (commit).
Tras ello, debemos unir esta subrama a la rama principal otra vez. Dando lugar a que el código que había sobre la funcionalidad de ‘modificar’ en la rama desarrollo se modifique de forma automática por el código que hemos escrito recientemente.

La subrama modificar quedaria así:
class SourceTree extends CI_Controller {
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
        //error corregido
    
    }
    
}

La rama desarrollo quedaría así:
class SourceTree extends CI_Controller {  
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
        //error corregido
    
    }

    
    public function borrar() {
        
        //codigo que tiene que ver con el borrar
    
    }
    
}

Como resultado, en nuestra rama desarrollo tendremos el código de la funcionalidad borrar y el nuevo código implementado en la subrama modificar.

Otro punto importante. Imaginemos, que tenemos un error en la funcionalidad de ‘borrar’. Nos deberemos mover a la rama de borrar. Entonces nos daremos cuenta, de que el código que hay en la subrama borrar acerca de la funcionalidad ‘modificar’ es código viejo, es decir, está el código de ‘modificar’, pero sin solucionar el error que nos surgió anteriormente.
Pues bien, una vez hemos escrito el código para solucionar el error en la funcionalidad de ‘borrar’, debemos hacer un commit y luego unir esta subrama con la rama principal.

El resultado, será que tendremos en la rama desarrollo el código de modificar (con el error corregido) y el código de la subrama borrar (con el código corregido).

La rama desarrollo quedaría así:
class SourceTree extends CI_Controller {  
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
        //error corregido
    
    }

    
    public function borrar() {
        
        //codigo que tiene que ver con el borrar
        //error corregido
    
    }
    
}

La subrama borrar quedaría así:
class SourceTree extends CI_Controller {
    
    public function modificar() {
        
        //codigo que tiene que ver con el modificar
    
    }

    public function borrar() {
        
        //codigo que tiene que ver con el modificar
        //error corregido
    
    }
    
}
El gráfico de ramas quedaría así:


¿Cómo unir, crear ramas etc.?

-Commit: nos permite subir nuestro código a la rama en la que nos encontremos.
-Branch: nos permite crear una nueva rama.
-Merge: nos permite unir 2 ramas.
-Fecth: nos muestra los commits de nuestros compañeros.
-Pull: implementa los commit de nuestros compañeros de forma automática.
-Push: sube los cambios al repositorio.
-Stash: crea un paquete con todo nuestro código actual.


Y hasta aquí por hoy, un saludo.

lunes, 17 de agosto de 2015

Tareas programadas en CogeIgniter [WINDOWS]

Buenas.

Hoy vamos a hablar sobre cómo crear tareas programadas haciendo uso de codeIgniter.
Con este artículo aprenderemos a ejecutar de forma automática un método creado mediante codeIgniter cada X tiempo.

Lo primero que debemos hacer, es crear un controlador. Debemos tener en cuenta que dependiendo de lo que queramos hacer, debemos imponer unas medidas de acceso u otras.

El controlador quedaría similar a esto:
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Cronjobs extends CI_Controller {
    
    function __construct() {
        
        parent::__construct();

    }
    
    public function index() {
        
        redirect( site_url() );
    
    }
    
}

Tras ello, creamos la función que se va a ejecutar cada X tiempo.
if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Tareas extends CI_Controller {
    
    function __construct() {
        
        parent::__construct();

    }
    
    public function index() {
        
        redirect( site_url() );
    
    }

    public function tu_funcion() {
        
        //escribe tu funcion
    
    }

}
En este caso, yo lo que he hecho, ha sido crear una función (al final del articulo os la he puesto) que asigne de forma automática puntos a todos aquellos usuarios que hayan comprado la mensualidad llamada ‘puntos_automaticos’. Esta mensualidad hace que cada cierto tiempo se le asignen puntos a los usuarios sin necesidad de tener que conseguirlos viendo anuncios. Además, se acumula con otras ofertas.

Por ejemplo si un usuario ha comprado la bonificación de ‘puntos_automaticos’ y además tiene la bonificación de conseguir 16 puntos por anuncio, pues cada vez que se ejecute este método, se le asignaran 16 puntos en lugar de 1.

También comprueba que bonificación es mejor. Ya que en regaloconsolas se pueden obtener bonificaciones por 2 lados, por un lado realizando logros y por otro comprando las bonificaciones. Sin embargo, las bonificaciones compradas y las ganadas por logros no se acumulan. Este método, se encarga de ver que bonificación es mejor, si la de logros o la comprada. Una vez comparadas, ejecuta la mejor.

Una vez terminado nuestro método, debemos ir al programador de tareas > crear nueva tarea > acciones > nueva…
Y debemos configurarlo de la siguiente forma:
En el recuadro rojo, debemos introducir la ruta de nuestro navegador. Mientras que en el recuadro negro, debemos introducir la ruta de nuestro método.

Por ejemplo, la ruta del método que puse al principio seria:
http://127.0.0.1/regaloconsolas/index.php/tareas/tu_funcion

Finalmente, debemos seleccionar los periodos en los que se va a ejecutar este método. Para ello debéis ir a desencadenadores > nuevo… Y elegimos según nuestras necesidades.

Y eso es todo, un saludo.

jueves, 13 de agosto de 2015

'Calculadora' jQuery

Antes de nada vamos a empezar por explicar un poco de que va RegaloConsolas.com, ya que sino no le veréis sentido al programa realizado.

RegaloConsolas es una web en la que el usuario al ver anuncios consigue puntos, dichos puntos son usados en los sorteos. Cuantos más puntos tengas, mayores serán tus posibilidades de ganar el juego que se ofrece en el sorteo.

Otra forma de ganar puntos por ejemplo es mediante la realización de logros o mediante referidos. Sin embargo, los puntos que se consiguen mediante estos métodos se le otorgan al usuario de forma que él los pueda asignar al sorteo que desee.
Pongamos un ejemplo. Paco completa un logro. El logro como premio, otorga 50 puntos. Esos 50 puntos Paco los podrá usar para el sorteo que el desee.

El código que aquí se muestra, le permite a Paco asignar esos puntos de forma cómoda y sencilla.

martes, 11 de agosto de 2015

Crear un referido

Buenas.

Hoy os voy a explicar cómo crear un referido mediante CodeIgniter para la web que estoy haciendo ahora mismo.

La idea de RegaloConsolas.com, es que un usuario consiga puntos cuando ve anuncios. A su vez, este usuario puede tener referidos.
Tener referidos tiene la ventaja de que por cada 25 puntos que consiga tu referido, al usuario original se le dará 1 punto de forma gratuita sin tener que ver anuncios.

El funcionamiento de los referidos es bastante sencillo. Cada usuario posee un link único que puede proporcionar a cualquiera. Si esa persona se registra usando ese link, provocara que sea un referido del usuario original. Ganando así las ventajas que comente anteriormente.

Un usuario puede tener todos los referidos que quiera y en un futuro se implementara un sistema de logros que también tendrá que ver con los referidos.

En este video no explico todo paso a paso. Pero si controláis CodeIgniter imagino que lo podréis seguir perfectamente.

Un saludo.


PD: los primeros 7 minutos del video no se escuchan correctamente.

lunes, 10 de agosto de 2015

Recoger valor de un campo con el atributo disabled="true"

Hace unos días se me presentaba un problema a la hora de recoger un dato de un formulario.

El código del campo es el siguiente:
echo form_input( array(
                        'id'            => 'puntos_totales',
                        'name'          => 'total_de_puntos',
                        'type'          => 'text',
                        'value'         => $fields['points'],
                        'placeholder'   => 'Minimo 100',
                        'disabled'      => true,
                    ) );

Pues nada, me pongo a hacer pruebas y no lograba recoger el valor del campo. Lo intente mediante el típico $_POST[], usando diferentes atajos que te permite code igniter y nada, que no me devolvía el valor.

Total, que me puse a mirar la documentación y resulta que cuando pones el atributo disabled a true, no te permite recoger el valor de dicho campo.

En caso de que os ocurra esto, podéis optar por varias opciones.

Usar el atributo ‘readonly’
echo form_input( array(
                        'id'            => 'puntos_totales',
                        'name'          => 'total_de_puntos',
                        'type'          => 'text',
                        'value'         => $fields['points'],
                        'placeholder'   => 'Minimo 100',
                        //'disabled'      => true,
                        'readOnly'      => "true",
                    ) );
Este atributo hará que el usuario no pueda escribir en el campo al igual que el atributo disabled. Sin embargo, si te permitirá recoger la información del campo. Pero tiene una pega y es que no se aplica el estilo de fondo gris que si se aplica al usar disabled.

Usar jquery

Y claro, a mi es que me gusta el fondo gris y lo quería si o si. Así que aquí tenéis el código Jquery que use para hacer una ‘pequeña trampa‘ y poder usar el atributo disabled y a la vez recoger el dato.

El código es bastante sencillo y lo teneis explicado.

Un saludo.

Presentación

Buenas.

Antes de nada me gustaría hacer una pequeña introducción a lo que voy a ir publicando en este blog.
En principio he creado este blog con el objetivo de tener un “curriculum online”. Algo que demuestre mis conocimientos y que me permita mostrarlos.

La intención es que algún día vaya a entregar mi CV por ahí y me sea de gran utilidad enseñar este blog.
Empezare por una web sencilla, un blog. Ya más adelante, si veo que subo articulos constantemente y que a la gente le gusta, pues me planteare si crear algo más serio. Pero en principio con esto me sobra.

Otra de las razones para crear este blog, es que en mi caso hago muchas cosas y todas distintas. Y al final haces tanto y tan variado que ni recuerdas todo lo que has aprendido, ocasionando muchas veces que ni las menciones. 

Ya he hablado un poco sobre la razón de crear este blog. Así que voy a hablar un poco de mi situación.

Actualmente me encuentro estudiando ingeniería informática en la ULPGC. Este año empiezo el cuarto curso y he dado montón de cosas. Tantos temas y tan diferentes… A veces me gustaría tener un SSD en mi cabeza y poder acceder a todo ese conocimiento, porque no se vosotros, pero a mí lo aprendido si no lo pongo en práctica, a los 3 meses ya se me ha olvidado.

Antes de entrar a la universidad realice un ciclo superior de redes, el cual me gusto tanto que me decidí a estudiar la carrera relacionada con el ciclo, ya que pienso que puedo dar más de mi y el siguiente paso era la universidad.

En mis ratos libres, me dedico a programar. Tengo que darle las gracias en especial a Rubén, que me ha metido en este “mundo” y me ha ayudado a empezar a hacer mis cosillas. 

Ahora mismo me encuentro realizando la parte de programación de servidor de regaloconsolas.com , así que imagino que la mayoría de entradas que vaya publicando tendrán bastante que ver con esa página y su contenido. Esta página se está haciendo con un framework llamado code igniter y gracias a dicho proyecto estoy usando jquery, javascript, php, html etc.

Otra de mis aficiones es montar ordenadores. Hace un par de años me compre mi primer PC por piezas y me encanto montarlo y trastear con él.

Pero bueno, tampoco me voy a enrollar.

Un saludo y espero que disfrutéis de mis futuros post.