General

Esta es la categoría general donde pongo los posts que no encajan con el resto de categorías. Y algunos posts, que aunque encajan en alguna otra categoría, también los he considerado de interés general en informática. Aquí puedes encontrar contenidos varios sobre utilidades como programas, sistemas operativos, herramientas de mantenimiento y cosas de este estilo que me han parecido interesantes.

Sylius.org tienda online 100% Symfony: calidad, flexibilidad y escalabilidad

2015-09-12 - Categorías: General / Symfony

Brutal el proyecto que están desarrollando en Sylius. Navegando y navegando por proyectos para hacer tiendas online. Viendo las principales opciones del mercado: Magento, Prestashop y WordPress con WooCommerce. Me planteaba la opción de cómo sería desarrollar una tienda completa en Symfony. Integrar pasarelas de pago, métodos de envío, ordenando todo los productos por categorías, valores, atributos de los productos.. es un trabajazo. Pero por otro lado no quería prescindir de la flexibilidad y agilidad que nos da un buen framework PHP, en este caso el gran Symfony.

Aterrizaje

Todas estas búsquedas me llevaron a encontrar Sylius. Lo que hasta ahora es el proyecto de tienda online basado en Symfony que me ha parecido más interesante. A fecha en que escribo está en fase de desarrollo aunque hay quien ya lo está utilizando.

Aquí el repositorio público de la aplicación web:
https://github.com/Sylius/Sylius

Página principal del proyecto:
http://sylius.org/

Se trata de un proyecto Open Source, licenciado bajo la MIT license. Esto nos permite usar Sylius para cualquier proyecto, libremente sin coste de compra ninguno. Lo único que no se pude hacer es decir que Sylius lo hemos hecho nosotros, como es lógico. Se puede adaptar, modificar, ampliar, etc.. Cualquier cosa se puede hacer porque lo que tenemos entre manos es un proyecto Symfony.

Diferenciación

La principal diferenciación es que para modificarlo no tienes que leerte una ingente cantidad de documentación. Cuando estás desarrollando algo para algún CMS como WordPress, Magento, Joomla.. debes tener siempre a mano su documentación. Acabas especializándote y luego no te puedes salir de dicha plataforma. Por otro lado, el que mucho abarca poco aprieta, no te puedes espcializar mucho en un CMS en concreto. Si lo haces, que luego no te saquen de ahí porque cuando te llevan a otro CMS es otro mundo.

Al ser una plataforma 100% en Symfony, todo sigue el esquema general. Las plantillas están donde deben de estar, igual los controladores, las entidades de las bases de datos. La estructura de directorios es la misma que la de cualquier proyecto Symfony. Las nuevas librerías se añaden igual que cualquier proyecto Symfony. Todo está en su sitio. Esto agiliza mucho la adaptación y ampliación de funcionalidades. No necesitas sumergirte en un mar de documentación específica del CMS en cuestión.

Características

Por su propia naturaleza, se trata de un programa muy potente, rápido, flexible, adaptable y escalable a más no poder. Es como si se tratara de un desarrollo de una tienda 100% artesanal, pero donde estará casi todo listo para usar.

Esta siendo traducido a varios idiomas, con zona frontal, zona de administración. Tendremos productos, el clásico carro de la compra, productos organizados por categorías y atributos, formas de pago, métodos de envío, gestión de mensajes de clientes, páginas estáticas, además de muchas otras configuraciones. Incluso se prevee la inclusión de una API para interconectar el sistema Sylius con otros sistemas.

Resumiendo

¡Toda una joya de la informática! A mi me parece un gran proyecto. Que está siendo organizado empresarialmente desde Lakion.com. Una empresa que preveo que ofrecerá todo tipo de servicios alrededor del proyecto. De igual forma que hacen la mayoría de proyectos Open Source.

Resumiendo, tenemos un gran proyecto. Pretende revolucionar el mundo de los CMS de tiendas online. Está siendo una revolución en el mundo de la programación a medida. Y seguro que lo va a ser también en el mundo de los CMSs cuando alcance su madurez para que cualquier no-programador lo use.

Es interesante ver casos de uso:
http://sylius.org/showcase

Con esto ya les dejo que es sábado y vamos a seguir con otros cosas 😉
Un saludo.


Atom Editor, ¡brutalmente sencillo y potente!

2015-08-26 - Categorías: General

Hola de nuevo, ya estoy trasteando con un nuevo editor de código fuente que hace poco ya alcanzó la versión de producción 1 y está en el momento en que escribo en la versión 1.0.7. Estoy hablando del Atom Editor, un editor de códigos fuentes ligero, rápido, con todo tipo de plugins.. como dicen en su web: un editor hackeable del siglo 21. Es sencillo a más no poder, pero a la vez se puede mejorar instalando paquetes y pieles, que lo convierten en una potente herramienta.

Como punto de entrada me sorprendió no recuerdo donde que leí que estaba hecho en HTML, CSS y Javascript. Ya sólo esto me sorprendió así que hace un par de meses decidí instalarlo y probarlo. No probé demasiado bien, pero ahora que ya ha alcanzado cierta madurez lo he probado bien durante una semana y estos son los resultados.

