2009-10-30

18 consejos para aumentar tu motivación

1. No te sobrecargues de trabajo

Trabajar demasiado es una forma segura de perder cualquier motivación. Trabajar constantemente demasiado te pondrá en una ruta, de la que puede resultar muy difícil salir. Utiliza una timeline (linea de tiempo) con cada proyecto para asegurarte que tienes el tiempo necesario para cada trabajo.

2. Ten tu propio ritmo

No intentes condensar demasiado trabajo en un sólo día. Hacer eso, no sólo quebrará tu motivación sino que también dará como resultado trabajos inaceptables. Crea un esquema diario razonable y haz lo posible para cumplirlo.

3. Programa y vence tus tiempos límites

Una vez que tengas tu línea de tiempo y el esquema diario en su lugar, establece una meta para vencer tu plazo. Muchas personas tienen su máximo de productividad antes de llegar en una fecha límite y hasta la fecha límite la productividad que tuvieron era mínima. Utiliza varios plazos para cada proyecto y así obtener beneficios al completarlos antes de tiempo.

4. Obtén un buen comienzo

Conseguir un buen comienzo para un proyecto contribuirá a mantener la motivación durante toda la duración del mismo. Haz tu mejor esfuerzo para tener un sólido comienzo de cada proyecto.

5. Desprecia cualquier interrupción

Email, Twitter, mensajería instantánea y otras interrupciones son tan desventajosas como beneficiosas.

6. Haz buen uso de tu tiempo libre

Esto es fundamental. Si eres capaz de disfrutar verdaderamente tu tiempo libre, más feliz estarás al volver al trabajo.

7. Cambia el ambiente de trabajo

Es bueno cambiar de ambiente laboral; ir a algún café o librería una vez a la semana para trabajar puede ser una idea genial (siempre que puedas, claro).

8. Posponlo si es posible

Si tienes un mal comienzo con un proyecto, posponlo si es posible. Si intentas con un proyecto que te traba no tendrás resultados favorables. Mejor seguir con otra cosa y volver a este trabajo en otro momento.

9. Sigue tu progreso

Después de trabajar por un tiempo en un mismo proyecto, es fácil perder el rastro de tu progreso. Por eso es útil mantenerse al tanto del progreso total y asegurarse de notar cuándo llegas a los puntos deseados.

10. Toma descansos productivos y vacaciones

Un cambio de escenario por un tiempo hace maravillas en la motivación personal. Te refrescan y te ponen la mente lista para trabajar nuevamente.

11. Trabaja con otras personas

Si te estancas, busca la opinión o ayuda de otros. Incluso la ayuda de gente completamente ajena a la industria puede brindarte una perspectiva nueva sobre algo que estabas pasando por alto.

12. Utiliza otras aproximaciones

Dar una mirada al trabajo de otros te puede ayudar a ver tus proyectos desde otro ángulo o perspectiva.

13. Diviértete

Una de las mejores formas de mantenerse motivado es divertirse. Convierte tu trabajo en algo divertido añadiéndole algún giro, haciéndolo competitivo o poniendo a otros en acción.

14. Almuerza o come algún snack

Comer no sólo te da un descanso sino que te brinda la energía necesaria. También es fundamental mantenerse hidratado.

15. Haz ejercicios

Los beneficios del ejercicio físico son interminables. Hacer ejercicio te permitirá no solo motivarte, sino liberar endorfinas, desintoxicarte y desestresarte.

16. Deshazte del peso muerto

Si algún cliente es demasiado molesto y no encuentras la forma de mejorar la relación, deshazte de él. No hay cantidad de dinero suficiente por la que valga la pena volverse loco y odiar el trabajo.

17. Date recompensas

Recompensar tu trabajo duro con algo que te guste es una de las formas más eficientes de mantener tu productividad y motivación al máximo.

18. Mantén tu cabeza en alto

Siempre hay momentos en que sientes que necesitas tirar la toalla. Pero la realidad es que los que renuncian nunca ganan. Cada día es una oportunidad nueva y depende de ti dar lo mejor. Aprende de tus errores y no dejes que las cosas te superen. Si lo lográs, superarás todo.

Fuente: Let’s Count The Days

2009-10-29

Manuel en castellano de CodeIgniter y otro sitio de interes

Manual en castellano de CodeIgniter en formato PDF el mas complreto que encontre hasta el momento.
Link de descargas
Link director al PDF comprimido de CodeIgniter en castellano

Sitio con un directorio todo relacionado con CodeIgniter

Video tutorial en castellano de CodeIgniter en castellano tambien.

Videos en castellano:
Introduccion a Codeigniter:




Videos en castellano:
Ajax con Jquery en Codeigniter




Videos en castellano:
Creación y validación de formularios con Codeigniter


2009-10-28

Internacionalización y Localización (i18n – l10n): Cómo localizar una web en php

i18n y l10n

Internet no conoce de idiomas, o mejor dicho, conoce todos los idiomas. A nadie escapa que ofrecer una web multi-idioma derriba todas las barreras idiomáticas que podrían impedir a un visitante acceder a nuestra web y multiplica nuestras posibilidades de establecer lazos con clientes de todo el mundo.

Cualquier proyecto web en el que se embarque debería contemplar desde el mismo principio la internacionalización de los contenidos, incluso en el caso de que no vayan a ser localizados desde un principio. De este manera, cuando llegue el momento, evitará tener que tirar todo el trabajo a la basura y empezar de cero.

Existen dos conceptos básicos internacionalización y localización que aunque similares no tienen el mismo significado:

  • La internacionalización es la capacidad de una web de poder ser traducida.
  • La localización es el proceso de traducción de una página.

Para que una página web pueda ser localizable es indispensable que presente una estructura modular en la que el contenido sea independiente de la presentación.

A la hora de representar los diferentes idiomas lo más lógico es utilizar la codificación ISO639 que identifica de manera inequívoca todos los lenguajes reconocidos con códigos de 2 y 3 caracteres. Así por ejemplo, el idioma español se representa como "ES", el francés como "FR", el alemán "DE", etc. En la siguiente página tiene a su disposición todos los códigos ISO.

