Se crea el weblog "PHP CINCO"

Me han llegado varios pedidos para profundizar y especializar los artículos en temas como PHP y en particular sobre la versión 5.

Por esa razón creé otro weblog dedicado de forma exclusiva a ese tema: phpcinco.blogspot.com ó "Como ser un 'Programador PHP5 Senior' y no morir en el intento ..." ;-)

Para mantener la coherencia en los contenidos, voy a mover todos los artículos referentes a PHP5 al nuevo weblog, y este quedará para comentar sobre temas más generales (Software Libre, GNU/Linux, etc).

"¡Mi sitio Web es estándar! ¿Y el tuyo?"

Siguiendo en la misma línea del artículo anterior (los estándares web), este documento fue hecho por la propia World Wide Web Consortium (W3C) donde ejemplifican los argumentos comunes que son esgrimidos a la hora de no respetar los estándares.

En lo personal creo que los argumentos podrían tener alguna justificación hace algunos años atrás, cuando el mercado presionaba a la tecnología (principalmente en la web) a hacer cosas que cumpliendo los estándares eran imposibles (tal vez por el afán de obtener las mismas funcionalidades de las aplicaciones del escritorio). Eso llevó a que los proveedores de tecnología crearan productos que brindaban nuevas características con la restricción (intencional o no) de que solo corrieran en sus propios productos o tecnología (navegadores web, servidores, etc).

Con el correr de los años la tecnología evolucionó y el mercado (y en particular los consumidores finales) empezó a obligar a los proveedores de la misma a ser "compatibles" con otras tecnologías y proveedores (condición que se había perdido anteriormente), es decir, a "obligar indirectamente que se respetaran los estándares".

Según Wikipedia un estándar (en tecnología) es: "una especificación que regula la realización de ciertos procesos o la fabricación de componentes para garantizar la interoperabilidad"

Ya no es excusa suficiente: el cliente no tolera el "solo funcionan con tal navegador", "con tal sistema operativo" ... y la empresa no puede "hacer un sistema para cada plataforma que sus clientes usen".

La solución: respetar los "estándares". Un sitio web que respete los estándares será accesible desde cualquier plataforma, independientemente de quién sea nuestro proveedor y nuestro dispositivo de turno (un computador, un celular, etc), y no será necesario desarrollar y mantener varios sistemas para cumplir con nuestros clientes.

Hoy, las empresas y las tecnologías que están tomando la delantera no solo respetan los estándares, sino que necesitan de ellos para competir (ejemplos: la empresa Google, tecnologías como XHTML, CSS, AJAX, etc).

Si no cumples con los estándares, quedarás aislado (o en su defecto, tendrás acceso a un segmento reducido del mercado). Esto ya lo está aprendiendo empresas como Microsoft al liberar servicios como Live que soportan "todos los navegadores" (no solo su producto Internet Explorer, como estamos acostumbrados a sufrir al navegar por muchos sitios en la web).

Finalmente, me suscribo a la misma pregunta:

¡Mi sitio Web es estándar! ¿Y el tuyo?

"Porqué diseñar con tablas es estúpido"

Trabajando en la preparación de una charla donde el tema medular eran "los estándares en la web" encontré de casualidad este enlace donde explica de forma "clara" y "amena" las razones de por qué deberíamos diseñar un sitio web "sin tablas".

Porqué diseñar con tablas es estúpido (traducción)

Actualización (23/04/2006)
Veo que el enlace a la versión traducida al español dejó de funcionar. Dejo disponible la referencia a la versión original en inglés y a su sección que enlaza a las traducciones (tal vez algún día vuelva a estar la versión en castellano).

Why tables for layout is stupid

Traducciones en distintos idiomas

Linux: como convertir los tildes a sintaxis html

Tuve el siguiente problema: estaba desarrollando en PHP y con Smarty desde un equipo con Linux que soportaba el formato UTF-8, pero debía subir los fuentes a un servidor que disponía de una versión de Linux antigua que no soportaba este formato.

El resultado era que los tildes escritos "a fuego" (ej: "canción") eran representados como "basura" en la pantalla.

Finalmente, después de varios intentos infructuosos, decidí que la única forma de solucionarlo definitivamente era recorrer todos los fuentes con html y ver de cambiar la codificación de lo tildes a HTML (sintaxis "acute") y quedaría todo solucionado.

Este es el resultado de leer por media hora los manuales, un scripts que recorre todos los fuentes .html y los corrige:

recorrer_tildes.sh

