HTMLeando: para desarrolladores Web

Perfil de Maikel González Suárez [moderador] [administrador]


Sitio: www.htmleando.com

Desarrollador Web. Promotor de la comunidad hispanoparlante de desarrollo HTMLeando.
Sígueme en Twitter

Etiquetas

Constribuciones

Thumb_up
Thumb_down

0%
0%

¿Dónde puedo encontrar un listado de directorio?

En el sitio ForosdelWeb he encontrado este listado de directorios SEO completo para Webmasters.
http://www.forosdelweb.com/f64/listado-directorios-seo-completo-para-webmasters-621853/
Enviada el 2008-10-20

Thumb_up
Thumb_down

0%
0%

¿Cómo saber si mi sitio es amigable a los buscadores?

Desactiva Javascript, CSS y las cookies en tu navegador y luego mire su sitio web. Esa es la forma más probable en que los motores de búsqueda vean su sitio. Si puedes navegar y ver contenido de tu sitio web, entonces debe ser amigable a los motores de búsqueda.
Enviada el 2008-11-05

Thumb_up
Thumb_down

0%
0%

¿Cómo saber si mi sitio es amigable a los buscadores?

He encontrado un artículo en el sitio el elwebmaster.com "¿Por qué tu sitio no aparece en los buscadores?" donde aparecen otros puntos interesantes a tener en cuenta:
- Problemas con el archivo robots.txt
- Un servidor lento
- Eres una fuente de spam
- Sitio hecho en Flash
- La "carrera de obstáculos" de los spiders
- Tu sitio se ?cae? frecuentemente
http://www.elwebmaster.com/articulos/%c2%bfpor-que-tu-sitio-no-aparece-en-los-buscadores
Enviada el 2008-11-05

Thumb_up
Thumb_down

0%
0%

¿Cómo implemento la función trim () para Javascript?

Si usas un Framework Javascript como Prototype o Mootools dispondrás de la función equivalente, de lo contrario puedes implementarla añadiendo a tu propia librería el siguiente código Javascript:
String.prototype.trim=function () {
  return this.replace(/^\s+/,'').replace(/\s+$/,'');
}

Ejemplos:
alert('->'+' cadena con espacios '+'<-');
alert('->'+' cadena sin espacios '.trim()+'<-');

var micadena = ' Eliminar los espacios en blancos del principio y final de esta cadena ';
alert('->'+micadena+'<-');
alert('->'+micadena.trim()+'<-');
Enviada el 2008-11-12

Thumb_up
Thumb_down

0%
0%

¿Qué son las expresiones regulares?

Una expresión regular es un patrón que es comparado contra una cadena de asunto, de izquierda a derecha. Las expresiones regulares son una poderosa herramienta para los desarrolladores web. Estas nos permiten realizar varios tipos de tareas en nuestros scripts, una de las más extendidas es la validación de datos u otras como encontrar y reemplazar acorde a determinados patrones en un texto o fichero.
Ante todo es importante conocer cada uno de los caracteres especiales en las expresiones regulares, su significado y como usarlos. Para buscar en textos uno de los caracteres especiales, es necesario anteponerle al carácter especial un backslash "\". Por ejemplo, para buscar un asterisco en la frase java* para el cliente el patrón de búsqueda debe quedar así, java\*, si no escapas el asterisco, encontrarás todas las ocurrencias de "java", pero también puedes encontrar "jav", "javaa" y "javaaa", y no lo que deseabas justamente. Para el caso particular en que desees crear una coincidencia con una barra invertida, escribe "\\".
Ejemplo para validar el nombre de usuario tenga cómo mínimo 3 caracteres y máximo 16.
/^[a-zA-Z0-9_]{3,16}$/

Ejemplo de una clase en ActionScript 3 con una expresión regular para validar números romanos.
package {
     public class Roman{
      private var pattern:RegExp = /^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/;
 
      function Roman(){
         //Constructor de la clase
      }
 
      public function ValidarRomano(romano:String):Boolean{
         return pattern.test(romano);
      }
     }   
}

Referencias:
- ¿Qué son las expresiones regulares? http://tinyurl.com/6cq2s9
- Expresión regular en Wikipedia http://tinyurl.com/66ec58
- Expresiones Regulares en ActionScript 3http://tinyurl.com/6oghc8
Enviada el 2008-11-12

Thumb_up
Thumb_down

0%
0%

¿Cómo subo fotos a Flickr usando phpFlickr?

El caso es que no bastaba con la apikey, sino que además tenía que autenticarme en Flickr como usuario que autoriza a mi aplicación, de manera tal que Flickr devuelve a mi aplicación el parámetro frob, para luego solicitarle un token que me permitiera invocar los métodos que necesitan permiso de escritura, tal es el caso de subir fotos.
O sea debía haber configurado el fichero auth.php
<?
    $api_key                 = "[mi api key]";
    $api_secret              = "[mi api secreta]";
    $default_redirect        = "/miaplicacion/subir.php";
    $permissions             = "write";
    $path_to_phpFlickr_class = "../clases/";
 
    ob_start();
    require_once($path_to_phpFlickr_class . "phpFlickr.php");
    unset($_SESSION['phpFlickr_auth_token']);
 
	if (!empty($_GET['extra'])) {
		$redirect = $_GET['extra'];
	}
 
    $f = new phpFlickr($api_key, $api_secret);
 
    if (empty($_GET['frob'])) {
        $f->auth($permissions, false);
    } else {
        $f->auth_getToken($_GET['frob']);
	}
 
    if (empty($redirect)) {
		header("Location: " . $default_redirect);
    } else {
		header("Location: " . $redirect);
    } 
?>

Mientras que en mi script subir.php para subir las fotos tenía que comprobar si estaba o no autenticado.
<?php
$path_to_phpFlickr_class = "../clases/";
$api_key                 = "[mi api key]";
$api_secret              = "[mi api secreta]";
require_once($path_to_phpFlickr_class . "phpFlickr.php");
 
$f = new phpFlickr($api_key, $api_secret);
if(!$f->test_login()) header("Location: /miaplicacion/auth.php");
$f->sync_upload ( "foto.jpg", "Descripción de la foto", "tag1 tag2", 1);
?>

Es importante haber configurado en "API Key Authentication Setup" el parámetro Callback URL para que Flickr sepa a que dirección devolver el parámetro frob, para este caso http://www.ejemplo.com/miaplicacion/auth.php

Enviada el 2008-11-12

Thumb_up
Thumb_down

0%
0%

¿Cómo implementar URLs amigables?

Pues haces muy bien el no usar las clásicas URLs de las páginas dinámicas llenas de variables GET y parámetros difíciles de recordar. Gracias a que usas Apache como servidor web tienes la solución a mano con el módulo mod_rewrite (URL Rewriting Engine).
Al tener un controlador central, por ejemplo: index.php es aconsejable que uses una sola variable GET para recibir el camino. O sea, si hacemos la siguiente petición con una URL amigable:
http://www.ejemplo.com/articulos/como-implementar-url-amigable
Debemos obtener:
http://www.ejemplo.com/index.php?q=articulos/como-implementar-url-amigable
Quedando así disponible para PHP el camino a la petición en la variable "q". Ahora sólo nos resta preparar el fichero ".htaccess" (Acceso de Hiper-Texto) que es el nombre por defecto del archivo de configuración de directorios de Apache.
Options +FollowSymLinks +ExecCGI
 
<IfModule mod_rewrite.c>
  RewriteEngine On
  #redirecciona todo hacia el controlador frontal de la aplicación
  RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
Ahora copia este archivo en la carpeta donde se encuentra el controlador frontal PHP. Ahora tan sólo te faltaría en tratamiento de la variable "q" para saber exactamente hacia que parte de la aplicación dirigirse.
Otras fuentes:
- Optimizando una web con urls amigables con Apache y PHP. http://www.maestrosdelweb.com/editorial/urlamigable/
Enviada el 2008-11-18

Thumb_up
Thumb_down

0%
0%

¿Cómo subir archivos con Ajax?

No es posible subir ficheros vía Ajax porque Javascript no tiene acceso a ningunos de los ficheros cuando se envía el formulario, o sea la información GET / POST se recopila a través de Javascript, el cual no tiene ninguna manera de acceder al contenido de los ficheros locales por razones de seguridad.

Sin embargo, puede utilizar AJAX para obtener información de estado en la subida de ficheros.
Pero no se desanime, se pueden subir ficheros a través del clásico formulario HTML dentro de un IFRAME oculto y la experiencia del usuario será excelente.
Supongamos que tenemos un módulo llamado "files" y que en el mismo tenemos una acción "edit" donde se requiere subir imágenes, con la condición de no recargar la página actual ("edit") y que además muestre una miniatura de la imagen subida.
<?php
/* actions.class.php */
class filesActions extends sfActions
{
 
 public function executeEdit()
 {
 $this->files = array();
 }
 
