1Ene/101

Configurar postfix con gmail

por mariotux 2 comentarios »

Antes con instalar el paquete de postifx podías enviar desde tu máquina local correos a tu cuenta de e-mail, solían entrar en spam, por lo que indicándole a gmail que no era spam ya se podía hacer pruebas de desarrollo de envío de correos.

Ahora parece ser que no, por lo que comencé la búsqueda de un how to para solventar el problema y cómo no, nos encontramos con nuestro amigo @ZiTAL del que ya he mencionado un how to en este blog sobre la instalación de oci8 en debian. @ZiTAL es un debianita profundo ^_^ y siempre le podemos encontrar en la comunidad Debian-es investigando y ofreciendo el resultado de sus búsquedas. Los how to que suele publicar funcionan a la perfección, algo difícil de encontrar en comunidad hispana.

Una prueba de que es un debianita profundo es el tatuaje que luce en su pierna, y os puedo asegurar que esta imagen no es un foto-montaje, es auténtico.

Así que paso a citar la configuración, que aunque en su post menciona que lo está haciendo en un debian etch yo lo he seguido a la perfección para Ubuntu 9.10:

Instalación de paquetes:

apt-get install postfix mailx

Editar el archivo /etc/postfix/main.cf , borrar todo lo que pone y añadir estas entradas:

  # SMTP relayhost
  relayhost = [smtp.gmail.com]:587

  ## TLS Settings
  smtp_tls_loglevel = 1
  smtp_tls_CAfile = /etc/postfix/certs/CAcert.pem
  smtp_tls_cert_file = /etc/postfix/certs/mycert.pem
  smtp_tls_key_file = /etc/postfix/certs/mykey.pem
  smtp_use_tls = yes
  smtpd_tls_CAfile = /etc/postfix/certs/CAcert.pem
  smtpd_tls_cert_file = /etc/postfix/certs/mycert.pem
  smtpd_tls_key_file = /etc/postfix/certs/mykey.pem
  smtpd_tls_received_header = yes
  smtpd_use_tls = yes

  # configuracao tls
  smtp_use_tls = yes
  smtp_sasl_auth_enable = yes
  smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
  smtp_sasl_security_options = noanonymous
  smtp_sasl_tls_security_options = noanonymous

  # alias de mapeamento interno para externo
  smtp_generic_maps = hash:/etc/postfix/generic

Crear archivo de auntentificacion para gmail, /etc/postfix/sasl_passwd

[smtp.gmail.com]:587    usuario@gmail.com:contraseña

Creando archivo de alias, /etc/postfix/generic

root@localhost.localdomain	usuario@gmail.com

aqui tenemos que cambiar el localhost por el nombre de la maquina y el localdomain por el dominio local, lo podemos ver en /etc/hosts y tendremos una cosa asi:

...
nuestra_IP	nombrelocalhost.nombredominio	nombrelocalhost
...

cambiando permisos y cifrando los archivos:

chmod 600 /etc/postfix/sasl_passwd
chmod 600 /etc/postfix/generic
postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/generic

Creando los certificados:

mkdir /etc/postfix/certs/
cd /etc/postfix/certs/
cd certs
openssl dsaparam 1024 -out dsa1024.pem
openssl req -x509 -nodes -days 3650 -newkey dsa:dsa1024.pem -out mycert.pem -keyout mykey.pem
ln -s mycert.pem CAcert.pem
openssl req -x509 -new -days 3650 -key /etc/postfix/certs/mykey.pem -out /etc/postfix/certs/mycert.pem
rm dsa1024.pem

Reiniciando servicio postfix:

/etc/init.d/postfix reload

Probando:

echo "contenido coreeo" | mail -s "asunto" usuario@correo.com

Nota, yo tenia el openssl instalado de antes, si necesitais instalarlo:

apt-get install openssl ssl-cert

Enlace del hilo de esdebian.org

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
20Dic/090

Métodos mágicos en PHP5

por mariotux 1 comentario »