Características

Al estilo Sublime Text o tipo Eclipse con un estilo ‘dark’ resulta agradable ya la primera impresión. Tus ojos descansan con colores suaves mientras lees los códigos. Como es un proyectos de Github, trae integrada la detección de cambios Git del repositorio que estés viendo. Rápido como él sólo, arranca bien, abre las ventanas rápido con un ‘click’ cada archivo. Explorador de archivos integrado. Opción de abrir un directorio, un sólo archivo, varios proyectos en la misma ventana, o varias ventanas con distintos archivos o proyectos. Puedes abrir todo tipo de archivos de texto. También imágenes, que en mi caso el poder ver las imágenes en el propio editor se agradece. Se pueden dividir las ventanas en paneles para poner en cada uno un archivo según necesitemos.

Cuando empecemos a instalar paquetes para nuestras necesidades es cuando nos daremos cuenta de lo potente que es. La comunidad está desarrollando gran cantidad de ellos para todo o casi todo lo que he buscado. En mi caso, el hacer webs usando un editor de código que en sí mismo está hecho como una web me impresiona. Le he puesto el autocompletado para los lenguajes que uso, el resaltador de error de sintáxis, el famoso minimapa y otros plugins.

Lo tenemos disponible para Linux, Mac, FreeBSD y Windows.

Aquí la web: https://atom.io/

Los packages

Cuando digo packages, aquí es lo mismo que los plugins de WordPress, los complementos de Firefox, o las aplicaciones de un sistema operativo. Pues aquí se llaman packages, que son lo que completan con infinidad de funcionalidades este fenómeno editor. En mi caso, estoy probando y me quedo con los siguientes:

  • atom-autocomplete-php: para autocompletar rápidamente en proyectos basados en Composer.
  • atom-beautify: pone bonito el código identándolo, poniendo espacios o quitándolos donde debe, etc. Si tienes instalado php-cs-fixer te formatea el código según el estándar PSR.
  • autocomplete-plus: es básico para que otros paquetes de autocompletado funcionen.
  • php-twig: compatibilidad con Twig, muestra mensajes emergentes con sugerencias también.
  • php-getters-setters: como su nombre indica, genera los getters y setters de una clase PHP.
  • minimap: este me gusta mucho porque te visualiza una ventana lateral con todo el código fuente en miniatura con el que te puedes mover por un archivo.
  • linter y linter-php: analiza el código mostrando menús emergentes, errores sintácticos, etc. Muy bueno, imprescindible.
  • docblockr: genera comentarios automáticamente según escribes en las cabeceras de clases o funciones.
  • custom-title: con el que puedes configurar los títulos de la ventana mostrando, por ejemplo, el nombre del proyecto, la rama y la ruta completa al archivo. Muy configurable y útil para saber donde estás.
  • git-plus: para hacer tareas de Git dentro del editor. En mi caso, en Linux, pulsando Ctrl+Shift+H se me despliegan los comandos disponibles.

Veo brutalmente buenos estos packages, ya cada uno que busque los suyos. Tenemos disponibles 2602 en la fecha en que escribo esto según pone en:

https://atom.io/packages

¡Hay que probarlo que es una joya de la informática!
Un saludo.


LibreOffice 5, apuntando a los móviles y la nube

2015-08-07 - Categorías: General


LibreOffice es una suite ofimática, es decir, para trabajos relacionados con la oficina como pueden ser documentos de texto, hojas de cálculo, presentaciones, incluso tiene para bases de datos. Toda una joya de la informática les traigo hoy con éste programa. Ya lo he mencionado anteriormente en otro post pero no por ello deja de tener mucha importancia.

La competencia

Pues bien, comparando con otras soluciones de pago como pueden ser Microsoft Office o los Google Docs que tenemos gratis disponibles en dispositivos Android. Tenemos ahora que LibreOffice va siendo cada vez más una gran solución que casi no tiene nada que envidiar al resto.

Vengo leyendo desde hace un tiempo que tienen planeado la edición de documentos online. Es decir, se instalará LibreOffice en un servidor desde el que se servirán los archivos. ¿Os suena?, al estilo que los documentos de Drive o el Office Online de Microsoft.

Aquí su web: http://www.libreoffice.org/

Mejoras

Entre las nuevas mejoras trae una interfaz renovada, que desde se separó el desarrollo del estancado OpenOffice, han ido queriendo diferenciarse cada vez más y más. También informan en su web que tenemos mejoras sustanciales en el funcionamiento de las hojas de cálculo, filtros, mayor velocidad, etc.

Todo apunta a una serie de características de la versión 4 que se han ido mejorando cada vez más y ahora espero que estemos en un punto de inflexión en donde se apunte más a la nube, al trabajo en red con ficheros de LibreOffice.

Otro punto importante son las mejoras de las aplicaciones para móviles. Son conscientes que los dispositivos móviles y tablets van a tener una importante presencia. Pero no van a descartar a los ordenadores, porque una buena pantalla junto con ratón y teclado no dejarán de ser más productivos a la larga para las tareas ofimáticas.

