La Importancia de usar controlador de versiones

3

Posted by deldan | Posted in Uncategorized | Posted on 02-09-2010

Muchos me diréis, que son perfectos para proyectos grandes, o para equipo de personas que tocan el mismo proyecto, y es cierto, pero también me parecen perfectos, si tu eres el único que tocas el proyecto, o incluso si es un proyecto pequeño.

Tengo mi lista particular de los pros y contras de usar controlador de versiones.

Pros

  • Somos humanos y nos equivocamos, podemos recuperar un código que antes funcionaba bien, y que hemos estropeado.
  • Si trabajamos en grupo sabemos de quien es la culpa, es un Pro porque así no cometerá ese error. o no cometeremos ese error.
  • Podemos encontrar tanto aplicaciones, como proveedores donde guardar nuestras versiones totalmente gratis.
  • No tenemos necesidad de tener copias de seguridad ( aunque siempre son buenas), yo uso el time machine, y aun así me vino genial que todos mis proyectos estubieran en controlador de versiones, ya que hacia una semana que no hacía copias de seguridad cuando tuve que reinstalar.
  • No añade apenas tiempo de más a tu proyecto.
  • Pocas veces pasa, pero pasa, el cliente diciendo -quiero las cosas como estavan antes, solucionado con controlador de versiones.

Contras

  • Si no estás familiarizado al principio te puede costar un poco.
  • Depende de nosotros subir actualizaciones, así que debemos ser conscientes de ello, y subir periódicamente, ( hay que coger rutina).

Tenemos varios controladores de versiones, SVN, CVS, Git, TFS, yo estoy utilizando ahora mismo SVN, pero estoy considerando usar Git, por las mejoras que incorpora.

Aplicaciones SVN del resto estoy más perdido, pronto empezaré a mirar para Git, si conoceis alguna buena.

para pc Tortoise http://tortoisesvn.tigris.org/
para mac SmartSVN http://www.syntevo.com/smartsvn/
para linux Ubuntu RapidSVN http://rapidsvn.tigris.org/

y servidores:

http://www.xp-dev.com/

http://code.google.com/hosting/

http://www.projectlocker.com/signup/startup

Lista Spotify para motivar a emprendedores

4

Posted by deldan | Posted in Emprendedor | Posted on 01-09-2010

Ví este blog www.marketingguerrilla.es con las 20 mejores canciones motivacionales para emprendedores.Y he pensado en hacer una lista en spotify con alguna aportación  link y podeis hacer vuestras aportaciones.

FirePHP para cakePHP

1

Posted by deldan | Posted in cakephp | Posted on 31-08-2010

Primero decir que firePHP es complemento  de firebug para firefox, ¿en que nos facilita la vida? nos ahorra tener que sacar por pantalla echos, o var_dump(), esto es extremadamente útil cuando un proyecto web en php ya está en subido, y hay usuarios conectados.

Pasos a seguir para poder utilizar firePHP en Cakephp:
He sacado la parte de como instalarlo de: http://www.utoxin.name/2009/02/cakephp-firephp/.

Requerimientos:

Vamos a preparar cakePHP para el correcto funcionamiento de firePHP.

Lo primero que debemos haces es descomprimir la biblioteca principal de firePHP que hemos descargado, dentro de la carpeta lib, copiar la carpeta FirePHPCore, en “app/vendors/”.

Copiamos el archivo dbo_source.php de “cake/lib/models/datasources” y lo pegamos en “app/models/datasources/”, buscamos dentro del archivo la función showLog() y la cambiamos por la siguiente.

function showLog($sorted = false) {
	if ($sorted) {
		$log = sortByKey($this->_queriesLog, 'took', 'desc', SORT_NUMERIC);
	} else {
		$log = $this->_queriesLog;
	}

	if ($this->_queriesCnt > 1) {
		$text = 'queries';
	} else {
		$text = 'query';
	}

	if (PHP_SAPI != 'cli') {
		$summary = "{$this->_queriesCnt} {$text} took {$this->_queriesTime} ms";

		$body = array();
		$body[] = array("Nr", "Query", "Error", "Affected", "Num. rows", "Took (ms)");
		foreach ($log as $k => $i) {
			$body[] = array(($k + 1), $i['query'], $i['error'], $i['affected'], $i['numRows'], $i['took']);
		}

		fb(array($summary, $body), FirePHP::TABLE);
	} else {
		foreach ($log as $k => $i) {
			print (($k + 1) . ". {$i['query']} {$i['error']}\n");
		}
	}
}