Desarrollar en PHP5 con orientación a objetos cada vez es más parecido a desarrollar con Java, los "javeros" siempre comentan que PHP no hace más que "copiar" y la verdad es que razón no les falta ^_^ pero una de las particularidades que tiene el desarrollar con POO en PHP5 son los métodos mágicos. Los usan cada vez con más frecuencia los frameworks de desarrollo en PHP5 y es por la flexibilidad que ofrecen en los desarrollos.

Quien no ha utilizado en algún momento en PHP5 el new stdClass(), al hacer una instancia de esta clase predefinida en el core de PHP5 estamos creando una clase estándar en donde las propiedades se generan de manera dinámica.

En el ejemplo del que mostraré a continuación se trata de una clase estándar donde encapsularemos el acceso a las propiedades de la clase. Utilizaremos el la encapsulación y el principio de la ocultación en la Programación Orientada a Objetos para el desarrollo de esta clase con métodos mágicos. No exponiendo el acceso a las propiedades en ámbito público.

La clase que vamos a crear no entiende de las posibles propiedades que puede tener el objeto, ni tampoco de los valores que almacenará y menos de acciones sobre propiedades. Simplemente almacenará N valores en diferentes propiedades de manera dinámica, simulando el comportamiento de "stdClass".

PHP:
  1. /**
  2. * Clase estándar con propiedades de ámbito privado, en donde
  3. * para acceder a las propiedades es necesario invocar métodos
  4. * set/get bien para inicializar la propiedad o recuperar.
  5. *
  6. * @author mariotux
  7. * @date 20/12/2009
  8. */
  9. class MyStdClass {
  10.  
  11. private $properties;
  12.  
  13. private function __get($name) {
  14.  
  15. $name = strtolower($name);
  16. if (array_key_exists ( $name, $this->properties)) {
  17. return $this->properties [$name];
  18. }else{
  19. throw new Exception('Unknown property  '. $name);
  20. }
  21. }
  22.  
  23. private function __set($name, $value) {
  24.  
  25. $name = strtolower($name);
  26. if(count($value) == 1){
  27. $this->properties [$name] = $value[0];
  28. }else{
  29. $this->properties [$name] = $value;
  30. }
  31.  
  32. }
  33.  
  34. public function __call($name, $arguments) {
  35.  
  36. $methodType = substr($name, 0, 3);
  37. $nameMethod = substr($name,3);
  38.  
  39. switch ($methodType){
  40. case 'get':{
  41. return $this->$nameMethod;
  42. break;
  43. }
  44. case 'set':{
  45. $this->$nameMethod = $arguments;
  46. break;
  47. }
  48. default:{
  49. throw new Exception('Unknown method  '. $name);
  50. }
  51. }
  52.  
  53. }
  54.  
  55. public function __construct() {
  56. $this->properties = array ();
  57. }
  58. }

Cómo podemos observar en la clase, en cuanto se intenta invocar a un método que no sea get o set generamos una excepción, al igual que también lo hacemos cuando se intenta acceder a una propiedad que no ha sido inicializada al invocar el método get de la propiedad. En el set no realizamos la comprobación ,ya que al estar asignando un valor a una propiedad siempre la trataremos como una propiedad nueva en caso de que no exista.

Este es un ejemplo de como utilizar métodos mágicos, en donde sólo estamos utilizando __construct, __call, __set, __get pero existen más métodos mágicos que podríamos utilizar para extender el comportamiento de la clase.

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
10Dic/090

Microsoft se vuelve a marcar un tanto

por mariotux 1 comentario »

Seguridad al político que determina su contratación, buenos comerciales, o todavía sigue pesando más su pasado en el mundo del software... Pero es una lástima que nuevamente se vuelva a invertir dinero público en licencias de Microsoft. Ya comenté en un post anterior, decidirse por el software libre implicaría la creación de empleo y aumento del PIB.

Jueves 10 de Diciembre a las 12.00h
La Secretaria de Estado de Educación y Formación Profesional, Eva
Almunia, y la presidenta de Microsoft Ibérica, María Garaña, suscriben
mañana, jueves 10 de diciembre, a las 12 horas, un acuerdo de
colaboración en el marco del programa de innovación educativa Escuela
2.0.

