Instalando PHP5, XDebug, Mcrypt, APC, Apache en Ubuntu 14.04 y Derivados

linux-mysql-php-apache2Muchas son las veces que debo ponerme a configurar un nuevo servidor web para PHP 5.6 en un equipo con Ubuntu o Debian y bueno, este es un muy buen momento para crear una lista de comandos con el fin de no tener que buscar en mi muy estropeada memoria y ayudar al que pase por acá buscando información:

Lo primero que debemos hacer es añadir el repositorio ppa:ondrej/php5 que es el que tiene por ahora la versión 5.4 de PHP, esto lo hacemos ejecutando este comando add-apt-repository  en nuestra consola:

sudo apt-get install libpcre3-dev
sudo -E add-apt-repository ppa:ondrej/php # Si eres Ubuntu
sudo apt-get update
sudo apt-get install git apache2 php5.6 php5.6-cli php5.6-xdebug php5.6-pgsql php5.6-gd php5.6-apcu php5.6-mcrypt php5.6-sqlite php5.6-dev php5.6-intl php5.6-pear php5.6-ldap php5.6-mbstring php5.6-xml

Cuando reiniciamos una y otra vez el servidor apache seguramente nos encontraremos con un alerta (warning) fastidioso por parte del servicio apache2, algo como:

* Starting web server apache2
apache2: Could not reliably determine the server's fully qualified domain name,
using 127.0.1.1 for ServerName

Esto lo resolvemos muy fácil, ejecutamos el siguiente comando:

sudo sh -c 'echo "ServerName localhost" >> /etc/apache2/apache2.conf'
sudo service apache2 restart

Antes de Seguir debemos asegurarnos adicionalmente de que al final en el archivo /etc/php/5.6/apache/php.ini y /etc/php/5.6/cli/php.ini se deben activar las siguientes opciones (los dos últimos parámetros deben setearse en estos valores sólo en ambiente de desarrollo ya que repercute en el performance si se colocan así en ambiente de producción):

date.timezone = America/Caracas
short_open_tag = Off
display_errors = On
html_errors = On

Reiniciamos el apache.

sudo service apache2 restart

No estaría de más añadir a nuestro ambiente de desarrollo un admminitrador de control de versiones como git:

sudo apt-get install git

Una vez Finalizado esto ya tendremos nuestro entorno de desarrollo web PHP casi completo. Me faltó oci8 y pdo_oci para soporte a Oracle, se los debo.

Dejo acá un link para Instalar PHPMyAdmin Y Acá un link para instalar PHP OCI8 para conexión a la Base de Datos Oracle
Me gustaría enseñarles también cómo configurar un proyecto Symfony2 llamado “sgc” con url amigables en apache y que pueda ser accedido desde el navegado con la dirección “sgc.dev”:

<VirtualHost *:80>
    ServerName sgc
    ServerAlias sgc.dev
    SetEnv SYMFONY__DATABASE__USER “postgres”
    SetEnv SYMFONY__DATABASE__PASSWORD “postgres”
    DocumentRoot “/var/www/demo/web”
    DirectoryIndex app_dev.php
    <Directory “/var/www/demo/web”>
        AllowOverride None
        Allow from All
        <IfModule mod_rewrite.c>
            Options -MultiViews
            RewriteEngine On
            RewriteCond %{REQUEST_FILENAME} !-f
            RewriteRule ^(.*)$ app.php [QSA,L]
        </IfModule>
    </Directory>
    KeepAlive On
    MaxKeepAliveRequests 200
    KeepAliveTimeout 5
    AddOutputFilterByType DEFLATE text/css text/plain text/html application/xhtml+xml text/xml application/xml
    <IfModule mod_headers.c>
       Header append Vary User-Agent env=!dont-vary
        ExpiresActive On
        ExpiresDefault “now plus 1 week”
        ExpiresByType image/x-icon “now plus 1 month”
        ExpiresByType image/gif “now plus 1 month”
       ExpiresByType image/png “now plus 1 month”
       ExpiresByType image/jpeg “now plus 1 month”
   </IfModule>
</VirtualHost>

El archivo anterior podría ser copiado en “/etc/apache2/sites-available/demo.conf” por ejemplo, y luego ejecutar:

# sudo a2ensite demo.conf

Luego debemos editar el archivo /etc/hosts y añadir la línea “127.0.0.1 demo.dev” ejecutando lo siguiente:

# sudo nano /etc/hosts

y pegar en la última línea