Ahora debemos pegar el siguiente código en “app/config/bootstrap.php”.

App :: import ( 'Vendor' , 'FirePHP' , array ( 'file' => 'FirePHPCore/FirePHP.class.php' ));
function fb() {
	$debug = Configure::read('debug');
	if ($debug) {
		$ob_setting = ini_get('output_buffering');
		if (!$ob_setting) {
			ob_start();
		}

		$instance = FirePHP::getInstance(true);
		$args = func_get_args();
		return call_user_func_array(array($instance, 'fb'), $args);
	} else {
		return true;
	}
}

Ahora crearemos un componente para poderlo utilizar en todos nuestros controladores, app/controllers/components/fire_p_h_p.php y copiamos el siguiente código:

class FirePHPComponent {
	private $instance;

	public function __construct() {
		$ob_setting = ini_get('output_buffering');
		if (!$ob_setting) {
			ob_start();
		}
		$this->instance = FirePHP::getInstance(true);
		$this->instance->setEnabled(Configure::read('debug'));
	}

	public function __call($name, $args) {
		return call_user_func_array(array($this->instance, $name), $args);
	}
}

Ya estaría instalado, vamos a probarlo, primero deberiamos llamar al componente en el controlador donde queramos usarlo.

var $components = array('FirePHP');

También dejo una pequeña idea de como usarlo en el controlador.

public function index() {
                $users = $this->Users->AllUsers();
		$this->FirePHP->error($users,'array users');
	}

Estamos simulado que recogemos todos los usuarios de la base de datos en una variable $users, la salida será un array, como habíamos comentado, la idea era no tener que poner var_dump o echos. Ahora en pantalla no nos saldrá nada, pero si vamos a la consola de firebug, vermos ahí nuestra array reflejada con el nombre de error array users.

Decidokit beta lanzado!

0

Posted by deldan | Posted in Novedades, cakephp | Posted on 19-08-2010

Buenas este es un anunció que me agrada dar.
Un proyecto interno de bonzzay la empresa que tengo con otros 3 socios, ha sido lanzado.
Se llama decidokit, la idea es simple, que el mundo decido por ti.

Sí quereis hechar un vistazo, y ayudarnos a mejorarlo.  Si no sabes aún que teléfono comprarte quizás la gente pueda ayudarte a decidirte. decidokit.com

multilenguaje en cakephp (Internationalization & Localization)

0

Posted by deldan | Posted in cakephp | Posted on 22-05-2010

La primera parte que es internacionalización, es muy importante tenerla prevista antes de empezar un proyecto en cakephp, lo que hago en cualquier proyecto por muy grande o pequeño que sea es dejarlo preparado.

Es fácil dejarlo listo para traducir, en vez de poner los textos sin más, hacelo de la siguiente manera.

__('texto para traducir', true);

Ya lo tenemos preparado por si nos piden multilenguaje en un futuro. Ahora si lo necesitamos hacer, el siguiente paso es crear los archivos con tantos idiomas se requiera, por ejemplo de ingles y español.

Crearíamos las siguientes carpetas y archivos dentro de la carpeta locale:
eng/LC_MESSAGES/default.po
esp/LC_MESSAGES/default.po

Ahora viene la parte que mas me ha costado, y más divertida, pasar el script que coge todos los textos traducibles, y crea archivos con las palabras a traducir . El script lo lanzo desde eclipse, os dejo un pantallazo de la configuración para lanzar el script.

Crea varios archivos, solo hay que abrir estos archivos, copiar lo que hay y pegarlo dento de los archivos que hemos creado default.po
Para editar los archivos .po os recomiendo el editor poedit, desde aquí ya se traduce con facilidad.

