Blog

Archivo: enero de 2010

Internacionalizar wordpress con wpml

Publicado en Desarrollo web en enero 29, 2010 3:01 am

La i18n o internacionalización es algo crítico hoy en día para los medios de comunicación online, que se basan mayormente en aplicaciones web.

La plataforma cms más usada en internet es sin duda WordPress, aplicación web que desde hace años cuenta con soporte i18n para sus themes y funciones internas. El problema siempre ha estado en la i18n del contenido.

Aunque muchos nos básabamos en filtrar por un tag determinado que representase la cultura del post o página que el usuario solicitase, las cosas han evolucionado y gracias a la dedicación e innovación de algunos profesionales en el sector de las traducciones online contamos con herramientas como wpml.

Esta herramienta nos permite no sólo traducir el theme del sitio web, sino que podemos además separar y asociar el contenido en base a su idioma o cultura de una forma muy sencilla. Esta separación tiene en cuenta las urls del sitio web, que pueden ser mediante subdirectorios o subdominios dinámicos.

Wpml es además,  un servicio online que a través de este plugin nos permite solicitar una traducción del contenido que queremos publicar a un idioma específico, hecho por un traductor nativo en ese idioma.

En su sitio web disponen de themes de ejemplo para poder estudiar cómo el plugin hace su trabajo, aunque basta con respetar el motor de i18n de wordpress a la hora de desarrollar el theme.

No hay nada como una herramienta hecha por y para profesionales de su sector.

Desarrollo ágil con symfony, doctrine y mysql workbench

Publicado en Desarrollo web en enero 26, 2010 11:40 pm

Desde hace ya unos cuantos años, en el desarrollo de aplicaciones web se tiende a utilizar herramientas que contribuyen no a que trabajemos más rápido, sino más ágil.

Ya no tiene sentido contar con grandes equipos de desarrollo, de hecho el nivel de productividad de un equipo formado por programadores y analistas suele verse afectado negativamente cuanta más cantidad de personas estén involucradas en el proyecto.

Normalmente las aplicaciones web conllevan un montón de tareas que son repetitivas o que pueden abstraerse o automatizarse. Conseguir reducir el tiempo que necesitamos invertir para realizar dichas tareas es clave para conseguir ser productivos.

Al igual que en otros lenguajes como ruby, python o c#, en php disponemos de varios frameworks diseñados para conseguir reducir estas tareas y ofreciéndonos una plataforma de calidad, compatible con TDD y centrada en ofrecernos arquitecturas REST, cosas claves en aplicaciones web.

De entre los frameworks más serios se encuentran Symfony y Zend Framework, ambos de una calidad y documentación extraordinaria. Symfony tiene la ventaja de contar con una comunidad muy fuerte de desarrolladores en España, y de casos de éxito tan rotundos como Yahoo Answers, Daily Motion y Delicious.

Además de contar con un potente y seguro motor para desarrollar formularios, un sistema de enrutamiento muy avanzado fácilmente internacionalizable, una arquitectura extensible por diseño, y la posibilidad de usar módulos de otras plataformas con Zend Framework o los nuestros propios, los creadores de symfony han desarrollado su propio orm llamado Doctrine que podemos utilizar para atacar a cualquier base de datos cuyo cliente sea compatible con PDO de php.

Doctrine viene por defecto con Symfony, pero también podemos usar la genial alternativa Propel, que personalmente nos permite hacer de forma mucho más elegante la i18n.

Como todo desarrollador con experiencia sabe, el crear el modelo de base de datos para nuestra aplicación y las clases que van a permitirnos operar con ellas, es la parte que probablemente conlleve más tareas automatizables o potencialmente abstraibles. Por ello, es muy importante el uso de un orm que nos automatice todo el trabajo.

Para muchos programadores esto les parecerá un error, ya que a veces solemos preocuparnos demasiado pronto por temas de rendimiento cuando en realidad deberíamos preocuparnos por terminar unas cuantas fases previas que son las que realmente nos van a permitir tener el proyecto online con calidad en un tiempo aceptable.

