miércoles, 28 de noviembre de 2012

Microformatos en la Web


Desde hace algunos años atrás ya que está escuchando el concepto de Web Semántica, sin embargo es un tema que no acaba de arrancar, aunque pequeños pasos sí que se están dando al respecto, uno de ellos es la utilización de microformatos en nuestra web.

Los microformatos son entidades que se utilizan para describir una determinada información, por ejemplo:

·         Persona (http://schema.org/Person)
·         Lugar (http://schema.org/Place)
·         Organización/Empresa (http://schema.org/Organization)
·         Evento (http://schema.org/Event)
·         Oferta (http://schema.org/Offer)
·         Comentario/Opinión (http://schema.org/Review )

Cada una de éstas entidades tienen propiedades, por ejemplo ésta última entidad (Comentario) tiene las siguientes propiedades: título o nombre del comentario, autor, día de la publicación, valoración del objeto (establecimiento, producto, ect.) al que se le está haciendo el comentario, descripción, entre otros.

Los microformatos se utilizan dentro de etiquetas html como <span>, <div>, <meta> y dentro de ellos se especifica la propiedad del elemento, utilizando el itemprop=" " y antes de  utilizarlos se debe especificar en un <div> principal (por ejemplo) el tipo de entidad a la que se está haciendo referencia. Siguiendo el ejemplo de la  entidad Comentario, veamos cómo quedarían sus propiedades:

1.     Especificar la entidad, utilizando el div principal:
<div itemprop="review" itemscope itemtype="http://data-vocabulary.org/Review">
2.     Título o tema del que se está hablando:
<span itemprop="itemreviewed">Comentario acerca de...</span>
3.     Autor del comentario:
Comentario de <span itemprop="reviewer">Irina Argota</span>
4.     Fecha del comentario:
<time itemprop="dtreviewed" datetime="2012-11-28">28/12/2012</time>
5.     Descripción del comentario:
<span itemprop="description">Este es mi comentario...</span>
6.     Valoración/Puntuación del comentario:   
Valoración: <span itemprop="rating">90</span>
7.     Mayor Valoración/Puntuación del comentario:
<span itemprop="best">100</span>
 
</div>
Para nuestro  ejemplo, hemos utilizado un determinado microformato, sin embargo otros también pueden ser utilizados:
<div> itemprop="review" itemscope itemtype="http://schema.org/Review"><meta itemprop="name" content="Comentario de Irina"/><div itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating"><meta itemprop="worstRating" content = "1"/><span itemprop="ratingValue">5</span>/<span itemprop="bestRating">5</span>sonrisas</div><p><time itemprop="datePublished"  datetime="2012-11-28">28/11/2012</time><br/><span itemprop="author" class="usuario">Irina</span></p><p itemprop="description" class="comentario">Este es mi Comentario...</p></div>

Para comprobar si estamos utilizando los microformatos correctamente se recomienda utilizar la herramienta de Google para Webmasters “Rich Snippets Testing Toolsdonde se puede incluir un código o directamente una página web. Si comprobamos mi primer código, veremos que cómo resultados obtendremos lo que se muestra en la imagen siguiente:


Por el contrario, si probamos con una página web que tenga comentarios: http://www.turispain.com/casas-rurales/huesca/lacasadelarcoverde podremos observar los resultados. En este caso, la web escogida (Turispain.com) tiene una serie de microformatos incorporados que proporcionan significado semántico a su contenido, lo que ayuda a que los buscadores o cualquier herramienta ratreadora de código sepa distinguir la naturaleza de un contenido.
Google mostrará los resultados de los microformatos en sus resultados de búsqueda de la siguiente forma:


A continuación veremos otro ejemplo de uso de microformatos, que podemos probar utilizando la herramienta de Google para webmasters.
<article itemscope itemtype="http://schema.org/LodgingBusiness">           
<div itemprop="geo" itemscope itemtype="http://schema.org/GeoCoordinates">           
          <meta itemprop="latitude" content=" 41.6568307" />
           <meta itemprop="longitude" content=" -0.8799101" />
</div>
<figure itemscope itemtype="http://schema.org/ImageObject">           
         <img itemprop="image" src="http://" width="280px" height="229px" alt="Foto"  title="Foto"/>       
</figure>
       <h2 itemprop="name">Mi Empresa</h2>        
       <address itemprop="address" itemscope itemtype="http://schema.org/PostalAddress">            
             <span itemprop="addressLocality" >Zaragoza</span>, 
             <span itemprop="addressRegion">Zaragoza</span><br/>            
             <span itemprop="streetAddress" >C/Sin Nombre </span>
             <span itemprop="postalCode" >50015</span>        
       </address>        
       <li itemprop="aggregateRating" itemscope itemtype="http://schema.org      /AggregateRating">                        
               <span>Comentarios (<small itemprop="reviewCount">10</small>)</span>            
               <meta itemprop="ratingValue" content="4">
        </li>        
        <div>Precio<br/>                       
              <span itemprop="priceRange">17</span>&euro;</span>        
        </div>
 </article> 

Finalmente, quisiera hacer un breve comentario sobre éste tema, el hecho que utilicemos muchos microformatos no significa que posicionaremos nuestra web en los primeros resultados de Google, ya que ésto llega un mayor trabajo de SEO y SEM, pero sí garantizará que al realizar búsquedas tu web aparezca como resultado relevante diferenciándose de otras web que no le dan un significado semántico a su contenido. Los microformatos se deben utilizar coherentemente, no se trata de poner por poner, si no que hay que saber cuándo y cómo ponerlos, de ahí la necesidad de su comprensión, sugiero que revicen éstas páginas antes de lanzarse a ponerlos: http://schema.org y http://support.google.com/webmasters/bin/answer.py?hl=es&answer=146897&topic=1088472&ctx=topic y esté siempre pendiente de los cambios que puedan surgir sobre éste tema.

viernes, 19 de octubre de 2012

Medir el rendimiento de tu Web utilizando GTmetrix

Numerosas son las herramientas que nos permiten medir el rendimiento de una Web, sin embargo, pocas son las que realizan un análisis completo de la misma.

Hoy quiero comentarles de una herramienta muy potente y sencilla que con tan solo indicar la url de nuestra web realiza un análisis de ella: GTmetrix

En http://gtmetrix.com/ podemos encontrar la herramienta.

Una vez que hayamos escrito la dirección de la web veremos como en cuestión de segundos la va analizando, devolviendo el Porcentaje de Velocidad de nuestra Web y un conjunto de resultados basados en determinadas mediciones, entre ellas:

- Optimización de las imagenes de la Web. Nos indica las imagenes que no están optimizadas.Y utilizando ésta otra herramienta, podemos optimizarla http://www.smushit.com/ysmush.it/

- Css Compacto o Minimizado, es el porcentaje de minimización de nuestro código css, mientras más compacto sea mejor ya que nos ayuda a mejorar la velocidad de descarga y de ejecución de nuestra web. Lo mismo ocurre con nuestro HTML, Javascript, etc.

- Minimización de las redirecciones HTTP.

GTmetrix también nos muestra gráficamente el tiempo de carga de la Web, tamaño de las páginas y cantidad de peticiones, facilitándonos una documentación en formato (csv) con dicha información.

Pongamos un ejemplo de una página que utiliza Gtmetrix para analizar su rendimiento: Turispain, es un portal web sencillo, con una interfaz agradable que ayuda a los internautas a encontrar establecimientos turísticos en España, facilitándoles información sobre dichos establecimientos, tales como: imágenes, videos, tarifas, disponibilidades y contacto inmediato con el dueño(a) del sitio.

Si escribimos en el Gtmetrix la dirección url de Turispain: (www.turispain.com) vemos como después de un análisis devuelve los resultados a los "puntos de medición" determinados. Esta página es un ejemplo de una buena implementación de código, diseño, utilización de imagenes, etc, lo que muestra el excelente trabajo que se está desarrollando en ella.



Te invito a que utilices Gtmetrix para analizar el rendimiento de tu web y así podrás conocer qué mejoras necesitarás hacerle para lograr su buen funcionamiento y de ésta forma hacer que los usuarios se sientan cómodos al navegar en ella.

martes, 12 de junio de 2012

Herramientas para campañas de eMail Marketing

1. Herramientas para campañas de eMail Marketing

En este artículo se hablará de 12 herramientas para campañas de eMail Marketing, todas con características comunes y algunas diferencias. Destacándose como la más potente: MailChimp, y otras españolas de gran calidad como: Sarbacán Software y Graphic Mail (ambas de una empresa en Barcelona).

1.1 MailChimp 

Web: http://mailchimp.com/
Video-tutoriales: http://blip.tv/mailchimp-academy

Es la herramienta más conocida. Posee una versión gratuita que permite recaudar hasta 2.000 contactos y enviar hasta 6 correos por usuario en un mes. Además, tiene un conjunto de 142 plantillas medianamente flexibles (gratis y pagadas) para comenzar fácilmente su campaña, sin mayores conocimiento de diseño.
Genera completos informes para saber quién recibió el correo, quién lo abrió, quién hizo click en una imagen o en un link o de qué localidad son las personas que lo abrieron, entre otros datos.  Mailchimp está integrado a Google Analytics, permitiendo obtener más datos sobre el desempeño de la campaña, y también a Facebook y Twitter, distribuyendo el mensaje de tu campaña a través de las redes sociales.
Algunas de sus funciones principales son:
 Un panel de administración que permite gestionar la base de datos y segmentar los envíos.
 Permite dar de baja grupos de usuarios de manera rápida.
  API para integrar las herramientas y bases de datos del anunciante.
 Centro de usuarios para que modifiquen sus datos, rediseñable para que pueda seguir el estilo de cualquier web.
  Varias posibilidades y funciones propias para el envío de newsletters, como por ejemplo las galerías de plantillas o de imágenes.
 Herramientas de medición y estadísticas para el análisis de nuestras campañas.
 Autorespondedor para contestar automáticamente a los clientes.

1.2 CampaignMonitor

Web: http://www.campaignmonitor.com/
Campaign Monitor, es la segunda herramienta más utilizada después de Mailchimp; las principales diferencias con ésta última son:
 Mailchimp tiene mejor diseño y personalización. Ambas tienen buenas plantillas, pero para CampaignMonitor se necesita conocimientos de css y html.

 Ambas herramientas poseen altas prestaciones: permiten crear, enviar, gestionar y realizar un seguimiento de correos electrónicos de la marca para la empresa y sus clientes con gran facilidad.
 Coste: MailChimp es completamente gratuito para listas de hasta 2,000 suscriptores, y se podrá enviar hasta 12,000 correos al mes; sin embargo, en el modo gratuito no se contará con algunos de los mejores beneficios que ofrece como Seguimiento de campaña, Autorespondedor y otras muchas más. Su precio para realizar campañas
oscila entre 15 y 240 dólares dependiendo del tamaño de la lista. Campaign Monitor por su parte, es gratuito para su puesta a punto, no hay cargos mensuales, ni compromisos a largo plazo. El precio son 5 dólares para la entrega por campaña, más 1cent. por correo electrónico a las primeras 50.000 direcciones de correo. Por ejemplo, para enviar un correo electrónico a 1.000 direcciones de correo electrónico en una campaña costará 5 dólares más (1.000 x 0,01), a sólo 15 dólares.

1.3 MailerLite

Web: http://www.mailerlite.com/hello
No es tan potente como las dos anteriores, ya que incluye las principales características que necesita un pequeño empresario para realizar sus campañas. Sus principales características son:
 Diseño es muy intuitivo y fácil de usar.
 Cuenta con algunas plantillas sencillas pero con una usabilidad excelente.
 Por 99$ al año se pueden realizar campañas para hasta 10.000 suscriptores.
 Incluye, como el resto, una versión gratuita para poder probar la herramienta.

1.4 Aweber
Web: http://www.aweber.com/

Características principales:
 Enorme biblioteca de plantillas personalizables para tus boletines de correo.
 Incluye varios formularios de suscripción también configurables.
 Autorespondedor para contestar automáticamente a tus posibles clientes en una secuencia determinada, según lo que queramos.
 Es capaz de enviar directamente correo a tu lista RSS de suscriptores, a partir de los contenidos que acabas de publicar en el blog.
 Herramienta de rastreo del correo enviado para su análisis posterior de preferencias de usuarios.
 Segmentación de suscriptores, para el envío de correo por preferencias de usuario.
 Integración con Twitter y Facebook.
 Hasta 500 suscriptores en su versión gratuita.
 Su versión gratuita no es tan gratuita, ya que debes ingresar 1 dólar para empezar utilizarlo durante un mes. Si deseas continuar utilizando el servicio, deberás pagar 30 dólares mensuales para el plan de 2000 a 5000 suscriptores, o 19 dólares para los mismos 500 usuarios.

1.5 eListas

Web: http://www.elistas.net/
eListas es una herramienta diferente a las anteriores, ya que más bien se suele utilizar como complemento de las otras.
Nos permite realizar listas de correo de nuestros clientes y newsletters.
Desde 2004 no tiene la opción de crear listas gratuitas, pero este servicio lo ofrecen mediante eGrupos (http://www.egrupos.net/), que aunque esté ligado a eListas, tendremos que registrarnos de nuevo para poder proceder a crear listas de manera gratuita.
El precio de las tarifas va desde 70 dólares al año con un máximo de distribución de 100.000 mensajes al mes, hasta 220 dólares/año y 500.000 mensajes/mes. A partir de ahí cada 250.000 mensajes más al mes serían 12 dólares más mensualmente.

1.6 MailCast

Web: http://www.mailcast.es/

 Interfaz de usuario fácil de usar.
 Vista previa: averigua instantáneamente cómo se verá tu correo en Hotmail, GMail, Outlook... y en las bandejas de entrada de tus destinatarios.
  Personaliza los contenidos: con cualquier dato que tengas sobre los destinatarios.
 Envíos de prueba: antes de lanzar la campaña, para revisión y aprobación por parte de los clientes.
 Organiza tus campañas en canales: para distintos clientes, distintos productos, etc....
 Publicación de ZIP con un clic: crea tu correo con cualquier herramienta de diseño y publícalo en un ZIP con un sólo clic para ser enviado.
  Versión automática en texto plano: para ser leídos por aquellos destinatarios que leen el correo desde sus teléfonos o programas de correo sin soporte HTML.
 Escribe noticias de forma separada: luego monta automáticamente el boletín y además compártelas por RSS.
 Cambia permisos: Decide quién puede acceder a qué. Por ejemplo, si eres una agencia podrás darle una cuenta a tu cliente para que vea las estadísticas sólo de sus campañas.
  Archivo histórico de newsletters gratuito
 Hosting de imágenes incluido
  Uso de diseños propios de email sin coste adicional
 Tramos mensuales (*):
Emails: 5.000 10.000 20.000 30.000 50.000 100.000 precio: 65€ 99€ 159€ 215€ 315€ 495€ respectivamente.

1.7 GraphicMail

Web: www.graphicmail.com.es
  •  Galería de plantillas profesionales
  •  Alojamiento de imágenes y ficheros
  •  Creación de newsletters con editor
  •  Importación de HTML o URL’s
  •  Creación de listas de envío y contactos
  •  Reportes & Estadísticas Avanzadas
  •  Gestión automática de rebotes y bajas
  •  Personalización de los emails
  •  Segmentación de bases de datos
  •  Autorespuestas automáticas
  •  Integración con redes sociales
  •  Integración con Google Analytics
  •  Canal RSS
  •  Envío de mensajes SMS
  •  Extensiones Wordpress y Joomla
  •  Soporte por Chat, Soporte por Tickets, Atención telefónica

 1.8 Autoresponder1

Web: http://www.autoresponder1.com/ (Ya no es ésta herramienta, ahora cambiaron de imagen, es EmailXimple: http://www.emailximple.com/)

 Automáticamente se puede enviar una serie de emails a sus suscriptores o en una fecha especial Cumpleaños, Aniversarios, Festivos, etc ó alertas en eventos que se activaran tan pronto como se suscriban a una lista.
 Administrar lista de suscriptores.
 Integración con Google Analytics, Wordpress.
 Estadísticas  de suscriptores, apertura y clicks en tiempo real.
 Precios: 
- Plan 1K: $8 mes Suscriptores 1.000
- Plan 2.5K: $14 mes Suscriptores 2.500 
- Plan 5K: $24 mes Suscriptores 5.000 
- Plan 10K: $34 mes Suscriptores 10.000

1.9 Bizbox

Web: http://bigbox.mx/e_marketing.html

Bizbox Permite a una empresa gestionar varias cuentas, controlar sus resultados, compararlos y archivarlos. 
 Única herramienta con segmentación visual
 Valorador de clientes y segmentación por comportamiento (behavioral targeting)
 Gestión simultánea de varias cuentas, campañas y acciones
 Informes únicos y comparados de respuesta
 Plantillas personalizables
 Pago por mail y/o sms enviado 
 Coste mensual de la herramienta 75 € sin iva incluye:  10.000 emails, 150 sms

1.10 Constant Contact

Web: http://www.constantcontact.com/index.jsp

Se dice que esta herramienta es una de las líderes en el mercado. En cuanto a su funcionalidad es similar a Mailchimp, aunque su uso se extiende a muchos otros servicios tales como: boletines de noticias, encuestas en línea, difusión de eventos, CRM (gestión de base de datos), pago en línea y administrador de redes sociales; además del email marketing.  También posee una versión gratuita por 60 días y no ilimitada. El diseño de las plantillas está dado en base a 400 formatos muy flexibles, los cuales podrán personalizarse fácilmente con logo, imágenes, texto y color. Respecto a los contactos, ofrece un sistema muy sencillo para agregarlos que incluso permite su importación desde Outlook.

1.11 Vertical Response

Web: http://www.verticalresponse.com/

En términos generales sus características son más o menos similares a las que ya hemos visto: Un manejo sencillo y flexible de plantillas  e informes de fácil comprensión.  Sin embargo, posee algunos elementos que lo diferencian de otras herramientas. Ofrece 25 MB para alojar imágenes y un sistema de precio por número de emails y contactos disponibles.  Una de sus principales ventajas es la posibilidad de crear informes comparativos para mejorar sus campañas de marketing. También está integrado con Google Analytics.

1.12 Sarbacán Software

Web: http://www.sarbacan.es/

Posee todas las características mencionadas en las herramientas anteriores: 
  •  Dispone de una versión gratuita.
  •  No hay límite de envíos.
  •  Los packs de pago son por e-mails enviados mensualmente. 
  •  Dispone de plantillas.
  •  Ofrece seguimiento de resultados en las versiones de pago.
  •  Es posible gestionar los destinatarios desde el programa e importarlos desde distintas bases de datos, como excel o outlook.
  •  Está en español.
  •  Tiene un servicio de atención al cliente en España.

martes, 17 de abril de 2012

¿Metodología Ágil o Formal en tu Empresa?


Las Pequeñas y Medianas Empresas (PyMES) dedicadas al desarrollo de software o que cuentan con un área o unidad de negocio dedicadas a ello, están generando una parte significativa del software utilizado en el mundo. Sin embargo, carecen de una metodología de desarrollo de software son adaptados; y en casos extremos, ni siquiera son utilizados.

¿Cómo elegir la metodología de desarrollo de software “adecuada a utilizar” en proyectos de producción de software?

 Gráfica 1. Modelo propuesto por Barry Boehm y Richard Turner.


El modelo propuesto por Barry Boehm y Richard Turner es un modelo de fácil comprensión capaz de evaluar cuantificar e identificar 5 variables críticas a la hora de decidir si el desarrollo de un sistema se aventura por metodologías ágiles o robustas.

Personal. El por ciento del personal con capacidad, experiencia y posibilidades para enfrentar tareas es un aspecto de mucha importancia en un proyecto de producción de software, de esto depende mucho la posibilidad que tiene el grupo de desarrolladores de poder implantar o desarrollar un tipo de metodología u otra. Esta variable tiene su mayor importancia a la hora de adoptar métodos ágiles que requieren de un personal con niveles de experiencia medios-altos, capaces de comprender y adaptar los métodos y las técnicas empleadas.

Criticidad. La criticidad del sistema resultada determinante cuando se habla de proyectos cuya falla puede traer pérdidas de vidas humanas, daño al medio ambiente y grandes pérdidas económicas, por lo que se hace necesario emplear métodos robustos capaces de mantener un rigor de requisitos y diseño adecuados para procesos de pruebas, verificación y validación.

Cultura. El por ciento del personal con capacidad para enfrentarse a entornos caóticos resulta importante a la hora de adoptar métodos ágiles los cuales se basan fundamentalmente en el talento de las personas, un ambiente laboral con un control excesivamente normalizado y jerarquizado resultaría incómodo para llevar a cabo este tipo de práctica.

Tamaño La cantidad de personas de un proyecto resulta importante en dependencia de qué método ágil o robusto se vaya a poner en práctica. Para métodos ágiles donde es muy significativa una buena comunicación entre todos los integrantes del grupo de desarrollo esta resulta imposible con un número alto de personal en el proyecto.

Dinamismo. El por ciento de cambios de requerimientos que pueden ocurrir en un mes tiene gran peso en los métodos ágiles preparados para enfrentar este tipo de situación, resultaría muy incómodo enfrentar grandes cambios de requerimientos con métodos robustos que tienen grandes volúmenes de documentación y una verificación y validación de procesos continua.

Tiempo. El tiempo de respuesta requerido por el cliente para obtener su producto resulta determinante a la hora de escoger una metodología, para proyectos que se necesiten terminar en un periodo de tiempo breve resultaría tedioso seleccionar un método robusto estos se ajustan más a sistemas a largo plazo con un gran número de requerimientos.

¿Por qué adicionar la variable Tiempo de respuesta requerido por el cliente al Modelo de Barry Boehm y Richard Turner ?

En la actualidad el tiempo de respuesta requerido por el cliente es un factor muy importante a tener en cuenta a la hora de desarrollar un software y seleccionar una metodología de desarrollo. Resulta determinante cumplir con el tiempo que requiere el cliente, de lo contrario esto podría traer consigo consecuencias desfavorables para el proyecto en cuanto a su costo su tiempo de desarrollo, errores en la aplicación entre otros. La relación entre los beneficios y la cantidad de tiempo necesario para poner el producto o servicios en el mercado tiene gran significado, cuanto menor sea el tiempo o plazo para llegar al mercado mayor serán los beneficios. Esto posibilita que se pueda alcanzar a diferentes tipos de usuarios y consumidores. A medida que transcurre el tiempo se incrementan los costos, se desmotiva el personal, aumenta la presión y existen mayores posibilidades de perder personal involucrado en el desarrollo.adecuada a sus necesidades y sus recursos, ya que las metodologías existentes y sus marcos de trabajo difícilmente.

                                       Gráfica 2. Delimita el área ágil.


                                                        Gráfica 3. Delimita el área formal.


martes, 10 de abril de 2012

Mensajes de "Warning" en PHP


 Como su nombre lo indica un "Warning" es una advertencia  del sistema indicándonos que "algo" estamos haciendo mal los programadores. 



Algunos Warnings en PHP son los siguientes:

  1. Warning: Cannot modify header information - headers already sent by (output started at ...
Causas:

  1. En el script PHP existen espacios o caracteres extraños antes o después del código PHP.
  2. La configuración de PHP en el servidor tiene activa (en On) la directiva display_errors
  3. session_start() debe ser ejecutado antes de cualquier salida HTML porque envía headers HTTP al navegador. 
  4. Cuando hay un include, require, antes de la función.
  5. Enviar "algo" antes del header. Ej: un espacio, una coma..." 
  6. Redireccionar con header luego de haber mostrado "algo" por pantalla.
  7. Falta el (./) y el (;) : header("Location: ./pagina.php");

Soluciones:

  1. Revisar que no existan espacios, saltos de línea o caracteres antes de:
<?php
    //Y que no existan también después de:
?>
     2. Al apagar (poner en Off) la directiva display_errors, el error puede desaparecer. Se puede modificar en el archivo .htaccess o php.ini. En .htaccess:

     php_value display_errors "Off"
     3.  Añadir los include, require en las primeras lineas del código.
     4. La función header en PHP debe enviarse en la cabecera de la respuesta http, por tanto debe ser lo primero que se envíe al navegador.El  header hay que colocarlo en la primera linea del archivo, antes que cualquier tipo de salida (ya sea html, texto o espacios en blanco.
     5. Colocar el siguiente código
      
        //al inicio
<?
   ob_start();
?>
        //al final 
<?
    ob_end_flush();
?>
La función ob_start() sirve para indicarle a PHP que se ha de iniciar el buffering de la salida, es decir, que debe empezar a guardar la salida en un buffer interno, en vez de enviarla al cliente.

La función ob_end_flush() sirve para indicar a PHP que se desea realizar el volcado de todo el bufer en la salida, con lo que se enviará al cliente que ha solicitado la página.

Nota 1: Es posible desactivar el PHP Notice y PHP Warning:

Con el parámetro de configuración error_reporting podemos definir que tipo de errores quedemos almacenar en el log.

En el caso que lo tengamos a E_ALL, veremos como se van guardando en el log "PHP Notice", que algunas veces conocemos pero que quizás no resultan de interés. Podemos desactivarlos de la siguiente manera:


error_reporting = E_ALL & ~E_NOTICE //restando a los E_ALL las E_NOTICE
De la misma manera podemos eliminar los "PHP Warning"

error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING

Trabajo con Fechas PHP, MYSQL

Cuando los programadores tenemos que realizar una página web donde se trabaja con Fechas, siempre nos enfrentamos a problemas de formato, ya sea por la forma en que MySQL almacena los tipo "DATE", o la forma en que se quiere mostrar la fecha al usuario.

Casualmente hoy, me ha dado un error que he logrado solucionar, lo comento por si les pasa ya tengan la solución.

Primero, hacerles un breve resumen de la situación:

 Como todos saben MYSQL almacena lor registros de tipo DATE en formato "YYYY-MM-DD" (Año-Mes-Dia), por ejemplo, (2012-04-10): Fechas ISO 8601. 

Imaginemos que queremos realizar una consulta para extraer de la tabla "tusuario" la fecha de nacimiento de todos los usuarios de la tabla:

SELECT tusuario.fechaNacimiento FROM tusuario.

Si esta consulta la escribimos dentro de un fichero PHP:

require_once(conexionBD.php"); //para llamar al archivo que ejecuta la conexión a la BD.
$sql="SELECT tusuario.fechaNacimiento FROM tusuario";
$consulta=mysql_query($sql, $conexion) or die (mysql_error()); //crea conexión
 if(mysql_num_rows($consulta)>0){
      while($fila=mysql_fetch_array($consulta)){
             echo $fila[fechaNacimiento];
      }
}
 En pantalla se mostrará la fecha en formato "YYYY-MM-DD"; ahora bien, si el usuario final desea que le fecha se muestre en formato "DD/MM/YYYY" en muchos sitios se recomienda utilizar la siguiente función

echo (date(("d/m/Y"),strtotime( $fila[fechaNacimiento])));
VER: strtotime

Sin embargo, cuando utilicé dicha función, me devolvía la fecha "01/01/1970" para todos los casos, por tanto comencé a buscar opciones e hice lo siguiente:

 list($anno, $mes, $dia) = explode('-', $fila[fechaProximaLlamada]);
echo "$dia/$mes/$anno";
 Y de esa forma salieron las fechas con el formato adecuado.

Por el contrario, si queremos almacenar la fecha en nuestra BD y se ecnuentra en formato DD/MM/YYYY lo que tenemos que hacer para cambiarla es lo siguiente:

$fechaNacimiento=$_GET["fechaNacimiento"]; //En caso de que se reciba por GET o por POST
 $partes=explode("/", $fechaNacimiento);
 $fecha=$partes[2]."-".$partes[1]."-".$partes[0]; //para que la fecha se guarde en la BD como YYYY-MM-DD 

jueves, 5 de abril de 2012

Relaciones entre tablas PHPMyAdmin

PHPMyAdmin nos permite crear relaciones entre tablas. Para ello, abrir una tabla y seleccionar la pestaña "Estructura". En esa ventana aparecerá la opción "Vista de Relaciones".

Antes de comenzar asegúrese de estar usando el Motor de almacenamiento INNODB (que es el que soporta las relaciones), para ello la pestaña "Operaciones" les muestra en "Opciones de la tabla" el dato anteriormente mencionado.

Volviendo a la vista de relaciones, podrá seleccionar la llave foránea correspondiente, permitiendo hacer cambios en cascada al agregar o eliminar registros en nuestra base de datos asi como conservar integridad de la información almacenada en ella.

La integridad de datos es importante ya que no permite tener incoherencia en la información o falta de ella, permitiendo que todos los datos estén relacionados en nuestra Base de datos.

Por lo general, cuando se selecciona el índice destino para la relación y las acciones correspondientes de "ON DELETE" y "ON UPDATE" se selecciona la opción "CASCADE" que permite actualizar los valores. Lo que significa que si una fila en la tabla padre es eliminada, entonces se eliminarán las filas de la tabla hijo cuya clave foránea sea igual al valor de la clave referenciada en la tabla padre.

También se encuentran las opciones siguientes:

  • SET NULL: Actualiza los valores relacionados a "null". Requiere que el campo indicado en FOREIGN KEY permita valores nulos. Si está definido con flag NOT NULL daría un mensaje de error. 
  • NO ACTION: no realiza ninguna acción.
  • RESTRICT: restringe o impide que se ejecuten acciones.

Un error frecuente que suele aparecer es "#1452 - Cannot add or update a child row: a foreign key constraint fails"

La respuesta la suele tener la "integridad referencial" (Por ejemplo, Si cargas la tabla B, pero en esa tabla un campo es FK de la tabla A, hasta que la tabla A no tenga en su PK el valor correspondiente que usarás en B, no puedes cargar la tabla B).

La integridad referencial ha de establecerse siempre entre dos tablas. Una de ellas ha de comportarse como tabla principal o tabla padre y la otra sería la tabla vinculada o tabla hijo. Siendo necesario que::
  •  La tabla padre tenga un índice primario (PRIMARY KEY)
  • La tabla hijo tenga un índice (no es necesario que sea ni único ni primario) asociado a campos de tipo idéntico a los que se usen para índice de la tabla principal.

El error #1452 de MySQL ocurrirá si se intenta añadir un registro a la tabla hijo sin que exista el campo en la tabla padre. Por tanto, tenemos que añadir primero el registro en la tabla padre y luego en la tabla hijo.  
Es importante señalar que en la columna que se estableció como índice podemos insertar duplicados ya que no establecimos la condición de índice PRIMARIO ó UNICO.

Del tema "integridad referencial" hablaré más adelante.

Vista Indexada


Mejorar el rendimiento de una vista.

Si al ejecutar una vista demora en devolver los resultados, una solución podría ser hacerla indexada, para que guarde la información y no tenga que unir todas las tablas que componen la vista cada vez.

Los índices se utilizan para buscar las filas con valores de columna específica rápidamente. Sin un índice, MySQL debe comenzar con el primer registro y luego leer a través de toda la tabla para buscar las filas correspondientes, y si la tabla es muy grande este proceso se demorará más.

Si la tabla tiene un índice para las columnas que se trate, MySQL puede determinar rápidamente la posición de buscar en el medio del archivo de datos sin tener que mirar todos los datos. Por tanto, los índices aumentan la velocidad de la consulta y si no están bien configurados o no se tienen, puede traer como consecuencia el bloqueo de MYSQL, que la Web vaya lenta o incluso que el servidor se bloque o se caiga.

En caso de que la consulta SQL continúe lenta y no se pueda solucionar mediante una vista indexada, habría que pensar en hacer Triggers.

Los índices se crearían en los campos que se utilizan para unir tablas (por ejemplo, si en una tabla se usa el idUsuario para unirlo con la otra que también tiene idUsuario, se crearían dos índices, ambos con idUsuario, para que la BD pueda unir las tablas más rápidamente). Esto sólo es necesario en caso de que no sean campos de clave primaria, ya que éstos se indexan automáticamente. Creo que se ganaría bastante si en las uniones se están usando campos que no son clave primaria...

Se puede probar a crear los índices de las tablas de una vista, porque eso se haría rápido (si por ejemplo una vista une 5 tablas, sería crear 5 índices o pocos más) y es fácil de comprobar si va bien o no. Y si no funciona o no optimiza lo suficiente, pues hay que intentar lo otro.

Problemas encontrados:

  • En SQL SERVER 2005, por ejemplo, si hay tablas que se unen con OUTER JOIN no es posible tenerlo en vistas indexadas ya que las filas pueden desaparecer de forma lógica de una vista indizada basada en OUTER JOIN cuando inserte datos en una tabla de base. Esto hace que las vistas OUTER JOIN que son relativamente complejas de implementar se actualicen de forma incremental y el rendimiento de la implementación sería más lento que para las vistas basadas en (INNER) JOIN estándar.
  • Hay ocasiones que si en vez de utilizar OUTER JOIN utilizamos INNER JOIN nos devolve menos registros de los que necesitamos.
  • Otro problema es la dependencia de vistas con otras vistas. Es decir, si tengo una vista definida sobre otra vista. SQL Server no permite indizar la vista del nivel superior. En este artículo (http://www.microsoft.com/latam/technet/productos/servers/sql/2005/impprfiv.mspx) dicen que hay que expandir la definición de la vista anidada a mano en la vista del nivel superior y luego crear un índice, indizando la vista interna o no.

martes, 27 de marzo de 2012

Firebug en Firefox

Firebug una extensión del navegador Firefox que nos permite editar webs y hojas de estilo, monitorizar tiempos de carga, depurar javascript y ver los errores en la página además de explorar el DOM.

DOM es el acrónimo de “Modelo en Objetos para la representación de Documentos”, aunque ésta es una mala traducción. El DOM es el árbol jerárquico para la página web y su representación gráfica se asemeja a un organigrama. Con el DOM los programadores pueden trabajar de manera dinámica con la página (a esta tecnología la llamamos DHTML).

Actualmente existen algunas extensiones para Firefox que trabajan conjuntamente con Firebug como es el caso de FireUnit un plugin que nos da la posibilidad de realizar pruebas unitarias de Javascript y mostrará los logs en una pestaña de Firebug.

Instalación
  • Lo primero que tenemos que hacer si no lo tenemos instalado es descargar e instalar el navegador
  • Mozilla Firefox desde su página oficial. http://www.mozilla-europe.org/es/firefox/
  • Y luego añadir los complementos necesarios Firebug, lo puedes encontrar aquí: https://addons.mozilla.org/es-ES/firefox/addon/firebug/
  • Y el FireUnit http://fireunit.org/
Cómo trabajar con Firebug
 
Una vez lo tengamos instalado sólo tenemos que pulsar sobre el icono de Firebug que aparece desactivado en la parte inferior derecha del navegador. El icono es una imagen de una especie de escarabajo. Si tenemos algún problema para encontrarlo también podemos dar con el botón secundario del ratón sobre cualquier parte de la página web y al hacer click con botón derecho, elegir la opción “Inspeccionar elemento”. En la parte inferior de la pantalla aparecerá una ventana (el Firebug), dándonos información sobre el elemento de la página web que elijamos o en el que estemos posicionados. En concreto nos aparecerá el código del elemento inspeccionado: las instrucciones que recibe el ordenador para que algo se muestre de una determinada manera.

Pulsando sobre el icono de inspeccionar (icono con una flecha azul) podemos ir recorriendo las distintas partes que forman la página y viendo el código asociado: a través del código podemos identificar colores, tamaños de letra, jerarquías de un elemento dentro de la página, descripción y ruta de una imagen, etc. Por ejemplo si pinchamos sobre una imagen podemos ver como código:


<img alt="imagen.jpg" height="180" src="/images/imagen.jpg" width="225" />

lo cual nos está informando del tamaño en pixeles, la descripción de la imagen, el nombre del fichero, etc. Una vez desplegado el Firebug vemos que posee una barra de herramientas principal donde algunos elementos aparecerán desactivados. Para activarlos sólo tenemos que pulsarlos y darles a activar (habilitar o deshabilitar).

Algunas Pestañas Interesantes:

La pestaña HTML
 
En la sección HTML se muestra, de manera cómoda, el código HTML de la página que en este momento se está viendo en Firefox. Los signos + y - ayudan a revisar cada una de las secciones del código.
Con el botón Inspect podemos seleccionar una parte de la página, la que se seleccionará a su vez en el código HTML.

Utilizando el botón Edit podemos modificar la parte de la página actualmente seleccionada para ver cómo ser vería si modificamos el código. Esto es muy utilizado por los diseñadores web para probar otras imágenes o palabras.

La pestaña Net
 
En la pestaña Net se muestra cada solicitud y respuesta que se produjeron para cargar la página que actualmente está mostrando Firefox. Para hacer análisis de tráfico, esto es una ayuda con respecto a Wireshark, pues en este caso estamos filtrando sólo lo que nos interesa. Para poder realizar el análisis de tráfico es necesario presionar el botón de activación que se muestra en esta pestaña. En la primera columna se indica el método o verbo que se utilizó (GET o POST, usualmente) y parte de la URL que corresponde a esa solicitud. En la segunda columna aparece el código correspondiente a la respuesta de esa solicitud. Luego, en la tercera columna, aparece el dominio que respondió a la solicitud. En la cuarta columna aparece el tamaño de la respuesta (medido en bytes, kilobytes o megabytes, según sea conveniente). Finalmente, en la quinta columna aparecen los tiempos de respuesta de cada solicitud. Al abrir, con el signo +, una de las solicitudes, se pueden ver los detalles de los encabezados (headers, en inglés) de la solicitud (request) y la respuesta (response). Además, aparece el contenido de la respuesta, con código o imágenes, según corresponda.

Uso de FireUnit
 
Algunas de las pruebas que se pueden realizar con este plugin son:
  • Simular eventos del navegador
  • var input = document.getElementsByTagName(”input”)[0];
  • fireunit.mouseDown( input );
  • fireunit.click( input );
  • fireunit.focus( input );
  • fireunit.key( input, “a” );

Para saber sobre IP y Puerto

A continuación pongo a su disposición algunas anotaciones que tenía y que no quisiera dejar de poner aquí por si pudiera ser de tu interés.:

Para saber el ip de mi pc desde afuera: http://www.cualesmiip.com/

Para saber que puerto estoy usando
  • En la ventana de comandos poner netstat -an y me dice los puertos y con esta página http://www.canyouseeme.org/ poner el puerto y debe decir si tienes puertos abiertos o no.
  • Aquí se supone que te dice cómo filtrar los paquetes TCP/IP (un firewall, lo que pasa es que se ve que lo llaman de otra forma): http://support.microsoft.com/kb/816792 se mira si está activado, y si lo está, se puede comprobar qué puertos están abiertos y cuáles no.

Bloquear un IP de una pc para que no entre en otra pc
  • Ir a "Panel de control/Herramientas administrativas/Directiva de seguridad local".
  • Luego en "Directivas de seguridad IP en Equipo Local" Clic derecho y seleccionar la opción: "Administrar listas de filtros IP y acciones de filtrado".
  • Agregar un Nombre y darle la opción de "Bloquear", agregamos la dirección IP que deseamos bloquear.
  • En "admin de filtros" elegir si se desea bloquear o no.
  • Seleccionar la directiva y bloquear en caso de que haga falta.
  • En la directiva dar clic y ponerle "Asignar".


En Windows es posible bloquear determinadas direcciones IP sin la necesidad de tener activado el Firewall:
  • Clic en Inicio/Ejecutar/MMC
  • En la consola Archivo/Agregar o quitar complemento.
  • En la pestaña Independiente clic en "Agregar".
  • Elegir Administrador de las directivas de seguridad de IP/Agregar/Equipo Local/Finalizar/Aceptar
  • En el marco izquierdo, seleccionar Directivas de Seguridad IP en equipo local Crear directiva de seguridad IP/ Siguiente
  • Escribimos el nombre de la directiva y su descripción/Activamos la regla predeterminada/Valor predeterminado de Active Directory/dejar marcado Editar propiedades
  • En la ventana de propiedades clic en Agregar y clic en Siguiente Esta regla no especifica un tunel marcado y pulsar Siguiente/Dejar marcado "Todas las conexiones de red" y clic en Siguiente
  • Ventana de lista de filtros IP/Agregar nuevo filtro (sin especificar ninguno de los que hay por defecto)/Poner nombre y descripción a la lista de filtros IP/Agregar y clic en Siguiente para continuar.
  • Colocamos en origen y destino las direcciones IP, nombres DNS o rangos de IP que deseemos bloquear.
  • Aceptamos los cambios y disfrutamos del resultado.

viernes, 23 de marzo de 2012

Migrar BD de SQL Server 2005 a MySQL

Para Migrar una BD de SQL Server 2005 a MySQL (en este caso la tendremos en el PHPMyAdmin) se necesita utilizar el Microsoft Access y seguir los siguientes pasos:
  1. Abrir el SQL Server 2005 y exportar la BD a formato que sea reconocido por el Microsoft Access, recuerde seleccionar todas las tablas que desee exportar.
  2. Crear una BD en el Microsoft Access con plantilla en Blanco (de extensión .mdb), si la BD anterior tiene Usuario de administración a las BD, le recomiendo que a esta BD en la opción "Usuarios y Permisos" le añada el mismo usuario y contraseña de la anterior. De ser posible, nombre la BD igual a la exportada.
  3. Crear también en PHPMyAdmin una BD vacía, a la cuál irán a parar los datos que se encontrarán en la BD de Access.
  4. Necesita tener instalado el "MySql Connect ODBC" que sirve para crear la conexión entre la BD que estará en Microsoft Access y la de MySQL. (Recomiendo instalarlo con la opción "Typical").

  5. Nota: "mysql-connector-odbc-5.1.5-win32.msi" (se encuentra aquí: http://www.filestube.com/04334ce69d05311a03ea,g/mysql-connector-odbc-5-1-5-win32.html)
  6. Terminada la instalación vamos al Panel de Control/Herramientas Administrativas/Origenes de Datos(ODBC).
  7. Seleccionamos la pestaña "DSN de archivo" y damos clic en agregar.
  8. En la lista que aparece, seleccionamos "MySQL ODBC 5.1 Driver" y clic en "Siguiente".
  9. Aparecerá una ventana para escribir la ruta donde queremos guardar nuestra conexión, le damos a "Examinar" y por defecto estará en una carpeta llamada "Data Source", ponemos un nombre y la guardamos en esa carpeta.
  10. Al seleccionar "Guardar" volveremos a la ventana donde pedía escribir la ruta, pero esta vez con al ruta escrita, por tanto, damos clic en "Siguiente" y llegamos a una ventana de Confirmación, donde damos clic en "Finalizar". Con esto volveremos a la ventana donde entramos para agregar la conexión, esta vez con la conexión ya creada.
  11. Seleccionamos la conexión y le damos clic en "Configurar"
  12. Registramos los datos que se nos pide:
    • Server: Es la dirección donde se encuentra su base de datos, si es un"servidor local, la direccion es "Localhost".
    • User: El usuario que nos permite el acceso a la base de datos.
    • Password: La contraseña del Usuario.
    • Database: En este lugar debemos escribir el nombre de la base de datos a la que nos vamos a conectar.
  13. Para confirmar que todo está correcto, clic en "Test".
  14. Con esto ya tenemos creada nuestra conexión, ahora vamos a usarla. Entramos a nuestra BD en Access y vamos al menú Base de Datos, abajo aparecerán las tablas de la base de datos, Clic derecho en la primera y seleccionamos Exportar/Base de Datos OBDC.
  15. Al hacer esto, nos preguntara el nombre con el que guardaremos la tabla en MySQL, escribimos el mismo nombre. En esta ventana se le da el nombre a la tabla, con este nombre se guardara en MySQL y damos clic en "Aceptar".
  16. Aparecerá una ventana donde debemos escoger que conexión usaremos, seleccionamos la conexión que creamos y clic en "Aceptar", una ventana de confirmación nos avisará que la tabla fue migrada con éxito.
  17. Repetimos el proceso con todas las tablas, el contenido de éstas se traspasará automáticamente junto con ellas, no asi las relaciones o los tipos de claves.

Al terminar con nuestras tablas ya tenemos nuestra BD migrada de Access a MySQL.

martes, 20 de marzo de 2012

Hola a todos, aunque no sé si habrá alguien leyendo este blog. Hoy es martes 20 de marzo del 2012, día en el que inauguro mi blog. En el que intentaré escribir todos los conocimientos que voy adquiriendo a partir de ahora en la rama de la informática, sentada desde mi humilde puesto laboral espero poder ir actualizando lo que voy aprendiendo en el día a día, por si pudiera servir de ayuda a programadores que comienzan adentrarse en este mundo de los lenguajes de programación, lenguajes de modelado, diseño y otras tantas temáticas que abordan el amplio caudal de la informática.
Na-vega conmigo y forma parte de esta matrìca dinámica del conocimiento que hoy es mi mundo.