944 063 154

Blog

Virtualizando SQL Server 2008 sobre Hyper-V R2

Publicado enSistemas TI

Si vas a virtualizar un entorno SQL Server 2008, es recomendable que tengas en cuenta los siguientes aspectos:

Los diferentes tipos de discos

  • De espacio fijo. En SQL Server 2008 es muy importante el I/O (entrada y salida) de los volúmenes con los que se está trabajando. Por ello, nuestra recomendación es utilizar siempre discos de espacio fijos para guardar toda la información.
  • Controladora SCSI. Al igual que sucede en los entornos físicos, en un entorno virtual sólo podremos colocar hasta 4 discos IDE. Por lo que si necesitamos más discos lo mejor es utilizar un bus SCSI que permita el almacenamiento de los datos.
  • Usar varios VHD. Es decir, uno para el propio sistema y los archivos de instalación de SQL; otro para tempdb, otro para los logs, otro para los datos… Esto, al igual que en un entorno real permite mejorar el I/O, sobre todo si disponemos de una cabina y dedicamos discos separados (spindles) o LUN para mejorar aún más el I/O. Incluso en el caso de que no dispongamos de discos separados sigue siendo recomendable utilizar diferentes VHDs como forma de almacenamiento de la información.
  • Sistema de archivos. NTFS con unidad de asignación a 64 K; ya que esta tecnología nos permitirá obtener un mejor rendimiento.

El tipo de red

  • Es importante que la red sea Gigabit y que la velocidad haya sido configurada en full-duplex.
  • Siempre que sea posible usaremos los adaptadores sintéticos que usan los Servicios de Integración instalados en la máquina virtual para funcionar. Este tipo de dispositivos ofrecen mucho mejor rendimiento que los dispositivos emulados. Estos últimos sólo son útiles por razones de compatibilidad en sistemas que no soportan los Servicios de Integración (anteriores a MS Windows Server 2003 R2, kernels de Linux no soportados, etc…).
  • Si es posible usar teaming para mejorar el rendimiento y ofrecer redundancia. Algo que es especialmente interesante para realizar conexiones a una cabina vía iSCSI.

Memoria de la máquina virtual

La memoria se comporta exactamente igual en un entorno virtual que dentro de una máquina física. A diferencia de otros hypervisores, en Hyper-V no se permite el sobreuso (aunque MS ya está trabajando en ello); por lo que la cantidad asignada a una máquina virtual (VM) se reserva en el nodo anfitrión por completo. Recuerda que es importante dejar al propio nodo anfitrión un mínimo de 2 GB libres para que puedan ejecutarse correctamente el sistema y cada una de sus tareas.

Si sigues estos apuntes no debería haber ningún problema para virtualizar un entorno SQL Server sobre Hyper-V.

Tecno-amig@, ¿ya sabes cómo usar Hyper-V con un adaptador de red inalámbrico?

Crear una consulta select count a una select con PHP

Publicado enDesarrollo y Programación

Es posible que en alguna situación concreta necesitemos hacer una consulta del tipo select count. Algo que es especialmente útil cuando queremos hacer listados con consultas que tienen muchos elementos; como joins, condiciones where, orders o similares. También es posible que lo que quieras sea realizar en el sitio web sea una paginación. En este caso, además de realizar las consultas correspondientes, será necesario que posteriormente cachees cada una de ellas.

Cada vez que generamos este tipo de consulta select count de forma dinámica, lo habitual es que hagamos un count contra una subquery. Una subquery que sea esa misma consulta pero a la que le quitaremos todos los limits. Algo parecido al script que te mostramos a continuación y cuyo uso, en este momento, está totalmente desaconsejado:


SELECT count(*) FROM ( SELECT ...la query sin los limits) as tuplas

Consulta select count

Esto puede ocasionar serios problemas de rendimiento, sobre todo si la consulta contiene, por ejemplo, cláusulas de tipo ORDER. Para mejorar esto podemos recurrir al uso de las funciones strrpos y substr de PHP. Unas funciones que se encargan de encontrar cuál es la última coincidencia dentro de una cadena o cuál es el carácter en una cadena que nos ha sido dada. Una vez que las funciones han localizado esta coincidencia, la cadena se partirá en función de los límites que hayamos establecido previamente. El uso de estas funciones nos permiten tener una consulta count para nuestra query principal, sin tener que reescribir lo mismo dos veces.