Ya tenemos una parte muy importante, podríamos cambiar de idioma copiando lo siguiente en app_controller.php

Configure::write('Config.language', 'esp');

o

Configure::write('Config.language', 'eng');

Ahora entramos en la segunda parte Localización.
Hay muchas maneras de hacerlo, os voy a presentar una sencilla, cuando estoy en la página en inglés tener el link para pasarla a castellano y viceversa.

En config/route.php copiar el siguiente código, para reconocer el idioma:

Router::connect('/:language/:controller/:action/*',
                       array(),
                       array('language' => '[a-z]{3}'));

En app_controller.php necesitamos definir el idioma predefinido, llamar a los componenetes cookie y session, ver y guardar en cookie el idioma que queremos.

$lang='esp';
Configure::write('Config.language', $lang);

class AppController extends Controller {

	var $helpers = array('Html', 'Form', 'Ajax','Javascript','Bonzzay');
	var $components = array('Session', 'Cookie'); 

	function beforeFilter() {
	    $this->_setLanguage();
	} 

	function _setLanguage() {

	    if ($this->Cookie->read('lang') && !$this->Session->check('Config.language')) {
	        $this->Session->write('Config.language', $this->Cookie->read('lang'));
	    }
	    else if (isset($this->params['language']) && ($this->params['language']
	             !=  $this->Session->read('Config.language'))) {     

	        $this->Session->write('Config.language', $this->params['language']);
	        $this->Cookie->write('lang', $this->params['language'], false, '20 days');
	    }
	}

}

Lo último que nos falta hacer es poner el link para cambiar el idioma, pero debemos saber en que idiomas estamos para saber que link poner, asi que primero vamos al controlador o en el mismo app_controller y ponemos el siguiente código, que recoge, que tenemos como lenguaje definido en cookie y lo envia a vista.

function beforeRender() {
		$idioma = $this->Cookie->read('lang');
		$this->set('idioma',$idioma);
	}

Recojo en vista el idioma definido y según el idioma definido tengo un link u otro.

$this->languageswitch($idioma);
function languageswitch($idioma){
		$content ="";
		if($idioma == 'esp'){
			$content .= $this->Html->link(__("English",true), array('language'=>'eng'));
		}else if($idioma == 'eng'){
			$content .= $this->Html->link(__("English",true), array('language'=>'esp'));
		}else{
			$content .= $this->Html->link(__("English",true), array('language'=>'eng'));
		}
		return $content;
	}

Bueno esto ya estaría, espero haberme explicado bien, se que son muchas cosas, muchos conceptos, pero leyendo antes el cookbook de cakephp, ayuda entender mejor como funciona.

Gestión de tiempo, técnica Pomodoro

1

Posted by deldan | Posted in Metodologías ágiles | Posted on 03-05-2010

El otro día mi amigo Chantick Diseñador Gráfico. Me envio la técnica Pomodoro de gestión de tiempo, casi me sonaba a chiste.Después de tan solo dos días de prueba, aún no he logrado aplicarla al 100%, no por ser una técnica díficil, sino por falta de costumbre, pero mi rendimiento a aumentado, una de las muestras, es poder escribir este post en mi blog.

¿En que consiste está técnica?

La idea principal es estar un tiempo definido a tope en las tareas que tienes, un tiempo corto, y luego descansar unos minutos. Lo ideal son 25 minutos a tope sin mail, sin twitter, sin un articulo a medio leer en el explorador, acabas tus 25 minutos y estár 5 minutos de descanso, puedes leer tus blogs preferidos twittear, levantarte e ir hacer un té, o lo que hago yo hecharte en el sofa. Cuando consigues hacer cuatro bloques de 25 minutos, tienes un premio extra de 15 minutos.

Es un concepto muy sencillo, de aplicación fácil, pero esto de que recompenses con tiempo de no hacer nada, y tener una meta de tan solo 25 minutos ánima mucho, y aumenta tu productividad, ayuda a no entretenerte tanto.

En cuestión de aplciaciones hay varias, yo en mac uso pomodoro en windows mi compañero yises usa focusbooster