 public function handleErrorEdit()
  {   
  if ($this->getRequestParameter('file')) 
   	{
	  	$this->files = $this->getRequestParameter('file');	
   	} else 
   	{
   		$this->files =  array();
   	}
    return sfView::SUCCESS;
  }
 
 public function executeUpload()
 {  	    	
  $this->prepareUpload();
  if ($this->getRequest()->hasFiles())
    { 
      $this->file = $this->getRequest()->getFileName('file');
    /* Limitar el tamaño a un máximo, usando el plugin  sfThumbnail */  
	  $thumbnail = new sfThumbnail(500, 400);
	  $thumbnail->loadFile($this->getRequest()->getFilePath('file'));
	  $thumbnail->save(sfConfig::get('sf_upload_dir').'/'.$fileName);
 
	/* Crea una imágenes en miniaturas que se mostrarán para indicar que subió correctamente  */
	  $thumbnail = new sfThumbnail(75, 75);
	  $thumbnail->loadFile($this->getRequest()->getFilePath('file'));
	  $thumbnail->save(sfConfig::get('sf_upload_dir').'/th/'.$fileName);
      $this->isUploaded =true;
    }
 
 }
 
 public function handleErrorUpload()
  { 
  	  $this->prepareUpload();
  	  return sfView::SUCCESS;
  }
 
 protected function prepareUpload()
 {
  $this->isUploaded = false;
  sfConfig::set('sf_web_debug', false);
  $this->getResponse()->addJavascript('upload');
  $this->setLayout('simple');	
 }
 
}

El template editSuccess.php
<?php use_helper('Validation') ?> 
<div id="data-form"> 
<?php echo form_tag('files/edit', 'id=form') ?>
 
  <div id="iframe">
	<iframe src="<?php echo url_for('files/upload')?>" frameborder="0"  ></iframe>
  </div>
  <div id="images-uploaded">
  <?php foreach ($files as $k => $file): ?>
    <?php echo include_partial('thumbnail', array('file' => $file)) ?> 
   <?php endforeach; ?> 
  </div>
   <div id="submit"><?php echo submit_to(__('Enviar')); ?>    </div>
  </form>
</div>
Template general de la aplicación simple.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
</head>
<body>
<?php echo $sf_data->getRaw('sf_content') ?></div>
</body>
</html>
 
Parcial _thumbnail.php:
<div class="thumbnail" ><img  src="/uploads/th/<?php echo $file?>" alt="<?php echo $file ?>" width="75" />
 <?php echo input_hidden_tag('file[]',$file)  ?></div>
El template uploadSuccess.php:
<?php use_helper('Validation') ?>
 
  <?php if ($sf_request->hasError('file')): ?>
    <?php echo  javascript_tag("alert('" .$sf_request->getError('file')."');
    							errorUpload(". $sf_params->get('imgnum').")
                             ")
     ?> 
  <?php endif; ?>
 
 <?php if ($isUploaded): ?>
     <?php echo include_partial('thumbnail', array('file' => $file)) ?> 
     <?php echo javascript_tag("uploaded(". $sf_params->get('imgnum')."); ") ?>
 <?php else: ?>
 
   <?php echo form_tag('files/upload', 'multipart=true  name=iform') ?>
   <?php echo input_file_tag('file', 'onChange=upload()') ?>
   <?php echo input_hidden_tag('imgnum')  ?>
   </form>
 
  <?php endif; ?>
El fichero javascript upload.js:
/* upload.js */
function upload(){
	//  Oculta los iframe anteriores
	var par = window.parent.document;
	var iframes = $A(par.getElementsByTagName('iframe'));
    $(iframes.last()).addClassName('hidden');
	//Crea un nuevo iframe
	var new_iframe = par.createElement('iframe');
	new_iframe.src = iframes.last().src;
	new_iframe.frameBorder = '0';
	par.getElementById('iframe').appendChild(new_iframe);
 
	// Pone una imagen de espera
	var images = getByIdParent('images-uploaded');
	var html_images = '<img src="/images/icons/loading.gif" border="0" />'
	var new_div = par.createElement('div');
	new_div.className = 'load';
	new_div.innerHTML = html_images;
	images.appendChild(new_div); 
 
 
	// Enviar
	var imgnum = images.getElementsByTagName('div').length - 1;
	document.iform.imgnum.value = imgnum;
	setTimeout(function(){document.iform.submit()}, 5000);
}
 
/**
 * Se llama luego que se ha subido el fichero al servidor
 *  */
function uploaded(id){
	var images = getByIdParent('images-uploaded');
	var imgdiv = images.getElementsByTagName('div')[id];
	imgdiv.innerHTML = $('thumbnail').innerHTML;
}
 
function errorUpload(id){
	var images = getByIdParent('images-uploaded');
	images.removeChild(images.getElementsByTagName('div')[id]);
}
 
function getByIdParent(id) 
{
	var par = window.parent.document;
	return par.getElementById(id);
 
}
Finalmente un poco de estilo mediante edit.css:
iframe {
	border-width: 0px;
	height: 90px;
	width: 300px;
	overflow:hidden;
	margin-left: 220px;
 
}
iframe.hidden {
	visibility: hidden;
	width:0px;
	height:0px;
}
 
#images-uploaded {
	width: 390px;
	margin:  0 10px;
}
 
#images-uploaded div {
	margin:  0  0 0 10px;
	width: 100px;
	height: 90px;
	border-style: solid;
	border-width: 5px;
	border-color: #DEDFDE;
	float: left;
	overflow: hidden;
	padding:4px;
}
 
#images-uploaded div:hover {
	border-color: #529EBD;
}
 

Enviada el 2008-11-21

Thumb_up
Thumb_down

0%
0%

¿Cómo mostrar los errores de PHP en mi servidor de producción?

Sucede que el reporte de errores está deshabilitado, puedes habilitarlo temporalmente usando la directiva error_reporting de la siguiente manera:
<?php
 error_reporting(E_ALL);
 ini_set("display_errors", 1);
?>
Fuente:http://www.php.net/error_reporting
Enviada el 2008-11-24

Thumb_up
Thumb_down

0%
0%

¿Cómo evitar los comentarios spam?