find . -print -name '*.tpl.html' -exec ./corregir_tildes.sh {} \;


corregir_tildes.sh
echo "->" $1

mv $1 $1.orig
sed -f sed.txt $1.orig > $1

sed.txt

1,${
s/á/\á/g
s/é/\é/g
s/í/\í/g
s/ó/\ó/g
s/ú/\ú/g

s/Á/A/g
s/É/E/g
s/Í/I/g
s/Ó/O/g
s/Ú/U/g

s/ñ/\ñ/g
s/°/\&\#176;/g
s/º/\&\#176;/g
s/N�/Nro/g
s/1�/1ero/g
s/4�/4to/g

s/emitir�/emitir\á/g

}

Que les aproveche!

Linux: obligar a reiniciar cuando ocurre un Kernel Panic

Este "truco" fue extraido de Barrapunto:

Editando el archivo /etc/sysctl.conf y agregando la siguiente línea:

kernel.panic=5

En teoría, lo que hace esto es definir que si ocurre un kernel panic, esperaría 5 segundos y luego reiniciaría la máquina.

No lo he probado, pero tal vez no sea tan positivo como parece. Si lo vemos desde el punto de vista de la auditoría, no es bueno que ocurra algún problema inesperado y que el sistema continúe y nosotros no nos enteremos rápidamente.

Pero bueno, es algo a tener en cuenta y saber que existe, y aplicarlo en el contexto adecuado.

VIM: ¿Buscar y Reemplazar una cadena de texto?

Vim es un editor en línea de comandos muy popular en Linux. Su popularidad se debe principalmente a que puede ejecutarse en cualquier ambiente, por más complicado que sea, y ofrece un conjunto poderoso de comandos, entre ellos las famosas “expresiones regulares” de Unix).

Vayamos al grano, y dejemos un ejemplo de los clásicos que sirven para sorprender en una fiesta de usuarios Windows ;-)

Una vez ejecutado el editor, para acceder a la línea de comandos deberemos presionar los “:” (dos puntos), donde digitaremos lo siguiente:

1,$ s/eplace/Enrique Place/g


Esto significa:

  • “1″ es la primera línea donde comenzaremos la búsqueda/reemplazo
  • “$” significa la última línea donde terminaremos la búsqueda/reemplazo, en este caso “$” representa el fin del archivo (podemos sustituirla por el número de línea hasta donde queremos que llegue)
  • “s/” significa “search”, o “buscar”, y lo que aparece seguido a la barra es la cadena a buscar.
  • “/” como separador, y la cadena siguiente es el texto que reemplaza la cadena buscada
  • “/g” para terminar significa “global” (lo opuesto sería no hacer la sustitución a todo lo que se encuentre, o hacerlo de forma “interactiva”).

En resumen: buscar en todo el archivo que estamos editando la cadena “eplace” y la sustituye por “Enrique Place”, no importa la cantidad de veces que aparezca.

Más información, Vim Online

PHP/PostgreSQL: Como hacer una consulta con "LIKE" sin "case sensitive"

Hoy tuve este problema: hacer que una búsqueda a través de un formulario que solicita una cadena de texto busque sin importar si está en mayúsculas o minúsculas.

Por defecto el comportamiento del LIKE es "case sensitive" (distingue mayúsculas y minúsculas), lo que al ingresar "OBJETO", "Objeto", "objeto" u "ObJeTo" son cosideradas palabras distintas, con resultados distintos.

Lo que hice fue tomar el valor de búsqueda y convertirlo a "minúsculas", y luego hice lo mismo del lado de la consulta SQL.

Es decir:

$cadenaLower = strtolower($cadenaTexto);
$SQL = $SQL." lower(tabla.campo) LIKE '%$cadenaLower%' ";


No es un gran descubrimiento, pero por lo menos queda documentado para las generaciones futuras y tal vez le pueda ahorrar esos cinco minutos que perdí buscando las funciones ;-)

Ahora, mi pregunta es: como implementar con PostgreSQL una búsqueda fonética?

Noticias: "Programa en .Net desde linux, pero sin instalarlo"

"Una de las cosas en las que se puede decir que Microsoft acertó de pleno, fue a la hora de liberar la plataforma .Net, al contrario que el lenguaje y entorno de programación Java de Sun.

Diversos desarrolladores de la talla de Miguel de Icaza fundaron el Proyecto Mono: por un lado la plataforma Mono, que no es más que una implementación propia de lo que Microsoft denominó .NET Framework en Windows, y MonoDevelop, que hace la misma función que el Visual Studio .Net, pero libre y gratuito."