Enlace  oficial

Que ven en el entorno político que no les convence el uso del Software Libre, la falta de una entidad que les de una garantía, si no invierten para que se pueda crear... En España ya tenemos muchas empresas que son partners de Ubuntu y con certificaciones emitidas por Canonical. ¿Qué es lo que no convence? OpenOffice es una suite que no tiene nada que envidiar al resto.

Pero para asegurar el cargo a veces es mejor firmar con el grande, antes que tomar una decisión arriesgada (para el mundo de la política). Para la foto siempre queda bien tener detrás un logotipo de una gran corporación...

Actualizado

Imagen del momento, gracias a despuesdegoogle.comacuerdo_microsoft_educacion

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
7Dic/092

¿Por qué usar Symfony?

por mariotux 3 comentarios »

Empezaremos por 10 razones por las que una empresa debería utilziar Symfony Framework en sus desarrollos de PHP, citando:

  1. Escalable: Symfony es infinitamente escalable si se disponen de los recursos necesarios. Yahoo utiliza Symfony para programar aplicaciones con 20 millones de usuarios y 12 idiomas ¿de verdad necesitas más?
  2. Probado: Symfony ha sido probado con éxito durante varios años en aplicaciones muy diferentes. Desde sitios web con millones de usuarios (del.icio.us, Yahoo Bookmarks, Yahoo Answers) hasta otros miles de sitios pequeños y medianos.
  3. Soporte: Symfony sigue una política de tipo LTS (long term support). Las versiones estables se mantienen durante 3 años sin cambios pero con una continua corrección de los errores conocidos. Tus clientes estarán siempre contentos y a ti no te costará nada hacerlo.
  4. Licencia: Symfony utiliza una licencia MIT, con la que puedes hacer aplicaciones web comerciales, gratuitas y/o de software libre.
  5. Compromiso: la empresa que ha creado Symfony no vive del framework, sino de las aplicaciones que hace con él. Esto significa que a ellos les interesa tanto como a tí aspectos como el rendimiento, la buena documentación, el soporte muy largo, etc.
  6. Código: Desde su primera versión Symfony ha sido creado para PHP 5, desechando la versión PHP 4 (que ha sido declarada obsoleta recientemente). Echa un vistazo a su código fuente y verás lo bien que se puede llegar a programar con PHP.
  7. Seguro: Se puede controlar hasta el último acceso a la información e incluye por defecto protección contra ataques XSS y CSRF.
  8. Documentado: se trata del framework PHP mejor documentado: miles de páginas en el wiki oficial, tutoriales de hasta 250 páginas y un libro gratuito de casi 500 páginas. Además, el libro está completamente traducido al español.
  9. Calidad: su código fuente incluye más de 8.000 pruebas unitarias y funcionales. ¿Vas a jugártela utilizando otro framework con pocas pruebas unitarias o que ni siquiera las utilice?
  10. Internacionalización: Se pueden crear aplicaciones en varios idiomas. La internacionalización está integrada en el framework, funciona bien, sigue los estándares (XLIFF), es muy completa y está probada en aplicaciones reales.
¿No has terminado de convencerte? El aplicar una una hoja de estilo para desarrollo, no siempre es sencillo y si tienes un gran equipo es más complicado. Todo programador tiene sus manías, sean buenas o malas, pero todos sabemos identificar el código fuente de un compañero de trabajo tras haber colaborado en algún proyecto.
A la hora de codificar en Symfony inculca las buenas prácticas a la hora de desarrollar, donde no encontrarás deberías encontrarte una consulta a pelo, si no que tiene que pasar siempre por su ORM y en las acciones de los módulos sólo la lógica de los objetos. Si, parece muy sencillo decirlo pero cuando somos pocos y estamos todos de acuerdo no hay problema, pero y cuando no es así...
Es un Framework CRUDL, pensado para el desarrollo ágil y es divertido programar con él ya que no tienes que "preocuparte" por cosas básicas y repetitivas que podemos ir desarrollando en uno y otro y otro proyecto :-), sólo la lógica!
Vale, todavía no... que prefieres Zend porque el framework es el "Oficial". Convencete que lo oficial no siempre es lo mejor, tampoco es que sea malo pero compara:
- La documentación de Zend no es tan extensa como la de Symfony.
- Zend tenía su propio ORM, pero se ha dado por vencido y va a implantar Doctrine.
- El abandono del ORM própio de Zend fue por falta de "potencia de desarrollo", la comunidad de Symfony es más grande, más fuerte.
- Si, en internet todos andamos con el Inglés para arriba y abajo... pero la documentación de Symfony está en varios idiomas, y su comunidad es muy activa.