Para ello, en primer lugar, tenemos que eliminar todos los caracteres en una cadena contenida en la $query. Desde el principio hasta la última coincidencia que se encuentre de la palabra ORDER. Es decir, contando desde el principio hasta el final de una misma cadena. Recurrir a este tipo de funciones hará que se elimine de la query original los últimos ORDERs y LIMITs. Algo similar al script que te mostramos a continuación:


*/ $count_query = substr($query,0,strrpos($query,"ORDER"));

Seguidamente, deberemos eliminar desde el principio de la query hasta el último FROM que se haya encontrado al hacer uso de dichas funciones. Es decir, algo como lo siguiente:


*/ $count_query = substr($count_query,strrpos($count_query,"FROM"),strlen($count_query));

Finalmente, tendremos que agregar la sentencia COUNT a la query. Para ello, puedes recurrir a un script como el que te mostramos a continuación:


*/ $count_query = "SELECT COUNT(*) as total ".$count_query;

De esta forma, la creación de este tipo de consultas en PHP se realizará de una forma mucho más limpia y, sobre todo, ordenada. Todo ello sin que el rendimiento de la web o del servidor pueda verse afectado.

Ejecutar código SQL nativo en Doctrine

Publicado enDesarrollo y Programación

En ocasiones es posible que necesitemos optimizar ciertas consultas SQL. Otras, simplemente, hacer querys algo complejas; incluso es posible que tengamos que lidiar con el código DQL para generar una determinada query. Y en la gran mayoría de las ocasiones, estas acciones pueden llevarnos demasiado tiempo. Para evitarlo, contamos con la posibilidad de ejecutar código nativo desde Doctrine. En este caso, SQL nativo en Doctrine.

El código nativo es el lenguaje que permite el funcionamiento de una máquina. Un lenguaje que puede crearse de dos formas diferentes. Por un lado, es posible desarrollar código nativo para microprocesadores de fácil funcionamiento: Pero, por otra parte, también puede recurrirse al código nativo como código fuente ya compilado y listo para ser utilizado por una determinada máquina. De esta forma, optimizaremos el tiempo que lleva la realización de una consulta a la base de datos.

Cómo ejecutar SQL nativo

Para ejecutar SQL nativo y reducir al máximo el tiempo para realizar una consulta SQL, puedes recurrir a una serie de scripts que te permitan realizar las tareas necesarias.

Empezaremos, en primer lugar, por definir la consulta que vamos a realizar. Para, a continuación, recuperar el singleton de la conexión. El singleton no es más que un patrón de diseño que nos permitirá crear los diferentes objetos que pertenecen a la misma clase o valor de los elementos que componen la base de datos. Su objetivo es asegurar que la clase solo tenga una única instancia y facilitar un punto de acceso de tipo global a la clase.

Una vez realizadas las configuraciones necesarias, pasaremos a ejecutar la consulta. Finalmente, recuperaremos las tuplas de resultados; es decir, una lista ordenada de los elementos que componen las clases.

A continuación, te indicamos cuáles son los scripts que tienes que utilizar para realizar cada una de las tareas necesarias para la ejecución de código nativo SQL desde Doctrine.

//definimos la consulta
$query = "select id from tabla";

//recuperamos el singleton de la conexión
$con = Doctrine_Manager::getInstance()->connection();

//ejecutamos la consulta
$st = $con->execute($query);

//recuperamos las tuplas de resultados
$rs = $st->fetchAll();

Una vez realizado esto, ya podríamos empezar a ejecutar SQL de forma nativa, optimizando así nuestro código. Y, sobre todo, facilitándonos la escritura de nuevo código.

Teniendo en cuenta el tiempo que, en muchas ocasiones, lleva la ejecución de determinadas tareas; unido a las facilidades que ofrece un código ordenado, utilizar este método es todo un acierto. A partir de ahora, solucionar problemas en el código o las bases de datos no solo será más sencillo, sino que requerirá de un tiempo mucho menor.

Internacionalizar WordPress con WPML

Publicado enDesarrollo y Programación

La internacionalización resulta algo crítico hoy en día para los medios de comunicación online. Básicamente, porque 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. Y el problema siempre ha estado en la i18n del contenido. Aunque muchos nos basábamos en filtrar por un tag determinado que representase la cultura del post o página que el usuario solicitase, las cosas han evolucionado considerablemente. Gracias a la dedicación e innovación de algunos profesionales en el sector de las traducciones online, en este momento contamos con herramientas como WPML.

WordPress WPML, el plugin para solicitar traducciones de contenido