Tenga en cuenta que esa nomenclatura sólo es válida para realizar localizar idiomáticamente una web. Si además de los textos, quisiéramos localizar unidades monetarias, fechas, sistema de pesos y medidas... lo que se define como cultura, el convenio RFC3066 nos indica que utilicemos un código compuesto por el código de idioma ISO698 seguido de un guión y el código de país ISO3166. Por ejemplo podríamos tener para tres países en los que se habla español pero tienen diferente cultura los siguientes códigos: es-ES(España), es-AR (Argentina), es-UY(Uruguay).

¿Tal vez se haya preguntado de dónde vienen las abreviaturas i18n y l10n? La respuesta es sencilla a la par que curiosa pues se trata de una especie de jeroglífico: Internacionalizació(18 letras)N y Localizació(10 letras)N

Nota:

Para una mejor comprensión del artículo le recomiendo que se descargue el código de ejemplo que he preparado y que instale en su equipo la aplicación poedit.

Cómo saber cuál es el idioma de mi visitante

Una manera sencilla y bastante certera es comprobar cual es el idioma en el que nuestro visitante tiene configurado su navegador. Esto lo podemos conocer a través de la variable de servidor $_SERVER['HTTP_ACCEPT_LANGUAGE'] que nos devuelve en forma de cadena de texto la información contenida en la cabecera Accept-Language de la petición HTTP de nuestro visitante. Sin embargo, no es un método infalible, pues podría darse el caso de que el idioma del navegador no se corresponde con su idioma deseado.

Otra opción un poco más complicada es intentar determinar el país de origen a través de una geolocalización de la IP de nuestro visitante. Esto es factible pues existe una gran BD donde se incluyen todas las IP de los distintos ISPs y el país en el que se encuentra. Encontrará muchas referencias sobre geolocalización en google si le pregunta.

Utilicemos un método u otro, siempre sera indispensable permitir al usuario que elija el idioma en el que quiere visualizar la página. La elección del usuario debe ser recordada durante el resto de la navegación e incluso la siguiente vez que vuelva a la página. Esto lo podemos conseguir almacenando el lenguaje elegido en una variable se sesión o en una Cookie.

Localizando con el paquete PHP-gettext

En PHP existen diversas maneras de localizar una web. Podemos recurrir a constantes, variables, arrays... la mecánica es básicamente la misma y se resume en sacar las cadenas de texto a un fichero y acceder a ellas en el momento de ejecución de la página. Estos mecanismos de localización pueden resultar bastante engorrosos para el desarrollador, poco eficientes para el usuario y enormemente incómodos para el traductor, por lo tanto mi recomendación es que sólo los utilice para webs muy simples.

El mecanismo de localización que ofrece PHP de manera la nativa es a través de la función gettext(). Esta función presenta algunos problemas derivados de su dependencia respecto al soporte del idioma que este instalado en el servidor web. Por otra parte, su inicialización requiere una serie de llamadas a funciones que pueden parecen un tanto caprichosas. Por este motivo voy a mostrarle el que a mi juicio es el mecanismo de localización más recomendable hoy en día PHP-gettext.

El paquete PHP-gettext permite utilizar ficheros .mo para traducir cadenas y funciona de manera independiente a la función gettext nativa de PHP. Además Ofrece la posibilidad de de cachear en memoria las cadenas lo que agiliza de manera importante las búsquedas. Otro aspecto importante es que las traducciones de pueden gestionar cómodamente con aplicaciones como poedit.

PHP-gettext se ha convertido por su sencillez, flexibilidad y eficiencia en el estándar que utilizan muchos desarrolladores, de hecho tiene el aval de ser el mecanismo de internacionalización que utilizan aplicaciones tan extendidas como Wordpress.

Para poder comenzar a utilizar este paquete basta con descargarlo en nuestro entorno de desarrollo e incluir en nuestra página los archivos que contienen todas las clases y funciones que necesitamos:

include "php-gettext-1.0.7/streams.php";

include "php-gettext-1.0.7/gettext.php";

Deberemos indicar también el charset correspondiente al lenguaje. En la mayor parte de lenguajes occidentales la elección suele ser UTF-8.

header("Content-type: text/html; charset=UTF-8");

La codificación UTF-8 presenta algunas ventajas que merece la pena resaltar:

  • La práctica totalidad de navegadores soporta UTF-8.
  • UTF-8 nos evita tener que reemplazar caracteres típicos por sus entidades html.
  • Se simplifica la publicación de nuestros contenidos en otros formatos como RSS, clientes CML-RPC de escritorio, etc...
  • La migración de una base de datos en UTF-8 a otro sistema es más transparente.

Como ya comentamos antes podemos identificar y manejar el idioma de nuestros visitantes utilizando variables de sesión. En primer lugar recogeremos con el método GET la variable language para saber si contiene el idioma elegido por el usuario. Si no existe esta variable, se comprueba si la variable de sesión language contiene ya el idioma del usuario. En el caso de que la página se haya cargado por primera vez y la variable de sesión no contenga información alguna, se inicializaron un idioma por defecto que en este caso será el español (es_es). El codigo sería similar a este:

session_start(); //inicialización de las variables de sesión

if ($_GET['language']) $_SESSION['language'] = $_GET['language']; //Recogemos y guardamos el lenguaje de la query si procede

if (!array_key_exists('language',$_SESSION))$_SESSION['language'] = 'es_es'; //Inicializamos la sesión con el lenguaje por defecto

Para cargar en memoria el fichero con los textos correspondiente al idioma basta comprobar si existe el fichero y cargarlo en la cache. En el siguiente punto veremos con un poco más de detalle los ficheros .mo

if (file_exists("locale/".$_SESSION["language"]."/LC_MESSAGES/messages.mo")) { $gettext_cache = new gettext_reader( new CachedFileReader("locale/".$_SESSION["language"]."/LC_MESSAGES/messages.mo"));}

A la hora de manejar las traducciones podemos utilizar directamente las funciones translate y ngettext que nos ofrece el paquete, pero lo más cómodo es crear un par de alias de la siguiente manera:

//Alias para manejar traducciones

function __($my_text) {

global $gettext_cache;

if (is_null($gettext_cache)) return $my_text;

else return $gettext_cache->translate($my_text);}