Probando en Linux

Instrucciones de instalación Linux:
http://linuxg.net/install-libreoffice-5-0-on-ubuntu-via-ppa/

En mi caso que tengo Linux instalado, he encontrado aquí más información e instrucciones para instalarme la última versión en tres secillos comandos:

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get install libreoffice

Sólo me queda decir que sí que funciona bastante más rápido. Es un software imprescindible en todo ordenador.

Saludos.


Exportar e importar en MariaDB-MySQL

2015-08-03 - Categorías: General

En estos días he estado haciendo una copia de seguridad de una base de datos compatible con MySQL. En concreto de MariaDB, un ‘replace’ que funciona muy pero que muy bien. Para éste ejemplo he usado un servidor Linux, supongo que en otros sistemas operativos también tendremos disponibles estos comandos.

MariaDB es un fork de la conocida base de datos MySQL que ha seguido más y más desarrollándose e incorporando más y más funcionalidades.

Vamos al grano, es sencillo exportar a un fichero SQL desde línea de comandos con un comando como el siguiente:

$ mysqldump nombreBaseDeDatos -uuser -ppassword > nombreFichero.sql

Lo que hay después de -u es un nombre de usuario, después de -p la contraseña, debe ser un usuario y contraseña válidos y que tengan permiso de acceso a toda la base de datos.

Si queremos hacer pruebas antes de guardar a un fichero el contenido podemos omitir lo último del comando para ver lo que hay en la BD.

$ mysqldump nombreBaseDeDatos -uuser -ppassword

A continuación, si queremos importar el fichero SQL ejecutamos lo siguiente en línea de comandos:

$ mysql nombreBaseDeDatos -uuser -ppassword < nombreFichero.sql

Ya está, es así de sencillo exportar e importar.


Syncthing, sincronización de archivos en tu propia nube

2015-05-15 - Categorías: General

Hace poco escribí, desde el punto de vista de la programación, sobre el proyecto #Syncthing. Viendo y viendo alternativas a #Dropbox, #Google #Drive, #One #Drive, etc. Llegué a encontrar #BitSync, #SeaFile, #OwnCloud. Muy interesantes todos, pero en particular me parece especialmente interesante Syncthing por eso estoy escribiéndoles este post.
Vamos a echarle un vistazo..

Se trata de un programa, o exactamente, un proyecto que incluye varios programas. Con los cuales podemos conectar varios ordenadores y sincronizar archivos entre ellos.

Qué es

Técnicamente es un programa cliente-servidor de sincronización de ficheros. Lo novedoso es que te hace independiente de cualquier empresa intermedia y puedes configurarlo de forma que no haya nadie que pueda saber nada de tus archivos. La información puede transmitirse exclusivamente entre tus ordenadores.

El servidor

En la fecha en que les escribo tenemos disponible la versión 0.11.3, que se distribuye independientemente de las interfaces disponibles. Se trata de un servicio para el sistema operativo que proporciona una interfaz web y una API rest para poder conectar desde otros programas y manejarlo.

El servidor de descubrimiento global

Lo único externo a nosotros que de momento están proporcionando los desarrolladores es dicho servidor de descubrimiento.

¿Porqué es necesario? Piensa en si tienes un ordenador en tu casa y otro en el trabajo, ¿cómo se encuentran? Fácilmente, cada uno siempre le dice al servidor de descubrimiento donde está. Así cuando tengan que sincronizar los archivos se conectan directamente el uno al otro.

Dicho servidor de descubrimiento también lo tenemos disponible.

Interfaz

A fecha de hoy he leído que tenemos para Mac, Windows, Linux, FreeBSD y Solaris. Leo que hay un proyecto de interfaz multiplataforma con GTK pero no lo he probado nada más que en Linux, y funciona muy bien. Es el de la foto.

La interfaz te puede poner un bonito icono en la barra de tareas y encargarse de arrancar o de instalar el servidor. 

Terminando

Para resumir, de todas las alternativas que he probado, para estar tranquilo de que las copias de los archivos se están haciendo correctamente, me quedo con Syncthing 🙂

Página oficial: https://syncthing.net/
APT para Ubuntu/Debian: http://apt.syncthing.net/
Instalador para Windows: https://github.com/kozec/syncthing-gui/releases/latest

Se me olvidaba comentar que es un proyecto Open Source, por eso que da gusto compartirlo y si quieres echar una mano siempre puedes curiosear un poco más.

Saludos.


Algo grande se está cociendo en Syncthing (Pulse)

2015-03-11 - Categorías: General

Tenemos aquí una alternativa a la nube de Dropbox, Drive de Google, OneDrive de Microsoft o Mega que se está forjando en el mundo del Open Source.

Se trata de un proyecto muy ambicioso de código abierto en donde se está desarrollando toda una serie de herramientas relacionadas con la función que desempeñan y que son toda una joya de la programación.

Qué es