Luego de investigar un poco he encontrado el sistema de Akismet, el cual brinda un servicio gratis para bloggers. Para tener acceso a su API se necesita de una clave que se puede obtener por medio de una cuenta en WordPress,http://wordpress.com/signup/.
Me he descargado una librería PHP5 que contiene el fichero Akismet.class.php (http://www.achingbrain.net/files/PHP5Akismet/PHP5Akismet.0.4.zip). Es muy fácil de instalar, en mi caso particular que uso el Framework Symfony, basta con copiar Akismet.class.php en un directorio /lib/ cualesquiera del proyecto. La manera de usarla es la siguiente:
<?php
$akismet = new Akismet('http://www.ejemplo.com/blog/', 'mi_clave');
$akismet->setCommentAuthor($nombre);
$akismet->setCommentAuthorEmail($email);
$akismet->setCommentAuthorURL($url);
$akismet->setCommentContent($comentario);
$akismet->setPermalink('http://www.ejemplo.com/blog/archivo/sistema-antispam-akismet');
if($akismet->isCommentSpam()){
                    // Mi acción SI es spam
            } else { 
                 // Mi acción si NO es spam 
           }
?>
Ciertamente me ha dado muy buenos resultados hasta ahora. Por otro lado también puede comprobar el servicio gratuito TypePad AntiSpam que es 100% compatible con la API de Akismet pero los resultados no fueron buenos. Sin embargo, al parecer goza de buena reputación y es una opción a valorar pues está en su versión beta.

Fuentes en idioma inglés:
- PHP5 Akismet:http://www.achingbrain.net/stuff/php/akismet- Akismet API Documentation:http://akismet.com/development/- TypePad AntiSpam:http://antispam.typepad.com/
Enviada el 2008-12-02

Thumb_up
Thumb_down

0%
0%

¿Cómo ocultar un select con una capa en IE6?

Este problema se presenta en Internet Explorer para las versiones 5.5 o 6, sin embargo, puede resolverse implementado un script que realice las siguientes tareas:
1- Chequear el tipo y versión del navegador usado.
2- Crear dinámicamente un elemento iframe con el mismo tamaño de la capa.
3- Añadir atributos al iframe para que sea oculto a la vista además de transparente.
4- Ponerlo justo debajo de la capa (Esto requiere que la capa tenga al menos un z-index de 2).
Para implementar el script se ha utilizado la librería Javascript Prototype en algunas partes, por lo que podría adaptarse a otras librerías ya existentes y simplificar aún más el código:
Utils.createWCH = function(element) {
	var f = null;
	element = element || window.self.document.body;
		if (Prototype.Browser.IE) {
		var filter = 'filter:progid:DXImageTransform.Microsoft.alpha(style=0,opacity=0);';
		var id = "WCH" + Math.ceil(Math.random() * 1000) ;
		element.insertAdjacentHTML
			('beforeEnd', '<iframe id="' + id + '" scroll="no" frameborder="0" ' +
			 'style="z-index:0;position:absolute;border:0;top:0;left:0;width:0;height:0; visibility:hidden;' + filter +	
			 ' background-color: white;" ' +
			 'src="javascript:false;"></iframe>');
		f = window.self.document.getElementById(id);
	}
	return f;
};
 
Utils.setupWCH = function(f, el) {
	if (f) {
		var offs = Element.cumulativeOffset(el);
		var dim  = Element.getDimensions(el);
		f.style.width = dim.width + "px"; 
		f.style.height = dim.height + "px";
		f.visibility = "inherit";
 
	}
};
 
Utils.hideWCH = function(f) {
	if (f)
		f.style.visibility = "hidden";
};
 
Utils.destroy = function(el) {
	if (el && el.parentNode)
		el.parentNode.removeChild(el);
};
 
 
Utils.showWCH = function(f) {
	if (f)
		f.style.visibility = "";
};
Ahora para aplicarlo al menú (me refiero a cada uno de los submenúes anidados) una vez cargada la página completamente:
HTML.__wch = new Array();
Event.observe(window, 'load', init, false);
function init() {
	if (Prototype.Browser.IE) {	
	   var k =0;
        $$("#menu li").each( function(li){											 
			if(li.lastChild.tagName=="UL" || li.lastChild.tagName=="ul"){ 
				 li.setAttribute("num", k);
				 HTML.__wch[k] = Utils.createWCH(li.lastChild);
             	li.onmouseover=function() {
					var ul= this.lastChild;					  
				    var ki = this.getAttribute("num");
					HTML.__wch[ki].style.zIndex = -1;
			        ul.style.display="block";
					Utils.setupWCH(HTML.__wch[ki],ul);
					Utils.showWCH(HTML.__wch[ki]);                  
                }
                li.onmouseout=function() { 
				  var ki = this.getAttribute("num");
                   this.lastChild.style.display="none";
				   Utils.hideWCH(HTML.__wch[ki]);
 
                }
				k++;
			}
 
        });
 
   }
 
	}

Referencias:
- WCH - Windowed Controls Hiderhttp://aplus.rs/wch/intro/- Zapatec Utilshttp://www.zapatec.com/website/ajax/zpsuite/jsdocs/overview-summary-utils.js.html
Enviada el 2008-12-17

Thumb_up
Thumb_down

100%
0%

En DOM, que significa cargar toda la pagina

No se deben hacer modificaciones en el DOM cuando la página está cargando, las mismas deben realizarse una vez que se haya cargado completamente. Es aconsejable adjuntar una función al evento onload que invoque las modificaciones pertinentes.
<body>
<script for="window" event="onload" language="JScript">
  window.status = "Página cargada";
</script>
</body>
 

Referencia:
- onload Event: http://msdn.microsoft.com/en-us/library/cc197055(VS.85).aspx

Enviada el 2008-12-17

Thumb_up
Thumb_down

100%
0%

¿Dónde puedo encontrar alojamiento web gratuito?

Te recomiendo los siguientes servicios de alojamiento web gratuitos:

Sitio:http://www.000webhost.com- 500 MB espacio en disco
- 100 GB de transferencia de datos
- Soporta PHP y MySQL
- Acceso FTP
- 99.9% Uptime
- Libre de anuncios

Sitio:http://www.zymic.com- 5 GB de almacenamiento
- 50 GB de transferencia
- Soporta PHP 5, 5 bases datos MySQL
- 99.9% Uptime
- Libre de anuncios

Sitio:http://www.110mb.com- 5 GB espacio en disco
- Brinda PHP 5 y MySql
- Acceso FTP (con chmod habilitado)
- Puedes alojar tu propio dominio
- Subdominio gratis (midominio.110mb.com)
- 99.9% Uptime
- Libre de anuncios

Sitiohttp://www.sitesfree.com- 500Mb
- 7 GB de trasferencia
- Soporta PHP 5 y hasta 5 base de datos MySQL
- Subdominio gratis (midominio.sitesfree.com)
- Posibilidad de alojar tu propio dominio
- Acceso FTP
- 99.9% Uptime
- Libre de anuncios

Sitio:http://www.yourfreehosting.net/- 5GB Disk Space
- 50GB de ancho de banda
- Soporta PHP 4, 5 bases datos MySQL
- Posibilidad de alojar tu propio dominio
- Subdominio gratis midominio.yourfreehosting.net
- Administrador de ficheros
- Soporte técnico 24/7
- Acceso FTP completo
- 99.9% Uptime
- Libre de anuncios

Fuente:http://woork.blogspot.com/2008/12/5-awesome-free-web-hosting-services.html
Enviada el 2008-12-29

Thumb_up
Thumb_down

100%
0%

¿Qué CMS gratuitos existen para PHP5?

Existen numerosas alternativas pero te recomiendo CMS Made Simple, el cual tiene las siguientes características:
- Direcciones Amigables SEO
- Ayuda integrada y en línea
- Modular y extensible
- Fácil manejo de usuarios y grupos
- Sistema de permisos de grupo

Módulos que posee:
- Búsqueda
- WYSIWYG
- Encuentas
- Album de fotos
- Blog

Es importante destacar que este gestor de contenido se encuentra bien documentado.

Sitio oficial:
-http://www.cmsmadesimple.org
- Versión en español :http://www.cmsmadesimple.es
Enviada el 2008-12-29

Thumb_up
Thumb_down

100%
0%

¿Cómo crear nodos con DOM?

El código correcto debería quedar así:
<html>
<head>
<title>Creando Nodos</title>
</head>
<body></body>
<script type="text/javascript">
var p = document.createElement("p");
var  texto = document.createTextNode("Este párrafo lo ingresamos en el documento");
p.appendChild(texto);
document.body.appendChild(p);
</script>
</html>

Errores:
1- El método createNodeTexto no existe, sino createTextNode.
2- Debes mandar a ejecutar el script al final para que esté disponible el acceso al objeto document.body
Enviada el 2009-01-07

Thumb_up
Thumb_down

100%
0%

Eliminar nodos con DOM

El método correcto para acceder a los elementos de DOM por el nombre de la etiqueta es getElementsByTagName(), ahora sólo estarán disponible una vez cargada la página.
<html>
<head>
<title> Eliminación de NODOS</title>
</head>
<body>
<p> Este párrafo lo vamos a eliminar con las funciones de DOM </p>
</body>
<script type="text/javascript">
var p = document.getElementsByTagName("p")[0];
document.body.removeChild(p);
</script>
</html>

Ahora si deseas mantener los scripts en la cabecera debes detectar por medio del evento onLoad cuando se ha cargado la página, resultando de la siguiente manera:
<html>
<head>
<title> Eliminación de NODOS</title>
<script type="text/javascript">
window.onload = function load() {
var p = document.getElementsByTagName("p")[0];
document.body.removeChild(p);
}
</script>
</head>
<body>
<p> Este párrafo lo vamos a eliminar con las funciones de DOM </p>
</body>
</html>
Enviada el 2009-01-08

Thumb_up
Thumb_down

0%
0%

¿Qué herramienta usar para comprimir ficheros Javascript?

Puedes usar también esta herramientahttp://dean.edwards.name/packer/de Dean Edwards.
Enviada el 2009-01-13

Thumb_up
Thumb_down

100%
0%

Como hacer para que mi blog aparezca en google

Para incluir tu sitio en el índice de Google debes enviarla por medio de la siguiente página:

-http://www.google.es/addurl/?continue=/addurlTe aconsejo que pongas como título de tu Blog "Cada Quirihue - Cosejo Asesor de Area C A D A".
Enviada el 2009-01-19

Thumb_up
Thumb_down

0%
0%

¿Cuál URL es la correcta?

Buena pregunta, en primer lugar, los pares siguientes son equivalentes:
http://www.ejemplo.com
http://www.ejemplo.com/

http://ejemplo.com
http://ejemplo.com/

El '/' está implícito si no hay una ruta especificada, así que usted puede utilizar libremente cualquier forma. De la misma manera, el número de puerto (80) está implícito en la mayoría de las URL, pero podría muy bien utilizarse:
http://www.ejemplo.com:80
http://www.ejemplo.com/:80

http://ejemplo.com:80
http://ejemplo.com/:80

La mejor práctica es dejar fuera el número de puerto es de 80, siempre que se utilice este, claro está :). En cuanto a la posibilidad de dejar fuera de la ruta el ' / ', es una cuestión de preferencia personal. Unos argumentan que la inclusión del '/' se deja en claro a los lectores que usted está refiriéndose a la página inicial del sitio en cuestión, en contraposición con el sitio en su conjunto.
A continuación tenemos la cuestión de sí es conveniente incluir el "www." al comienzo del nombre del dominio. Este es un punto bastante polémico. En general, incluir el "www." está ligado a la forma tradicional; Aunque la moda actual es no usarlo, por tanto, elija lo que más le convenga. Lo importante es asegurarse de que la otra forma redireccione automáticamente a la forma que ha elegido. Si su servidor responde a ambas formas sin redirección, entonces los motores de búsqueda indexarán su sitio de las dos formas (uno con "www." y la otra sin ella), lo cual no es aconsejable pues disminuirá su ranking.