//Alias para manejar traducciones con plural

function _ngettext($my_text1,$my_text2,$n) {

global $gettext_cache;

if (is_null($gettext_cache)) if ($n>1) return $my_text2; else return $my_text1;

else return $gettext_cache->ngettext($my_text1,$my_text2,$n);}

Nota: Es necesario configurar poedit para que pueda reconocer correctamente los alias que hemos creado. En Catálogo>Opciones>en la pestaña palabras clave incluya estas dos entradas:

  • __
  • _ngettext:1,2

El siguiente paso para poder internacionalizar una web es identificar en el código fuente todas las cadenas que son localizables utilizando las funciones alias que se han creado:

Por ejemplo un código php sin localizar podría ser así:

El mismo código localizado presentaría el siguiente aspecto::

Los archivos .mo

Los archivos con los textos correspondientes a cada idioma tienen la extensión .mo. Las utilidades de traducción tipo Poedit automatizan el proceso para generar y editar un fichero .mo a partir de una web internacionalizable. A nivel interno el proceso que se desencadena es el siguiente:

  • Se ejecuta la función xgettext en el código fuente de una web para detectar las cadenas que requieren de traducción y las incluyen dentro de un fichero plantilla .pot.
  • A continuación a partir de la plantilla se crea un fichero .po por cada idioma que puede deben ser editados para realizar las traducciones.
  • Finalmente se compila cada archivos .po con msgfmt y se genera un fichero binario .mo con toda la información necesaria para traducir la web.

Los ficheros se pueden ubicar en la carpeta que prefiramos aunque si queremos seguir la pauta general la estructura de carpetas sería la siguiente:

\locale\(ISO698)_(ISO3166)\lc_messages\messages.mo

\locale\es_es\lc_messages\messages.mo

\locale\es_ar\lc_messages\messages.mo

\locale\es_uy\lc_messages\messages.mo

nota: En Poedit es necesario configurar las rutas correspondientes a los archivos .mo. Le recomiendo la lectura del siguiente manual donde se explican de manera muy clara todos los pasos para configurar y utilizar la aplicación.

Problemas y soluciones en las formas plurales

Una vez que comencemos a traducir nuestra web, nos enfrentaremos a diversos problemas relacionados con la diversidad y disparidad de idiomas que existen. Un caso es la forma es la que se crean las formas plurales en cada idioma. Un ejemplo podría ser la palabra rebanada que como sabemos su plural en castellano se construye añadiendo una s:

Hay 0 rebanadas de pan

Hay 1 rebanada de pan

Hay 2 rebanadas de pan

En inglés el plural de la palabra rebanada, loaf, no se construye añadiendo una s, si no que es necesario sustituir la f por v y añadir el sufijo es, leaves:

There are 0 bread loaves

There is 1 bread loaf

There are 2 bread loaves

En francés en cambio se considera que cero cosas no es plural. por lo tanto tendríamos lo siguiente:

l y a 0 baguette

Il y a 1 baguette

Il y a 2 baguettes

Para facilitar el manejo de las particularidades de las formas plurales en cada lenguaje podemos utilizar la función ngettext($single, $plural, $number) que nos devuelve una cadena en singular o plural en función del valor de tercer parámetro.

printf(_ngettext("There is %d bird in the sky","There are %d birds in the sky", $number_birds),$number_birds);?>

Nota: Es necesario configurar poedit para que pueda trabajar correctamente con las formas plurales y el alias _ngettex:

  • En la pestaña opciones deberá configurar la formas plurales que se corresponde con el lenguaje, por ejemplo para el lenguaje español tendríamos la siguiente forma de plural: nplurals=2; plural=n == 1 ? 0 : 1; Puede ver todas las formas de plurales en la siguiente página.

En la siguiente página puede leer más información sobre cómo configurar poedit.

Un ejemplo completo

Tal vez todo esto le haya resultado un poco complejo de digerir, en realidad una vez entendida la dinámica de la localización, el desarrollo de una web no es mucho más complejo que trabajar sin ella. En cualquier caso para facilitarle la comprensión de cómo localizar una web en php he preparado un ejemplo funcional de una página localizada en tres idiomas.

He incluido diferentes tipos de cadena para que pueda conocer las diferentes problemáticas que podrá encontrarse en un caso real. También he incluido un ejemplo de localización de imágenes.

Como siempre puede descargarse el código, analizarlo, trocearlo y utilizarlo libremente en sus proyectos.

A la memoría de Jon García Sáinz.

Fuente:hellogoogle.com

KOHANA solo PHP5 y es el susesor de Codeigniter

KOHANA es un FrameWork que es un derivado de Codeigniter. Pera el mismo esta 100% escrito para que corra en PHP 5 nada.
Ya esta por la verson 3.0

Kohana es un framework para PHP 5 que implementa el patrón de Modelo Vista Controlador. Sus principales objetivos se basan en ser seguro, ligero, y fácil de utilizar.

Características

  • Extremadamente seguro
  • Extremadamente ligero
  • Mínima curva de aprendizaje
  • Utiliza el patrón MVC
  • Compatibilidad UTF-8 100%
  • Arquitectura Loosely coupled
  • Extremadamente sencilla de extender

Tecnología

  • PHP 5 OOP estricto
  • Sencilla abstracción de base de datos mediante librerías SQL
  • Múltiples drivers de sesión (nativo, base de datos, y cookie)
  • Un Poderoso gestor de eventos que permite pequeñas modificaciones dinámicamente
  • Originalmente basado en CodeIgniter

¿Que hace diferente a Kohana?