Crear el modelo

Como la mayoría de cosas en symfony, para crear nuestro modelo podemos hacerlo mediante un archivo de configuración yaml.

Este archivo se llama schema.yml y se ubica en el directorio config/doctrine, siendo relativo a todas las aplicaciones de nuestro proyecto symfony.

La sintaxis es bastante comprensible y nos permite de una forma limpia y sencilla representar nuestro modelo de datos.


---
detect_relations: true
options:
  collate: utf8_general_ci
  charset: utf8
  type: InnoDB

User:
  columns:
    user_id:
      type: integer(4)
      primary: true
      notnull: true
      autoincrement: true
    name:
      type: string(45)
      notnull: true
    email:
      type: string(90)
      unique: true
      notnull: true
    bornDate:
      type: timestamp
      notnull: true
  options:
    charset: utf8
    collate: utf8_general_ci

Este archivo de configuración nos permite tener un esquema fácilmente mantenible que permitirá a symfony automatizar las tareas de creación del código sql para crear la base de datos, además de todas las clases php que usaremos para trabajar con la misma.


#creamos el código sql encargado de crear la base de datos
php symfony doctrine:build-sql

#creamos las clases php para trabajar con esta base de datos
php symfony doctrine:build-model

Esto nos ha ahorrado una cantidad increíble de tiempo, que tendríamos que haber invertido en tareas que en principio no son costosas en complejidad pero si en tiempo.

Vemos ahora cómo insertar un registro en la tabla que hemos creado, hacemos un select, un update y lo borramos.


//hacemos un insert en la base de datos
$user = new User();
$user->name = "Manolo";
$user->bord_date = date("d-m-Y",strtotime('1974-02-11'));
$user->save();

//hacemos un update
$user->name ="María";
$user->save();

//eliminamos el registro
$user->delete();

//hacemos un select
$q = Doctrine_Query::create()->select('u.name')->from('User u')->where("u.user_id = ? ") ;
$items = $q->execute(array(1));

foreach($items as $item){ echo $item->name;  }

Generando el schema.yml desde Mysql Workbench

Hasta ahora nuestro mayor trabajo a la hora de crear nuestro modelo, sin contar el tiempo que hemos invertido en pensar su diseño, ha sido crear el archivo schema.yml.
Esto también se puede automatizar mediante un plugin para mysql workbench que nos permitirá exportar nuestro diagrama e/r directamente a un archivo.yml.

mwb
Con nuestra tabla ahora podremos crear nuestro schema.yml desde el menú plugins/catalog, pudiendo generar un archivo o directamente pegarlo en el portapapeles.

Hay que tener cuidado con este plugin ya que nos nombres de las clases del modelo, que represantan las tablas de nuestro modelo, las escribirá en minúsculas cuando por convención deberían empezar con la primera letra capitalizada.

Conclusión

Actualmente existen diferentes herramientas y técnicas que nos permiten ser muy productivos a la hora de desarrollar aplicaciones web, como es el caso de Symfony y Doctrine.

Script para ayudarte a migrar de php5.2 a php5.3

Publicado en Desarrollo web en enero 25, 2010 9:33 pm

Como en la nueva versión de php algunas de las funciones más usadas de php se consideran deprecated y se han añadido nuevas funcionalidadesStanislav Malyshev se ha hecho un script que nos avisa de posibles incompatibilidades en nuestro código.

Dicho script es una utilidad de línea de comandos que puede buscar código problemático en un archivo php o en un directorio.

El script lo podéis descargar de github en este enlace.

Lo que un programador php debería conocer para actualizarse a php5.3

Publicado en Desarrollo web en enero 18, 2010 1:40 am

El mismo código en php5.3 se ejecuta un 50% más rápido que un código escrito en php5.2

