<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>

<channel>
	<title>Craftyman Blog</title>
	<atom:link href="http://craftyman.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://craftyman.net</link>
	<description>Scripts, Tutoriales, Estandares sobre Java, PHP, Javascript ...</description>
	<pubDate>Mon, 05 Jan 2009 13:25:51 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Lazy Loading en PHP</title>
		<link>http://craftyman.net/lazy-loading-en-php/</link>
		<comments>http://craftyman.net/lazy-loading-en-php/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 13:25:51 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[PHP]]></category>

		<category><![CDATA[lazy loading]]></category>

		<category><![CDATA[patron de diseño]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=209</guid>
		<description><![CDATA[Lazy Loading es un patrón de diseño que se utiliza mucho programación
En que consiste?
Su implementación en PHP consiste en no incluir las clases a utilizar en nuestro proyecto.
Como las reconoce?
De esto se trata Lazy Loading, cuando necesitas de una clase es recien cuando la llama. Este proceso lo realizamos con la función mágica que trae [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/Lazy_loading">Lazy Loading</a> es un <a href="es.wikipedia.org/wiki/Patrón_de_diseño">patrón de diseño</a> que se utiliza mucho programación</p>
<p><b>En que consiste?</b></p>
<p>Su implementación en PHP consiste en no incluir las clases a utilizar en nuestro proyecto.</p>
<p><b>Como las reconoce?</b></p>
<p>De esto se trata Lazy Loading, cuando necesitas de una clase es recien cuando la llama. Este proceso lo realizamos con la función mágica que trae PHP5 __autoload($nombreClase), en un POST anterior escribí un completo ejemplo para su uso.
</p>
<p><b>Que de bueno tiene este patrón?</b></p>
<p>Al no incluir todas las clases el inicio de cada pagina php, estamos ahorrando un proceso, ganando un poco de performance y obteniendo un código mas limpio en nuestra aplicación.
</p>
<p><b>Ejemplo de Código</b></p>
<p>primero cambiaremos nuestras Clases con el mismo nombre del archivo(como en Java).<br />
Si tenemos una Clase Clientes(), nuestro archivo podría llamarse Clientes.php, Clientes.class.php, ClientesClass.php, lo importante es que el nombre de la clase aparezca completo en el archivo.</p>
<pre class="php" name="code">
function __autoload($class_name)
{
	//direfentes rutas separas por ","
    $include_path = '/lib,/include,/class';
    $include_path_tokens = explode(',', $include_path);

    foreach($include_path_tokens as $prefix)
    {
      $path[0] = $prefix . '/' . $class_name . '.php';
      $path[1]= $prefix . '/' . $class_name . '.class.php';

      foreach($path as $thisPath)
      {
        if(file_exists($thisPath))
        {
          require_once $thisPath;
          return;
        }
      }
    }
}
</pre>
<p>Con esto nos olvidaremos de muchos includes que bajan la performance en nuestras aplicaciones.
</p>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://www.php.net/manual/es/language.oop5.autoload.php">__autoload</a></li>
<li><a href="http://en.wikipedia.org/wiki/Lazy_loading">Lazy Loading</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/lazy-loading-en-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ShiftCheckbox - jQuery Plugin</title>
		<link>http://craftyman.net/shiftcheckbox-jquery-plugin/</link>
		<comments>http://craftyman.net/shiftcheckbox-jquery-plugin/#comments</comments>
		<pubDate>Mon, 15 Dec 2008 23:57:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JQuery]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[shiftcheckbox]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=194</guid>
		<description><![CDATA[shiftcheckbox permite a los usuarios para seleccionar el rango de casillas de verificación, haga click en una casilla y, a continuación, SHIFT + click en la última casilla de verificación deseada. Todas las casillas entre la primera y la última se seleccionaran.
Para este ejemplo tendremos que descargar el plugin e incluirlo en el head de [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/">shiftcheckbox</a> permite a los usuarios para seleccionar el rango de casillas de verificación, haga click en una casilla y, a continuación, SHIFT + click en la última casilla de verificación deseada. Todas las casillas entre la primera y la última se seleccionaran.</p>
<p>Para este ejemplo tendremos que <a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js">descargar</a> el plugin e incluirlo en el head de nuestra pagina.</p>
<pre class="jscript" name="code">
&lt;script type="text/javascript" src="jquery-1.2.6.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.shiftcheckbox.js"&gt;&lt;/script&gt;
</pre>
<p>Luego incluimos el código que relizara todo el proceso mediante el class del checkbox.</p>
<pre class="jscript" name="code">
$(document).ready (
	function () {
  	$.shiftcheckbox.init('shiftchk');
});
</pre>
<p>Ahora tendremos que poner el class &#8217;shiftchk&#8217; a las casillas de verificación.</p>
<pre class="html" name="code">
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;1 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;2 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;3 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;4 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;5 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;6 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;7 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;8 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;9 Item&lt;br&gt;
&lt;input name="chk1" value="1" class="input shiftchk" type="checkbox"&gt;10 Item&lt;br&gt;
</pre>
<p>Eso es todo lo necesario, código limpio, no obstrusivo en nuestra web.</p>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://craftyman.net/wp-content/demos/jquery_shiftcheckbox/index.html">Ver Demo</a></li>
<li><a href="http://sanisoft-demo.com/jquery/plugins/shiftcheckbox/jquery.shiftcheckbox.js">Descarga script</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/shiftcheckbox-jquery-plugin/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Link Nudging con Mootools y jQuery</title>
		<link>http://craftyman.net/link-nudging-con-mootools-jquery/</link>
		<comments>http://craftyman.net/link-nudging-con-mootools-jquery/#comments</comments>
		<pubDate>Fri, 05 Dec 2008 00:23:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[CSS]]></category>

		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JQuery]]></category>

		<category><![CDATA[Javascript]]></category>

		<category><![CDATA[Mootools]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=190</guid>
		<description><![CDATA[Link nudging realiza un efecto de animación muy bueno para enlaces, cuando el mouse esta sobre el enlace, lo lanza a la derecha y cuando se quita el mouse regresa a su posición original.
Este ejemplo se realizara con dos librerías muy usadas, Mootools y jQuery.
Ejemplo con jQuery 1.2.6
Primero tienes que descargar esta versión de jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>Link nudging realiza un efecto de animación muy bueno para enlaces, cuando el mouse esta sobre el enlace, lo lanza a la derecha y cuando se quita el mouse regresa a su posición original.</p>
<p>Este ejemplo se realizara con dos librerías muy usadas, Mootools y jQuery.</p>
<p><strong>Ejemplo con jQuery 1.2.6</strong></p>
<p>Primero tienes que descargar esta versión de <a href="http://docs.jquery.com/Downloading_jQuery">jQuery</a> y colocarla en el head de tu pagina web, luego colocar este script también en el head.</p>
<pre class="jscript" name="code">
$(document).ready(function()
{
	$('a.nodo').hover(function()
    {
		$(this).animate({ paddingLeft: '20px' },400);
	},
    function()
    {
		$(this).animate({ paddingLeft: 0 }, 400);
	});
});
</pre>
<p><strong>Ejemplo con MooTools 1.2</strong></p>
<p>Para este caso descargar  <a href="http://mootools.net/download">Mootools 1.2 </a> y colocarlo dentro del head de nuestra pagina web, el siguiente script al contrario con el de jQuery tendremos que colocarlo justo antes de cerrar la etiqueta body <em>(&lt;/body&gt;)</em>.</p>
<pre class="jscript" name="code">
$$('a.nodo').each(
    function(el)
    {
        var fx = new Fx.Morph(el,{ duration:300, link:'cancel' });
        el.addEvents(
        	{
                'mouseenter':function()
                { fx.start({ 'padding-left': 20 }); },
                'mouseleave':function()
                { fx.start({ 'padding-left': 0 }); }
        	}
        );
    });
</pre>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://craftyman.net/wp-content/demos/link-nudging-con-mootools-jquery">Demo</a></li>
<li><a href="http://craftyman.net/wp-content/demos/link-nudging-con-mootools-jquery/demo.zip">Descarga Script</a></li>
<li><a href="http://mootools.net/download">Mootools 1.2</a></li>
<li><a href="http://docs.jquery.com/Downloading_jQuery">jQuery 1.2.6</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/link-nudging-con-mootools-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Copiar Texto con jQuery</title>
		<link>http://craftyman.net/copiar-texto-con-jquery/</link>
		<comments>http://craftyman.net/copiar-texto-con-jquery/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 23:38:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[JQuery]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=188</guid>
		<description><![CDATA[Navegando por internet encontre un script de como copiar en el portapapeles simplemente con una funci&#243;n javascript, esta funci&#243;n necesita de un archivo .swf el cual realiza el proceso de copia hacia el portapapeles.
Para este ejemplo utilizaremos jQuery_1.2.6, la descargamos y la incluimos en nuestra pagina html.

&#60;script src="js/jquery-1.2.6.js" type="text/javascript"&#62;&#60;/script&#62;

Luego abrimos otra etiqueta de script y [...]]]></description>
			<content:encoded><![CDATA[<p>Navegando por internet encontre un script de como copiar en el portapapeles simplemente con una funci&oacute;n javascript, esta funci&oacute;n necesita de un archivo .swf el cual realiza el proceso de copia hacia el portapapeles.</p>
<p>Para este ejemplo utilizaremos jQuery_1.2.6, la descargamos y la incluimos en nuestra pagina html.</p>
<pre name="code" class="html">
&lt;script src="js/jquery-1.2.6.js" type="text/javascript"&gt;&lt;/script&gt;
</pre>
<p>Luego abrimos otra etiqueta de script y copiamos este c&oacute;digo que es el que realizara el copiado.</p>
<pre name="code" class="jscript">

(function($) {
    $.copy = function(t) {

        var ruta = "swf/copy.swf"

        if (typeof t == 'undefined')
        {
            t = '';
        }

        var i = '&lt;embed src="' + ruta + '" FlashVars="clipboard=' ;
         	i += encodeURIComponent(t) ;
            i += '" width="0" height="0" ';
            i += 'type="application/x-shockwave-flash"&gt;&lt;/embed&gt;';

        if ($('#flashcopier').length == 0)
        {
            $('body').append('&lt;div id="flashcopier"&gt;' + i + '&lt;/div&gt;')
        }
        else
        {
            $('#flashcopier').html(i)
        }
    }
})(jQuery);
</pre>
<p>Ahora para probar podemos incluir dentro del body una caja de texto y un link que copie el texto ingresado en la caja.</p>
<pre name="code" class="html">
&lt;input type="text" id="copiame" name="copiame" value="Texto Copiado" /&gt;
&lt;a href="javascript:$.copy($('#copiame').val())"&gt;Copiar Texto&lt;/a&gt;&lt;/div&gt;
</pre>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://craftyman.net/wp-content/uploads/2008/12/copy_jquery/">Demo</a></li>
<li><a href="http://craftyman.net/wp-content/uploads/2008/12/copy_jquery2.zip">Descarga</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/copiar-texto-con-jquery/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Regular Expressions Cheat Sheets</title>
		<link>http://craftyman.net/regular-expressions-cheat-sheets/</link>
		<comments>http://craftyman.net/regular-expressions-cheat-sheets/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 14:10:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[OpenSource]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=184</guid>
		<description><![CDATA[Las expresiones regulares nos ahorran mucho tiempo a la hora de validar campos. En la web de AddedBytes han publicado una hoja de referencia en formato PDF(Documento) y PNG(Imagen).



Recursos

Descargas

]]></description>
			<content:encoded><![CDATA[<p>Las expresiones regulares nos ahorran mucho tiempo a la hora de validar campos. En la web de <a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/">AddedBytes</a> han publicado una hoja de referencia en formato PDF<em>(Documento)</em> y PNG<em>(Imagen)</em>.</p>
<div style="text-align:center">
<img src="http://craftyman.net/wp-content/uploads/2008/12/regular-expressions-cheat-sheet-v2.png" width="540px" />
</div>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/">Descargas</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/regular-expressions-cheat-sheets/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Extensiones para el Objeto String en Javascript</title>
		<link>http://craftyman.net/objeto-string-en-javascript/</link>
		<comments>http://craftyman.net/objeto-string-en-javascript/#comments</comments>
		<pubDate>Fri, 28 Nov 2008 14:28:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=180</guid>
		<description><![CDATA[En mi post anterior escribí sobre como se podían extender los metodos para el objeto String (trim,ltrim,rtrim),
viendo la necesidad de mas metodos reutilizables en nuestras aplicaciones, pongo algunas extensiones muy utilizadas
a la hora de desarrollar un sitio web.
left: Nos devolverá los n primeros caracteres de una cadena

String.prototype.left = function(n){

  var s = this.toString()

  [...]]]></description>
			<content:encoded><![CDATA[<p>En mi post <a href="http://craftyman.net/trim-ltrim-y-rtrim-en-javascript/">anterior</a> escribí sobre como se podían extender los metodos para el objeto String <a href="http://craftyman.net/trim-ltrim-y-rtrim-en-javascript/"><em>(trim,ltrim,rtrim)</em></a>,<br />
viendo la necesidad de mas metodos reutilizables en nuestras aplicaciones, pongo algunas extensiones muy utilizadas<br />
a la hora de desarrollar un sitio web.</p>
<p><strong>left:</strong> Nos devolverá los n primeros caracteres de una cadena</p>
<pre class="jscript" name="code">
String.prototype.left = function(n){

  var s = this.toString()

  if(n>s.length)
  {
      n=t.length
  }

  return s.substring(0, n)
}
</pre>
<p><strong>right:</strong> Nos devolverá los n últimos caracteres de la cadena</p>
<pre class="jscript" name="code">
String.prototype.right = function(n){

  var s = this.toString()
  var t=s.length

  if(n>t)
  {
      n=t
  }

  return s.substring(t-n, t)
}
</pre>
<p><strong>mid:</strong> Nos devolverá una cadena desde la posición n, con c caracteres</p>
<pre class="jscript" name="code">
String.prototype.mid = function(n, c){

  // Si c = 0 devolver toda la cadena desde la posición
  var s = this.toString()

  // Si sólo se pasan los dos primeros argumentos
  if(arguments.length<2) {
      c=s.length-n+1
  }
  if(c<1) {
      c=s.length-n+1
  }
  if(n+c >s.length) {
     c=s.length-n+1
  }
  if(n>s.length) {
      return ""
  }

  return s.substring(n-1,n+c-1)
}
</pre>
<p><strong>strReverse:</strong> Nos devuelve la cadena invertida</p>
<pre class="jscript" name="code">
String.prototype.strReverse = function(){

  var s = this.toString()
  var i=s.length
  var t=""

  while(i>-1){
      t=t+ s.substring(i,i+1)
      i--
  }

  return t
}
</pre>
<p><strong>contains:</strong> Nos devuelve true si encuentra la cadena</p>
<pre class="jscript" name="code">
String.prototype.contains = function(t) {

  return (this.indexOf(t) >= 0)
}
</pre>
<p><strong>countOf:</strong> Devuelve el numero de ocurrencias de la cadena</p>
<pre class="jscript" name="code">
String.prototype.countOf = function(char) {

  var count = 0
  var len = this.toString.length

  if(char.length > len) { return 0 }
  for (i = 0; i < len; i++) {
      (this.charAt(i)==char) ? count++ : ''
  }

  return count
}
</pre>
<p><strong>numberPart:</strong> Nos devuelve la parte numérica de una cadena alfanumérica</p>
<pre class="jscript" name="code">
String.prototype.numberPart = function() {

  return this.replace(/[^0-9|.|-]/g, '')
}
</pre>
<p><strong>ucFirst:</strong> Nos devolverá la cadena con la primera letra en mayúsculas</p>
<pre class="jscript" name="code">
String.prototype.ucFirst = function () {
    str = this.toString();
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}
</pre>
<p><strong>ucWords:</strong> Nos devolverá la cadena con la primera letra de cada palabra en mayúsculas</p>
<pre class="jscript" name="code">
String.prototype.ucWords = function () {
     str = this.toString();
    return (str+'').replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase ( ); } );
}
</pre>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://www.desarrolloweb.com/articulos/726.php">Clase String Javascript</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/objeto-string-en-javascript/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Browsershots : Testea tu web en varios navegadores</title>
		<link>http://craftyman.net/browsershots-testea-tu-web-en-varios-navegadores/</link>
		<comments>http://craftyman.net/browsershots-testea-tu-web-en-varios-navegadores/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 13:51:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[OpenSource]]></category>

		<category><![CDATA[Testeo Web]]></category>

		<category><![CDATA[Browsershots]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=175</guid>
		<description><![CDATA[Qué es Browsershots?
Browsershots hace capturas de pantallas de su diseño web en distintos navegadores. Es un servicio de código abierto creado por Johann C. Rocholl. Cuando usted envía su dirección web, es añadida a la cola de trabajos. Un número de computadoras distribuídas abrirá su sitio web en su navegador. Luego se harán capturas de [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Qué es Browsershots?</strong></p>
<p><a href="http://browsershots.org/">Browsershots</a> hace capturas de pantallas de su diseño web en distintos navegadores. Es un servicio de código abierto creado por Johann C. Rocholl. Cuando usted envía su dirección web, es añadida a la cola de trabajos. Un número de computadoras distribuídas abrirá su sitio web en su navegador. Luego se harán capturas de pantallas y se cargarán aquí en el servidor central.</p>
<p><strong>Como funciones?</strong></p>
<p>Pues entras a la web y solo tienes que poner la url de la pagina web que deseas testear, siguiente paso es elegir que Sistemas Operativos quieres que lo prueben, y que navegadores para cada sistema Operativo, y le das click en Enviar.
</p>
<div style="text-align:center">
<img src="http://craftyman.net/wp-content/uploads/2008/11/brow1.png" width="540px" />
</div>
<p>Ahora nos darán una url de acceso directo para revisar los resultados de la consulta. Esta url tiene una expiración. Finalmente nos devolverán las capturas de pantalla según las opciones elegidas. <a href="http://browsershots.org/http://craftyman.net/">(Ver resultados para Craftyman.net)</a></p>
<div style="text-align:center">
<img src="http://craftyman.net/wp-content/uploads/2008/11/brow2.png" width="540px" />
</div>
<p><strong>Muy útil verdad?</strong></p>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="http://trac.browsershots.org/">Documentación</a></li>
<li><a href="http://browsershots.org/">Pagina Oficial</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/browsershots-testea-tu-web-en-varios-navegadores/feed/</wfw:commentRss>
		</item>
		<item>
		<title>FEBE: realiza backups de firefox</title>
		<link>http://craftyman.net/febe-realiza-backups-de-firefox/</link>
		<comments>http://craftyman.net/febe-realiza-backups-de-firefox/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 14:31:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[Firefox]]></category>

		<category><![CDATA[FEBE]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=173</guid>
		<description><![CDATA[


FEBE(Firefox Environment Backup Extension) permite hacer rápidamente copias de seguridad de sus extensiones, temas, historial, cookies, etc, en Firefox.

Características

Programación de copias automáticas.
Recordatorio de copias de seguridad.
Copias de seguridad definidas por el usuario.
Archivos de ayuda incluidos.
FEBE 6.0 usa los componentes nativos de Firefox para comprimir.
Envíe sus copias automáticamente a su Box.Net con un único click.
Puede hacer [...]]]></description>
			<content:encoded><![CDATA[<div style="text-align:center">
<img src="http://customsoftwareconsult.com/extensions/febe/tutorial/febe6-100x100.png" />
</div>
<p>FEBE<em>(Firefox Environment Backup Extension)</em> permite hacer rápidamente copias de seguridad de sus extensiones, temas, historial, cookies, etc, en Firefox.
</p>
<p><strong>Características</strong></p>
<ul>
<li>Programación de copias automáticas.</li>
<li>Recordatorio de copias de seguridad.</li>
<li>Copias de seguridad definidas por el usuario.</li>
<li>Archivos de ayuda incluidos.</li>
<li>FEBE 6.0 usa los componentes nativos de Firefox para comprimir.</li>
<li>Envíe sus copias automáticamente a su Box.Net con un único click.</li>
<li>Puede hacer copia rápidamente de extensiones en modo individual.</li>
<li>Permite restaurar una copia de seguridad.</li>
</ul>
<p><strong>Tipos de Backup</strong></p>
<p>FEBE permite 2 tipos básicos de copias de backup.</p>
<p><strong>Selectivo</strong></p>
<p>Aquí podemos escoger que partes de Firefox se harán backups.</p>
<p><strong>Perfil Completo</strong></p>
<p>Esta opción simplemente hara un backup completo de todo Firefox.</p>
<div style="text-align:center">
<img src="http://customsoftwareconsult.com/extensions/febe/tutorial/options.png" />
</div>
<p><strong>Copias de seguridad programadas</strong></p>
<p>FEBE puede programar una copia de seguridad cada día, semana, mes, o simplemente no realizar el backup automatico.</p>
<div style="text-align:center">
<img src="http://customsoftwareconsult.com/extensions/febe/tutorial/Schedule%20window.png" />
</div>
<p><strong>Realiza los backups en tu box.net</strong></p>
<p>Otra opción mas que ofrece FEBE, es realizar tus backups en línea, en tu cuenta de <a href="http://box.net/">Box.net</a>.</p>
<div style="text-align:center">
<img src="http://customsoftwareconsult.com/extensions/febe/tutorial/boxnet.png" />
</div>
<p><strong>Recursos</strong></p>
<ul>
<li><a href="https://addons.mozilla.org/en-US/firefox/downloads/file/38022/febe-6.0.3-fx.xpi">Descarga FEBE</a></li>
<li><a href="http://customsoftwareconsult.com/extensions/febe/febe.html">Pagina Oficial </a>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/febe-realiza-backups-de-firefox/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Detecta funciones o clases existentes en PHP</title>
		<link>http://craftyman.net/detecta-funciones-o-clases-existentes-en-php/</link>
		<comments>http://craftyman.net/detecta-funciones-o-clases-existentes-en-php/#comments</comments>
		<pubDate>Wed, 26 Nov 2008 02:38:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Desarrollo]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=168</guid>
		<description><![CDATA[Al desarrollar en grupo muchas veces sucede que por alguna extra&#241;a raz&#243;n se nos ocurren las mismas funciones y/o clases, estas dos funciones detectan si una funci&#243;n y/o clase han sido creadas.

Detectar Funci&#243;n

function existeFuncion($nombreFuncion)
{
	if(function_exists($nombreFuncion))
	{
		return "Funci&#243;n $nombreFuncion existe!";
	}
	else
	{
		return "Funci&#243;n $nombreFuncion disponible!";
	}
}
//ejemplo
echo existeFuncion('getListados');

Detectar Clase

function existeClase($nombreClase)
{
	if(class_exists($nombreClase))
	{
		return "Clase $nombreClase existe!";
	}
	else
	{
		return "Clase $nombreClase esta disponible";
	}
}
//ejemplo
echo existeClase('Articulo');

]]></description>
			<content:encoded><![CDATA[<p>Al desarrollar en grupo muchas veces sucede que por alguna extra&ntilde;a raz&oacute;n se nos ocurren las mismas funciones y/o clases, estas dos funciones detectan si una funci&oacute;n y/o clase han sido creadas.
</p>
<p><strong>Detectar Funci&oacute;n</strong></p>
<pre class="php" name="code">
function existeFuncion($nombreFuncion)
{
	if(function_exists($nombreFuncion))
	{
		return "Funci&oacute;n $nombreFuncion existe!";
	}
	else
	{
		return "Funci&oacute;n $nombreFuncion disponible!";
	}
}
//ejemplo
echo existeFuncion('getListados');
</pre>
<p><strong>Detectar Clase</strong></p>
<pre class="php" name="code">
function existeClase($nombreClase)
{
	if(class_exists($nombreClase))
	{
		return "Clase $nombreClase existe!";
	}
	else
	{
		return "Clase $nombreClase esta disponible";
	}
}
//ejemplo
echo existeClase('Articulo');
</pre>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/detecta-funciones-o-clases-existentes-en-php/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Trim, LTrim y RTrim en Javascript</title>
		<link>http://craftyman.net/trim-ltrim-y-rtrim-en-javascript/</link>
		<comments>http://craftyman.net/trim-ltrim-y-rtrim-en-javascript/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 23:32:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
		
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://craftyman.net/?p=164</guid>
		<description><![CDATA[Trim es una Funcion y/o Metodo muy conocido en distintos lenguajes de programacion, esta funcion realiza el corte de espacios en blanco de los extremos de una cadena,esta funcion extiende tambien a ltrim(left trim) y rtrim(right trim). En Javascript no vienen incorporado, es por eso que veremos la manera de implementarlo, una forma es como [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Trim</strong> es una Funcion y/o Metodo muy conocido en distintos lenguajes de programacion, esta funcion realiza el corte de espacios en blanco de los extremos de una cadena,esta funcion extiende tambien a ltrim<em>(left trim)</em> y rtrim<em>(right trim)</em>. En Javascript no vienen incorporado, es por eso que veremos la manera de implementarlo, una forma es como un metodo para los tipo String y la otra es como una simple funcion<em>(stand-alone)</em>.</p>
<p><strong>Javascript Trim como metodos</strong></p>
<pre class="jscript" name="code">
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.ltrim = function() {
	return this.replace(/^\s+/,"");
}

String.prototype.rtrim = function() {
	return this.replace(/\s+$/,"");
}

// ejemplo trim, ltrim y rtrim
var cad = "  Metodo trim(),ltrim(),rtrim() ";
alert("*" + cad.trim() + "*");
alert("*" + cad.ltrim() + "*");
alert("*" + cad.rtrim() + "*");
</pre>
<p><strong>Javascript Trim como funciones Stand-Alone</strong></p>
<pre class="jscript" name="code">
function trim(cad)
{
	return cad.replace(/^\s+|\s+$/g,"");
}

function ltrim(cad)
{
	return cad.replace(/^\s+/,"");
}

function rtrim(cad)
{
	return cad.replace(/\s+$/,"");
}

// ejemplo trim, ltrim y rtrim
var cad = " funciones trim,ltrim,rtrim  ";
alert("*" + trim(cad) + "*");
alert("*" + ltrim(cad) + "*");
alert("*" + rtrim(cad) + "*");
</pre>
<p><strong>Compatibilidad</strong></p>
<p>Las funciones anteriormente explicadas hacen el uso de expresiones regulares, que son compatibles con JavaScript 1.2 + o JScript 3.0 +. Si se requiere funciones para versiones antiguas de Javascript 1.0, aqui dejo las funciones compatibles para antiguas versiones.</p>
<pre class="jscript" name="code">
function ltrim(str)
{
	var k = 0;

	for(k = 0; k < str.length &#038;&#038; isSpace(str.charAt(k)); k++);
	return str.substring(k, str.length);
}

function rtrim(str)
{
	var j=str.length-1

	for(j=str.length-1; j>=0 &#038;&#038; isSpace(str.charAt(j)) ; j--) ;
	return str.substring(0,j+1);
}

function trim(str)
{
	return ltrim(rtrim(str));
}

function isSpace(charToCheck)
{
	var whitespaceChars = " \t\n\r\f";
	return (whitespaceChars.indexOf(charToCheck) != -1);
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://craftyman.net/trim-ltrim-y-rtrim-en-javascript/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