En cuanto a la URL de la página de inicio (/, /index, o / index.html), una vez más queda a la elección personal, pero sea coherente en todo el sitio de manera que los motores de búsqueda no se confundan con varias copias de la misma página en diferentes direcciones.
En mi caso personal prefiero usar "www." Así como "/" sólo cuando es una sección del sitio o página inicial, por ejemplo:
http://www.ejemplo.com/
http://www.ejemplo.com/blog/ 
http://www.ejemplo.com/blog/cual-es-la-foma-correcta


Referencias:
-http://www.sitepoint.com/blogs/2009/01/21/which-url-is-right/-http://no-www.org/faq.php-http://www.www.extra-www.org/
Enviada el 2009-01-21

Thumb_up
Thumb_down

0%
0%

¿Por qué se ven mal los textos del mapa de Google en IE6?

La cuestión es que debes asegurarte que la codificación de la página es utf-8, para ello puedes auxiliarte de la herramientahttp://validator.w3.org/la cual te dirá si en verdad usas esa codificación, pues no basta con poner en el código HTML los metas:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
Si usas PHP puedes llevar a utf-8 especificando las cabeceras http, indicando además que se debe reemplazar una cabecera previa.
header('Content-type: text/html; charset=utf-8',true);
Si usas un motor de plantillas quizás necesites indicar que el contenido debe devolverse con codificación utf-8, puedes apoyarte de la siguiente función para convertir a utf-8:
function utf8_encode_mix($input, $encode_keys=false)
    {
        if(is_array($input))
        {
            $result = array();
            foreach($input as $k => $v)
            {               
                $key = ($encode_keys)? utf8_encode($k) : $k;
                $result[$key] = utf8_encode_mix( $v, $encode_keys);
            }
        }
        else
        {
            $result = utf8_encode($input);
        }
 
        return $result;
    }

Referencias: http://www.php.net/utf8_encode
Enviada el 2009-01-27

Thumb_up
Thumb_down

0%
0%

¿Por qué sale este error en el config_config_handlers?

Bueno luego de investigar un poco, limpié la cache el error persistía, pero luego de hacer los algunos cambios en las directivas de núcleo en php.ini el problema se resolvió; empezando por desactivar la directiva zend.ze1_compatibility_mode que habilita la compatibilidad con el Motor Zend 1.0 (PHP 4), pues Symfony esta concebido para PHP5.
zend.ze1_compatibility_mode = Off

Finalmente tuve también que deshabilitar las comillas mágicas en tiempo de ejecución.
magic_quotes_runtime = Off
Enviada el 2009-01-28

Thumb_up
Thumb_down

0%
0%

¿Cómo usar la API de TinyURL?

Otro encode y decode de TinyUrl:
<?php
 
function reverse_tinyurl($url){
   $url = explode('.com/', $url);
   $url = 'http://preview.tinyurl.com/'.$url[1];
   $preview = file_get_contents($url);
   preg_match('/redirecturl" href="(.*)">/',$preview,$matches);
   return $matches[1];
}
 
function tinyurl($url){
   $html = file_get_contents("http://tinyurl.com/create.php?url=".$url);
   preg_match('/http:\/\/preview\.tinyurl\.com\/(.*)<\/b>/',$html,$matches);
   return "http://tinyurl.com/".$matches[1];
}
 
echo reverse_tinyurl("http://tinyurl.com/1c2");
 
echo tinyurl("http://www.google.com");
 
?>
Enviada el 2009-02-03

Thumb_up
Thumb_down

0%
0%

¿Qué son las sesiones en PHP?

Aquí tienen un ejemplo de inicialización de la variable de sesión:
session_start();
header("Cache-control: private"); //IE 6 Fix
 
session_register("variable");
$_SESSION['variable'] = xxx;
Trozo de código tomado de Snipplr.com. Enviado por fugue el 29-12-2006

Enviada el 2009-02-03

Thumb_up
Thumb_down

0%
0%

¿Cómo implemento la función trim () para Javascript?


function trim(strText) {
    while('' + strText.charAt(0) == ' ') {
        strText = strText.substring(1, strText.length);
    }
    while('' + strText.charAt(strText.length-1)==' ') {
        strText = strText.substring(0, strText.length-1);
    }
    return strText;
}
Trozo de código tomado de Snipplr.com. Enviado por DaveChild el 11-9-2008

Enviada el 2009-02-03

Thumb_up
Thumb_down

0%
0%

¿Cómo unir las propiedades de dos objetos Javascript?

La siguiente función te permitirá hacer algo similar a lo que deseas, la misma copia todas las propiedades del objeto2 en el objeto1:
var objeto1 = { nombre: 'Pepe', nick: 'loco' };
var objeto2 = { edad: 28, auto: 'Ferrari' };
 
function unir(objeto1,  objeto2) {
   for (propiedad in objeto2) {
      objeto1[propiedad] = objeto2[propiedad];
   }
 return objeto1;
}
unir(objeto1, objeto2);

Para comprobar el resultado final:
//Comprobación
   for (propiedad in objeto1) {
      alert(propiedad+':' + objeto1[propiedad]);
   }
Enviada el 2009-02-17

Thumb_up
Thumb_down

0%
0%

¿Cómo unir las propiedades de dos objetos Javascript?

Frameworks JavaScript como Prototype poseen http://Object.extend (destino, fuente), que permite copiar igualmente todas las propiedades desde un objeto fuente a otro destino.
Object.extend = function(destination, source) {
    for (var property in source) destination[property] = source[property];
    return destination;
};
Por lo que para resolver este caso sería muy sencillo:
Object.extend(objeto1, objeto2);
Enviada el 2009-02-17

Thumb_up
Thumb_down

0%
0%

¿Qué debo tener en cuenta para optimizar mi sitio web?

- El anchor text de los enlaces entrantes a tu sitio es uno de los factores más importantes que tiene en cuenta Google. Por ejemplo, yo deseo que mi sitio ocupe un buen puesto por la palabra clave ?alojamiento web", entonces sería genial si los sitios que me enlazan lo hacen de esta manera:
<a href="http://www.midominio.com/">Alojamiento web</a>

En lugar de:
<a href="http://www.midominio.com/">www.midominio.com</a>

Pero hay un problema, la mayoría de los enlaces entrantes serán desde otros sitios que por lo general no tendremos control sobre ellos.

- Use subdirectorios en lugar de subdominios: Por ejemplo, http://midominio.com/blog/ en lugar de http://blog.midominio.com . Esto se debe a que un subdominio es un nuevo sitio pero un subdirectorio contribuye al sitio principal.

- No ignore long-tail (Larga Cola), muchas veces nos concentramos lograr un buen ranking por palabras clave específicas que tienen mayor niveles de búsqueda. También se tiene éxito creando páginas de contenido único.

Ver también como elementos básicos:
- Creación de un sitio ajustado a los requisitos de Google: prácticas recomendadas http://www.google.com/support/webmasters/bin/topic.py?topic=8522



Enviada el 2009-04-09

Thumb_up
Thumb_down

0%
0%

Thumb_up
Thumb_down

0%
0%

¿Cómo hacer una capa semitransparente con CSS?

Como consejo digo coloques la capa al final del documento HTML para evitar problemas con el z-index en Internet Explorer, por otro lado debes posicionarla de manera absoluta, preferentemente relativo a la zona que se desea tapar, tal como sigue:
 
<div id="zona">
	<p>Código HTML a tapar mediante la capa...</p>
	<div id="capa"></div>
</div>
 

Mientras que el CSS sería:
 
#zona {
 position: relative;
 width: 100px;  /* Las dimenciones  son de ejemplo */
 height: 100px; 
 z-index: 1;
}
 
#capa {
 position: absolute;
 left: 0;
 top: 0;
 background-color: #ffffff;
 width: 100px;  /* Las dimenciones de la capa  dependen de la zona */
 height: 100px;
 z-index: 100; 
 filter: Alpha(Opacity=50);
 -moz-opacity: 0.5; 
}
 
/* Para Internet Explorer  */
* html #capa
   {
   filter:progid:DXImageTransform.Microsoft.Alpha(opacity=50);
 }
Enviada el 2009-05-29

Thumb_up
Thumb_down

0%
0%

¿Donde encontrar plantillas HTML gratis?

- http://www.oswd.org
Open Source Web Design es un sitio que te permite descargar plantillas web html gratis y compartirlas con otros.

- http://www.freecsstemplates.org
Plantillas CSS distribuidas bajo la licencia Creative Commons , son bastante ligeras en términos de imágenes, no usan tablas (al menos para crear la maqueta) y cumplen con los estándares W3C.

- http://openwebdesign.org
Open Web Design es una comunidad de diseñadores para compartir diseños web gratuitamente.
Enviada el 2009-06-09

Thumb_up
Thumb_down

0%
0%

¿Cómo aparecer en la primera página de Google?

