Blog de Promineo Studios http://promineostudios.com es Diseño y Desarrollo Web, Tecnologías Web, efectos visuales y mucho más Google Font. Usa cualquier fuente libre en tu web http://promineostudios.com/blog/articulo/google-font-usa-cualquier-fuente-libre-en-tu-web jue, 20 may 2010 13:53:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/google-font-usa-cualquier-fuente-libre-en-tu-web La diseñadores web han lidiado desde siempre con la lacra de no tener la suficiente libertad a la hora de elegir las tipografías de una página web. Se limitaban a optar por fuentes estándar, como arial, trebuchet, times... o a usar apaños con javascript o flash para incluir alguna tipografía que los sistemas no tenían por defecto.

Con CSS3 llegó @font-face, una propiedad muy útil para definir en una página web fuentes que el usuario no tenga instaladas en su sistema. Si bien CSS3, y por consiguiente @font-face, sólo está implementada en los navegadores más modernos (Safari 3+ y 4+, Firefox 3.5, e Internet Explorer 7+). Desde mi punto de vista no es una solución a corto plazo, pero sin duda se terminará implantando cuando la mayoría de usuarios cuenten con versiones actualizadas de sus navegadores.

Google al rescate

Ayer Google presentó su directorio de fuentes libres que podremos definir en cualquiera de nuestras web. La cantidad de fuentes aún es limitada, pero con total seguridad que ira creciendo con el tiempo. Qué tal si vemos su uso:

Comenzaré con la manera más limpia de utilizar Google Font. Abrimos nuestra hoja de estilos e introducimos un par de líneas para importar y definir la fuente "Reenie Beanie":

@import url('http://fonts.googleapis.com/css?family=Reenie+Beanie');
 
h1 {
font-family: 'Reenie Beanie', "Trebuchet MS", Tahoma, Arial;
}
 

La otra manera, que considero menos limpia y elegante, es introduciendo una línea en nuestro documento HTML y definir la fuente en nuestro CSS.

link href="http://fonts.googleapis.com/css?family=Reenie+Beanie" rel="stylesheet" type="text/css" /
h1 {
font-family: 'Reenie Beanie', "Trebuchet MS", Tahoma, Arial;
}

Para usar otra fuente debemos sustituir el valor del parámetro “family” de la url de importación, Reenie+Benie en éste ejemplo, por el de la fuente que vamos a usar y posteriormente definirla. Por supuesto puedes usar fuentes en cualquier otra etiqueta, clase o identificador.

Mi blog personal puede servir de ejemplo. He usado esta técnica para mejorar el formato de los texto. yonerocha.net

Actualización: He leído en unijimpe que podemos importar varias tipografías en una misma llamada de la API, separando el nombre de cada fuente con "|".

Ejemplo: http://fonts.googleapis.com/css?family=Lobster|Cantarell

]]>
PHPMailer. Enviar correos electrónicos con PHP http://promineostudios.com/blog/articulo/phpmailer-enviar-correos-electronicos-con-php jue, 13 may 2010 12:06:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/phpmailer-enviar-correos-electronicos-con-php Habitualmente, para el envío de correo con PHP se utiliza la función mail(), integrada en el propio lenguaje. Sí bien la función cumple con su cometido, son notorias sus limitaciones.

PHPMailer es una clase que cubre las carencias de mail() y facilita el uso de propiedades avanzadas en el envío de correos. Por ejemplo, permite ficheros adjuntos o utilizar un servidor SMTP con autenticación. Gracias a esta última característica podremos enviar correos desde nuestra cuenta Gmail y evitar la instalación de un servidor de correo.

El primer paso para usar PHPMailer es descargar la clase de sourceforge. Nos encontraremos con dos archivos que debemos instanciar en nuestro código, class.phpmailer.php con la clase y class.smtp.php, opcional para utilizar servidores SMTP.

Empezamos con un ejemplo simple usando Sendmail:

require 'class.phpmailer.php';
 
$mail = new PHPMailer();
 
$mail->IsSendmail();//usamos Sendmail, también podemos usar mail() con isMail()
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

Enviar un correo usando Gmail y PHPMailer:

require 'class.phpmailer.php';
require 'class.smtp.php'; //incluimos la clase para envíos por SMTP
$mail = new PHPMailer();
 
 
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->SMTPAuth = true;
$mail->SMTPSecure = "ssl";
$mail->Host = "smtp.gmail.com"; //servidor smtp
$mail->Port = 465; //puerto smtp de gmail
$mail->Username = 'email@gmail.com';
$mail->Password = 'tucontraseña';
 
$mail->FromName = 'Juan Palomo';
$mail->From = 'remitente@dominio.com';//email de remitente desde donde se envía el correo.
 
$mail->AddAddress('destinatario@dominio.com', 'Destinatario');//destinatario que va a recibir el correo
 
$mail->AddCC('copia@dominio.com', 'copia');//envía una copia del correo a la dirección especificada
 
$mail->Subject = 'Asunto de email';
 
$mail->AltBody = 'cuerpo del mensaje en texto plano';//cuerpo con texto plano
 
$mail->MsgHTML('Mensaje con HTML');//cuerpo con html
 
$mail->AddAttachment("archivo.zip");//adjuntos un archivo al mensaje
 
if(!$mail->Send()) {//finalmente enviamos el email
   echo $mail->ErrorInfo;//si no se envía correctamente se muestra el error que ocurrió
} else {
   echo 'Correo enviado correctamente';
}
 

 

]]>
Imprimir array - matriz PHP http://promineostudios.com/blog/articulo/imprimir-array-matriz-php vie, 29 ene 2010 11:18:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/imprimir-array-matriz-php Puedes imprimir los valores almacenados en un array con la función print_r(). Nos devolverá los valores de la matriz en una estructura legible.

$equipos = array ('Real Madrid', 'Tenerife', 'Barcelona', 'Valencia'); 
echo <pre>'.print_r ($equipos).'<pre>';

Salida:
Array
(
    [0] => Real Madrid
    [1] => Tenerife
    [2] => Barcelona
   [3] => Valencia

)

También puedes usar la función implode para imprimir los valores en orden de aparición de un array siguiendo un patrón de separación entre elementos, en este ejemplo la coma.

echo implode (",", $equipos);

Salida:

Real Madrid, Tenerife, Barcelona, Valencia

Aclaración: Implode() sólo funciona con matrices unidimensionales.

 

]]>
Cortar una cadena de caracteres sin partir la última palabra http://promineostudios.com/blog/articulo/cortar-una-cadena-de-caracteres-sin-partir-la-ultima-palabra mié, 21 oct 2009 22:50:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/cortar-una-cadena-de-caracteres-sin-partir-la-ultima-palabra En PHP tenemos multitud de funciones para tratar cadenas de caracteres. Una de ellas, substr, nos devuelve un fragmento o porción de la cadena que estamos manipulando. El problema viene cuando queremos que no se  corte la última palabra de la subcadena que obtenemos. Ninguna función de manipulación de cadenas es capaz de identificar una palabra y no cortarla, pero podemos utilizar una combinación de éstas funciones para obtener una subcadena sin cortar palabras por la mitad.

Con el código que describo a continuación podéis cortar una cadena, dado un número de caracteres, sin partir la última palabra de la subcadena resultante.

$texto = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$cantidadCaracteres = 25;
 
//1.- Obtenemos un fragmento de la cadena desde el índice cero hasta la longitud dada por la variable$cantidadCaracteres
$subcadena = substr($texto,0,$cantidadCaracteres);
 
//2.- strrpos encuentra la posición de la ultima aparición de un caracter, en éste caso el último espacio en blanco de la cadena que obtenemos con substr
$indiceUltimoEspacio = strrpos($subcadena," ");
 
//3.- Con substr obtenemos una subcadena de $texto desde la posicion inicial hasta la posición del último espacio que nos interesa
echo substr($texto,0, $indiceUltimoEspacio);
//salida por pantalla-> Lorem ipsum dolor sit

Y ahora el mismo código  en una sola línea:

$texto = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.';
$cantidadCaracteres = 25;
echo substr($texto,0,strrpos(substr($texto,0,$cantidadCaracteres)," "));