Esta herramienta nos permite traducir el theme de un sitio web; asimismo, podemos 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. Ten en cuenta que las traducciones automáticas para cada idioma se pueden configurar mediante el selector de idiomas a través del panel de administración.

WPML es, además, un servicio online. Un plugin que nos permite solicitar una traducción del contenido que queremos publicar a un idioma específico, hecho por un traductor nativo en ese idioma. Por lo que el cometido de WPML para internacionalizar la marca se cumple de maravilla. En tu sitio web, dispones de themes de ejemplo para poder estudiar cómo trabaja el plugin WPML. En realidad, 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. Esto es, temas y plugins que nacen con el objetivo de satisfacer las necesidades de cada uno de los proyectos. Y, en este caso, WPML es de los mejores para realizar traducciones en tu WordPress multisite o multilingüe. Tus sitios webs estarán perfectamente traducidos y orientados a diferentes públicos o países.

Administración WordPress total

En Linube, si te interesa delegar la gestión integral de tu site, también ofrecemos administración para tu WordPress. Confía en Linube y delega en nosotros las responsabilidades de gestión de tu cms. Nos encargamos de todo: desde la instalación de tu wordpress hasta la administración de sistemas informáticos. Si necesitas más información al respecto, puedes contactar siempre que quieras con nosotros; ya sea vía correo electrónico o por teléfono.

Además, puedes visitar nuestro perfil como colaborador de WPML en su sitio web, junto con algunos de los proyectos que hemos realizado utilizando este plugin. Sin duda la aparición de WPML nos facilita en gran medida la creación de sitios web en diversos idiomas.

Desarrollo con Symfony, Doctrine y MySQL Workbench

Publicado enDesarrollo y Programación

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. Como es el caso de desarrollo con Symfony o Doctrine, entre otras. 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 de programación como Ruby, Python o C#, en PHP disponemos de varios frameworks diseñados para conseguir reducir estas tareas. Además, ofreciéndonos una plataforma de calidad, compatible con TDD y centrada en ofrecernos arquitecturas REST. Todas ellas 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. Además de casos de éxito tan rotundos como Yahoo Answers, Daily Motion y Delicious.

Además permite 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. Por si fuera poco, los creadores de symfony han desarrollado su propio orm llamado Doctrine. Una aplicación 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.

Cabe destacar que para muchos programadores esto puede 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 etapas que realmente nos van a permitir tener el proyecto online con calidad en un tiempo aceptable.

Desarrollo con Symfony. Creando 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

Desarrollo con Symfony; segunda parte

Este archivo de configuración nos permite tener un esquema fácilmente mantenible. Y  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.

desarrollo con synfony-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.

Si quieres mantenerte informado de muchas más cosas además del desarrollo con Symfony o Doctrine, no dudes en visitar asiduamente nuestro blog tecnológico.

Script para ayudarte a migrar de PHP 5.2 a PHP 5.3

Publicado enDesarrollo y Programación

No es la primera vez y, lamentablemente, no será la última que hablamos de la importancia de utilizar las últimas versiones estables. Tanto de lenguajes de programación, como de gestores de contenido e incluso servidores. Mantener el sistema actualizado es le mejor forma de protegernos ante un posible ciberataque; ya que, por norma general, estos intentan explotar las vulnerabilidades. Y, los fallos de seguridad se solucionan con parches o mediante actualizaciones. Así que, si no cuentas con la última versión de PHP, estás tardando y mucho. Migrar de PHP nos aporta muchísimas ventajas que no deberíamos dejar en el olvido.

Por ejemplo, como la nueva versión de PHP considera a algunas de las funciones que más se utilizan como deprecated; en PHP 5.3 se han añadido nuevas funcionalidades. Nuevas formas para ejecutar las mismas tareas que no deberías seguir realizando mediante funciones ahora consideradas como obsoletas.

Como viene siendo habitual, una vez más, debemos agradecer a todos aquellos desarrolladores; especialmente por su esfuerzo de mejorar y poner al servicio de todos sus extensos conocimientos. En esta ocasión es Stanislav Malyshev quien se ha encargado de desarrollar un script que nos avisa de posibles incompatibilidades en nuestro código. Algo fundamental antes de migrar a una versión superior de cualquier servicio: comprobar la compatibilidad del código; en este caso. El script creado por Malyshev es una utilidad que puedes ejecutar desde la línea de comandos; y que puede ser de gran ayuda para buscar código problemático, ya sea en un archivo PHP o dentro de un directorio.