La mejora del rendimiento unido a la mejora en cuanto seguridad es lo que debería motivar a cualquier desarrollador php a actualizarse a la nueva versión.

Además pueden surgir problemas en el código escrito en versiones anteriores.

Entre los cambios más importantes que podemos encontrarnos, están los siguientes:

Las short tags de php están obsoletas

Ahora usar <? o <?=$variable dará error tipo DEPRECATED e interrumpirá la ejecución de la aplicación web.

Esto era recomendable desde hace varios años para evitar conflictos en documentos xml, que empiezan con dichas tags.


//el siguiente código dará error
<? echo "hola"; ?>
<?=$di_hola ?>

//el código correcto es el siguiente
<?php echo "hola"; ?>
<?php echo $di_hola; ?>

Nueva constante __DIR__

Esta nueva constante sirve para reemplazar el típico código dirname(__FILE__) que nos devuelve el nombre del directorio en el cual se encuentra el script desde el que se invoca.

Mejoras en el operador ternario

Ahora bastará indicar dos opciones para una situación en la que una variable tendrá un valor o no.

Php tomará como buena la opción que tenga un valor true o no sea empty().


echo true?:false;//true

echo false?:true;//true

echo ""?1;//1

echo 0?:2;//2

$array= array()?:array(1);//la variable array contendrá -> array(1);

echo strlen("")?:strlen("a");//1

mySQLInd

Librería cliente entre mysql y php, que no requiere otras librerias clientes intermedias.

Funciona de una forma transparente al programador y de una forma mucho más eficiente que libmysql.

El único inconveniente es que no tiene soporte completo actualmente para PDO, solo para la interfaz mysqli.

*NOTA: este cliente guardará por defecto datos en campos tipo PASSWORD de mysql con compatibilidad superior a mysql4, se elimina el soporte para formatos anteriores dando un error del tipo

“mysqlnd cannot connect to MySQL 4.1+ using old authentication.

Archivos .user.ini y distintas configuraciones de php para un mismo php.ini

Se pueden usar archivos .user.ini para configuraciones de fastcgi/cgi similares a .htaccess.

Ahora los archivos php.ini podrán contener archivos .ini adicionales con configuraciones especializadas para un directorio concreto.

Namespaces

Los namespaces era una funcionalidad muy esperada por los desrrolladores de php. Ahora gracias a ellos podremos tener un código muchos más limpio y ordenado.

Php 5.3 y superiores soportarán múltiples namespaces por archivo.

Ejemplo de código sin usar namespaces

function common_hacerAlgo(){
/**/
}

class Common_Mailing
{
/**/
}

define('COMMON_CONST','');

common_hacerAlgo();

new Common_Mailing();
COMMON_CONST;

Mismo ejemplo con namespaces


namespace COMMON;

function hacerAlgo()
{}

class Mailing
{}

const CONS = '';

use COMMON as cm;

hacerAlgo();

new Mailing();

CONST;

Restablecer la contraseña de Mailman

Publicado en Sistemas TI en enero 15, 2010 1:51 am

Si has olvidado la contraseña de administrador de mailman, puedes restablecerla desde:

$MAILMAN_ROOT_D/bin/mmsitepass

Pd: Si usas Plesk, puedes localizar la ruta $MAILMAN_ROOT_D como hemos comentado aquí.

Cómo obtener los paths definidos para las aplicaciones y servicios de Plesk

Publicado en Sistemas TI en enero 15, 2010 12:47 am

Puede resultar muy útil para saber dónde está cada cosa y conocer las distintas variables de Plesk. Sobre todo, si gestionais diferentes entornos y no es posible una configuración homogénea entre ellos.


# cat /etc/psa/psa.conf

#
# (c) Copyright 1999-2008 Parallels
# All Rights Reserved
#
# This file is used to declare the location of different utilities,
# services, and/or packages within Plesk.  No changes should be made
# to this file without first consulting support. Any changes made can
# affect service availability and performance.
#
# Each line in this file follows the following format:
#
# variable [whitespace characters] value
#
# That is, the name of the field, followed by spaces or tabs, followed
# by field value. Trailing spaces are removed.
#