Aunque Kohana reutiliza muchos patrones de programación y conceptos comunes, hay algunas cosas que lo hacen destacar:

  1. Guiado por la comunidad no por una compañía privada. el desarrollo de Kohana esta guiado por un equipo de personas que necesitan un framework para soluciones rápida y de gran potencia.
  2. PHP 5 OOP estricto. Ofrece una gran cantidad de beneficios: protección de visibilidad, carga de clases automática, overloading, interfaces, abstractas y singletons.
  3. Extremadamente ligero. Kohana no tiene dependencias de extensiones PECL o librerías PEAR. Evita las librerías de tipo monolítico en favor de soluciones optimizadas.
  4. GET, POST, COOKIE, y SESSION funcionan tal y como se espera. Kohana no limita el acceso a los datos globales, a la vez que ofrece filtrado y protección XSS.
  5. Auto carga de clases real. Auto carga las clases bajo demanda, en el mismo momento que sean requeridas por tu aplicación.
  6. Sin conflictos de espacios de nombre. Todas las clases tienen su propio sufijo para permitir nombres similares entre componentes, ofreciendo total coherencia en el API.
  7. Los recursos en cascada ofrecen una extensibilidad sin precedentes. Cada una de las partes de Kohana puede ser sustituida o extendida sin editar ningun fichero del sistema base. El sistema de Módulos permite añadir extensiones con múltiples ficheros de manera transparente.
  8. El sistema de drivers en las librerías y la consistencia del API. Las librerías pueden hacer uso de diferentes "drivers" para manejar diferentes API externas de forma transparente. Por ejemplo, se incluyen múltiples sistemas de almacenamiento para las sesiones (base de datos, cookies, y nativa), utilizando en todos los casos el mismo interface. Esto permite el desarrollo de nuevos drivers para las librerías existentes, manteniendo el API consistente y totalmente transparente.
  9. Un gestor de eventos de gran potencia. El sistema de eventos implementa el patrón Observer, lo que permite niveles casi sin limites de personalización.
  10. Ciclo de desarrollo rápido. Un rápido desarrollo tiene como resultado una respuesta rápida a errores y peticiones de los usuarios.

Link Oficial en Español: www.kohanaphp.es
Link Oficial: www.kohanaphp.com

ReduxAuth: librería de login para CodeIgniter

Redux Authedtication es una librería creada para CodeIgniter que nos permite realizar autenticación en nuestro sistema de forma ligera, sencilla y completa en funcionalidade s.
Una gran elección para nuestros proyectos debido a las posibilidades que ofrece al desarrollador.

Entre las características nos encontramos con:

* Registro
* Login y logout
* Recordar contraseña
* Centrado en seguridad
* Grupos de usuarios
* Sistema de baneo

Link de descarga: The Redux Authentication System
Link del autor: www.thepixeldeveloper.com

Otra libreria interesante, es esta para hacer lo mismo con Codeigniter
Link: http://www.noquieroprogramar.com/tag/sistema-de-usuarios/

Optimiza Codeigniter

CodeIgniter es un genial framework, pensado para ofrecer un alto rendimiento, claro está con una óptima configuración.

Como ya hemos comentado en otras ocasiones CodeIgniter cumple perfectamente el fin de cualquier framework, una estructura definida que de soporte a un proyecto web y ayude a que este proyecto sea organizado y desarrollado, veamos los puntos clave a tener en cuenta a la hora de optimizar la configuración de CodeIgniter.

Ver Ejemplo (Benchmark para CodeIgniter)

Modelo Vista Controlador (MVC)

Seguramente hayas oido e incluso utilizado algún MVC (Modelo Vista Controlador), de lo que se trata en este tipo de modelos es de repetirse lo menos posible y hacer una separación entre la lógica de la aplicación y su presentación:

  • El modelo representa la estructura de datos, a menudo con clases que contienen funciones que te ayudan a insertar, eliminar y actualizar la información de la base de datos.
  • La vista es la información que se presenta al usuario, una vista es a menudo una página web en sí misma, pero en CodeIgniter una vista también puede llegar a ser un fragmento de la página web (pie, cabecera, contenido principal, etc…).
  • El controlador sirve de intermediario entre los Modelos y las Vistas, y es el encargado de coordinar la petición y generar la página web.

Teniendo estos tres puntos claros podemos pasar a ver el diagrama de flujo de CodeIgniter.

Diagrama de Flujo de CodeIgniter

Configuración básica de CodeIgniter

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Si existe la cache devuelve el archivo HTML sin pasar por el sistema , ahorrandos la carga que ello conlleva.
  4. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  5. El controlador carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  6. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Configuración avanzada de CodeIgniter con librería Sparks

Sparks es una librería que nos permite solventar dos deficiencias con las que nos podemos encontrar a la hora de afrontar un proyecto basado en CodeIgniter.

1. Mejora la cache que únicamente permite cachear páginas completas.
2. Podremos incluir “vistas” dentro de “vistas”.

Para entender este supuesto tenemos que imaginar que necesitamos que la página tenga un módulo de autentificación, al devolver sólo HTMl sería imposible hacer convivir la cache y el módulo de autentificación, con esta librería solucionamos el problema pero el diagrama de flujo cambia un poco.

Modelo Vista Controlador
  1. El index.php sirve inicializa el nucleo de CodeIgniter.
  2. El enrutador examina la petición HTTP y determina que se debe de hacer.
  3. Seguridad, antes de que se cargue el controlador se filtra los datos enviados para que estos sean fiables.
  4. El controlador comprueba si existe cache, en caso afirmativo la devuelve pero al hacer la comprobación en este punto podemos llegar a pasar datos dinámicos a la vista (podríamos conseguir que funcionará un módulo de autentificación aún con la cache habilitada), si no existe cache carga el modelo, librerias, plugins, helpers y todos los recursos necesarios para satisfacer la petición.
  5. Una vez la Vista está renderizada es enviada al navegador si la cache está habilitada se almacena el resultado en cache para la próxima vez que esta URL sea servida.

Optimizando CodeIgniter

En nuestro caso vamos a partir de una configuración de CodeIgniter + Sparks (ver Diagrama de Flujo 2).

Vamos a ver cuáles son los distintos pasos para llegar a una configuración inicial óptima.

Urls Limpias

Para poder utilizar CodeIgniter con Urls amigables necesitaremos crear un .htaccess con la siguiente configuración:


RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]



# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin

ErrorDocument 404 /index.php

Idioma español

Para poder trabajar con diferentes idiomas que nos faciliten la traducción de cadenas en el sitio debemos crear una carpeta (”spanish”) dentro de “languages” de este modo podremos manejar diferentes cadenas traducidas y establecer por defecto el idioma que más nos convenga.