Descarga Script para migrar de PHP

Si quieres conseguir el script de Stanislav Malyshev, está disponible en su repositorio de GitHub. A pesar de que con dicho script migrar de PHP 5.2 a PHP 5.3 será más sencilla, no hace falta decir que no es automática. Por lo que para que la migración se realice de forma correcta es necesario que, una vez comprobada la compatibilidad del código, lleves a cabo la migración.

En el caso de que no estés muy seguro de llevar esta tarea por ti mismo, puedes ponerte en contacto con nosotros. Nos encargaremos de realizar la tarea y que tu web siga funcionando de forma correcta. Os recordamos que este tipo de labores de mantenimiento están incluidas en nuestro servicio de administración de sistemas. Por lo que puedes librarte de tener que realizar este tipo de cambios técnicos contrátandolo.

Dedica tu tiempo a otras cosas más amenas, que la parte técnica de tu proyecto corre por nuestra cuenta.

Mejoras de PHP 5.3 que todo programador debería conocer

Publicado enDesarrollo y Programación

¿Eres programador PHP? Entonces deberías actualizarte a la nueva versión de php y aprovecharte de sus mejoras. Con PHP 5.3, el mismo código en php 5.3 se ejecuta un 50% más rápido que un código escrito en php 5.2. Unido a 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:

1. 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; ?>

2. 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.

3. 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

 4. 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.

 5. 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;

Actualízate ya a PHP 5.3

¿No dispones aún de la última versión de PHP? En el siguiente artículo te contamos paso a paso cómo migrar de PHP.

Restablecer la contraseña de Mailman

Publicado enCorreo / Webmail

Antes de aclarar el proceso a llevar a cabo para la recuperación de nuestro password en Mailman, comentemos brevemente en qué consiste esta herramienta. Mailman es una aplicación que tenemos instalada en un servidor dedicado para el envío de correo electrónico; el objetivo es que la entrega de correo sea mucho más rápida y eficiente. Mailman, es free software (software libre) y se distribuye bajo la licencia Pública General de GNU. Como curiosidad adicional, comentar que está escrito en el lenguaje de programación Phyton.

Para acceder a la aplicación necesitamos ingresar una contraseña; y olvidar la clave de acceso a un servicio no es nada extraño. Es más, es algo que nos sucede de forma constante. Quizá por ello tengamos la mala costumbre de reutilizar las contraseñas, en vez de recurrir a los gestores de contraseñas. Si este es tu caso, y no recuerdas cuál es tu clave de acceso a la lista de Mailman en la que estás suscrito, puedes restablecerla con facilidad. Te contamos cómo.

Recuperar la password de Mailman

Por un lado puedes recurrir al siguiente script:

$MAILMAN_ROOT_D/bin/mmsitepass

Pero, si prefieres un método más sencillo, también puedes recuperar tu contraseña a través del panel de control Plesk. En el caso de que estés familiarizado con la consola, puedes localizar la ruta $MAILMAN_ROOT_D. 

Asimismo, destacar que también puedes hacerlo a través de los paths definidos para las aplicaciones y servicios del panel Plesk.

Ahora que ya hemos explicado diferentes métodos para la recuperación del password Mailman, hablemos de una de las funcionalidades más importantes que podemos encontrar en Mailman: crear listas de correo.

Crear listas de correo Mailman

Una lista de correo es básicamente un listado de direcciones de correo. Crear listas de correo es algo muy útil; especialmente para facilitar el envío de mensajes a un grupo de personas que tienen intereses comunes. Esto permite que, en vez de tener que escribir una a una las direcciones de los destinatarios, solo tengamos que teclear el nombre de la lista; ya que todas las direcciones están almacenadas en una base de datos. El uso de listas de correo suele ser habitual en la creación de foros de discusión sobre asuntos concretos; pero también con el propósito de recibir información sobre un tema específico. Como ejemplo de ello, tenemos las listas de correo Mailman o las llamadas Mailman mailing lists en inglés.

Estas listas cuentan con un panel propio al que podemos acceder y realizar modificaciones en relación a los suscriptores. Desde el panel de Mailman podemos añadir nuevos destinatarios para nuestros correos; así como eliminar direcciones obsoletas a las que ya no tiene sentido enviar mensaje alguno. En cuanto a su funcionamiento, el servicio de Mailman funciona de forma similar a un foro. Es decir, se trata de una aplicación donde sólo las personas registradas pueden intercambiar emails con el resto de suscriptores de la lista. Y, por lo tanto y al igual que en sucede en cualquier foro, el número de mensajes enviados al día está limitados. De esta forma, se evita su uso para hacer spam al resto de los usuarios de la lista.