127.0.0.1       demo.dev

Por otra parte, les dejo también un aporte, esto a continuación es un archivo index.php que yo coloco en la raíz de mi servidor en ubuntu, es una burda copia del archivo index.php de WAMP pero, modificado XD Es de mucha ayuda para saber cuales son las extensiones que se han instalado y que han sido cargadas exitosamente así como de proveerme una forma fácil de acceder a todos mis proyectos y se ve más o menos así:

Bye guys! Happy code!

Buenas Prácticas de Desarrollo Web en PHP

Me gustaría recomendarles algunas cosas a las personas que desarrollan con PHP:

1.- No utilicen las etiquetas cortas de PHP. Si lo hacen tendran que lidiar con que su código no sea portable. Las etiquetas de PHP son

<?php \\Here your code; ?>

1.1 Desde PHP5.4 se activa por defecto la etiqueta corta para impresión de variables ya que esta caracterítica ya no depende de la opción short_open_tag:

<?= $fooVar ?>

De resto, si no utilizas PHP5.4 o superior, utiliza la forma no abreviada:

<?php echo $fooVar; ?>

2.- En la Vista, así vayan a imprimir una variable terminen siempre la línea de código  con punto y coma (;).

3.- Si no utilizan un framework como Symfony2 y necesitan hacer uso de los “require_once” utilicen url absolutas como argumento a esta función.

Ejemplo:

    require_once($_SERVER['DOCUMEN_ROOT'].
                 DIRECTORY_SEPARATOR.
                 'modelo'.
                 DIRECTORY_SEPARATOR.
                 'usuarios.php');

// Esta es una opción. Hay muchas formas de obtener url absolutas.

4.- Utilicen por favoooooor en lo posible, programación orientada a objetos (POO) y no mezclen su código POO con programación estructurada.

5.- Si van a imprimir una cadena de texto que no posee dentro ninguna variable coloque esa cadena de texto entre comillas simples, esto hace que su código sea más óptimo.

6.- Utilicen por favooooor en lo posible, el patrón de diseño Modelo, Vista, Controlador (MVC) bien hecho. Con esto quiero decir:

6.1.- El modelo es la única sección del programa que debe contener código de consultas a base de datos o webservices. No debe haber nunca un “SELECT, INSERT, UPDATE…” a la base de datos en medio de un código HTML (Vista)

6.2.- La vista solo debe contener eso mismo vista, código de interfáz gráfica de usuario. es decir solo HTML5, importaciones de archivos javascript y css3. Con respecto al código PHP que es esta debe de llevar, solo de llevar impresiones de variables y solo lógica de bucles o pocas validaciones.

6.3.- El controlador es el que maneja todas las peticiones. Les recomiendo que tengan un controlador frontal y que este llame a los verdaderos controladores de acuerdo al recurso que se esté requiriendo por parte de usuario mediante una petición ya sea GET, POST o incluso GET y POST mediante AJAX.

6.4.- Para interactividad javascript de la vista, utilicen solo una librería de javascript. Les recomiendo jQuery. ¿Qué no puede hacer jQuery?.

6.5.- Para los estilos de la vista, utilicen responsive design, la forma más fácil de hacer esto es, usando “twitter bootstrap”.

7.- Empiecen a hacer uso de los namespaces en PHP.

8.- Si quieren evitarse problemas, utilicen un framework serio como Symfony2 o Yii. No framework que te hacen trabajar doble como Cake, CodeIgniter entre otros…

9.- En cuanto a los editores, déjenle Dreamweaver a los diseñadores y a los noobs, los programadores, usamos Netbeans, (Si tienes una buena pc), ZendStudio For PHP y PHPStorm(Si tienes una buena pc y tienes Real), TextMate(Para mac), SublimeText2 (El mejor), boten si lo tienen, eclipse entre otras porquerias derivadas que hay por allí.

10.- Si utilizan SublimeText2 no se olviden de instalar el Package Control. Esto les permitirá instalar nuevos temas, snippets (ayuda de generación de código y autocompletado) y otros plugins.

11.- Si utilizan ajax con jquery no utilicen la función $.post ni $.get lo recomiendan los que más saben, además la función $.ajax te da mucha más flexibilidad para efectuar una petición XMLHTTPRequest. Utilicen $.ajax(); Ejemplo:

$.ajax({
    type: "POST",
    dataType: "html",
    data: mis_datos_serializados,
    url: url_controller,
    success: function(datos){
        $("#"+div_string).html(datos).fadeIn("slow");
    }
});