Todavía no estás convencido? bien, la mejor manera es que analices tus necesidades y te pongas con la documentación de Symfony, el libro está muy bien pero donde más rápido vas a ver su potencia es en su ejemplo práctico Jobeet. Cuéntame tu impresión cuando estés en el 5º capítulo :-D

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
4Dic/092

Sintetizar texto a voz con Festival en Web

por mariotux 3 comentarios »

En este post doy por hecho que sabemos hacer la instalación del servicio de Festival en nuestro equipo linux, si no es así siempre podéis pasar por Festival, de texto a voz en linux.

Después de unos post "filosóficos" hoy pasamos nuevamente a la parte ténica, en donde con un par de ficheros podremos generar un fichero mp3 sintetizado con Festival mediante un texto de un formulario web.

El ejemplo que expongo a continuación es una página web sencilla que tras rellenar el texto en un textarea lo envía a si misma y retorna la descarga de un fichero mp3 con el texto sintetizado, siempre que tengamos el servicio de festival configurado.

El ejemplo de página web sería:

PHP:
  1. <?php
  2. if($_POST['texto']){
  3.    $filename = md5($_POST['texto']);
  4.    $txtFile=$filename;
  5.    $mp3File=$filename.".mp3";
  6.    $fp = fopen($txtFile, 'w');
  7.    fwrite($fp,$_POST['texto']);
  8.    fclose($fp);
  9.    exec("./lanza.sh $txtFile");
  10.    if(file_exists($mp3File)){
  11.       $fp = fopen($mp3File,'r');
  12.       if (filesize($mp3File)) {
  13.         $mp3 = fread($fp, filesize($mp3File));
  14.       }
  15.       fclose($fp);
  16.    }
  17.    if(isset($mp3)){
  18.       header('Content-Type: audio/x-mp3');
  19.       header('Content-Disposition: attachment; filename="'.$mp3File);
  20.       header('Content-Length: '. filesize($mp3File));
  21.       echo $mp3;
  22.       unlink($mp3File);
  23.       unlink($txtFile);
  24.    }
  25. }else{
  26. ?>
  27. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  28.  
  29. <html>
  30.  <head>
  31.    <title>Demo</title>
  32.  </head>
  33. <body>
  34.  <h1>Demo</h1>
  35.  <form action="" method="post">
  36.    <textarea name="texto" rows="10" cols="50"></textarea>
  37.    <br />
  38.    <input type="submit" name="enviar" value="enviar" />
  39.  </form>
  40. </body>
  41. </html>
  42. <?   
  43. }
  44.  
  45. ?>

Como podemos ver, lanzamos un script para generar el fichero mp3, que es la parte más importante ya que cualquier programador y más si hablamos de alguien experto en PHP puede observar que el código es realmente sencillo. Pero lo más divertido fue crear el script sh para generar el fichero mp3.

C:
  1. #!/bin/sh
  2. TEXT=`cat $1`
  3. PAR1="(Parameter.set 'Wavefiletype 'riff)\n"
  4. PAR2="(let ((utt (Utterance Text \"$TEXT\"))) (begin (utt.synth utt) (utt.save.wave utt \"$1.wav\"))) \n"
  5. echo Inicio festival!
  6. echo $PAR1$PAR2 | festival -b --pipe --language spanish
  7. lame -hf $1.wav $1.mp3
  8. rm $1.wav