Se trata simplemente a una solución de sincronización de archivos sin tener necesariamente un servidor en Internet de una empresa. En éstos casos, la empresa tiene una copia de todos los archivos que andes sincronizando.

Puede ser un problema legalmente hablando el trabajar con una empresa que tenga tus datos empresariales. Por otro lado, en lo personal, resulta que nuestros datos están almacenados en empresas que los controlan.

Qué trae de nuevo

Sin límite de almacenamiento. Es decir, depende de lo que tengas en tus ordenadores que vayas a sincronizar que vas a poder tener. Cuanto más disco duro tengas, más podrás almacenar. Y totalmente gratis.

Tenemos repositorios de todo tipo con absolutamente todo el código fuente. En los foros se están distribuyendo ppas, instaladores .deb, foros donde te explican como hacer todo tipo de configuraciones para servidores, para entornos de escritorio. Y un largo etcétera.

Lo mejor que le veo es que es un proyecto Open Source, que va a recibir mucho apoyo, y lo esta teniendo. No hay más que ver el proyecto principal en Github:
https://github.com/syncthing/syncthing
Está teniendo numerosos commits diarios y por lo que he podido leer en los foros si no es uno es otro el que pone su granito de arena para ayudar a los usuarios que no estamos programando en el proyecto.

También tenemos muchas configuraciones a nivel de carpetas que sincronizar y a nivel de dispositivos que se conectan. Es altamente configurable y todo está accesible. Cosa que no he encontrado con las otras soluciones comerciales.

¡Está hecho con Go y AngularJS!

También tenemos el protocolo de intercambio de bloques BEP que se usa entre los servidores de Syncthing. Tenemos versiones para Linux, Windows, Mac, BSD y Solaris.

Contras

Aún está en la versión 0.10.25 pero teniendo en cuenta que apenas lleva un año el proyecto andando si llega, que ya esté funcionando como lo está haciendo, está muy muy bien.

Lo único en contra que le encuentro es que para un usuario que no sea avanzado es complicado de ponerlo en marcha. Ya veremos..

Y cómo no, que si queremos que dos ordenadores se sincronicen, deben de estar los dos encendidos al mismo tiempo.

Resumiendo

Me quiero hacer eco por lo grande y ambicioso del proyecto. Si estabas buscando una solución para hacer unas copias de seguridad entre tus ordenadores sin depender de ninguna empresa, ésta es una buena solución. Puedes tener todo sólo compartido entre tus ordenadores. Incluso hasta te puedes instalar tu propio servidor de descubrimiento global https://github.com/syncthing/discosrv
Con lo que tus ordenadores se podrán encontrar entre ellos sin depender de los servidores de descubrimiento global públicos.

En fin, que tenemos de todo para juguetear, y funciona muy bien por lo que veo aunque sea sólo la versión 0.10.25. Resumiendo, ¡una joya de la informática!



Sencillo mensaje de aceptar cookies para tu web

2014-12-23 - Categorías: General
Por la ley llamada LGPD, y ahora también hecho reglamento RGPD, los desarrolladores nos vemos obligados a mostrar un mensaje de si el usuario acepta que usemos cookies. Todo esto se debe en parte por el miedo por las cookies, quizá por el desconocimiento de lo que son o para qué sirven.

Las cookies son simples ficheros de texto en plano que no contienen absolutamente ningún programa. No se ejecutan ni pueden infiltrarse en un ordenador, pero ya puestos a hacer leyes no nos queda otra que obedecer.

Continuar leyendo..

Cosas que optimizar en un servidor Apache + MariaDB + PHP

2014-12-14 - Categorías: General

Para administrar un servidor dedicado o virtual Linux necesitamos herramientas para controlar el uso de memoria, cpu o almacenamiento. Hay una herramienta en modo consola o de terminal con la que podemos entrar y ver su estado sin necesitar de un entorno gráfico.

Estamos entonces pensando que el servidor que hemos contratado es demasiado pequeño y vayamos a contratar uno más grande. Pero antes merece la pena no entrar en más gastos y optimizarlo. Porque tal vez tengamos mucha más máquina que lo que estamos pensando, sólo era necesario optimizar.

Instalación de htop

$ sudo apt-get install htop

Una vez instalado ejecutamos htop si todo ha ido bien y ya tenemos un informe muy interesante. Ahora sabremos si estamos al borde del colapso, si el servidor de base de datos está consumiendo demasiado, etcétera. O si simplemente le sobra memoria y algo raro le está pasando.

Frentes de ataque para optimizar un servidor

Se supone que con un servidor pequeño, de 1 procesador y 1 Giga de RAM, se deben de poder servir alrededor de 10 000 vistas de página diarias. Es mucho ¿cierto? Pues sí, no estoy exagerando, la experiencia nos dice que las configuraciones por defecto de Apache, MariaDB y PHP tal vez no se acomoden bien y el servidor vaya lento, muestre páginas en blanco, se caiga el servicio.

Para cada programa o servicio se necesita su configuración así que sin contemplar la posibilidad de ampliar el servidor físicamente podemos optimizarlo viendo lo siguiente.

Configuraciones de Apache2