A diferencia de las listas de spam, todos los usuarios de una lista Mailman acceden a recibir mensajes de la lista. Lo que hace que, generalmente, este tipo de listas de correo no suelan ser utilizadas con propósitos negativos.

Obtener los paths definidos desde Plesk

Publicado enSistemas TI

Saber cómo puedes obtener los paths definidos para las aplicaciones y los servicios del panel de control Plesk puede ser de gran utilidad. Especialmente, conocer dónde se encuentra cada cosa y cuáles son las diferentes variables de Plesk. Igualmente, en el caso de que gestionéis diferentes entornos entre los que no sea posible realizar una configuración homogénea. En todas estas ocasiones, pueden facilitaros la labor de forma muy sustancial.

Accediendo a los paths definidos

Recuerda que antes de realizar cualquier modificación en el archivo, es necesario que consultes la documentación de Plesk.  Asimismo, no tienes que olvidar que los scripts que te facilitamos a continuación únicamente tienen la función de mostrar dónde se encuentra la información relacionada con el panel de control Plesk. De forma que cualquier cambio realizado en Plesk, o en los archivos relacionados con él, podría afectar al comportamiento del servicio; además de a su disponibilidad. Para evitar cualquier incidencia, sigue las recomendaciones que se especifican en la documentación de Plesk.

En relación a cómo se estrcutura la información, se sigue el siguiente formato:

variable [whitespace characters] value

Esto es, el nombre del campo seguido por espacios o tablas, seguidos a su vez por el valor del campo. Cualquier otro elemento puede eliminarse sin que afecte a la sintaxis del script.


# cat /etc/psa/psa.conf

#

# 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&nbsp; /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&nbsp;&nbsp; /srv/www/cgi-bin

Cambiar la ejecución de PHP a FastCGI en Plesk Windows

Publicado enSistemas TI

En IIS, el servidor web de Microsoft, es muy recomendable cambiar la forma en que se ejecutan las aplicaciones PHP a FastCGI. Entre otas cosas porque esta acción ayuda a mejorar notablemente el rendimiento del servidor web. Además, en entornos en los que hay corriendo más de una aplicación PHP, esto nos permite separar los procesos. Además, al cambiar el modo de ejecución se facilitará enormemente las tareas de administración. Igualmente, esto permitirá aislar una aplicación de otra.

Si utilizas el panel de control Plesk, este utiliza ISAPI por defecto para la ejecución de las aplicaciones. Un sistema que te permite elegir entre el protocolo CGI y FastCGI. Si no sabes cuál de las dos opciones utilizar, nuestro consejo es siempre utilizar FastCGI. El uso de este protocolo contribuye a la mejora del rendimiento del servidor, haciendo que tu sitio web caya mucho más rápido. Así que, siempre y cuando sea posible y no haya otra alternativa, establece FastCGI como forma de ejecución de una aplicación programada en PHP.

Establecer PHP a FastCGI por defecto

Si quieres establecer «FastCGI» por defecto en el panel de control Plesk en Windows, primero es necesario establecerlo en el registro. Para ello, en primer lugar, ve a la siguiente ruta dentro del registro de Windows:

HKEY_LOCAL_MACHINESOFTWAREPLESKPSA ConfigConfig

Una vez allí, deberemos establecer lo siguiente:

PLESKCP_PHP_MODE -&gt; fastcgi

A continuación, vamos a la consola de Windows (CMD). Desde el directorio %plesk_dir% deberemos ejecutar el siguiente comando. Esto servirá para que los cambios que se han introducido en el panel de control Pesk se apliquen de forma correcta.

reconfigurator.exe /check=Services

Versiones recientes de Plesk

Actualmente, las diferentes versiones del panel de control que van publicándose, permiten activar esta funcionalidad desde la propia interfaz. Con este cambio, cambiar el modo de ejecución de PHP a FastCGI es mucho más sencillo; ya que no es necesario recurrir a modificaciones de código. Para ello, solo es necesario modificar la configuración del hosting dentro del apartado sitios web y dominios del panel de control. Una vez allí, deberemos ir al apartado de estadísticas y scripting web para cambiar el modo de ejecución de la aplicación.

Llegados a este punto, en ejecutar PHP como deberemos seleccionar la opción aplicación FastCGI y hacer click en aceptar. De esta manera, se aplicarán de forma correcta los cambios que acabamos de introducir en la configuración del servidor.