# Plesk tree
PRODUCT_ROOT_D /usr/local/psa

# Directory of SysV-like Plesk initscripts
PRODUCT_RC_D /etc/init.d

# Directory for config files
PRODUCT_ETC_D /usr/local/psa/etc

# Directory for service utilities
PLESK_LIBEXEC_DIR /usr/lib64/plesk-9.0

# Virtual hosts directory
HTTPD_VHOSTS_D /srv/www/vhosts

# Apache configuration files directory
HTTPD_CONF_D /etc/apache2

# Apache include files directory
HTTPD_INCLUDE_D /etc/apache2/conf.d

# Apache binary files directory
HTTPD_BIN_D /usr/bin

#Apache log files directory
HTTPD_LOG_D /var/log/apache2

#apache startup script
HTTPD_SERVICE apache2

# Qmail directory
QMAIL_ROOT_D /var/qmail

# Location of qmail maildirs
PLESK_MAILNAMES_D /var/qmail/mailnames

# Path to rblsmtpd
RBLSMTPD /usr/sbin/rblsmtpd

# Courier-IMAP
COURIER_IMAP_ROOT_D /

# Proftpd
FTPD_CONF /etc/proftpd.conf
FTPD_CONF_INC /etc/proftpd.include
FTPD_BIN_D /usr/bin
FTPD_VAR_D /var/run/proftpd
FTPD_SCOREBOARD /var/run/proftpd/scoreboard

# Bind
NAMED_RUN_ROOT_D /var/lib/named
NAMED_OPTIONS_CONF /etc/named.conf.include.plesk-options
NAMED_ZONES_CONF /etc/named.conf.include.plesk-zones

# Webalizer
WEB_STAT /usr/bin/webalizer

# Logrotate
LOGROTATE /usr/local/psa/logrotate/sbin/logrotate

# MySQL
MYSQL_VAR_D /var/lib/mysql
MYSQL_BIN_D /usr/bin

# PostgreSQL
PGSQL_DATA_D /var/lib/pgsql/data
PGSQL_BIN_D /usr/bin

# Backups directory
DUMP_D /var/lib/psa/dumps

# Mailman directories
MAILMAN_ROOT_D /usr/lib/mailman
MAILMAN_VAR_D /var/lib/mailman

# Python binary
PYTHON_BIN /usr/bin/python2.6

# Tomcat root directory
CATALINA_HOME /usr/share/tomcat6

# DrWeb
DRWEB_ROOT_D /opt/drweb
DRWEB_ETC_D  /etc/drweb

# GnuPG binary
GPG_BIN /usr/bin/gpg

# Tar binary
TAR_BIN /bin/tar

# AWStats
AWSTATS_ETC_D /etc/awstats
AWSTATS_DOC_D /usr/share/apache2/icons/awstats

# openssl binary
OPENSSL_BIN /usr/bin/openssl

LIB_SSL_PATH /lib/libssl.so
LIB_CRYPTO_PATH /lib/libcrypto.so

CLIENT_PHP_BIN /usr/local/psa/bin/php-cli
CGI_PHP_BIN /usr/bin/php-cgi5
AWSTATS_TOOLS_D /usr/share/doc/packages/awstats/tools
AWSTATS_BIN_D   /srv/www/cgi-bin

Cambiar el modo de ejecución de PHP a FastCGI en Plesk Windows

Publicado en Sistemas TI en enero 13, 2010 9:05 pm

En IIS es muy recomendable ejecutar las aplicaciones PHP como FastCGI, la mejora de rendimiento es notable. Además en entornos en los que hay corriendo más de una aplicación php, esto nos permite separar los procesos facilitando la administración y aislando una aplicación de otra.