Si desea llegar a las primeras posiciones del buscador Google, intente los siguientes consejos:

1- Identifique las palabras clave para Google asociadas a su sitio, para eso puede apoyarse de la herramienta http:// https://adwords.google.com/select/KeywordToolExternal y el Google Suggest, esta última le ayudará a encontrar las frases largas más buscadas que le permitirán hacerse de un nicho en los resultados de búsqueda.

2- Procura que el título de la página y las URL sean amigables (en esto vale mucho el gestor de contenidos usado) a los buscadores y a las personas. Para cada una de las páginas del sitio Web las mismas deben contener las palabras clave asociada con el contenido de dicha página; Sugiero no colocar más de dos palabras clave.

3- Como el contenido es el Rey y finalmente es lo más importante para el usuario, redacte el texto de manera tal que pueda estar optimizado para los buscadores y a la vez pueda leerse con claridad por el usuario final; mantener un balance adecuado es importante.

4- Garantiza que haya un buen intercambio de enlaces internamente en tu sitio. En ello pueden ayudar los menús multinivel y las nubes de etiquetas.

5- No preocuparse por el Pagerank, si el contenido es bueno muy pronto tendrás enlaces hacia tu sitio Web aumentando así la popularidad del mismo.

6- Experimentar cada día y sacar sus propias conclusiones acorde a las características propias de tu sitio. Para eso puede apoyarse en herramientas como el Google Analytics para analizar su propio sitio y para aprender de otros con http://www.compete.com , http://www.alexa.com , entre otros.

7- Lo que logres descubrir ;)

Enviada el 2009-06-18

Thumb_up
Thumb_down

0%
0%

¿Cual expresión regular usar para validar una URL con PHP?


https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?
 
PHP Example: Automatically link URL's inside text.
 
$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text);
Trozo de código tomado de Snipplr.com. Enviado por tylerhall el 21-3-2007

Enviada el 2009-06-19

Thumb_up
Thumb_down

0%
0%

¿Cual expresión regular usar para validar una URL con PHP?

He usado este patrón y me ha dado resultados bastante buenos:
$patron = "/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is"

Al usarlo en una función autolink resulta:
function UrlParser($texto)
$patron = "/((\s+(http[s]?:\/\/)|(www\.))?(([a-z][-a-z0-9]+\.)?[a-z][-a-z0-9]+\.(([a-zA-Z]{2}|aero|asia|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|tel|travel)(\.[a-z]{2,2})?))\/?[a-z0-9._\/~#&=;%+?-]+[a-z0-9\/#=?]{1,1})/is";
     $str = uniqid('');
    $i=0;
	$codes = array();
    while (preg_match($patron, $texto, $matches) ) {
        $i++;
		$link=  isset($matches[0])?$matches[0]:'';
		 if(strrpos($link,'http://')=== false) $link= 'http://'. $link;
		 $short_link = (strlen($link)>35)?self::tinyUrl($link):$link;
		 $codes[$i]['link'] = ' <a rel="external nofollow" title="'.$link.'" href="'.$short_link.'">'.$short_link.'</a> ';		
        $texto = preg_replace($patron , $str.$i, $texto, 1);
    }	
	$i=0;
    while (preg_match("#".$str."([0-9]+)#", $texto, $matches)) {
        $i++;    
        $texto = preg_replace("#".$str."([0-9]+)#", $codes[$i]['link'] , $texto, 1);
    }
 return $texto;
 }
Enviada el 2009-06-19

Thumb_up
Thumb_down

0%
0%

¿Cual es el mejor Framework para PHP?

Symfony es un Framework MVC que separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web e incorpora de otros frameworks y aplicaciones las mejores prácticas y componentes:

- Ruby on Rails: http://www.rubyonrails.org/ sistema de enrutamiento, helpers, scaffolding, archivos de configuración en formato YAML y la herramienta Rake (que en Symfony se llama Pake).

- Django: http://www.djangoproject.com/ el nuevo mecanismo de formularios y widgets que incorpora la versión 1.1 de Symfony.

- Propel http://propel.phpdb.org/ y Doctrine http://www.phpdoctrine.org/ : son los dos ORM principales de Symfony, sobre todo Propel, que se encuentra completamente integrado.

- Prado: http://www.pradosoft.com/ todo lo relacionado con la internacionalización (i18n) y la localización (l10n).

- Cocoa: http://developer.apple.com/cocoa/ el nuevo sistema de eventos de Symfony 1.1 se basa completamente en este framework de Apple.

- Test::More: http://search.cpan.org/~mschwern/Test-Simple-0.74/lib/Test/More.pm la herramienta Lime, para crear pruebas unitarias, está basada en el framework Test::More de Perl.

- Prototype, http://script.aculo.us , TinyMCE: utilidades relacionadas con Ajax y JavaScript.

Referencias:
- http://www.symfony-project.org/ Página oficial del proyecto Symfony
- http://www.symfony.es/2008/02/01/por-que-symfony-es-tan-bueno/
- http://www.librosweb.es/symfony_1_0/capitulo1/symfony_en_pocas_palabras.html
Enviada el 2009-06-25

Thumb_up
Thumb_down

0%
0%

¿Cómo crear una página Web desde cero?

Serie de Videotutoriales básicos titulado "Creación de Páginas Web" por
por Miguel Velásquez, para más detalle ver el canal ucvmiguel en Youtube.

- Tema I - Introducción



- Tema II - Etiquetas de salto de página, encabezado, párrafos y centrado



- Tema III Etiquetas de estilos de caracteres, texto preformateado, comentarios en el código HTML y citas o frases célebres



- Tema IV - Imágenes de fondo



- Tema V - Alineado de las imágenes



- Tema VI - Tablas






Enviada el 2009-07-06

Thumb_up
Thumb_down

0%
0%

¿Cuál es la longitud máxima de una URL?

Las longitudes máximas según el tipo de navegador Web son:

- Internet Explorer: 2 083 caracteres
- Firefox: 65 536 caracteres
- Safari: 80 000 caracteres
- Opera: 190 000 caracteres

Acorde al servidor web:

- Apache: 4 000 caracteres
- Microsoft Internet Information Server (IIS): 16 384 caracteres.
- Perl HTTP::Servidor Daemon: 8 000 caracteres.

Urls con más de 2000 caracteres no funcionaran en los navegadores más populares. Sin embargo, el método POST no está limitado por el tamaño de la dirección URL al enviar pares de nombre y valor. Estos pares se transfieren en el encabezado y no en la dirección URL.

<form action="miscript.php" method="POST">
...
</form>
 


Referencias:
- http://www.boutell.com/newfaq/misc/urllength.html
- http://support.microsoft.com/kb/208427/es
- ftp:// http://ftp.isi.edu/in-notes/rfc2616.txt
Enviada el 2009-07-07

Thumb_up
Thumb_down

0%
0%

¿Cómo eliminar una cookie usando Javascript?

Otra posible solución mediante funciones:
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ';', len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}
 
function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+'='+escape( value ) +
		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) + //expires.toGMTString()
		( ( path ) ? ';path=' + path : '' ) +
		( ( domain ) ? ';domain=' + domain : '' ) +
		( ( secure ) ? ';secure' : '' );
}
 
function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + '=' +
			( ( path ) ? ';path=' + path : '') +
			( ( domain ) ? ';domain=' + domain : '' ) +
			';expires=Thu, 01-Jan-1970 00:00:01 GMT';
}


Ejemplo de uso:
 
// Párametros para setCookie
// nombre, valor, expira, camino, dominio, seguro
setCookie( 'test', 'mi valor', '', '/', '', '' );
if ( getCookie( 'test' ) ) alert( getCookie('test'));
 
// Párametros para deleteCookie
// nombre, camino, dominio
// Asegúrese de usar los mismos parámetros en  setCookie y deleteCookie.
deleteCookie('test', '/', '');
( getCookie( 'test' ) ) ? alert( getCookie('test')) :
alert( 'No existe');
 
Enviada el 2009-07-07

Thumb_up
Thumb_down

0%
0%

Thumb_up
Thumb_down

0%
0%

¿Cómo validar un email con PHP y expresiones regulares?

Finalmente resolví añadiendo una porción al final de la expresión regular que había usado resultando:
$re= '#^[a-z0-9.!\#$%&\'*+-/=?^_`{|}~]+@([0-9.]+|([^\s]+\.+[a-z]{2,6}))(\.[a-z]{2,6})?$#si';

Sin embargo, no estoy convencido de que sea la solución más acertada.
Enviada el 2009-08-25

Thumb_up
Thumb_down

0%
0%

¿Qué se necesita para ser un buen programador web?

En la Wiki 97 Things de Oreilly el artículo "97 cosas que cada programador debe saber" que está aún en construcción tiene ya una buena compilación de puntos: http://bit.ly/19maJ8 (en inglés)
Enviada el 2009-09-04

Thumb_up
Thumb_down

0%
0%

¿Cómo puedo comprobar con Javascript si ha cargado el HTML?