Noticia completa en: Programacion.com

Linux: ¿Como hago para saber el paquete rpm de un archivo cualquiera?

Cuantas veces, estando en nuestra distribución favorita de Linux ;-), quisimos saber cual fue el paquete rpm que instaló un archivo determinado? Supongamos que queremos saber el paquete origen del ejecutable ipop3d, que se encuentra en el directorio /usr/sbin.

Ejecutando: rpm -qf /usr/sbin/ipop3d, nos devuelve el nombre del paquete rpm:imap-2001a-18

Si ejecutáramos : rpm -qif /usr/sbin/ipop3d, nos devolvería la información completa del paquete "imap" (fecha de creación, nombre del equipo que lo creó, proveedor, descripción, etc).

Los parámetros son:

  • -q consulta

  • -f archivo

  • -i información (completa)


Tips:
para que funcione esta sintaxis, debemos darle la ruta exacta de donde se encuentra el ejecutable (en este caso, podría perfectamente ser cualquier archivo no ejecutable). Si lo que queremos es buscar únicamente un ejecutable (no funciona para los demás casos), podemos usar el comando which:

which ipop3d nos devolverá /usr/sbin/ipop3d.


También podemos combinar los dos comandos haciendo:

rpm -qif `which ipop3d`

Donde las comillas (esas, no otras) le devuelven al comando rpm la salida del which, como si hubiéramos digitado la ruta completa a mano.


Que lo disfruten!

Linux: ¿Como acceder a un pen-drive?

Hace poco que soy el feliz poseedor de un pen-drive de 1 Giga (con solo repetirlo, se me empañan los lentes ;-), y habiendo probado que funcionaba en Windows (estaba muy apurado ;-), mi deseo era disfrutarlo en Linux (donde pasaré la mayor parte de mi vida adulta ;-).

Actualmente uso Red Hat 9 (si, cuando tenga tiempo me actualizo), pero por toda la documentación que tuve que leer para lograr "entender" como funciona, cualquier distribución con kernel de versión superior a 2.4.10 es apta.

Digo "entender", porque muchas veces pensamos que algo es "complicado" en Linux, o directamente decimos "no anda", y el problema es que nosotros no entendimos ni el problema, ni la solución.

A pesar que no soy nuevo en Linux (8 años de experiencia, aproximadamente) soy nuevo en el tema "pen-drive", y como todo "novato" mi desconocimiento del tema y mi emoción hizo que demorara unas horas antes de lograrlo.

Luego me di cuenta que era muy sencillo (esa es una de las ventajas del conocimiento ;-):
  • Generalmente los kernels de las distribuciones vienen preconfigurados para soportar USB, lo cual simplifica mucho las cosas.
  • El otro tema a tener en cuenta es como se representa el pen-drive en Linux. Como todo Unix, este hardware será un "archivo que representa un dispositivo" y para este caso la nomenclatura será la misma que si fuera un disco scsi (no me pregunten porqué hace la emulación scsi para llegar al pen-drive): /dev/sda1
  • Como todo dispositivo, hay que "montarlo" (si, algo que hace Windows, pero de forma automática). Para eso debemos primero crear un subdirectorio dentro del directorio donde deberíamos montar todos los dispositivos (si somos ordenados): /mnt
  • Luego de tener el directorio destino, ejecutamos el comando para montar: mount /dev/sda1 /mnt/pendrive
  • Luego de usarlo, hay que "desmontarlo" (si, lo opuesto a "montarlo" ;-): umount /mnt/pendrive
Posibles problemas:
  • También (aquí es donde perdí el mayor tiempo) hay que controlar que todos los "módulos" del kernel encargados de "soportar" este tipo de hardware se encuentren "activados". Ejecutando el comando "lsmod" nos listará los módulos que actualmente están ejecutándose. Entre muchos, estarán los que nos importan: usb-ohci, usbcore, scsi_mod y usb-storage
  • Si tienen poca suerte, les faltará algún módulo, y si este no se levantara automáticamente cuando se ejecute el "mount", deberán hacerlo a mano. En mi caso, el módulo "usb-storage" no se encontraba corriendo y tuve que ejecutarlo usando el siguiente comando: modprobe usb-storage


Recomendación Final
Para que el dispositivo tenga toda la información grabada *SI o SI* hay que desmontarlo antes de retirarlo, de lo contrario, podrán no tener los datos actualizados en el pen-drive.

Que lo disfruten!

Entradas populares