Utilizando Plesk, por defecto el panel utiliza ISAPI para ejecutar las aplicaciones y permite la elección entre CGI y FastCGI. Nuestro consejo es siempre utilizar FastCGI, a no ser que no nos quede otro remedio.

Establecer FastCGI por defecto

Hay que establecer el valor “fastcgi” en el registro:

# En el registro de Windows vamos a:

HKEY_LOCAL_MACHINESOFTWAREPLESKPSA ConfigConfig

# Y establecemos:

PLESKCP_PHP_MODE -> fastcgi

Luego vamos a la consola (cmd) y desde el directorio %plesk_dir% ejecutamos el siguiente comando para que se apliquen los cambios:

reconfigurator.exe /check=Services

Acceder a la configuración de symfony con sfConfig desde una tarea

Publicado en Desarrollo web en enero 11, 2010 1:55 am

En ocasiones cuando creamos una tarea que debe ejecutarse desde línea de comandos en una aplicación web escrita con Symfony, necesitamos tomar algunos valores de los archivos de configuración para no hardcodearlos en el código interno.

Para poder hacerlo, necesitamos especificar el nombre de la aplicación de la cual queremos leer el archivo de configuración. En caso de no indicarlo, Symfony no buscará los valores en ningún archivo de configuración.

Lo conseguimos mediante el parámetro –application al invocar la tarea


php symfony namespace:tarea --application=frontend

Optimizar el consumo de recursos de Firefox

Publicado en General en enero 10, 2010 1:31 am

Si usais Firefox de forma habitual, habréis sufrido sus cuelges y visto con impotencia como devora la memoria RAM del equipo sin contemplación. Vamos a ver un par de trucos para evitar parte del problema.

Limitar el uso de memoria

Por defecto tiene un valor muy alto, para reducirlo:

1. En la URL de Firefox escribir about:config, te aparecerá una advertencia, no te preocupes si sólo tocas lo que te digo no romperás nada.

manazas

2. En el cuadro de búsqueda pon browser.cache y pulsa enter. El valor que hay que cambiar es el de browser.cache.disk.capacity. Depende mucho de la memoria que tengais disponible, mi recomendación es bajarlo a un valor entre 15.000 y 20.000. Luego, como todo tuneo es cuestión de ir afinando según cada equipo.

cache

Liberar memoria cuando Firefox se minimiza

Sino vas a trabajar con Firefox durante un tiempo y lo minimizas, este seguirá consumiendo memoria. Teniendo que cerrarlo o reiniciarlo para liberar RAM. Una cosa útil es decir a Firefox que escriba el contenido de la memoria a disco cuando este minimizado y que recupere los datos cuando se maximice la aplicación.

Para ello, desde el about:config, pincha con el botón derecho y elige Nuevo > Lógico para crear un nuevo valor que debes llamar config.trim_on_minimize y establecer su valor a TRUE. Tendrás que reiniciar Firefox para que esto funcione.

nuevovalor

minimize

Aquí hay otros tips interesantes que puedes probar, yo por el momento no los he utilizado así que no puedo comentar sobre ellos.

Nuestro compromiso con el Green Computing

Publicado en Nuestros servicios en enero 7, 2010 9:31 pm

Estos últimos meses hemos estado leyendo sobre cómo empresas tecnológicamente punteras apuestan e invierten en el Green Computing.

En Blackslot también apostamos seriamente en este sentido,  a la hora de construir infraestructuras de sistemas y desarrollar aplicaciones web, ya que además de contribuir a reducir el impacto medioambiental conseguimos reducir los costes que nuestros clientes hacen en infraestructura TI.

2523936035_135627161c_b

Green Computing en nuestras soluciones de Sistemas TI

En el campo de sistemas TI nuestra mayor apuesta reside en la virtualización con HyperV. Dicha tecnología nos permite principalmente reducir el número de servidores en nuestro centro de datos, ganando en redundancia, mejorando la seguridad, la gestión y la recuperación frente a desastres.