Una posible solución es determinar si el DOM está listo, para ello puedes apoyarte en la función DOMContentLoaded que funciona en múltiples navegadores y que fue desarrollada por Dean Edwards, Mark Wubben, y Paul Sowden:
function onContent(f) { 
    var a = onContent,
    b = navigator.userAgent,
    d = document,
    w = window,
    c = "onContent",
    e = "addEventListener",
    o = "opera",
    r = "readyState",
    s = "<scr".concat("ipt defer src='//:' on", r, "change='if(this.", r, "==\"complete\"){this.parentNode.removeChild(this);", c, ".", c, "()}'></scr", "ipt>");
    a[c] = (function(o) {
        return function() {
            a[c] = function() {};
            for (a = arguments.callee; ! a.done; a.done = 1) f(o ? o() : o)
        }
    })(a[c]);
    if (d[e]) d[e]("DOMContentLoaded", a[c], false);
    if (/WebKit|Khtml/i.test(b) || (w[o] && parseInt(w[o].version()) < 9))(function() { / loaded | complete / .test(d[r]) ? a[c]() : setTimeout(arguments.callee, 1)
    })();
    else if (/MSIE/i.test(b)) d.write(s);
};

Ejemplo:
onContent(function(){alert(" ya cargué:)")});
 

Ver ejemplo completo: http://www.3 http://site.eu/jstests/onContent/final.html
Enviada el 2009-09-30

Thumb_up
Thumb_down

0%
0%

¿Cómo puedo comprobar con Javascript si ha cargado el HTML?

Ahora si usas librerías JavaScript la solución es mucho más simple:
Prototype:
document.observe("dom:loaded",function(){ alert("DOM listo");});

Ver: http://www.prototypejs.org/api/document/observe
Jquery:
$(document).ready(function () {
    alert("DOM listo");
});

Ver: http://docs.jquery.com/Events/ready
YUI:
YAHOO.util.Event.onDOMReady(function (ev) {  
alert("DOM listo");
});

Ver: http://developer.yahoo.com/yui/docs/YAHOO.util.Event.html
Enviada el 2009-09-30

Thumb_up
Thumb_down

0%
0%

¿Cómo optimizar el rendimiento del navegador al ejecutar Javascript?

Una de las cosas que se deben hacer son las siguientes:
- Evitar las llamadas a funciones innecesariamente, por ejemplo:
Lento:
function miMetodo() {
    function cuadrado(n) {
        return n * n
    };
    var i = 10000,
    sum = 0;
    while (i--) sum += cuadrado(i);
}

Más rápido:
function miMetodo() {
    var i = 10000,
    sum = 0;
    while (i--) sum += i * i;
}

- Definir variables arreglos y objetos de manera literal:
function literal() {
    var a = [],
    o = {};
}
function clasico() {
    var a = new Array,
    o = new Object;
}

- Haga cache de las variables globales:
 
function sinCache() {
    var i = 10000;
    while (i--) window.test = 'test';
}
function haciendoCached() {
    var w = window,
    i = 10000;
    while (i--) w.test = 'test';
}


Fuente: http://www.slideshare.net/madrobby/extreme-javascript-performance
Enviada el 2009-11-13

Thumb_up
Thumb_down

0%
0%

¿Cómo hacer precarga de imágenes en Javascript?

Aquí les dejo una clase JavaScript que controla la carga de una imagen y al terminar llama una función de retorno. Mediante la misma se pueden llamar cada una de las imágenes del slideshow.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Ejemplo de precarga</title>
	<script language="javascript">
 function preCargaImagen (){
     this.src= '';
     this.cargando=false;
     this.cargada= false;
     this.arrancaCarga= function(src) {
        this.src = src;
        if ((this.cargada == false) && (this.cargando != true)) {
            this.cargando = true;
            var nuevaImagen = null;
            nuevaImagen = new Image();
            nuevaImagen.src = this.src;
            if (nuevaImagen.complete) {
                    this.cargada = true;
                    Imagencargada(this);
            } else {
                nuevaImagen.onload = function() {
                    this.cargada = true;
                    Imagencargada(this);
                };
            }
        }
    }
}
function $(id){
return document.getElementById(id);
}
</script>
  </head>
  <body>
  <img id="imagen1" src="" width="500" alt="Aquí va la foto después de la precarga"/>
<script language="javascript">
 function Imagencargada (imagen){  $('imagen1').src=imagen.src;}
 var imagen1 = new preCargaImagen();
     imagen1.arrancaCarga('http://farm2.static.flickr.com/1403/1449205579_f99a9851d5.jpg');
 </script>
 </body>
</html>
Enviada el 2009-12-18

Thumb_up
Thumb_down

0%
0%

¿Cómo hacer precarga de imágenes en Javascript?

Otra clase que aun no he probado.

/*
**************************************
* Preloader Class v1.0               *
* Autor: Carlos R. L. Rodrigues      *
**************************************
*/
Preloader = function(){
    var o = this;
    o.img = [];    o.r = []; o.g = [];
    o.n = {}; o.total = o.loaded = 0;
};
Preloader.prototype.add = function(i, g){
    var o = this, n = (o.g[o.total] = [g || "general"])[0];
    (g = o.n)[n] >= 0 ? ++g[n] : g[n] = 1;
    o.img[o.total++] = i;
};
Preloader.prototype.load = function(){
    var o = this, p = o.img, l = p.length, a, g = o.g;
    while(l--){
        (g[l][1] = a = new Image()).src = p[a.i = l];
        a.onload = function(){
            if(o.r[this.i]) return;
            !--o.n[g[this.i][(o.r[this.i] = 1) - 1]] && o.onGroupComplete && o.onGroupComplete(g[this.i][0]);
            o.onImageComplete && o.onImageComplete(this);
            (++o.loaded == o.total) && o.onComplete && o.onComplete();
        };
        (a.fileSize !== undefined ? a.fileSize > -1 : a.width) && a.onload();
        a.onerror = function(){
            o.onImageError && o.onImageError(this);
        }
    }
};
Preloader.prototype.getImagesByGroup = function(n){
    var g = this.g, i = [], p = 0, n = n || "general";
    for(var j = g.length; j; g[--j][0] == n && (i[p++] = g[j][1]));
    return i;
};
Trozo de código tomado de Snipplr.com. Enviado por Leech el 21-7-2006



Fuente: http://jsfromhell.com/classes/preloader
Enviada el 2009-12-18

Thumb_up
Thumb_down

0%
0%

¿Cómo poner un div sobre un flash?

La solución combinar el posicionamiento mediante CSS con la colocación al objeto swf del parámetro wmode = "opaque". Ahora si usa el cargador de flash mediante JavaScript SWFObject 2.x el cual permite quitar el borde que sale al flash en IE7, la sintaxis quedaría de la siguiente manera:
 
   swfobject.embedSWF("movie.swf", "flash", "550", "400", "7",
                      "expressinstall.swf", {}, { wmode: "opaque" }, {});

Descargar: http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js
Fuente: http://pipwerks.com/swfobject/z-index/2.0/index.html
Enviada el 2009-12-18

Thumb_up
Thumb_down

0%
0%

¿Qué factores determinan el posicionamiento en Google?

Lista traducida y clasificada según diferentes criterios.

Referente al dominio

1. Edad del dominio.
2. Tiempo que queda para que el dominio expire.
3. Información del dominio (Whois).
4. Dominio de primer nivel (geoposicionamiento .com versus .co.uk).
5. Dominio de primer nivel (.com versus .info).
6. ¿Subdominio o dominio principal?.
7. Registros anteriores del dominio (con qué frecuencia cambia de servidor alojado).
8. Dueños anteriores del dominio (con qué frecuencia cambia su propietario).
9. Palabras clave en el dominio.
10. IP del dominio.
11. Vecinos del dominio.
12. Menciones que hacen a tu dominio desde otras páginas (sin enlazarlo).
13. Opciones de objetivos geográficos (Geo-Targeting) usadas en Google Webmaster Tools.

Referente al servidor que aloja la página Web.

1. Donde está localizado el servidor.
2. Uptime del servidor (si no sufre caídas).

Referente a la arquitectura/estructura de la página

1. Estructura de las URL.
2. Estructura del HTML.
3. Estructura semántica.
4. Uso de ficheros JavaScript y/o CSS externos.
5. Sitio accesible (uso de navegación inaccesible, JavaScript, etcétera).
6. Uso de URLs canonicas.
7. Código HTML Correcto y válido.
8. Uso de cookies.

Referente al contenido

1. Idioma de la página.
2. Si el contenido es único.
3. Cantidad de contenido.
4. Densidad de contenido no enlazado.
5. Ratio de contenido únicamente textual (sin enlaces, imágenes, código,..).
6. Contenido estacional / de actualidad (por ejemplo para búsquedas relacionadas a las estaciones del año).
7. Información semántica.
8. Contenido etiquetado para una categoría general.
9. Contenido / Nicho de mercado.
10. Uso de palabras marcadas .
11. Texto en las imágenes.
12. Contenido malicioso.
13. Calidad del contenido, enfocado a la ortografía.