GTD “Getting Things Done” Explicación breve

4

Posted by deldan | Posted in Metodologías ágiles | Posted on 25-03-2010

GTD casi una obsesión. “Getting Things Done” metodología de organización y eficacia en el trabajo por David Allen.
Quería escribir sobre este tema pero antes experimentarlo bien en mi mismo, para hablar con algo más de propiedad.

Si eres el típico que se olvida de cosas que tiene que hacer porque no tienen prioridad alguna o porque tienes infinidad de cosas más urgentes,y que has probado maneras de organizarte pero han fracasado, o que la forma de organizarte que tienes aun no te convence, o supone mucho esfuerzo. Esto es para ti GTD.

Son cuatro maravillosos pasos:

- Recopilar
- Procesar
- Organizar
- Revisar

Recopilar
Este es el primer paso que tenemos que hacer, y es un paso muy natural, capturar tareas, recordatorios, ideas que nos surgen, cosas que hacer en general.
Todo esto va la carpeta “Inbox”, ( ya sea una carpeta física o un herramienta para el nuestro pc, mac o linux).
Se recomienda en este paso, que cuando surja una de estas cosas la apuntes y la metas directamente en la carpeta inbox, es importante solo hace este acto, no hagas nada más con la tarea, ni le pongas prioridad, ni nada, tan solo captúrala.
Esta paso a veces es online, en mi caso casi siempre, me llega un mail con algo para hacer.

Procesar
Esta parte trata de vaciar el “inbox”.
Ya hemos tenemos varias tareas en el “inbox” tenemos que hacernos esta pregunta, ¿REQUIERE ACCIÓN?, la delegas o la asignas a una carpeta, yo tengo carpetas estilo ( cosas de casa, Proyecto mi Web, empresa), si no requiere acción la archivas o la eliminas.

En esta parte hay algo que para mi ha sido muy útil, la regla de los 2 minutos, y la aplico de una forma estricta. Se trata de si hay algo que puedas hacerlo en menos de 2 minutos, quítatelo de en medio en ese mismo momento. hay que tener cuidado con los 2 minutos, hay tareas que parecen rápidas y luego son 20 minutos, tener cuidado con eso.

Organizar
Este paso yo lo entiendo como poner prioridades.
hay cuatro carpetas: Próximo, Proyecto, En espera; algún día.

Próximo: En mi caso es lo que tengo que hacer hoy o mañana, con la máxima prioridad.
Proyecto: Son cosas que tenemos que hacer dentro de un proyecto que tenemos que ir haciendo en el proyecto. Ejemplo irme de vacaciones.
En espera: Son tareas que alguien me tiene que contestar, para yo poder seguir con la tarea, para mi esta es importante, no vale con enviar un mail y olvidarte, a veces a la gente tienes que recordarles, jejeje.
Algún día: Yo en esta carpeta meto lo que algún día me gustaría hacer, ( hacer un podcast), me gustaría pero ahora mismo no tiene una prioridad relevante.

Revisar
Este paso es importante, ya que si recopilado todas las tareas, las he procesado y organizado, pero nunca lo revisas, ahí quedan, y esto a mi me a pasado, uso una aplicación llamada things, y estuve una semana sin abrirla, ya por miedo de todo lo que había allí metido, jajaja
debemos revisarlo diariamente o con flujo adecuado a nuestras cantidad de tareas, yo normalmente dos veces al día

herramientas

Esto no es otro paso, solo hay cuatro, no os asusteis.

Pero me gustaria comentar algunas herramientas para llevar con más fácilidad este asunto, aunque en el libro de David allen no se habla de aplicaciones, más bien habla de organizarse en papel con carpetas fisicas, en el mayor de los casos estamos  pegados al ordenador, y muchas de las tareas ya me vienen en formato digital.

Yo utilizo una herramienta que se llama things, solo está para mac, para pc hay una herramienta que se llama Evernote, aunque no es estrictamente GTD pero es muy buena.

Para mac Tambien Utilizo MailPlane, configuro mi cuenta/s gmail y puedo capturar mails como tareas directamente a la herramienta things.

Metodologías Ágiles

0