Gracias a nuestras soluciones facilitamos la migración de los servidores físicos de nuestros clientes a nuestra infraestructura virtual, sin riesgos de conflictos de software en caso de posibles incompatibilidades o requisitos por parte de antiguos desarrollos a medida. En estos casos podemos separar e incluso reducir el margen de inestabilidad de aplicaciones que se han desarrollado hace décadas y para las que  actualizar la plataforma sobre la que están implementadas no es una opción. Por nuestra experiencia, hemos comprobado que éste tipo de aplicaciones utilizan hardware antiguo que tiene un impacto medioambiental muy elevado.

Además de reducir el hardware de servidor, podemos reducir el hardware de las terminales de trabajo. Disponemos de soluciones que permiten virtualizar las aplicaciones ofimáticas o el propio sistema operativo que el usuario utiliza, sustituyendo los equipos con los que trabajan por ordenadores de menores prestaciones que también tienen menor consumo eléctrico y menor impacto medioambiental.

Green Computing en nuestros proyectos de desarrollo web

La mayoría de los proyectos web que nos piden nuestros clientes tienen como objetivo el sustituir programas instalados en los ordenadores que utiliza el personal en sus empresas, por aplicaciones web accesibles a través del navegador en dichos equipos. Con esto se pueden reducir los requisitos de hardware de las estaciones de trabajo e incluso sustituirlos por netbooks, aparatos con un consumo eléctrico e impacto menores cara al medio ambiente, lo que supone además de una reducción de gastos considerable.

A la hora de desarrollar y diseñar la arquitectura de nuestras aplicaciones pensamos siempre en reducir el consumo de recursos de los servidores, distribuyendo las diferentes tareas que las mismas deben realizar entre diferentes servidores y optimizando el código para que el acceso a disco y procesador sea el estrictamente necesario.

Foto:  infogelairekia

Configuración rápida de Virtual Host en Apache

Publicado en Sistemas TI en enero 7, 2010 9:32 am

Tras tener Apache+php+mysql instalado, llega el momento de crear alojamientos virtuales para nuestros dominios. Apache guarda los archivos de configuración de los Virtual Host en  /etc/apache2/vhosts.d/ si no hemos configurado ninguno allí veremos las plantillas que podemos usar como base (una con ssl y otra sin ssl).

En el ejemplo, voy a crear un archivo de configuración para BlackSlot en openSuse.

# Nos movemos al directorio de configuración vhost
cd /etc/apache2/vhosts.d
# Copiamos la plantilla a un nuevo archivo
cp vhost.template blackslot.conf
# En otra distribución seguramente sea /var/www/vhosts/
mkdir -p /srv/www/vhosts/blackslot/

Es importante tener en cuenta que el archivo de configuración debe terminar con el sufijo “.conf” para que Apache lo lea.

Debemos editarlo y sustituir el dominio de ejemplo “dummy-host.example.com” por el nuestro, así como las rutas que en nuestro ejemplo es /srv/www/vhosts/blackslot/. Sobre todo establece correctamente el DocumentRoot y donde dice <Directory “/srv/www/vhosts/dummy-host.example.com”>

Reiniciamos Apache y listo.

/etc/init.d/apache2 restart

Instalar extensión php-memcached en Suse Linux

Publicado en Desarrollo web Sistemas TI en enero 6, 2010 9:00 am

Aunque este tutorial está escrito pensando en una distribución Suse y openSuse, se podría aplicar a otras como debian.

Antes de nada, tenemos dos opciones a elegir: php-memcached o php-memcache. Las dos funcionan igual en la capa de programación php, pero tienen las siguientes particularidades:

php-memcache: Es la extensión más antigua de las dos, no requiere librerías adicionales.

php-memcached: Es la extensión más nueva, pero desarrollada por Andrei Zmievski (desarrollador del core de php) y requiere libmemcached. Yo he elegido esta, porque me da más confianza que Andrei sea el responsable de su desarrollo.