12.- Por el amor a sus padres, hagan uso del control de versiones. Les recomiendo GIT.

13.- Definan las variables antes de utilizarlas, así sea con null, pero, definanlas primero antes de imprimirlas, asignarlas, o pasarlas como argumento a algún método o función PHP…

14.- Documenten el puto código.

15.- El más importante, SEAMOS HUMILDES, ACEPTEMOS CRÍTICAS y ERRORES PROPIOS. SOMOS HUMANOS. APRENDEMOS, EJECUTAMOS,  ERRAMOS, RECTIFICAMOS y SOLUCIONAMOS. Humildad ante todo.

Variables útiles de PHP -> http://tednologia.com/10-utiles-variables-de-servidor-en-php/

jQuery, Framework Javascript -> http://jquery.com/

Twitter Bootstrap -> http://twitter.github.com/bootstrap/

Instalacion de PHPUnit en Wamp (Windows PHP)

WampServer

En esta guía de instalación de PHPUnit utilizaremos la plataforma WAMP 2.2 (Apache2.2.22, PHP5.4.3) 32bits.

Antes de todo estoy suponiendo que ya tenemos añadido en la variables de entorno PATH de Windows nuestro directorio de instalación de PHP. En mi caso C:\wamp\bin\php\php5.4.3. Aunque si no lo tenemos, abrimos nuestra consola de Windows y ejecutamos el siguiente comando:

> set PATH=%PATH%;C:\wamp\bin\php\php5.4.3

Esto nos permitirá ejecutar a través de la consola de Windows el comando “php” desde cualquier contexto (directorio).

Primeramente debemos instalar PEAR. A pesar de que existen otras opciones para instalar paquetes de PHP (En nuestro caso PHPUnit) como Composer, son muchas las personas que instan a utilizar la instalación por medio de PEAR. Los expertos me comentaran cuales son las diferencias.

Por ahora, instalemos PEAR:

1.- Descarguemos el archivo go-pear.phar, particularmente yo, lo he colocado en el directorio C:\wamp\bin\php\php5.4.3

2.- Abrimos la consola de Windows como Administrador. Importante! como Administrador.

3.- Estando en la consola de Windows como Administrador. Ejecutamos los siguientes comandos:

> cd /wamp/bin/php/php5.4.3
> php go-pear.phar

4.- A partir de este momento podremos utilizar el comando “pear” en la consola. Confirmemos la instalación ejecutando:

> pear

Esto debe desplegarnos todas las funciones de este manejador de bibliotecas de PHP (PEAR).

Primera forma para Instalar PHPUnit con PEAR

Ejecutamos los siguientes comando en la consola:

> pear config-set auto_discover 1
> pear install pear.phpunit.de/PHPUnit

Segunda forma para Instalar PHPUnit con PEAR

Si no nos funciona por alguna cuestión (que suele pasar) la primera forma para instalar PHPUnit con PEAR. Podemos instalarla de esta segunda forma. Ejecutamos los siguientes comando en la consola para añadir los canales:

> pear clear-cache
> pear channel-update pear.php.net
> pear upgrade-all
> pear channel-discover components.ez.no 
> pear channel-discover pear.phpunit.de 
> pear channel-discover pear.symfony-project.com 
> pear channel-discover pear.symfony.com

Luego ejecutamos el comando de instalación de PHPUnit:

> pear clear-cache
> pear install --alldeps --force phpunit/PHPUnit

A partir de este momento podremos utilizar el comando “phpunit” en la consola. Confimemos la instalación ejecutando:

> phpunit --version

En el momento que escribí este articulo la respuesta al comando anterior fue la siguiente:

PHPUnit 3.7.13 by Sebastian Bergmann.

Instalación de PHPUnit con Composer

La alternativa más actual es realizar la instalación con composer. Les dejo un link para que puedan ver cómo se hace:

http://www.phpunit.de/manual/current/en/installation.html#installation.composer

¿Qué podemos esperar de la Internet en un futuro?

Son muchas las tecnologías que están mejorando hoy la web, y es necesario tomar en cuenta que estas tecnologías nacen de la demanda actual de este servicio que se ha convertido en una necesidad.

Por ejemplo:

Hoy en día el servicio de internet movil está muy demandado lo que ha requerido que los equipos de datos móviles de nuestros proveedores de servicio soporten mayor ancho de banda y por otra parte los diseñadores web ha tenido que pensar en la variedad de dispositivos móviles, variedad de resoluciones en la que se debe mostrar una página web y además tomar en cuenta el poco ancho de banda que porporciona la red móvil de datos y hacer una web vistosa pero, a la vez rápida y que pese muy poco kbytes, estás exigencias han dado lugar a tecnologías como CSS3, HTML5, Responsive Design, Utilización de Frameworks de Desarrollo tanto del lado del cliente como del lado del servidor.

Del lado del servidor ya se buscan tecnologías que puedan soportar conexiones concurrentes sin desmejorar el tiempo de respuesta al cliente de estos requerimientos han surgido tecnologías como:

NodeJs: Javascript del lado del Servidor basado en el Motor V8 de Javascript de Google Chrome. Puede poseer una alta concurrencia muy por encima  a cualquier otra tecnología web sin ver Posee frameworks de desarrollo como Railsway que dan mucha agilidad a desarrollos web basados en este lenguaje y tecnología joven pero, madura a la vez.

NGineX: Servidor web para PHP interesante alternativa a Apache. Mejora los tiempos de respuesta de las páginas hechas en PHP con respecto a Apache por su posibilidad de multiprocesos, se espera que Apache 3 pueda llegar al performace de este servidor web. http://usemoslinux.blogspot.com/2012/06/nginx-una-interesante-alternativa.html

APC y PHP: Manejo de Cache para PHP, mejorando el tiempo de respuesta del lado del servidor, no viene por defecto con la distribución de PHP5. Según algunas se espera que esta librería (APC) entre en la distribución oficial de PHP6. Quién sabe si quiera cuándo saquen PHP6, mientras la podemos agregar como una extensión más de este famoso lenguaje de programación.

Python y Django: Alternativas al conjunto PHP-Symfony2. Al parecer mejoran el performance un poco con respecto a otras tecnologías web. Pero, lo que sí mejoran por mucho son los tiempos de desarrollo de aplicaciones y portales web gracias a la facilidad y agilidad con la que se desarrolla haciendo uso del lenguaje Python y de su framework Django.

Flash adios, Bienvenido CSS3: Son menos las webs que poseen animaciones flash (pesadas y hacen dependiente tu aplicación del navegador y de plugins como flash player) y son más las que empiezan a utilizar animaciones mediante los estándares de CSS3 y HTML5.

Además también hay que tomar en cuenta la red que nos provee de internet:

Cada día son más las corporaciones que proveen servicios de internet quienes tomando en cuenta la demanda de información (ancho de banda) de sus usuarios están cambiando toda su red de transmisión de cobre a fibra óptica, lo que supondría una mejora muy sustancial en este preciado servicio.

BPMN

BPMN

Notación de Modelaje de Procesos de Negocios (BPMN) es una notación gráfica estandarizada que permite el modelado de procesos de negocio, en un formato de flujo de trabajo. Su principal objetivo es, Resolver las dificultades de comunicación que tiene el lenguaje común a través de que el mismo

  • Proporciona un método normalizado para representar procesos de negocios.
  • Facilita su entendimiento debido a la poca complejidad de su notación.
  • Proporciona un lenguaje común entre los usuarios de negocio y los técnicos.
  • Facilita la diagramación de los procesos de negocio.

Actualmente hay una amplia variedad de lenguajes, herramientas y metodologías para el modelado de procesos de negocio. La adopción cada vez mayor de la notación BPMN como estándar ayudará a unificar la expresión de conceptos básicos de procesos de negocio (por ejemplo procesos públicos y privados, orquestación, coreografía, etc.) así como conceptos avanzados de modelado (por ejemplo manejo de excepciones, compensación de transacciones, modelado de toma de decisiones, entre otros).

Se hace cada vez más importante en este mundo globalizado con procesos cada vez más complejos el poder llevar a cabo la administración o gestión de los procesos de negocio además de hacerlo en un lenguaje o notación entendible por toda la organización, es por esto que la BPMI creo la versión 1.2 de BPMN y cada vez es más fácil ir viendo aplicaciones de la notación de modelado de procesos de negocio en su versión 2.0 actualmente mantenida por la OMG. Y es con el fin de agilizar la definición y posterior automatización de los procesos de negocios basados en la arquitectura orientada a servicios que el estudio y aplicación de BPMN se hace cada vez más una necesidad para las grandes organizaciones ya que le da flexibilidad, agilidad y capacidad de respuesta a la misma.