Este aporte no es ni mucho menos mío, debemos darle las gracias a Javier Cerezo que dejo  un comentario en un artículo de la página programacionweb.net con este tip. 

]]>
Todas las versiones de Internet Explorer en un mismo PC http://promineostudios.com/blog/articulo/todas-las-versiones-de-internet-explorer-en-un-mismo-pc lun, 12 oct 2009 16:05:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/todas-las-versiones-de-internet-explorer-en-un-mismo-pc Un diseñador web, por desgracia, no le basta con que su código CSS y HTML sea válido. Gracias al mal hacer de Microsoft con su navegador Internet Explorer debe perder muchísimas horas parcheando su código para que éste se vea de igual manera en navegadores que si respetan los estándares web (Safari, Firefox, Chrome...) como en los chapuceros IE de Microsoft.

Evidentemente, debemos tener instaladas las versiones más utilizadas de IE para poder probar nuestros diseños web. El problema es que no puedes tener varias versiones instaladas en la misma máquina, no por defecto. La solución viene de la mano de un paquete de software en el que vamos a encontrar cada una de las versiones del dichoso navegador, Internet Explorer Collection.

Internet Explorer Collection contiene las siguientes versiones de IE:

  • Internet Explorer 1.0 (4.40.308)

  • Internet Explorer 1.5 (0.1.0.10)

  • Internet Explorer 2.01 (2.01.046)

  • Internet Explorer 3.0 (3.0.1152)

  • Internet Explorer 3.01 (3.01.2723)

  • Internet Explorer 3.03 (3.03.2925)

  • Internet Explorer 4.01 (4.72.3110.0)

  • Internet Explorer 5.01 (5.00.3314.2100)

  • Internet Explorer 5.5 (5.51.4807.2300)

  • Internet Explorer 6.0 (6.00.2800.1106)

  • Internet Explorer 6.0 (6.00.2900.2180)

  • Internet Explorer 7.0 (7.00.5730.13)

  • Internet Explorer 8.0 (8.00.6001.18702)

]]>
Adobe CS5 http://promineostudios.com/blog/articulo/adobe-cs5 mar, 29 sep 2009 13:06:00 GMT Isidro Quintana http://promineostudios.com/blog/articulo/adobe-cs5

ps_cs5_sSi  hay un paquete de software al que soy asiduo ese es sin duda el paquete creative suite de Adobe, recuerdo como cuando meses antes de salir la CS4 salían bulos y verdades sobres las novedades de esa versión. Para ahorrarnos todo eso Adobe lanza un blog con todas las novedades que van aconteciendo sobre la nueva suite CS5, adobe como siempre al pie del cañón con novedades siempre la mar de interesantes. Por cierto en Abril del 2010 ya podremos disfrutar de la nueva suite.

adobe-flash-cs5_620

 

]]>
MySQL + PHP: Recuperar valores de un campo ENUM http://promineostudios.com/blog/articulo/mysql-php-recuperar-valores-de-un-campo-enum vie, 18 sep 2009 13:02:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/mysql-php-recuperar-valores-de-un-campo-enum Entre los distintos tipos de datos que puede manejar MySQL se encuentran las enumeraciones, definidas con la palabra clave enum. Una lista de enumeradores, como se denomina un enum, no es más que un conjunto de constantes con nombre que definimos en la estructura de nuestra base de datos.

Si has usado un enum en un campo de una tabla, seguro que has querido extraer todos los valores que componen la lista de enumeradores y, posiblemente, no has sabido como hacerlo. He aquí la solución usando PHP:

//Asumo que ya estamos conectados a la base de datos
//Consultamos todos los posibles valores de la columna ENUM
$consulta = $this->db->prepare('SHOW COLUMNS FROM nombreTabla LIKE "nombreCampoEnum"');
$consulta->execute();
//Obtenemos los resultados de la consulta
$array = $consulta->fetch(PDO::FETCH_ASSOC);
//expresión regular que obtiene los valores de enum
$array = explode("','",preg_replace("/(enum|set)\('(.+?)'\)/","\",$array['Type']));
print_r($array);

La clave de todo está en la línea en que llamamos a la función explode(). Mediante una expresión regular analizamos la variable $array y extraemos los valores del enum.

P.D: Para los más despistados... Uso para la consulta a la base de datos PHP Data Objects.

 

 

]]>
¿Cómo contar el número de líneas de código fuente de nuestros proyectos? http://promineostudios.com/blog/articulo/como-contar-el-numero-de-lineas-de-codigo-fuente-de-nuestros-proyectos dom, 30 ago 2009 15:20:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/como-contar-el-numero-de-lineas-de-codigo-fuente-de-nuestros-proyectos La respuesta tiene nombre propio, slccount. Un pequeño programa para GNU/Linux que, como casi siempre, podemos descargar desde los repositorios de Ubuntu. Para eso tenemos que escribir el siguiente comando en la consola:

sudo apt-get install sloccount

Una vez instalado sólo debemos llamar a sloccount pasando la ruta de nuestro proyecto, yo lo he usado en puskasCMS que está escrito en PHP5, pero se puede usar con otros muchos lenguajes de programación.

sloccount /ruta_del_código_fuente

Además, nos proporciona una estimación económica de nuestro proyecto, eso sí, un tanto desorbitada desde mi punto de vista.

Total Physical Source Lines of Code (SLOC) = 57.868

Development Effort Estimate, Person-Years (Person-Months) = 14,18 (170.13)

Estimated Average Number of Developers (Effort/Schedule) = 9,66

Total Estimated Cost to Develop = $ 1.915.147 (average salary = $56.286/year)

¡Mi gestor de contenidos tiene casi 60.000 líneas de código! Tengo que hacer más vida social...

]]>
Instalar Java Runtime Environment (JRE) en Kubuntu 9.04 http://promineostudios.com/blog/articulo/instalar-java-runtime-environment-jre-en-kubuntu-904- mar, 25 ago 2009 11:27:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/instalar-java-runtime-environment-jre-en-kubuntu-904- Si tienes que instalar Java Runtime Environment porque alguna aplicación tira de él, en mi caso lo necesitaba para instalar Aptana, es tan sencillo como abrir una consola de comandos, Konsole en Kubuntu, y escribir el siguiente comando::

sudo apt-get install sun-java6-jre sun-java6-plugin sun-java6-fonts

java_firefox_ubuntu

Fuente de la noticia: linuxind

]]>
Include(), include_once() VS require(), require_once() http://promineostudios.com/blog/articulo/include-includeonce-vs-require-requireonce mar, 11 ago 2009 16:59:00 GMT Yoné Rocha http://promineostudios.com/blog/articulo/include-includeonce-vs-require-requireonce PHP ofrece cuatro declaraciones para insertar código de un archivo externo en nuestro archivo fuente:

  • include "archivo"
  • include_once "archivo"
  • require "archivo"
  • require_once "archivo"

Cualquiera de estas declaraciones es sustituida por el código del archivo que se invoca. Hasta ahí todos los que están acostumbrados a desarrollar en PHP llegan, el problema viene cuando no sabes donde se debe usar una u otro tipo de declaración, es eso lo que vamos a intentar aclarar en este artículo, las diferencias entre las declaraciones de inclusión.

La declaración require() sustituye el código antes de que se ejecute el script, mientras que con include() la sustitución se realiza en tiempo de ejecución. Una gran diferencia pero no la única. Si usas include() e intentas incluir, valga de redundancia, un archivo que no existe te devolverá un warning y el script se seguirá ejecutando. Con require() en caso de no encontrar el archivo que se requiere te devolverá un error fatal y la ejecución del script se detendrá.

En mis proyectos suelo usar require() para el núcleo de la aplicación que lleva el peso de toda la lógica, así me aseguro que si por alguna razón no se incluye un archivo no se seguirá ejecutando, evitando de esta manera fallos más importantes. Para incluir archivos html como un pie de página si uso include(), ya que si estos archivos no se cargan no impide el correcto funcionamiento de la aplicación.

Tanto require_once() como include_once() funcionan de la misma manera que sus homónimos nombrados anteriormente, con una única salvedad. Aseguran que el código del archivo es agregado una sola vez, evitando redeclaraciones de variables o funciones. Hay que tener en cuenta que require_once e include_once son más pesadas de procesar que require e include, por lo que debemos usarlas con prudencia.

Referencias: Ali Hartono's Diary | nachox

 

]]>