Referente a los enlaces internos

1. Número de enlaces internos a una página.
2. Número de enlaces internos a una página con exactamente el mismo texto.
3. Número de enlaces internos a una página desde el contenido.
4. Número de enlaces usando el atributo "nofollow".
5. Densidad de enlaces internos.

Referente a la popularidad del sitio

1. Contenido del fichero robots.txt.
2. Frecuencia general de actualización del sitio.
3. Tamaño general del sitio (número de páginas).
4. Antigüedad del sitio desde la primera vez que lo descubrió Google.
5. Uso de Sitemap.
6. Contenido detectado que genera confianza (Información de contacto, política de privacidad, TOS, etcétera).
7. Tipo de sitio (por ejemplo un blog en lugar de un sitio de información).

Referente a factores concretos

1. Etiqueta "meta robots" en la página.
2. Antigüedad de esa página.
3. Frercuencia de edición de la página.
4. Contenido repetido en otras páginas del mismo sitio.
5. "Legibilidad" del contenido.
6. Tiempo de carga de la página.
7. Tipo de página de inicio.
8. Popularidad interna de la página (cantidad de enlaces internos que tiene hacía ella).
9. Popularidad externa (cantidad de enlaces externos relevantes hacía otras páginas de este sitio).

Referente a las palabras clave

1. En el título de la página.
2. Al principio del título de la página.
3. En las etiquetas "alt".
4. En el texto de un enlace a una página interna.
5. En el texto de un enlace a una página externa.
6. Palabras en negrita o cursiva.
7. En el inicio del cuerpo.
8. En el texto a lo largo del cuerpo.
9. Palabras clave sinónimas usadas y relacionadas a la temática de la página o del sitio.
10. En el nombre del fichero.
11. En la URL.
12. Sin ponerlas de forma "aleatoria" a propósito.
13. El uso (abuso) de palabras clave utilizadas dentro de los comentarios HTML.

Referentes a enlaces salientes

1. Número de enlaces salientes (por dominio).
2. Número de enlaces salientes (por página).
3. Calidad de los sitios a los que se enlaza.
4. Enlaces a "malos vecinos".
5. Relevancia de los enlaces salientes.
6. Enlaces a páginas 404 u otras páginas de error.
7. Enlaces a agencias "SEO" desde el sitio del cliente.
8. Imágenes enlazadas a otros sitios.

Referente a los enlaces entrantes

1. Relevancia del sitio que te enlaza.
2. Relevancia de la página que te enlaza.
3. Calidad del sitio que te enlaza.
4. Calidad de la página que te enlaza.
5. Enlaces entrantes desde redes de sitios.
6. Diversidad de enlaces en el sitio que te enlazan.
7. Diversidad de palabras usadas en el enlace (anchor text).
8. Diferentes IPs de los sitios que te enlazan.
9. Diversidad geográfica.
10. Diferentes TLD dominios de nivel superior (com, es, net, org, etcétera).
11. Diversidad temática y/o actualidad.
12. Diferentes tipos de sitios enlazándote (logs, directorios, etcétera).
13. Diversidad en los lugares donde eres enlazado.
14. Enlaces de autoridad por cada enlace entrante.
15. Enlaces de un mal vecino (ausencia / presencia de enlaces marcados de estos sitios).
16. Ratio de enlaces recíprocos (hechos hacía ti y devueltos. Relevante para el perfil general de enlaces entrantes).
17. Ratio de enlaces de sitios sociales (ratio de? versus el perfil general de enlaces entrantes).
18. Patrones y tendencias anormales (como aumentos/disminuciones repentinos/as en el número de enlaces entrantes).
19. Citaciones en la Wikipedia y DMOZ.
20. Registros históricos en el perfil (alguna vez pillado comprando/vendiendo enlaces, etcétera).
21. Enlaces desde sitios sociales de favoritos (como delicious.com).

Referente a cada enlace entrante en particular

1. Autoridad del TLD (.com versus .gov).
2. Autoridad del dominio que te enlaza.
3. Autoridad de la página que te enlaza
4. Localización del enlace (a pie de página, en el cuerpo, en el menú de navegación?).
5. Texto del enlace (y texto de la etiqueta "alt" en las imágenes enlazadas).
6. El atributo "Title" de un enlace .

Referente a los visitantes

1. Número de visitas.
2. Demografía de los visitantes.
3. "Ratio de retención".
4. Costumbres de navegación del visitante (que otros sitios tiene costumbre de visitar).
5. Tendencias y patrones del visitante (como por ejemplo aumento repentino de tráfico entrante).
6. Cuán a menudo el visitante hace click en tu sitio en los SERPs.

Referente a penalizaciones

1. Abuso de palabras clave / llenar el texto de ellas.
2. Detección de compra de enlaces.
3. Detección de venta de enlaces.
4. Registros de spam (en comentarios, foros, etcétera).
5. Encubrimiento (Cloaking).
6. Texto oculto.
7. Contenido duplicado (duplicación externa).
8. Historial de penalizaciones pasadas de este dominio.
9. Historial de penalizaciones pasadas del propietario.
10. Historial de penalizaciones pasadas para otros sitios del dueño.
11. Registros de ataques por parte de crackers2 en el pasado.
12. Redirecciones 301 erróneas: redirecciones dobles, bucles de redirecciones o que terminan en error 404.

Otros

1. Registrar el dominio en Google Webmaster Tools.
2. Presencia del dominio en Google News.
3. Presencia del dominio en Google Blog Search.
4. Dominio usándose en Google Adwords.
5. Dominio usándose en Google Adsense.
6. Nombre comercial / menciones externas a la marca.

Fuentes:
- http://blog.traffic4u.es/articulo/los-parametros-que-google-tiene-en-cuenta-en-una-pagina-web/
- http://www.searchenginejournal.com/200-parameters-in-google-algorithm/15457/ (Artículo original)
Enviada el 2010-01-12

Thumb_up
Thumb_down

0%
0%

¿Cómo mostrar valores sin la función alert() de Javascript?

Blackbird ofrece una salida de manera sencilla para registrar los mensajes en JavaScript (log) y una bonita consola para verlos y filtrarlos los mismos. Nunca volverás a usar alert ().
Para registrar una salida sería:
log.debug( ' Este es un mensaje de depuración' );
log.info( ' Este es un mensaje de información' );
log.warn( ' Este es un mensaje de advertencia' );
log.error( ' Este es un mensaje de error' );
 

Para añadir Blackbird a su página:
1. Descargue los archivos y colócalos en tu servidor o en un directorio local en tu equipo.
2. Incluir en tu página blackbird.js y blackbird.css.
<html>
  <head>
    <script type="text/javascript" src="/PATH/TO/blackbird.js"></script>
    <link type="text/css" rel="Stylesheet" href="/PATH/TO/blackbird.css" />
    ...
  </head>
 

Descargar: http://blackbirdjs.googlecode.com/files/blackbirdjs-1.0.zip
Sitio: http://www.gscottolson.com/blackbirdjs/
Enviada el 2010-01-20

Thumb_up
Thumb_down

0%
0%

¿Dónde comprar un dominio en México?

http://www.sitiosgdl.com Es una empresa radicada en Guadalajara y ofrece la venta de dominios web y entre otros.
Enviada el 2010-01-22

Thumb_up
Thumb_down

0%
0%

¿Cuanto debo invertir en publicidad en Adwords?

Me he encontrado esta herramienta que permite estimar el tráfico a partir de mis palabras clave seleccionada, oferta de coste por clic (CPC), presupuesto diario y audiencia a que va dirigida.

http://adwords.google.com/select/TrafficEstimatorSandbox

Si ya usted ha creado una campaña podrá ver las estimaciones de tráfico de la siguiente manera:
1. Acceda a su cuenta de AdWords en http://adwords.google.es .
2. Haga clic en la campa?a que contiene el grupo de anuncios correspondiente.
3. Haga clic en el grupo de anuncios.
4. Haga clic en Editar palabras clave.
5. Introduzca las palabras clave adicionales que desee de modo que cada término o frase aparezca en una línea distinta.
6. En caso necesario, especifique la nueva cantidad de la oferta de coste por clic (CPC) en el campo Oferta predeterminada.
7. Haga clic en Estimar tráfico de búsqueda. Se mostrarán todas las estimaciones para cada una de sus palabras clave. Si es necesario, puede ajustar su oferta de CPC y volver a calcular sus estimaciones.
8. Haga clic en Guardar cambios para conservar la nueva configuración o bien en Cancelar para descartarla, en cuyo caso se aplicará la configuración original.
Tomado de: http://adwords.google.com/support/aw/bin/answer.py?hlrm=en&answer=34084
Enviada el 2010-01-22

Thumb_up
Thumb_down

0%
0%

¿Por qué la function de Javascript getYear() devuelve 110?