Este cambio es igualmente válido en el caso de un alojamiento Windows como en Linux; aunque algunas opciones son diferentes en función del sistema operativo del servidor. En este caso no afecta a la posibilidad de activar FastCGI desde el propio panel de control Plesk.

Acceder a la configuración de Symfony con sfConfig

Publicado enDesarrollo y Programación

En ocasiones es posible que, al crear una tarea que debería ejecutarse desde línea de comandos en una aplicación que ha sido escrita con Symfony, necesitemos tomar algunos valores concretos del archivo de configuración. De esta forma, y haciéndolo a través de sfConfig, evitaremos hardcodear el código interno. Además de evitar todos los problemas que esto podría conllevar. Para poder hacerlo, necesitaremos especificar cuál es el nombre de la aplicación de la que queremos leer el archivo de configuración. En el caso de que no especifiquemos esta información, Symfony no será capaz de buscar los valores que necesita en ninguno de los archivos de configuración.

Los archivos de configuración tienen la misión de transformarse en el código en PHP. Esto se debe a que la mayoría de las opciones que ofrecen únicamente puede ser utilizadas por parte de los frameworks de este lenguaje de programación. Entre las tecnologías que son compatibles con esta forma de acceder a la configuración se encuentra, por ejemplo, el framework Symfony. Sin embargo, es posible que algunas veces necesitemos poder acceder a esos archivos a través del código de la aplicación. Con independencia de que esto vaya a tener lugar dentro de una acción, en una determinada plantilla o en una clase propia. A cualquiera de ellas se puede acceder a través de la opción definida previamente en el archivo correspondiente (generalmente settings.yml, app.yml o module.yml). Pero, si lo prefieres, también es posible hacerlo utilizando una clase especial: la clase sfConfig.

Configurando con sfConfig

La clase sfConfig es una clase que permite el acceso a las opciones de configuración de una aplicación desde cualquier punto del código. Una especie de registro de configuración que facilita disponer de un método que podrás utilizar en cualquier parte del código de una aplicación. De esta manera, con sfConfig, es posible hacer que el código sea más accesible; además de ser mucho más sencillo poner solución a cualquier tipo de problema que se pueda encontrar en el código.

Cuando, por ejemplo, queramos hacer que Symfony busque algún determinado valor dentro del archivo de configuración podemos recurrir al parámetro –application. Este parámetro será el encargado de llamar a la tarea que queremos ejecutar; así como de permitir que se muestre la información que hemos solicitado. Pero la principal ventaja de utilizar la tarea sfConfig es que, además, podremos hacer cualquier tarea sin romper el código de la aplicación. De esta forma, podremos realizar cualquier cambio de una manera totalmente segura.


php symfony namespace:tarea --application=frontend

Como vemos, en ocasiones realizar modificaciones en el código de una aplicación es mucho más fácil de lo que pueda parecer. Especialmente si tenemos en cuenta que evitamos que el código pueda acabar rompiéndose y provocar que la aplicación deje de funcionar. Por ello, es recomendable dedicar algo de tiempo a conocer algunas clases de los distintos lenguajes de programación y frameworks. Estar en un proceso de aprendizaje continuo es la mejor forma de mejorar nuestro código y no dejarlo decaer; con los problemas de seguridad que eso podría conllevar para el sitio web o la aplicación.

Optimizar el consumo de recursos de Firefox

Publicado enGeneral

Si usáis Firefox de forma habitual seguramente habréis sufrido sus cuelges y visto con impotencia como devora la memoria RAM del equipo sin contemplación. Un problema que no es exclusivo de Mozilla, ya que Chrome cuenta con una fama muy similar. Por lo que podríamos decir que este elevado consumo de memoria RAM es algo aplicable a (casi) todos los navegadores.

Aunque pueda parecer difícil, es posible recurrir a un par de trucos para evitar en gran medida este tipo de inconvenientes. Para ello, en este breve post vamos a explicar qué podemos hacer para optimizar el consumo de recursos de Firefox a través de dos técnicas.

Limitar el uso de la memoria

Por defecto, el uso de memoria en Firefox acostumbra a tener un valor muy alto que podemos reducir siguiendo los pasos que indicamos a continuación.

1. En el campo de URL de Firefox escribe about:config. Inmediatamente aparecerá una advertencia; pero no tienes porqué preocuparte si llevas a cabo cada una de las modificaciones como te lo explicamos a continuación. De seguir nuestros pasos puedes tener la total tranquilidad de que no romperás nada.