Configuración de la base de datos

Para interactuar con la base de datos tendremos que añadir los datos de conexión en “/system/application/config/database.php”.

Scaffolding

El scaffolding es un método para construir aplicaciones basadas en bases de datos, esta técnica está soportada por algunos frameworks caso de CodeIgniter (tipo MVC), en el cuál el programador escribe una especificación que describe cómo debe ser usada la base de datos.

Luego el compilador utiliza esa especificación para generar el código que la aplicación usará para crear, leer, actualizar y eliminar registros de la base de datos, esto es conocido cómo CRUD (create, read, update, delete).

Para utilizarlo en CodeIgniter necesitamos una “palabra secreta” que podemos modificar en “/system/apliccation/routes/config.php”.

Librería avanzada para cache

Sparks que nos permite solucionar algunos problemas en aplicaciones que requieren de una estructura de cache más compleja.

Benchmark

Para la fase de desarrollo de la aplicación es muy recomendable mostrar los datos de rendimiento de la aplicación.

CodeIgniter viene muy bien preparado para esta fase de optimización y debugging, Profiler Class, gracias a esta clase podremos mostrar:

  1. Uso de memoria PHP
  2. Carga de clases
  3. Tiempo de ejecución de controladores
  4. Tiempo total de ejecución
  5. Datos de URL
  6. Datos de variables GET
  7. Datos de variables POST
  8. Información de conexión a base de datos
  9. Información de ejecución de consultas

Como siempre se dice una imagen vale más que mil palabras… este sería el resultado de nuestro CodeIgniter perfectamente preparado para comenzar a desarrollar nuestro sitio web.

Ver Ejemplo

Benchmark CodeIgniter

Enlaces Interesantes

Web CodeIgniter
Documentación CodeIgniter
Wiki CodeIgniter
Download CodeIgniter

Fuente: tufuncion.com

2009-10-27

Fuentes seguras para la web: Cómo y cúales son

Un pantallazo sobre las fuentes

Básicamente, hay dos tipos de fuentes: las Serif y las Sans Serif. Las fuentes. Serif son aquellas que tienen líneas finas cruzadas al final de la letra. Las Sans Serif (Francés para “Sin serifs”) son las que no tienen nada al final de cada letra. La fuente Serif más común es Times New Roman y justamente, es la fuente por defecto en la mayoría de los navegadores basados en Windows. Las fuentes Monospaced son aquellas que tienen la misma cantidad de espacio entre ellas para todas las letras.

Una lista de fuentes seguras y más

A continuación les dejamos una lista que incluye todas las fuentes más comunes y el sistema operativo en el que usualmente están. Si bien la mayoría de las máquinas vienen con muchas más tipografías, aquí están las más populares y las que son consideradas universalmente como las más seguras.

Fuentes web seguras y comunes

tablafuentesseguras

*Las marcas verdes muestran las fuentes muy comunes, las amarrillas las no tan comunes pero todas son generalmente aceptadas como seguras para la web.

Las fuentes y el desarrollo web

Al momento de crear la selección de fuente para tu sitio web es fundamental incluir fuentes de respaldo. Es decir, selecciona la fuente que preferirías que todos vieran como la principal y luego incluye algunas de respaldo tales como Century Gothic, Verdana, Arial.

La razón para hacer esto es asegurarse la mayor similitud posible entre tus lectores para que todos obtengan el mismo look y estilo de tu web. Esto también asegura que las fuentes que utilices no romperán tu sitio web porque has utilizando una fuente en la pantalla que es la mitad del tamaño de Verdana, pero como nadie más tiene esa fuente el sitio entero se romperá. Existen ciertas reglas bastante sencillas de seguir para asegurarte que brindas una experiencia universal de tu sitio utilizando estándares web y fuentes seguras.

Fuente: Dustin Brewer

Crea y edita themes o templates con artisteer

Con artisteer podes crear editar los themas o templates de los CMS Drupal, Blogger, DotNetNuke, WordPress y Joomla de manera muy simple.

Link del programa http://www.artisteer.com/

2009-10-24

25 grandes ejemplos de ventanas de inicio de sesión para tu sitio web

20×200

20x200

Haz clic aquí para ingresar al Sitio de 20×200»

61 Pixels

61pixels

Haz clic aquí para ingresar al Sitio de 61 Pixels»

97 Bottles

97bottles

Haz clic aquí para ingresar al Sitio de 97 Bottles»

Adobe Acrobat

acrobat

Haz clic aquí para ingresar al Sitio de Adobe Acrobat»

Gist

beta

Haz clic aquí para ingresar al Sitio de Gist»

Cars

blendue

Haz clic aquí para ingresar al Sitio de Cars»

Chris Woods

chriswoods

Haz clic aquí para ingresar al sitio de Chris Woods»

Devunity

devunity

Haz clic aquí para ingresar al sitio de Devunity»

Five Cent Stand

fivecentstand

Haz clic aquí para ingresar al sitio de Five Cent Stand»

How-R-U

hellohowru

Haz clic aquí para ingresar al sitio de How-R-U»

Laterthis

laterthis

Haz clic aquí para ingresar al sitio de Laterthis»

MailChimp

mailchimp

Haz clic aquí para ingresar al sitio de MailChimp»

MindMeister

mindmeister

Haz clic aquí para ingresar al sitio de MindMeister»

Mmosite

mmosite

Haz clic aquí para ingresar al sitio de Mmosite»

Mochi Media

mochimedia

Haz clic aquí para ingresar al sitio de Mochi Media»

Virtual Paper

myvirtualpaper

Haz clic aquí para ingresar al sitio de Virtual Paper»

Nasi Briyani Lounge

nasibriyanilounge

Haz clic aquí para ingresar al sitio de Nasi Briyani Lounge»

Scrapblog

scrapblog

Haz clic aquí para ingresar al sitio de Scrapblog»

Wufoo

secure

Haz clic aquí para ingresar al sitio de Wufoo»

Storenvy

storenvy

Haz clic aquí para ingresar al sitio de Storenvy»

StrawPoll

strawpollnow

Haz clic aquí para ingresar al sitio de StrawPoll»