* Nota: si usas symfony 1.2 o inferior, debes usar la extensión php-memcache

Comencemos pues descargando la extensión libmemcached y la compilamos.


wget http://download.tangent.org/libmemcached-0.35.tar.gz

tar -xvf libmemcached-0.35.tar.gz

cd libmemcached-0.35/

/configure

make

make install

Ahora nos tendríamos que bajar la extensión php-memcached del sitio web pecl, pero antes debemos instalar las librerías de desarrollo de php, para poder compilar dicha extensión.

#instalamos las librerías de desarrollo de php
zypper install php5-devel

#ahora nos bajamos la extensión de pecl
wget http://pecl.php.net/get/memcached-1.0.0.tgz
cd memcached-1.0.0/

#hacemos un phpize para generar el configurador
phpize

#compilamos
/configure
make
make install

Por último debemos crear el archivo /etc/php5/conf.d/memcached.ini e indicar lo siguiente en él para que php active esta extensión:

extension=memcached.so

Ahora basta con reiniciar el servidor web para disponer de esta extensión habilitada.

Instalar LAMP (Linux+Apache2+MySQL5+PHP5) en openSuse 11.2

Publicado en Sistemas TI en enero 5, 2010 9:12 am

1. Instalar los paquetes necesarios:


# zypper install apache2 php5 mysql

2. Levantar apache y mysql:


# rcapache2 start
# rcmysql start

3. Creamos una configuración segura para mysql:


# mysql_secure_installation

Aquí nos pedirá crear una clave para el usuario root de mysql, eliminaremos los usuarios anonimos y la bd ‘test’ y deshabilitaremos el login remoto con privilegios de root.

4. Abrimos el puerto 80 (HTTP)


# SuSEfirewall2 open EXT TCP http

# SuSEfirewall2 stop

# SuSEfirewall2 start

5. Probamos que todo está instalado correctamente:


# touch /srv/www/htdocs/phpinfo.php
# echo '<?php phpinfo(); ?>' > /srv/www/htdocs/phpinfo.php

Y accedemos desde el navegador a http://ipserver/phpinfo.php. Aquí, fijaros que PHP5 y mysql figuren como instalados.

Enviar correo con gmail en php usando swift mailer 4

Publicado en Desarrollo web en enero 4, 2010 2:53 pm

Swift Mailer es probablemente la mejor librería para enviar correos mediante smtp y sendmail que existe para php. Escrita por Fabien Potencier, CEO de Sensio Labs y Lead developer del framework Symfony para php.

El siguiente código nos permite enviar correo usando el servidor smtp de gmail con esta herramienta:


 $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',
                                               465,
                                               'ssl')
              ->setUsername('usuario@gmail.com')
              ->setPassword('tu contraseña');

 //Creamos el mailer pasándole el transport con la configuración de gmail
 $mailer = Swift_Mailer::newInstance($transport);

 //Creamos el mensaje
 $message = Swift_Message::newInstance($subject)
             ->setFrom(array('tuemail@blackslot.gov' => 'Blackslot'))
             ->setTo($to_addresses)
             ->setBody($body);

 //Enviamos
 $result = $mailer->send($message);

Generar un archivo CSR en IIS 6.0

Publicado en Sistemas TI en enero 4, 2010 9:30 am

IIS > Sitios Web > Propiedades del sitio > Seguridad de directorios > Certificado de servidor… > Crear un nuevo certificado > Preparar la petición ahora pero enviarla más tarde > Poner un para el certificado y dejar longitud en bits de 1024 > Rellenar el resto de datos que solicita el formulario hasta finalizar.

Es IMPORTANTE que donde pregunta el “Nombre común” (Common name) se ponga el nombre COMPLETO del dominio para el que vamos a solicitar el certificado, por ejemplo www.blackslot.com

Salvar la key privada

MMC > Complemento Certificates > Seleccionar Request > All task > Export

Más info en:

https://support.comodo.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=248&nav=0,1,33