En la especificación de ECMAScript, la función getYear devuelve el año menos 1900, o sea para 2010 devuelve 110. Por lo que esta función getYear fue descontinuada en la versión 3 de ECMAScript siendo reemplazada por getFullYear() que devolvería 2010. Internet Explorer cambió a getYear() para que funciones similar a getFullYear() mientras que Mozilla lo mantiene al antiguo estándar. El nuevo código sería:

fecha = new Date();
anno = fecha. getFullYear ();
//Retorna anno=110
 


Véase además:
- http://www.w3schools.com/jsref/jsref_obj_date.asp
- http://es.wikipedia.org/wiki/Problema_del_a%C3%B1o_2000 (Error del milenio)

- http://stackoverflow.com/questions/98124/why-does-javascript-getyear-return-108
Enviada el 2010-02-04

Thumb_up
Thumb_down

0%
0%

¿Por qué la function de Javascript getYear() devuelve 110?

Como getFullYear no funciona en los navegadores más antiguos una posible solución sería extender el objeto Date con una función compatible para todos:
Date.prototype.getRealYear = function() 
{ 
    if(this.getFullYear)
        return this.getFullYear();
    else
        return this.getYear() + 1900; 
};
 


Resultando:
 var fecha = new Date();
fecha.getRealYear();
// Retorna 2010
 

Enviada el 2010-02-04

Thumb_up
Thumb_down

0%
0%

¿En que lenguaje de programación esta hecho Facebook?

La tecnología usada por Facebook se compone de varias aplicaciones escritas en diversos lenguajes de programación, incluyendo PHP, C, C++, Erlang y otros.
Fuente:
http://www.facebook.com/note.php?note_id=203367363919 (Inglés)
Enviada el 2010-02-05

Thumb_up
Thumb_down

0%
0%

¿Cómo puedo bajar el porcentaje de rebotes en mi sitio?

Cuanto más atractivas resulten las páginas de destino, más usuarios permanecerán en el sitio y se convertirán en clientes. Tal vez puedas intentar las siguientes formas de reducir el porcentaje de abandonos en tu sitio:
- Aumentar la velocidad de carga del sitio
- Procure adaptar el contenido de las páginas de destino a cada una de las palabras clave.
- Disminuir el uso excesivo de banners si los tiene
- Construir credibilidad con imágenes y videos (Puede usar Flickr, Youtube, Vimeo)

Fuentes:
- 5 Great Ways to Block U-Turns on Your Web Site. http://interactivityworld.blogspot.com/2009/12/5-great-ways-to-block-u-turns-on-your.html
- http://www.google.es/support/googleanalytics/bin/answer.py?hl=es&answer=81986
Otras:
- Cinco consejos para redactar cabeceras web eficaces. http://www.google.com/support/conversionuniversity/bin/answer.py?answer=77157
Enviada el 2010-02-11

Thumb_up
Thumb_down

0%
0%

¿Cómo hacer un Query String con Javascript?

function serialize(form) {
  if (!form || !form.elements) return;
 
  var serial = [], i, j, first;
  var add = function (name, value) {
    serial.push(encodeURIComponent(name) + '=' + encodeURIComponent(value));
  }
 
  var elems = form.elements;
  for (i = 0; i < elems.length; i += 1, first = false) {
    if (elems[i].name.length > 0) { /* don't include unnamed elements */
      switch (elems[i].type) {
        case 'select-one': first = true;
        case 'select-multiple':
          for (j = 0; j < elems[i].options.length; j += 1)
            if (elems[i].options[j].selected) {
              add(elems[i].name, elems[i].options[j].value);
              if (first) break; /* stop searching for select-one */
            }
          break;
        case 'checkbox':
        case 'radio': if (!elems[i].checked) break; /* else continue */
        default: add(elems[i].name, elems[i].value); break;
      }
    }
  }
 
  return serial.join('&');
}
 
Enviada el 2010-02-17

Thumb_up
Thumb_down

0%
0%

¿Cómo saber si un texto tiene codificación utf-8?

En la clase http://sfToolkit.class.php del Framework Symfony 1.0 encontré el siguiente método el cual he puesto como una función independiente:
function isUTF8($string)
  {
    for ($idx = 0, $strlen = strlen($string); $idx < $strlen; $idx++)
    {
      $byte = ord($string[$idx]);
 
      if ($byte & 0x80)
      {
        if (($byte & 0xE0) == 0xC0)
        {
          // 2 byte char
          $bytes_remaining = 1;
        }
        else if (($byte & 0xF0) == 0xE0)
        {
          // 3 byte char
          $bytes_remaining = 2;
        }
        else if (($byte & 0xF8) == 0xF0)
        {
          // 4 byte char
          $bytes_remaining = 3;
        }
        else
        {
          return false;
        }
 
        if ($idx + $bytes_remaining >= $strlen)
        {
          return false;
        }
 
        while ($bytes_remaining--)
        {
          if ((ord($string[++$idx]) & 0xC0) != 0x80)
          {
            return false;
          }
        }
      }
    }
 
    return true;
  }
Enviada el 2010-03-09

Preguntas

¿Qué necesito saber para ser un desarrollador web?

Enviada el 2008-10-20
Qué lenguajes de programación me recomiendan y si hay alguna otra cosa que necesite aprender y que programas me recomendarían para hacer páginas más fácilmente.
Etiquetas: programacion

¿Donde puedo encontrar libros gratuitos?

Enviada el 2008-10-20
Quiero adentrarme en el mundo del desarrollo web, pero la mayor parte de la información aparece en el idioma inglés. Me gustaría saber de algunos libros en idioma español que aborden las tecnolog...
Etiquetas: libros , gratis

¿Dónde puedo encontrar un listado de directorio?

Enviada el 2008-10-20
Deseo promocionar algunos sitios web y quisiera saber de algunos directorios donde pueda incluirlos.
Etiquetas: seo , directorios

¿Cómo atraer más usuarios?

Enviada el 2008-10-28
Quisiera captar nuevos usuarios, además de mantener los que ya tengo y aumentar así los enlaces entrantes basados en el mérito de mi sitio.
Etiquetas: trafico

¿Cómo redirigir el tráfico hacia otro dominio?

Enviada el 2008-10-28
Si tengo dos dominios (midominio.com y miotrodominio.net) y sólo tengo contenido en uno de ellos, ¿cuál es la manera correcta de redirigir el tráfico al sitio web con contenido?
Etiquetas: trafico , programacion

¿Qué es la orientación de anuncios de adsense por secciones?

Enviada el 2008-11-03
Quisiera saber que es la orientación por secciones y cómo debe implementarse.
Etiquetas: adsense

¿Por qué debería crear un sitemap?

Enviada el 2008-11-03
Estoy haciendo un sitio web nuevo y me gustaría que fuese indexado completamente por los buscadores, especialmente por Google. Me queda la duda si será realmente necesario el crear un sitemap para...
Etiquetas: seo

¿Cómo subo fotos a Flickr usando phpFlickr?

Enviada el 2008-11-10
Estoy tratando de usar la clase PHP phpFlickr para la API de Flickr y no he logrado subir foto alguna, devolviendo la respuesta siguiente: <?xml version="1.0" encoding="utf-8&q...
Etiquetas: flickr , programacion , api

¿Qué expresión regular usar para validar un email?

Enviada el 2008-11-26
He usado varias expresiones para validar direcciones de correo por largo tiempo pero quisiera encontrar alguna que esté un poco más actualizada, aunque sea más compleja.
Etiquetas: regex , email

¿Cómo implementar un menú multi-nivel usando YUI?

Enviada el 2008-12-23
Tengo que implementar menú multi-nivel (en principio 3 niveles) y estoy pensando utilizar la librería de Javascript YUI de Yahoo. Además quiero que los enlaces generados sean seguidos por los busc...
Etiquetas: YUI , javascript

¿Por qué sale este error en el config_config_handlers?

Enviada el 2009-01-28
Estoy intentando comenzar un proyecto web usando el framework PHP Symfony en su version 1.0.18, WAMP5, ya he creado mi proyecto y la aplicacion principal, pero al correr la aplicacion en modo de de...
Etiquetas: symfony , php

¿Cómo desofuscar un código Javascript?

Enviada el 2009-02-06
El caso es que estoy estudiando algunos códigos JavaScript, o sea haciendo algo así como ingeniería inversa y algunos de ellos están ofuscados, es decir, no hay una nueva línea luego del ";" ni i...

¿Cómo validar un email con PHP y expresiones regulares?

Enviada el 2009-08-25
Tengo un script en PHP para validar un correo electrónico que funcionó correctamente hasta que un usuario introdujo una dirección del tipo usuario@dominio.co.uk xxx.com.cn xxx.co.uk identificá...
Etiquetas: php , regex , email

¿Cuáles son los estilos CSS por defecto de Internet Explorer?

Enviada el 2010-03-30
Si deshabilitamos los estilos CCS de nuestro sitio web comprobaremos que hay diferencias en varias propiedades CSS entre en las versiones de IE. Encontré este sitio que hace una compilación de los...
Etiquetas: html , ie , css

Siguiendo