En un Ubuntu Server podemos encontrar sus configuraciones en /etc/apache2/apache2.conf Una de las cosas que merece la pena activar es la caché, aumenta considerablemente su rendimiento.

Si tenemos, como en éste caso una única máquina con todo en el mismo servidor (Apache2, MariaDB y PHP5). La memoria caché APC es una buena opción y se activa muy fácilmente con PHP5 si la tenemos disponible ya en Apache2.

Configuraciones de MariaDB

He escogido ésta base de datos porque trae muchas mejoras con respecto a MySQL y podemos instalar cualquier CMS compatible con MYSQL. Aparte de que es totalmente gratis.

Cuidado con la versión que instalemos, elegir mejor una estable para producción.

Las configuraciones de MariaDB las podemos optimizar en /etc/mysql/my.cnf
Es interesante instalarnos localmente MySQL y ver los fichers my-small.cnf, my-medium.cnf, my-large.cnf y my-huge.cnf para configurar los límites de nuestra MariaDB. Cuidado porque un servidor small se supone que sólo tiene 64 MB de RAM, uno de 1 GB de RAM es un servidor grande aunque no nos lo parezca, ya uno de 4 GB de RAM es enorme (huge).

Configuraciones de PHP

Tenemos en /etc/php5.6/apache2/php.ini las configuraciones que se usan para correr los scripts de PHP desde Apache.

Puede ser interesante optimizar la configuración de la linea de comandos de PHP con el fichero /etc/php5.6/cli/php.ini Éste fichero es el que se usa cuando ejecutas php desde línea de comandos. Puede ser necesario configurarlo para usar phpunit, comandos de consola de frameworks PHP, etc.

La caché de ejecución de scripts o el tiempo máximo de ejecución de un script pueden ser valores clave que provoquen que tus webs se queden en blanco. Algunos valores a los que suelo darle más son:

max_input_vars
max_upload_file_size
memory_limit
max_input_time
max_input_nesting_level

Si delegas la ejecución de PHP en el servicio FPM/Fastcgi sería lo mejor. Para esto hay que instalar el módulo fpm de PHP. Y el módulo de Apache para que delegue la ejecución de scripts PHP a este servicio llamado php-fpm. En este caso, tendrás las mismas configuraciones que cito antes pero en otro fichero que carga desde /etc/php5.6/fpm/php.ini, /etc/php7.2/fpm/php.ini según la versión de PHP que tengas instalada.

Cuando se instala el FPM/Fastcgi lo que conseguimos es que tanto Apache2 como PHP se ejecuten concurrentemente, pudiendo servir más páginas en paralelo.

Está la swap creada y activada?

Por último puede ser que la memoria de intercambio no esté creada. En muchos servidores virtuales simplemente tenemos la partición del sistema de ficheros principal. Damos por sentado que cuando se nos ha dado el servidor ya tenemos swap. Entonces si realmente no la tenemos no podemos usarla y si llenamos toda la memoria RAM ya tenemos colapsado el servidor porque no tiene realmente swap.

Podemos verlo usando:

$ free -m

Por ejemplo en un servidor con 1 GB de RAM y 512 GB de memoria de intercambio swap podemos tener lo siguiente:

             total       used       free     shared    buffers     cached
Mem:           992        503        488         37         31        200
-/+ buffers/cache:        272        720
Swap:          511          0        511

Si no nos sale algo parecido ya tenemos otra cosa que optimizar.

Apache Benchmark

Es interesante llevar al límite a nuestro servidor usando ésta herramienta, podemos simular fácilmente varios visitantes simultáneos hasta llegar a saturar el servidor y sabremos así cuánto aguanta y si ya es suficiente.

De nuevo si tenemos Linux como máquina local es muy sencillo instalarlo sólo con poner:

$ sudo apt-get install apache2-utils

Por ejemplo si quiero ejecutar 100 peticiones de 10 visitantes simultáneamente a mi máquina local escribimos:

$ ab -n 100 -c 10 http://localhost/

En mi caso, me sale los siguientes resultados que son bien interesantes. Junto con htop podemos ver en tiempo real qué ha pasado con nuestro servidor.

This is ApacheBench, Version 2.3 <$Revision: 1528965 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)…..done


Server Software:        Apache/2.4.7
Server Hostname:        localhost
Server Port:            80

Document Path:          /
Document Length:        5306 bytes