Optimizar el consumo de recursos de Firefox-I

2. En el cuadro de búsqueda pon browser.cache y pulsa enter. El valor que tendrás que cambiar es el de browser.cache.disk.capacity. Aunque depende mucho de la memoria que tengas disponible en tu equipo, nuestra recomendación es bajarlo a un valor situado entre 15.000 y 20.000. Luego, como en todo tuneo es cuestión de ir afinando en función de cada equipo. Así que, si los niveles que te proponemos siguen siendo demasiado elevados para tu equipo, puedes ir bajando hasta alcanzar los números más adecuados.

Optimizar el consumo de recursos de Firefox-II

Liberar memoria cuando Firefox se minimiza

Si no vas a trabajar con Firefox durante un tiempo y lo minimizas, este seguirá consumiendo memoria igualmente ya que continúa ejecutándose en segundo plano. Para evitarlo, tendrás que cerrarlo o reiniciarlo para que la memoria RAM pueda liberarse. Una cosa muy útil es decir a Firefox que escriba el contenido de la memoria a disco cuando este minimizado; y que recupere los datos únicamente en el momento en el que se maximice la aplicación. De esta forma mejoraremos en gran medida el consumo de recursos de Firefox.

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. Después, tendrás que reiniciar Firefox para que los cambios que has aplicado funcionen de forma correcta.

Optimizar el consumo de recursos de Firefox-III

Optimizar el consumo de recursos de Firefox-IV

Esperamos que este sencillo tutorial te haya sido de utilidad y te sirva de ayuda para reducir el consumo de recursos en tu equipo por parte de Firefox.

Puedes seguir leyendo artículos del blog de Linube; o, mejor, ya que estamos hablando de Firefox, échale un ojo al artículo sobre su esfuerzo para mejorar la seguridad de los usuarios en la web mediante el estándar Secure Contexts.

Nuestro compromiso con el Green Computing

Publicado enSistemas TI

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

¿Por qué Green Computing?

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

En nuestras soluciones de Sistemas TI

En el campo de sistemas TI nuestra mayor apuesta reside en la virtualización con HyperV. Esto nos permite principalmente reducir el número de servidores en nuestro centro de datos. Esto se traduce en mayor redundancia, mejor seguridad, gestión y 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. Todo ello 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. Incluso si es necesario actualizar la plataforma sobre la que están implementadas. Desde nuestra experiencia, hemos comprobado que este tipo de aplicaciones utilizan hardware antiguo que conlleva un alto impacto medioambiental.

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 menor consumo eléctrico y menor impacto medioambiental.

También en nuestros desarrollos

La mayoría de los proyectos web que nos piden nuestros clientes tienen como objetivo la sustitución de los programas instalados en los ordenadores que utiliza el personal en cada una de 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. Estos son unos aparatos que tienen un consumo eléctrico e impacto menores cara al medio ambiente. Suponiendo además una reducción de gastos en términos económicos más que considerable.

A la hora de desarrollar y diseñar la arquitectura de nuestras aplicaciones pensamos siempre en cómo reducir el consumo de recursos de los servidores. Para ello, distribuimos las diferentes tareas a realizar entre varios de nuestros servidores; y optimizamos al máximo el código para que el acceso a disco y al procesador sea el estrictamente necesario.

En Linube siempre estamos a la vanguardia de la innovación y el desarrollo sostenible, comprometidos con el medio ambiente y ¡el green computing!

Configuración rápida de Virtual Host en Apache

Publicado enSistemas TI

LAMP, es una infraestructura de internet open source compuesta por Apache + PHP + MySQL. Es por ello que, si has decidido pasarte a LAMP, cuando finalices la instalación; es posible que te veas en la necesidad de crear alojamientos virtuales, o virtual hosts, para todos tus dominios. El servidor web Apache acostumbra a guardar todos los archivos de configuración de los Virtual Host en una ruta como la siguiente: /etc/apache2/vhosts.d/ . Por ello, en el caso de que no hayas configurado ninguno, verás allí una serie de plantillas; si quieres que puedes usarlas como base para la configuración. Una de ellas va unida a la instalación de un certificado SSL y la otra no requiere de un certificado de seguridad.

Configurar Virtual Host en Apache

Para que entenderlo te sea mucho más sencillo, vamos con un ejemplo. En él, vamos a crear un archivo de configuración en nombre de Linube; para ello, utilizaremos la distribución de Linux OpenSuse.