Aquí en el script, lo que hacemos es indicarle a Festival que la salida la queremos en un fichero Wav. De todas formas no tenemos todo resuelto! tenemos que generar el mp3, y con lame lo hacemos de una manera sencilla :-)

Espero que os pueda ser de utilidad esta mini-receta, cualquier duda siempre podéis plasmarla en un comentario.

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
3Dic/091

La SGAE, visión de negocio seguro

por mariotux 3 comentarios »

Que visionario fue el creador de SGAE, una empresa privada con competencias juridicas administrativas amparada por la ley y la que impone el importe sancionador para llenar su cuenta de capital.

No todos los derechos de autor por los que SGAE cobra y/o sanciona, son reportados al autor en cuestión. Incluso cuando el autor niega el derecho de cobro, todo el mundo conoce el famoso caso de un concierto benéfico donde el autor no cobraba y la SGAE quería sacar tajada!

Lo peor de todo esto es que el dinero que se recauda, el famoso canon por cada dispositivo con capacidad de almacenamiento digital, es para una entidad privada.

Si ya estamos pagando un canon por todo, ¿estamos pagando los derechos de autor de las obras que se puedan consumri de manera ilegal? por lo tanto, ¿tenemos derecho a consumirlas?

Lo que me parece una vergüenza es que sea una entidad privada la que pueda recaudar estos impuestos, y no la administración pública. Aunque podamos estar o no de acuerdo con pagar un canon, por lo menos lo recaudado iría a parar a las arcas del estado, teniendo más fondos para subvenciones, inversiones... etc... Pero de esta manera lo que hacemos es llenar los bolsillos de unos pocos gracias a la contribución de todos.

Si tengo que estar pagando un canon, preferiría que el cobro lo hiciera la administración antes que una entidad privada. Sólo tenemos que hacer una búsqueda en Google para ver el conformismo general.

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks
2Dic/090

Desarrollo web orientado a servicios

por mariotux 2 comentarios »

Aunque no me considero de los "viejos" en Internet está claro que todo el que está envuelto en el desarrollo de aplicaciones web y/o usuario de los "últimos" servicios disponibles se estará dando cuenta.

Facebook, en su día fue una novedad y es cierto que ahora tiene muchos usuarios registrados y en donde puedes encontrar a mucha gente al igual que mantenerte en contacto. Pero entrar en Facebook es una locura, que si fulanito es tal pelicula... No obstante el post no va orientado hacia la funcionalidad de Facebok.

Tengo claro que el "futuro" de los desarrollos de aplicaciones web y/o servicios sociales tienen que tener una orientación a servicios web. El ejemplo claro lo podemos encontrar en Twitter. Una aplicación Web que tras publicar un API para desarrollar, la comunidad de desarrolladores y/o empresas de software le han sacado partido lanzando un sinfin de aplicaciones y widgets para el uso del servicio. No solo hace más cómodo en parte el utilizar este servicio, si no que deja a la mano del usuario final como quiere utilizarlo.

Estoy seguro que si para utilizar Twitter sólo se pudiera mediante su web, el éxito no sería tan rotundo!

No sólo de aplicaciones web sociales vive el hombre! también de productos, ya no tanto los desarrollos a medida que hasta hace un par de años era lo que se imponía en el desarrollo de aplicaciones o páginas web a nivel corporativo. Ahora se busca la estandarización y la creación de un producto que agilice la tarea. Aquí es donde viene el tema!

Si un producto web lo orientamos a servicios, teniendo "mini" productos Web descentralizamos el servicio y su mantenimiento. Todo esto no solo condiciona el desarrollo si no también la infraestructura que lo soporte.

Está muy al día el conceptualizar a la Web 3.0 como la Web Semantica, pero creo que antes de llegar hasta la Web Semantica tenemos que tener "un Internet" más usuable, más accesible sin depender de dispositivos/ordenadores en particular. Una revolución en la comunicación tiene que venir dada por la estrategia de los proyectos que verán la luz en Internet.

Share and Enjoy:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • Blogplay
  • email
  • Meneame
  • Netvibes
  • PDF
  • Technorati
  • Tumblr
  • Twitter
  • Yahoo! Bookmarks