Survs

survs

Haz clic aquí para ingresar al sitio de Survs»

Matt

themattinator

Haz clic aquí para ingresar al sitio de Matt»

Us Trendy

ustrendy

Haz clic aquí para ingresar al sitio de Us Trendy»

Vimeo

vimeo

Haz clic aquí para ingresar al sitio de Vimeo»

Fuente: Queness

2009-10-23

Colección de tutoriales, tips y recursos para PHP

Información que todo desarrollador-programador en PHP debe tener a la mano. Interesante artículos sobre como implementar PHP agregando ciertas funcionalidades en nuestras aplicaciones web, además algunos recursos a tener en cuenta y algunos recordatorios-tips.

Tutoriales

Tips

  • substr() usado para acortar texto largos.
    substr('Esta es una cadena de texto demasiado larga, debe ser acortada a 10 caract.', 0 , 10');
  • ucwords() usado para colocar mayúscula a la primera letra de una palabra ó palabras.
    ucwords('esto es un titulo');  output: Esto Es Un Titulo
  • money_format da formato a un número como una cadena de moneda según la localización especificada.
    setlocale(LC_MONETARY, 'en_US'); // Localizacion USA  
    echo money_format
    ('%i', '100') ; // Imprime el número con el código de moneda previo.
    // Output: USD 100
  • array_sum función usada para sumar numeros de un array.
    $cost = array(50, 100, 35.45, 500, 485, 68.75, 4298, 237823, 5.4, 574); // Asegurarse que sean números
    $final_cost
    = array_sum($cost); // suma los numeros de $cost
    echo $final_cost
    ; // Resultado de la suma

Recursos

  • Aplicaciones de escritorio con PHP

    ¿Deseas desarrollar programas de escritorio con PHP? Usa PHP-GTK. Versión reciente 2.0.1.

  • Rápido acceso a la documentación de funciones PHP con ShortWaveApp

    Agrega ShortWaveApp a tus marcadores/favoritos de tu navegador, cuando accedas a éste se mostrará una ventanita donde podrás escribir el nombre de una función PHP y te mostrará documentación relacionada con esa función. Útil para documentarse sobre las funciones de PHP.

  • Editores de código PHP

    Populares editores de textos-código PHP revisados por el equipo de php-editors.com.

  • Foros de PHP

    Un lugar para los desarrolladores PHP. TalkPHP contiene artículos escritos por desarrolladores con experiencia, secciones de ayuda y debates entre programadores PHP.

  • PHP sitio oficial

    PHP.net es el mejor sitio sobre PHP. Acá encontraremos documentación oficial sobre este lenguaje de programación.

  • MySQL sitio oficial

    Al igual que PHP.net, MySQL.com es el lugar ideal para documentarnos sobre este administrador de base de datos OpenSource.

  • PHPMailer

    PHPMailer ofrece una alternativa manejable a la función php mail con potentes funciones tales como archivos adjuntos, contactos múltiples, opciones SMTP, formato texto/html para el contenido del correo electrónico, etc.

  • Comparación de Frameworks PHP

    Ve las distintas características de los frameworks para PHP. Acá describe las funcionalidades de los diferentes frameworks para sacarle el mayor provecho a la hora de programar.

  • PHP Classes

    Provee una gran cantidad de clases PHP disponibles para descarga.

  • Regexlib

    Regexlib es una librería para el manejo de expresiones regulares con PHP, expresiones regulares para emails, ip's, nombre de dominios, numeros telefonicos, y más.

Vía Tutorials, Tips and Resources for PHP

Fuente: ribosomatic.com

Embeber fuentes en tu sitio web: la guía definitiva

El embebimiento de fuentes utilizando @font-face es verdaderamente un arte oscura y compleja que debe ser dominada.

Es por eso que en esta nota te traemos la guía maestra sobre cómo embeber fuentes en tu sitio web. ¡Esperamos que te sea de utilidad!

Formatos de Fuentes

Hablando de forma general, hoy en día, una fuente de nuestro sistema tendrá uno de estos dos formatos: TrueType (con una extensión de archivo .ttf) u OpenType (con una extensión de archivo.otf). Si bien sería genial tirar una fuente de estas en una web y linkearla, nos enfrentamos a dos problemas mayores:

1) La licencia

2) El soporte del navegador

Licenciación

La concesión de licencias es uno de los mayores obstáculos. Puede ser difícil encontrar una fuente que realmente funciona dentro de la estética general de un diseño. Es la razón por la que hemos tenido que recurrir a la exportación de imágenes sIFR o Cufon.

Incluso muchas fuentes libres tienen limitaciones en cuanto a cómo pueden ser utilizadas, muchas veces requieren instrucciones específicas sobre la vinculación de nuevo a la fuente original, o sólo se permite su uso en sitios no comerciales.

En estos días, una serie de recursos están surgiendo, especialmente los dedicados a la incrustación de fuentes. Un buen comienzo para encontrar la fuente adecuada para nuestro proyecto sería Font Squirrel. Font Squirrel incluso proporciona kits @font-face para hacer que la aplicación en nuestro sitio web sea fácil. Sin embargo, incluso estos kits no dan soporte de navegadores completo.

Soporte de Navegadores

El soporte de navegadores es el mayor problema. El embebimiento de fuentes con una fuente TrueType u OpenType sólo funciona de esta forma en Firefox 3.5, Safari 3.1, y Opera 10. (Lo puedes permitir en tu copia de Chrome 2 utilizando la línea de comando switch.)

Pero lo podemos mejorar todavía más. Podemos lograr que funcione en Internet Explorer 4+, Chrome 0.3+, Opera 9+ e incluso podemos lograr un poco de acción móvil en Safari.

EOT

Internet Explorer soporta un tipo de formato particular llamado Embedded OpenType que proporciona algo de control sobre dónde y cómo se permite embeber la fuente. Necesitarás convertir tu TTF al formato EOT. Microsoft pone a nuestra disposición una herramienta llamada WEFT pero no siempre funciona. Por suerte, hay una herramienta de línea de comando llamada TTF2EOT que puede convertir tu fuente.