En primer lugar, tendremos que movernos al directorio de configuración que se encuentra dentro del virtual host. Algo que podremos hacer de la siguiente manera; recurriendo para ellos a unas sencillas líneas de código:

cd /etc/apache2/vhosts.d

A continuación, deberemos copiar la plantilla que nos proporciona Apache a un nuevo archivo. De esta forma, podremos configurar el servidor web como nosotros queramos. Debería ser algo similar a esto:

cp vhost.template linube.conf

Seguidamente, tendremos que hacer lo mismo en la otra distribución. Lo habitual es recurrir a una ruta de aspecto similar a esta /var/www/vhosts/

mkdir -p /srv/www/vhosts/linube/

Llegados a este punto, es importante tener en cuenta que el archivo de configuración siempre debe terminar con el sufijo «.conf». De no ser así, Apache no podrá leerlo; y, por tanto, no será posible la creación de los alojamientos virtuales que necesitamos para alojar nuestros dominios.

Cuando ya esté creado el host, deberemos editarlo y sustituir el dominio de ejemplo que proporciona la aplicación, «dummy-host.example.com», por el dominio nuestro. Además, también deberemos modificar las rutas, que en nuestro ejemplo es la siguiente /srv/www/vhosts/linube/. Asimismo, tenemos que asegurarnos, sobre todo, que se establece correctamente el DocumentRoot y que la ruta del directorio tiene un aspecto similar a esta:  <Directory «/srv/www/vhosts/dummy-host.example.com»>.

Por último, bastará con reiniciar Apache para que se apliquen correctamente todos los cambios que hemos introducido. La acción de reiniciar un servidor es la forma más común de asegurarnos de que se apliquen los cambios introducidos en su configuración. Para ello, realizaremos lo siguiente:

/etc/init.d/apache2 restart

Con esto, ya habremos acabado de configurar un Virtual Host en Apache para nuestros dominios.

Instalar extensión php-memcached en Suse Linux

Publicado enDesarrollo y Programación

PHP-memcached es un sistema que permite almacenar datos en la memoria RAM para no tener que solicitar todos los datos a un servidor externo. Esta información puede solicitarse utilizando las librerías de los diferentes lenguajes de programación a través de cadenas hash. Así, no será necesario tener que buscar en la base de datos, ya que la todos los datos necesarios estarán disponibles en esta memoria. De esta forma, las solicitudes se sirven en un período de tiempo mucho menor que si los datos tuvieran que solicitarse a otro agente.

Aunque este tutorial está escrito pensando en una distribución Suse y openSuse, los pasos a realizar se pueden aplicar a otras distribuciones; como por ejemplo Debian 9 o Debian 10. Antes de empezar, tenemos que elegir entre dos opciones: php-memcached o php-memcache. Ambos sistemas funcionan igual en la capa de programación PHP, pero cada uno tiene sus particularidades:

  • Php-memcache. De las dos opciones, esta es la más antigua. Una extensión de PHP que se caracteriza por no requerir de librerías adicionales.
  • Php-memcached. Desarrollada por Andrei Zmievski (desarrollador del core de PHP), es la extensión más nueva de las dos a elegir. A diferencia de la anterior, php-memcached sí requiere de una librería adicional: libmemcached. En nuestro caso hemos optado por esta opción, el hecho de que Andrei sea el responsable de su desarrollo nos da más confianza.

* Nota: recuerda que si usas symfony 1.2 o inferior, debes usar la extensión más antigua, php-memcache; ya que la otra opción no es compatible.

Instalando php-memcached

Para comenzar con la instalación de php-memcached, primero deberemos descargar la extensión libmemcached. Cuando la descarga haya finalizado, hay que compilarla. Algo que puedes hacer con las siguientes líneas de código:


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

Al terminar la compilación, tenemos que bajar la extensión php-memcached del sitio web pecl; no sin antes instalar las librerías de desarrollo de PHP, de otra forma no será posible 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, con todas las descargas previas finalizadas, debemos crear el archivo /etc/php5/conf.d/memcached.ini; en ese archivo deberemos indicar lo siguiente para que PHP pueda activar de forma correcta esta extensión:

extension=memcached.so

Como en la gran mayoría de cambios que se realicen en un servidor web, para disponer de esta extensión habilitada es necesario reiniciar el servidor. Cuando el sistema se encienda nuevamente, php-memcached ya estará instalado y verás cómo mejora el rendimiento de tu web gracias a su uso.