Posted by deldan | Posted in Metodologías ágiles | Posted on 25-02-2010

Bueno soy un novato en metodologías Ágiles, pero es un tema que me emociona, porque funciona.

Yo la metodología que uso es Scrum, me funciona muy bien para proyectos largos, se que hay gente que lo usa para todo, no he llegado a ese nivel aún.

No voy a Explicar que es el Scrum, porque me dejaría algo seguro. voy ha decir que es lo que me gusta.
Una de las cosas que más me gustan es el Daily Scrum, son unas mini reuniones diarias de 15 minutos, esto hace que todo el mundo este enterado mínimamente de lo que pasa, y que nada pille de sorpresa para el equipo, la idea para que no duren más de 15 minutos, es hacerlas de pie, nunca sentados y que haya un tio/a borde que controle el tiempo de los que hablan.

Otra cosa que me encanta es como se dividen los proyectos largos en Sprints, que pueden durar 2-3 semanas. esto hace que la los programadores tengan la motivación justa en pequeños tramos del proyecto, y no que se abrumen con un proyecto tan grande.

Algo que uso en Scrum que me gusta mucho es un tablero Físico con posits, con tres filas, tareas por hacer, tareas que estoy haciendo y las que he terminado, esto se llama kanban, es algo muy físico y visual que ayuda también a un equipo de trabajo.

Estimación de proyectos es algo que hay que hacer, y si es un proyecto largo puede ser aburridísimo, que mejor que jugar a las cartas, hay una metodología llamada estimación de pocker, en que se valora cada Historia de usuario, con cartas que tienen cada una un valor, lo bueno es que si la valoración la haces con los programadores, la estimación va a ser muy aproximada, quizás no la primera vez.

Se que son unas pequeñas ideas, pero son las cosas que más me gustan de las metodologías ágiles.

Formulario Ajax en Cakephp

3

Posted by deldan | Posted in cakephp | Posted on 24-02-2010

Algo que a veces queremos hacer, es al tener un formulario, ver los datos enviados desde el formulario si refrescar la página.
Un ejemplo de como hacerlo añadiendo un album, con un campo nombre.

Hay dos cosas a tener en cuenta, el envio del formulario es ajax, pero tambien el div donde cargaremos los resultados es ajax.

$content .= $this->Ajax->div('calendars');
foreach ($calendars as $calendar){
$content .=$interestDestination["InterestDestination"]["name"];
}
$content .=  $this->Ajax->divEnd('calendars');

$content .= $this->Ajax->form('/calendars', 'post', array('update' => 'calendars'));
$content .= $this->Form->input('name', array('label' => 'Agregar Nuevo Grupo:', 'error' => __('Nombre no valido', true)));
$content .= $this->Form->submit('Añadir',array('escape'=>false));
$content .= $this->Form->end();

return $content

Podemos ver que el update del form tiene el mismo nombre que le div Ajax, está observación es importante ya que el formulaior hace la llamada a este div, y esté div es el que se refrescará sin tener que refrescar toda la página.

En el controlador deberemos tener en cuenta, el añadir var $helpers = array(‘Ajax’);

Y también en la función en este caso “calendars” que ejecutamos desde nuestro formulario, deberemos hacer un render a la página donde se encuentra el mismo formulario.
Por ejemplo si nuestro formulario está en nuestro index $this->render(‘index’, ‘ajax’);

Abrir Archivos no estándars con Espresso

0

Posted by deldan | Posted in Herramientas | Posted on 17-02-2010

A veces nos hace falta editar archivos con extensiones diferentes a .html .php .js etc..

Si usamos Espresso no es muy fácil el añadir extensiones nuevas, la forma de hacerlo es la siguiente.
buscamos en nuestro Home del usuario / librería / Aplication Suport / Espresso / Sugars /

Y abrimos el Archivo PHP.sugar

se nos abre en el mismo Espresso y seleccionamos el archivo Languages.xml

hay una etiqueta que es <detectors>
dentro de esa etiqueta añadimos
<extension casesensitive=”false”>extensionNueva</extension>

ya nos saldrán los agradecidos colorines.