Si tienes un archivo OTF, necesitarás convertirlo a TTF antes de pasarlo a EOT. FontForge se puede utilizar para llevar a cabo esto.

Haz clic aquí para ver la captura de pantalla de la conversión de OTF a TTF »

Como verás pronto, tener el archivo en formato TTF nos ayudará en los próximos pasos.

SVG

Con TTF/OTF y EOT, tenemos cubiertos los navegadores decentes pero el toque de gracia es añadir más formatos de fuente a la mezcla: SVG. Las fuentes SVG son soportadas por Chrome 0.3+ sin tener que usar un hack de línea de comando, junto con Opera 9 y iPhone OS 3.1.

Existe una aplicación Java llamada Batik que permite exportar a formato SVG, ésta puede echarse a andar desde la línea de comando, y al hacerla andar deberás especificar el parámetro del ID. La ID es importante a la hora del CSS.

  1. java -jar batik-ttf2svg.jar ./MuseoSans-500.ttf -o museo.svg -id museo

Una de las preocupaciones en la exportación a SVG es el tamaño del archivo. Inmediatamente notamos que la fuente de 29k estaba pasando más de 100k. La principal razón fue el número de elementos hkern que, supongo, se dirigen a kerning. Sin embargo, deberías ser capaz de eliminarlos sin afectar mucho la muestra de tu fuente, pero disminuyendo en gran medida el tamaño del archivo. La otra cosa que notamos fue glyph-name="null" en todos los nodos glyph. Estos se pueden eliminar sin afectar a la visualización de la fuente. Una vez hecho las fuentes SVG serán más pequeñas que la fuente TrueType original que se había convertido.

CSS

Ahora que tenemos nuestros tres archivos-TTF (o OTF), EOT y SVG-es tiempo de comenzar con el CSS.

  1. @font-face {
  2. font-family: 'GothicCustom';
  3. src: url("LeagueGothic.eot");
  4. src: local('League Gothic'),
  5. url("LeagueGothic.svg#lg") format('svg'),
  6. url("LeagueGothic.otf") format('opentype');
  7. }

El nombre de familia fuente que especifiquemos aquí es arbitrario.

La sintaxis SVG posee una cosa particular a notar, y esto es el anchor de ID luego del nombre de fuente. Especifíca la ID que utilizaste cuando realizaste la conversión SVG. De forma alternativa, abre la fuente SVG y asegúrate que el elemento fuente posee un ID.

  1. "lg">

Especificar la familia fuente funciona de forma normal. Sólo especifíca el nombre de fuente que utilizaste en tu declaración @font-face.

  1. font-family: 'GothicCustom', 'Arial Narrow', sans-serif;

Subconjuntos

En la captura de pantalla, dimos una demostración rápida de cómo un subconjuntar fuentes limpiando los glifos que no van a ser utilizados en la fuente final. ¿Por qué quieres subconjuntar una fuente? Hace que el archivo sea más pequeño. Algunos archivos de fuentes fácilmente pesan 200k. Eso es mucho para descargar cuando la gente no lo necesita.

Si optimizas tus imágenes ¿Por qué no hacerlo con tus fuentes?

Bug transformador de texto

Hay una advertencia a tener en cuenta al realizar subconjuntos. Una declaración text-transform: uppercase es todo lo que se necesita.

  1. About
  2. div { text-transform:uppercase; }

Esto funciona bien en Firefox y Safari, pero Opera e Internet Explorer ambos parecen hacer decidido el uso de una fuente para un carácter en particular observando el carácter en minúscula en primer lugar. Esto quería decir que estaba usando los caracteres en mayúsculas de una fuente de reserva. Eso es ciertamente menos que ideal.

Por supuesto, siempre puedes cambiar el código fuente HTML para que sea mayúscula, si estabas dispuesto a llegar a la muerte en la eliminación de los glifos.

Imprimir hojas de estilo

Las fuentes personalizadas también funcionan bien con las hojas de estilo de impresión. No era como el uso de técnicas de reemplazo mediante una imagen y luego tener que recurrir a una fuente del navegador aburrido para imprimir. Se siente bien la impresión de una página de nuestro sitio que todavía utiliza las mismas fuentes, como lo que vimos en la pantalla.

Fuente: Tips, Tricks & Bookmarks on Web Development

2009-10-20

13 aplicaciones open source para crear tu e-commerce

Si estás pensando en crear tu propia E-Commerce o Carrito de compra, deberías echarle un vistazo a estas Open Source que podrás modificar libremente y usarlas en tus aplicaciones:

  1. OpenCart (PHP / MySQL) <--- Muy simple
  2. Magento (PHP / MySQL) <--- Muy estetico respecto al diseño
  3. osCommerce (PHP / MySQL)
  4. dashCommerce (ASP.NET)
  5. Ubercart (Drupal)
  6. Wordpress E-commerce Plugin (Wordpress)
  7. VirtueMart (Joomla y Mambo).
  8. OXID eSales (PHP / MySQL)
  9. Freeway (PHP / MySQL y Joomla)
  10. simpleCart(JS) (Javascript)
  11. Digistore (PHP / MySQL)
  12. PrestaShop (PHP / MySQL)
  13. zenCart (PHP / MySQL)

2009-10-18

Unit Tests en PHP con SimpleTest

Hacer pruebas automatizadas de tu código siempre es una buena costumbre, en especial cuando te llega el tiempo de tener que refactorizar.

Para este ejemplo vamos a hacer una clase que calcula las áreas de triángulos, rectángulos y cuadrados.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Area
{
function triangle($base, $height) {
return ($base * $height) / 2;
}

function rectangle($breadth, $height) {
return $breadth * $height;
}

function square($side) {
return $side * $side;
}
}

Y vamos a utilizar la herramienta SimpleTest para probar que nuestras funciones están trabajando bien. Para empezar a usarlo solo tienes que bajarlo y colocar la carpeta simpletest dentro de tu proyecto o algún directorio global de PHP.

Una vez instalado podemos comenzar a escribir nuestros casos de prueba.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
require_once 'simpletest/autorun.php';
require_once 'area.php';