Concurrency Level:      10
Time taken for tests:   2.751 seconds
Complete requests:      100
Failed requests:        0
Total transferred:      560500 bytes
HTML transferred:       530600 bytes
Requests per second:    36.35 [#/sec] (mean)
Time per request:       275.072 [ms] (mean)
Time per request:       27.507 [ms] (mean, across all concurrent requests)
Transfer rate:          198.99 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:    21  274 659.4     58    2242
Waiting:       21  271 653.4     56    2225
Total:         21  274 659.4     58    2242

Percentage of the requests served within a certain time (ms)
  50%     58
  66%     65
  75%     75
  80%     79
  90%   2241
  95%   2242
  98%   2242
  99%   2242
 100%   2242 (longest request)

Puede ser un poco bruto pero ya puestos a llevar al extremo a nuestro servidor no está de sobra probarlo. Si el servidor aguanta el test entonces eso es buena señal. Si de repente ya no tenemos las webs visibles. Jeje, pues a optimizar.

Hay personas que dedican todo su trabajo a optimizar cada uno de éstos programas. Espero que comprenda que no puedo resumirlos en un sólo post así que aquí lo dejo y me remito a la documentación oficial.

http://httpd.apache.org/docs/2.0/es/
https://mariadb.com/kb/es/
http://php.net/manual/es/

Espero que haya servido de guía.

Saludos 🙂


Me preocupa el despliegue contínuo, fijando versiones en composer.json (editado)

2014-11-23 - Categorías: General

¿Qué pasa si tienes un proyecto con librerías gestionadas con #Composer y le has puesto muchas de ellas que se actualicen a la última versión disponible?
Para mantener el programa actualizado, beneficiándote de las últimas mejoras de cada librería, era una buena solución. Poner todo a la versión ‘dev-master’. Jeje, todo va bien mientras estás desarrollando..

De vez en cuando alguna función ‘deprecated’ deja de existir porque definitivamente la eliminaron. Nuevas funciones o propiedades que podemos usar. La aplicación funciona cada vez mejor pero sabes que no hay otra que fijar las versiones si no cuando pasemos a producción es un riesgo que se actualice automáticamente y zas! dejó de funcionar. Así que hay que buscar la versión que tenemos instalada de cada paquete y fijarlas.


Puede que tengamos un composer.json parecido a éste, con muchos ~ * @dev dev-master >= etcétera:

"requiere" : {
  "php" : ">=5.3.3",
  "symfony/symfony" : "2.5.*",
  "doctrine/orm" : "~2.2,>=2.2.3",
  "doctrine/doctrine-bundle" : "~1.2",
  "twig/extensions" : "~1.0",
  "symfony/assetic-bundle" : "~2.3",
  "symfony/swiftmailer-bundle" : "~2.3",
  "symfony/monolog-bundle" : "~2.4",
  "sensio/distribution-bundle" : "~3.0",
  "sensio/framework-extra-bundle" : "~3.0",
  "incenteev/composer-parameter-handler" : "~2.0",
  "sensio/generator-bundle" : "~2.3",
  "mopa/bootstrap-bundle" : "dev-master",
  "twbs/bootstrap" : "dev-master",
  "knplabs/knp-paginator-bundle" : "dev-master",
  "knplabs/knp-menu-bundle" : "dev-master",
  "knplabs/knp-menu" : "2.0.*@dev",
  "craue/formflow-bundle" : "dev-master",
  "friendsofsymfony/user-bundle" : "~2.0@dev",
  "doctrine/doctrine-fixtures-bundle" : "dev-master",
  "doctrine/data-fixtures" : "dev-master",
  "liip/functional-test-bundle" : "dev-master",
  "liuggio/excelbundle" : "dev-master",
  "phpunit/phpunit" : "4.2.*",
  "symfony/framework-bundle" : ">=2.0.0",
  "aws/aws-sdk-php" : ">=2.6.2"
 },

Por ejemplo, la primera línea sobre el requerimiento de php no depende de nosotros sino de la versión instalada en el servidor. Así que vamos a la segunda, la de symfony/symfony.

Ahora mismo el proyecto funciona, así que ejecutamos lo siguiente en un terminal o línea de comandos:

$ composer show -i

Si no lo tenemos instalado globalmente entonces:

$ php composer.phar show -i

En éste caso me puede haber salido algo como lo siguiente:

aws/aws-sdk-php                      2.7.2              AWS SDK for PHP - Use Amazon Web Services in your PHP project
craue/formflow-bundle                dev-master a88ecba Multi-step forms for your Symfony2 project.
doctrine/annotations                 v1.2.1             Docblock Annotations Parser
doctrine/cache                       v1.3.1             Caching library offering an object-oriented API for many cache backends
doctrine/collections                 v1.2               Collections Abstraction library
doctrine/common                      v2.4.2             Common Library for Doctrine projects
doctrine/data-fixtures               dev-master ac36ccc Data Fixtures for all Doctrine Object Managers
doctrine/dbal                        v2.4.3             Database Abstraction Layer
doctrine/doctrine-bundle             v1.2.0             Symfony DoctrineBundle
doctrine/doctrine-fixtures-bundle    dev-master 9a5b528 Symfony DoctrineFixturesBundle
doctrine/inflector                   v1.0               Common String Manipulations with regard to casing and singular/plural rules.
doctrine/instantiator                1.0.4              A small, lightweight utility to instantiate objects in PHP without invoking their constructors
doctrine/lexer                       v1.0               Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.
doctrine/orm                         v2.4.6             Object-Relational-Mapper for PHP
friendsofsymfony/user-bundle         dev-master 9714a92 Symfony FOSUserBundle
guzzle/guzzle                        v3.9.2             Guzzle is a PHP HTTP client library and framework for building RESTful web service clients
incenteev/composer-parameter-handler v2.1.0             Composer script handling your ignored parameter file
jdorn/sql-formatter                  v1.2.17            a PHP SQL highlighting library
knplabs/knp-components               1.3.1              Knplabs component library
knplabs/knp-menu                     dev-master d6f3cc4 An object oriented menu library
knplabs/knp-menu-bundle              dev-master bdfc95d This bundle provides an integration of the KnpMenu library
knplabs/knp-paginator-bundle         dev-master 701dffe Paginator bundle for Symfony2 to automate pagination and simplify sorting and other features
kriswallsmith/assetic                v1.2.0             Asset Management for PHP
liip/functional-test-bundle          dev-master eb42b04 This bundles provides additional functional test-cases for Symfony2 applications
liuggio/ExcelBundle                  dev-master 22a2a74 This is a Symfony2 Bundle helps you to read and write Excel files (including pdf, xlsx, odt), thanks to the PHPExcel library
monolog/monolog                      1.11.0             Sends your logs to files, sockets, inboxes, databases and various web services
mopa/bootstrap-bundle                dev-master a0ee4e8 Easy integration of twitters bootstrap into symfony2
mopa/composer-bridge                 v1.3.0             Symfony2 Composer Bridge
phpoffice/phpexcel                   1.8.0              PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
phpunit/php-code-coverage            2.0.11             Library that provides collection, processing, and rendering functionality for PHP code coverage information.
phpunit/php-file-iterator            1.3.4              FilterIterator implementation that filters files based on a list of suffixes.
phpunit/php-text-template            1.2.0              Simple template engine.
phpunit/php-timer                    1.0.5              Utility class for timing
phpunit/php-token-stream             1.3.0              Wrapper around PHP's tokenizer extension.
phpunit/phpunit                      4.2.6              The PHP Unit Testing framework.
phpunit/phpunit-mock-objects         2.3.0              Mock Object library for PHPUnit
psr/log                              1.0.0              Common interface for logging libraries
sebastian/comparator                 1.0.1              Provides the functionality to compare PHP values for equality
sebastian/diff                       1.2.0              Diff implementation
sebastian/environment                1.2.0              Provides functionality to handle HHVM/PHP environments
sebastian/exporter                   1.0.2              Provides the functionality to export PHP variables for visualization
sebastian/version                    1.0.3              Library that helps with managing the version number of Git-hosted PHP projects
sensio/distribution-bundle           v3.0.8             Base bundle for Symfony Distributions
sensio/framework-extra-bundle        v3.0.2             This bundle provides a way to configure your controllers with annotations
sensio/generator-bundle              v2.4.0             This bundle generates code for you
sensiolabs/security-checker          v2.0.0             A security checker for your composer.lock
swiftmailer/swiftmailer              v5.3.0             Swiftmailer, free feature-rich PHP mailer
symfony/assetic-bundle               v2.5.0             Integrates Assetic into Symfony2
symfony/monolog-bundle               v2.6.1             Symfony MonologBundle
symfony/swiftmailer-bundle           v2.3.7             Symfony SwiftmailerBundle
symfony/symfony                      v2.5.6             The Symfony PHP framework
twbs/bootstrap                       dev-master e27dc5d The most popular front-end framework for developing responsive, mobile first projects on the web.
twig/extensions                      v1.2.0             Common additional features for Twig that do not directly belong in core
twig/twig                            v1.16.2            Twig, the flexible, fast, and secure template language for PHP

Viendo la línea de symfony/symfony vemos que tenemos instalada la versión 2.5.6. Entonces podemos ir a nuestro fichero composer.json y cambiar el 2.5.* por 2.5.6 así siempre sabremos que no se actualizará a la versión 2.5.7 y sucesivas. Evitando así esos posibles fallos.

Así sucesivamente.

Hay versiones que siguen estando a dev-master al ejecutar ‘composer show -i’. No queda otra que ir viendo uno a uno en sus webs, a ver cuál es la última versión disponible e ir probando si al fijarla continúa funcionando nuestro proyecto.

Usando composer install en vez de update

Otra opción que tenemos es usar ‘composer install’. Lo que hacemos haciendo ‘install’ en vez de ‘update’ es usar la versión exacta que tengamos en el fichero composer.lock es en vez de comprobar las versiones disponibles, descargar las últimas permitidas y así arriesgarnos a que luego deje de funcionar.

Hay que ir viendo un término intermedio entre fijar las librerías a una cierta versión con lo que te quedas sin las últimas mejoras pero ganas estabilidad, o pones las librerías a dev-master con lo que te puedes pasar mucho tiempo «acomodando» las nuevas funcionalidades de cada librería a la aplicación pero ganarás que tu aplicación tendrá todo lo nuevo.

Resumiendo, en local deberíamos siempre de ir actualizando las librerías. Usando ‘composer update’ de vez en cuando para mantener nuestro programa actualizado. Comprobamos que todo funcione y cuando estamos seguros subimos el fichero composer.lock al repositorio para hacer ‘composer install’ en el despliegue.

Además, si ejecutamos en el despliegue:

$ composer install –prefer-dist

sólo te descargará lo necesario para que tu aplicación funcione con lo que descargará bastante menos y la aplicación será más ligera.

Espero que sirva.

Un saludo 🙂


HeidiSQL ¡menuda joya de la informática!

2014-11-12 - Categorías: General

¡Uau! Me he quedado boquiabierto al curiosear el proyecto que están montando con HeidiSQL. Es uno de ésto proyectos que al verlo me lo descargué sin pensármelo. He estado probándolo para conectar a bases de datos MySQL y MariaDB. Cuando me he decidido a curiosearlo un poco más a fondo, no he podido aguantarme, y aquí estoy compartiéndolo para todos los que entran a leerme.

Características

HeidiSQL es un programa gestor de bases de datos. Es decir, es un cliente que se conectar a servidores de bases de datos. Nos permite hacer practicamente de todo, por lo menos con las bases de datos MySQL y MariaDB.


Podemos conectar a también a bases de datos de Microsoft SQL Server y en las últimas versiones están experimentando con la conexión al gran Postgresql. Éste proyecto promete mucho, y seguro que seguiremos leyendo más sobre él. Ahora incluso más que se lanza a añadir Postgresql como la siguiente base de datos compatible.

Continuar leyendo..

Instalar Bower en Ubuntu

2014-11-02 - Categorías: General

¡Buenos días!

Estoy escribiendo poco últimamente sobre programación. No me he olvidado del blog, es que gracias a Dios estoy teniendo menos tiempo. No está la cosa para echar cohetes acá en Spain pero voy a intentar apretar y no abandonar en las buenas costumbres, como por ejemplo, escribir en un blog 😉

Para instalar Bower tuve que navegar para encontrar dispersa alguna información, así que aquí les dejo todo junto en un post.

Qué es

Bower es una excelente herramienta para automatizar la gestión de tus librerías. Está creada para gestionar los fuentes de la parte front-end. Es decir, Bower nos descarga y actualiza las librerías de entorno cliente: CSS, HTML y Javascript que necesitemos. Puede ser por ejemplo las librerías de Bootstrap o jQuery.

Instalar

Necesitaremos tener instalado:

  • Git
  • npm
  • nodejs

La web oficial es: http://bower.io/

Los comandos para instalar son los siguientes:

$ sudo apt-get update
$ sudo apt-get install git
$ sudo apt-get install npm
$ sudo apt-get install nodejs
$ sudo npm install -g bower

Llegados a éste punto si ejecutamos ‘bower update’ nos saldrá un error porque no encuentra ‘node’. Ésto pasa porque el ejecutable en Ubuntu no es node es nodejs y no lo encuentra. Así que creamos un enlace simbólico y asunto solucionado.

$ sudo ln -s /usr/bin/nodejs /usr/bin/node

Ejecutar

Ya teniendolo instalado nos falta una configuración sencilla en dos ficheros. Primero un bower.json donde elegimos qué librerías necesitamos:

{
«name»: «Nombre del proyecto»,
«version»: «1.0.0»,
«dependencies»: {
«jquery»: «latest»,
«jquery-ui»: «latest»,
«bootstrap» : «latest»,
«font-awesome»: «latest»
}
}

Si ponemos en la versión de cada dependencia latest siempre nos descargará o actualizará a la última versión de la librería. Segundo para configurar en qué directorio queremos todo podemos crear un fichero .bowerrc

{
«directory»: «lib»,
«json»: «bower.json»,
«searchpath»: [
«https://bower.herokuapp.com»
]
}

Ahora todas las librerías las tendremos bajo el directorio /lib cuando ejecutemos lo siguiente:

$ bower update

Para terminar de incluir todas éstas librerías en un fichero HTML y usarlas podemos poner un HEAD parecido al siguiente:

<head>
<title>Título de la web</title>
<meta charset=»utf-8″>
<meta name=»viewport» content=»width=device-width, initial-scale=1.0″>
<link rel=»stylesheet» href=»lib/bootstrap/dist/css/bootstrap.min.css» type=»text/css»>
<link rel=»stylesheet» href=»lib/font-awesome/css/font-awesome.min.css» type=»text/css»>
<script src=»lib/jquery/dist/jquery.min.js»></script>
<script src=»lib/jquery-ui/jquery-ui.min.js»></script>
<script src=»lib/bootstrap/dist/js/bootstrap.min.js»></script>
<script src=»main.js»></script>
<link rel=»stylesheet» href=»estilo.css» type=»text/css»>
</head>

Ya podemos empezar a maquetar y programar usando jQuery, jQuery-UI, Bootstrap y las Fuentes Asombrosas. No hemos tenido que ir web a web descargando todas las librerías una a una. Además si ahora ejecutas en cualquier momento ‘bower update’ se te actualizarán las librerías a la última versión.

Si has llegado hasta aquí espero que te estén sirviendo de ayuda.

Un saludo 🙂

© 2024 JnjSite.com - MIT license

Sitio hecho con WordPress, diseño y programación del tema por Jnj.