class AreaTestCase extends UnitTestCase
{
var $area;

function setUp() {
$this->area = new Area();
}

function testTriangle()
{
$result = $this->area->triangle(6, 10);
$this->assertEqual(30, $result);
}

function testRectangle()
{
$result = $this->area->rectangle(2, 5);
$this->assertEqual(10, $result);
}

function testSquare()
{
$result = $this->area->square(4);
$this->assertTrue(is_numeric($result));
}
}

El incluir autorun.php nos da la habilidad de poder extender la clase UnitTestCase, permitiéndonos ejecutar las aserciones. Además el autorun.php se encarga de correr las pruebas sin necesidad de que tu tengas que instanciar nada y también es suficientemente inteligente para darte si cuenta si estas en la consola o directamente en el navegador.

La funcion setUp se ejecuta automáticamente antes de correr cualquier prueba. Aquí como todas nuestras pruebas hacen uso de la clase Area, entonces aprovechamos para hacer la instancia una sola vez.

Finalmente SimpleTest corre todas las pruebas que note comienzan con el nombre test y nosotros tenemos 3 de ellas:

  • testTriangle: Prueba que el resultado de la operación sea igual a 30.
  • testRectangle: Prueba que el resultado de la operación sea igual a 10.
  • testSquare: Prueba que el resultado de la operación sea un número.

Cualquier otro resultado nos arrojaría errores. Estas pruebas ejecutadas en el navegador se verían así, pero también puedes ejecutarlas en consola sin ningún problema.

Oh si, la confirmación del código perfecto

SimpleTest tiene muchas opciones más como el agrupar casos de prueba, escribir tus propias aserciones, mockups (simulaciones de escenarios) y pruebas web (aunque limitado). Así que no te dejes de llevar por el nombre no es simple, solo es fácil de usar.

FUENTE: pablasso.com

2009-10-17

30 Efecto sobre textos con photoshop

1. Create a Spectacular Grass Text Effect

Create a Spectacular Grass Text Effect - screen shot.

Use the Pen Tool and a lot of patience to create this excellent grass effect.

2. Create a Layered Glowing Text Effect

Create a Layered Glowing Text Effect - screen shot.

This beginner-level tutorial allows you to create text that glows.

3. Using Light and Shade to Bring Text to Life

Using Light and Shade to Bring Text to Life - screen shot.

Learn about the concepts behind lighting and shading to make your text stand out.

4. Transparent Glass Lettering

Transparent Glass Lettering - screen shot.

This is PSDTUT’s rendition of the popular glass text effect.

5. How To Create A Gold Text Effect

How to Create A Gold Text Effect - screen shot.

A classic text effect that rarely turns out classy (instead of gaudy and cheesy).

6. Icey Styles

Icey Styles - screen shot.

Uses some basic Layer Styles like Bevel and Emboss to create a cold text effect.

7. Dramatic Text on Fire Effect

Dramatic Text on Fire Effect - screen shot.

Set your text on fire with the Smudge Tool and some layer masking.

8. Wood Inlay Text

Wood Inlay Text - screens hot.

Using wood textures and some layer masks, you can create this "wooden inlay" effect.

9. Watercolor Text

Watercolor Text - screen shot.

Learn about the Brushes Palette to achieve a water-color painting effect.

10. The Sugar Bag Effect

The Sugar Bag Effect - screen shot.

Find out how to create this "Sugar Bag" effect using basic Layer Styles and selections.

11. Text In Stitches

Text In Stitches - screen shot.

This tutorial shows you how to create an stiched effect using a custom brush set.

12. Text Ticker

Text Ticker - screen shot.

Mimic the text that you commonly see in "news tickers".

13. Cartoon/Comic-Style Text Effect

Cartoon/Comic-Style Text Effect - screen shot.

This is PhotoshopStar’s rendition of this popular pop-culture text effect.

14. ‘Bee Movie’ Text Effect

Bee Movie Text Effect - screen shot.

Use a load of Layer Styles to create this text effect seen in the film "Bee Movie".

15. Simple, Sleek and Stylish Text Effect

Simple, Sleek and Stylish Text Effect - screen shot.

Create a quick and sleek "Web 2.0" feel with this easy Photoshop tutorial.

16. Smooth Glass Type

Smooth Glass Type - screen shot.

Learn how to create a translucent text effect.

17. Moon Shine Text Effect

Moon Shine Text Effect - screen shot.

Quickly create this "dreamy" text effect using some basic Layer Styles.

18. Colorful Glowing Text Effect

Colorful Glowing Text Effect - screen shot.

Create this layered, glowing effect by separating the text in individual layers and a white to transparent gradient layer to get this cool, colorful glowing text effect.

19. Bubble Text

Bubble Text - screen shot.

This is another quick tutorial on how to make this text effect using layer styles.

20. Killer Halftone Effect

Killer Halftone Effect - screen shot.

This tutorial shows a way to apply the halftone effect to the background of your text.

21. Text on Turf

Text on Turf - screen shot.

This tutorial uses the Noise Filter to create the grass-like texture.

22. Spray Paint Text

Spray Paint Text - screen shot.

Create your own digital grafitti by following this excellent tutorial from PSD Learning.

23. Scanline Text

Scanline Text - screen shot.

This is PSD Learning’s beautiful take on the relatively "old-school" scan line technique.

24. Retro Text

Retro Text - screen shot.

This tutorial uses both Photoshop and Illustrator to create a retro look.

25. Grunge Text Effect

Spectacular Style Text Effect - screen shot.

This tutorial from psdfan shows you how you can apply this popular effect on text.

26. Pimp your text

Grunge Text Effect - screen shot.

Can’t afford real bling-bling? Make some digital ones with this quick tutorial.

27. Paint Effect

Pimp your text - screen shot.

UBL Designes shows us how to accent text as though you splattered paint on it.

28. Spectacular Style Text Effect

Paint Effect - screen shot.

Create a 3D text effect by duplicating layers and offsetting each layer.

29. Shining Neon Text Effect

Shining Neon Text Effect - screen shot.

Create a colorful neon text effect by using a Gradient Overlay and a few Layer Styles.

30. Super Cool Frilly Bits Typography

Super Cool Frilly Bits Typography - screen shot.

Danny Outlaw runs the Outlaw Design Blog.