WordPress

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 🙂


LibreOffice, el office nuestro de cada día

2014-11-01 - Categorías: General

¡Hola de nuevo!

¿Cómo podía dejarme ésta suite ofimática que todo ordenador debería de llevar? Tienes las utilidades básicas que en la oficina o en casa todos necesitamos: editor de textos, hojas de cálculo, presentaciones, dibujos, e incluso un potente gestor de bases de datos.

Generalmente me dedico a usar el editor de textos y hojas de cálculo. Pero para escribirles éste post me he puesto a curiosear la suite completa a ver qué tal funciona.

Una primera aproximación

Veo que en mi Linux Ubuntu no tengo instalado LibreOffice Base. Es el gestor de bases de datos que tenemos disponible. Me ha parecido muy pero que muy interesante. Así que lanzo mi Centro de software de Ubuntu y me instalo todos los programas de LibreOffice. En su página oficial lo pueden descargar:

https://es.libreoffice.org/

A simple vista tenemos una serie de formatos para los documentos totalmente abierta. Es decir, tus archivos de LibreOffice se guardarán en formatos abiertos que cualquier otro programa podrá abrir si es que es compatible. No hay trabas para otros a la hora de hacerse compatibles como solía pasar con muchos formatos patentados, cerrados y sin documentación.

Tenemos la gran mayoría de herramientas que otros programas tienen.

Muchos ya hemos probado los textos, hojas de cálculo y presentaciones. Con los prácticos botones para exportar los documentos a PDF. Todo tipo de herramientas de edición. Etcétera. Así que he hecho unas pruebas con el último elemento que veo que están mejorando con unos resultados bien buenos, el LibreOffice Base.

LibreOffice Base, muy potente

Destaca que permite la conexión con muchas bases de datos como MySQL que tanto se usa en páginas web, con el robusto PostgreSQL.. también incluye un motor de base de datos al que han llamado HSQL.

Tenemos unas plantillas para tablas con las que ir probando. Podemos crear formularios para trabajar con los datos, generar informes de texto, hojas de cálculo.. se integra con el resto de aplicaciones sin atarte a usar su motor de base de datos.

Probando probando he usado una plantilla para trabajar con datos de contactos. Se puede ver en la imagen como en apenas 5 minutos tenemos un formulario listo para usar.

Este proyecto promete mucho, se está gestando algo grande en el mundo de las suites ofimáticas. Y viene del mundo del código libre.

Terminando

También hay otra herramienta como el LibreOffice Math que les dejo para que ustedes prueben 😉

Resumiendo, toda una joya de la informática. De código libre que se puede consultar, se puede colaborar en el proyecto, y por supuesto se puede usar el paquete completo de forma totalmente gratuita y sin restricciones incluso para entornos de trabajo.

Sigo escribiendo desde Linux, hablo de software libre, pero también lo tienen disponible para Windows o Mac.

Un saludo 🙂


Thunderbird: Cuando tienes emails para parar un tren

2014-10-19 - Categorías: General

¡Buenos días! Hace un tiempo que no escribo aquí así que voy a intentar no perder las buenas costumbres dejándoles aquí otro programa que me está haciendo la vida más fácil.

Por cuestiones de trabajo resulta que cada vez más voy acumulando y atendiendo más y más emails. Tengo varias cuentas que hasta hace poco iba recibiendo todos sus emails en una misma cuenta. Una cuenta gratuita con un proveedor de correo electrónico con opción de usarlo gratuitamente hasta cierto punto. Pero llegué al límite de cuentas que podía recibir.

No quería tener que entrar en cada web para consultar los emails y tampoco quería instalarme un programa en local por lo engorroso que puede resultar su mantenimiento pero no encontré otra solución.

Instalación

Me decidí por Thunderbird porque es gratis, de código libre, y primo hermano del navegador Firefox que ya me gustaba.

Enlace de descarga: https://www.mozilla.org/es-ES/thunderbird/?icn=tabz

Porqué

Lo primero es que necesitaba usar muchos emails distintos desde un mismo sitio, asunto solucionado.

Necesitaba poder tener copias de seguridad, solucionado porque con copiar el directorio .thunderbird de tu carpeta personal ya tienes toda la copia de seguridad del programa. No hay que andar con complicados cifrados, claves de instalación ni nada parecido. En caso extremo tenemos unos archivos .msf en ésta carpeta en donde tenemos todos los emails guardados como ficheros de texto puro.

Permite todas las cuentas de correo que quieras sin límite ninguno, ni en almacenamiento ni en tamaño de cada email.

Compatible con SMTP e IMAP, filtros, redirecciones, múltiples carpetas, etc. Todo lo que puedas imaginar que un lector de emails debe tener.  Además tiene también libreta de direcciones y un chata donde charlar a través de varias redes sociales. Yo he comprobado que funciona correctamente con GoogleTalk, Facebook y Twitter.

También es compatible con Windows, Mac y Linux. Y lo tenemos disponible en muchos idiomas.

Resumiendo, otra gran herramienta del Open Source para todos. Me ha funcionado de maravilla en todo éste tiempo que lo llevo usando. Lo recomiendo.

Un saludo 🙂


Hola mundo Silex usando Composer

2014-09-28 - Categorías: General


Estoy ahora curioseando los entresijos de PHP. Viendo hacia dónde tiende la programación en la web. Añadiendo herramientas, librerías de programación para mis proyectos.

Dentro del mundo de la programación, elegir librerías, actualizarlas, combinarlas.. todo esto lleva trabajo y en los últimos años están apareciendo herramientas que nos facilitan la vida.

Pongámonos en situación

Cuando empezamos a programar con PHP. Desde el inicio hasta hace pocos años, que casi todo se hacía a pelo. PHP puro y duro, añadiendo código y más código. Los programas iban creciendo y creciendo. Se iban añadiendo manualmente librerías para todo tipo de tareas. Ahora ya no tenemos que reinventar la rueda. Estan surgiendo librerías públicas como por ejemplo  Packagist, donde se recopilan códigos para hacer todo tipo de tareas con PHP.

Para manejo de Packagist tenemos una herramienta llamada Composer, con la que una vez configurado lo que vamos a necesitar Composer se encarga de conectar a Packagist y descargar los ficheros que haga falta. Para la programación front-end tenemos herramientas como Bower, similar a Composer, pero pensado para gestionar librerías Javascript/CSS. Estas herramientas, una vez configuradas, nos descargarán los ficheros a nuestro directorio de trabajo y listo. Ya tendremos nuestro proyecto para programar, podremos añadir o borrar librerías fácilmente, elegir versiones, actualizar todo..

Web de Composer: https://getcomposer.org/
Web de Packagist: https://packagist.org/
Web de Bower: http://bower.io/

Herramientas

Para éste post he elegido probar Silex, es un framework bien sencillo. Más bien un micro-framework como lo nombran oficialmente. Está construido a base de componentes del gran framework Symfony. Con él tendremos una serie de herramientas para usar como plantillas Twig, podremos enviar emails con Swiftmailer, si no eres un experto en seguridad (como es mi caso) no pasa nada porque tenemos el componente de seguridad Security, el componente para generar formularios Form, el generador de URLs, etcétera.

Todos los componentes

Como iba diciendo, Composer se va a encargar de gestionar por nosotros las librerías PHP de nuestro proyecto. Con el ejemplo veremos mejor cómo funciona. Prepararemos nuestro proyecto hola mundo con Silex con Composer y veremos qué sencillo que lo tenemos para aumentar luego librerías. Pasos:

  1. Descargamos el fichero composer.phar
  2. Preparamos nuestro fichero composer.json
  3. Ejecutamos Composer.
  4. Empezamos a programar.

Descargamos el fichero composer.phar

En el directorio donde vayamos a desarrollar nuestro proyecto o queramos hacer éstas pruebas debemos de poder usar Composer. Se puede instalar en el sistema, en el PATH del sistema, pero eso ya se sale del post. La forma sencilla que viene en su web oficial es poniendo el fichero composer.phar en el directorio. Si tienes curl ejecutas lo siguiente:

curl -sS https://getcomposer.org/installer | php

Si sólo tienes PHP, puedes ejecutar lo siguiente en línea de comandos y se te descargará el fichero:

php -r «readfile(‘https://getcomposer.org/installer’);» | php

O manualmente como se indica en su web: https://getcomposer.org/download/

Si quieres instalar globalmente Composer tengo un post anterior donde lo explico: https://jnjsite.com/programacion/instalar-globalmente-composer-en-ubuntu/

No lo he dicho pero supongo que ya tienes instalado PHP. Sino desde su web puedes instalarlo: http://es1.php.net/downloads.php. Si tienes Linux, en mi caso Ubuntu, basta con poner en línea de comandos ‘sudo apt-get install php5’.

Preparamos nuestro fichero composer.json

Para Silex va a ser muy sencillo. Si queremos elegir librerías no tenemos más que ir a Packagist y añadir las que necesitemos. El fichero:

{
«require» : {
«silex/silex» : «dev-master»,
«phpoffice/phpword»: «dev-master»
}
}

En el mismo directorio raiz donde tenemos el composer.phar creamos éste fichero composer.json con el contenido de aquí encima. Si nos fijamos he puesto dev-master aquí arriba, esto nos descargará siempre la última versión que haya disponible. He añadido phpoffice/phpexcel, para hacer una prueba a ver qué tal.

Ejecutamos Composer

Entonces la primera vez tenemos que ejecutar una instalación de las librerías en linea de comandos:

php composer.phar install

Veremos entonces algo parecido a lo que hay en la imagen inicial. Si estamos modificando el fichero composer.json debemos entonces ejecutar lo siguiente:

php composer.phar update

Si todo ha ido bien entonces tendremos en nuestro directorio los siguientes ficheros: composer.phar, composer.json, composer.lock y el directorio vendor. El fichero composer.lock es un fichero que se actualiza para llevar sus tareas internas cada vez que ejecutamos Composer. Luego en el directorio vendor/ tendremos todas las librerías actualizadas a la versión.

Empezamos a programar

No lo he dicho antes pero dentro del directorio de las librerías (vendor), tendremos ahora un fichero autoload.php que simplemente lo incluimos o requerimos y a programar. Tendremos acceso a todas las librerías de Composer que hayamos incluido. Con un ejemplo se verá más claro:

<?php
// index.php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

require_once __DIR__.'/vendor/autoload.php';

$app = new SilexApplication();

$app->get('/', function () {
    return 'Página inicial.';
});

$app->get('/crearTexto', function () {
    $nombreArchivo = 'fichero.odt';
    
    $phpWord = new PhpOfficePhpWordPhpWord();
    
    $section = $phpWord->addSection();
    $section->addText('Hello world!');
    $section->addText('Hello world! I am formatted.',
        array('name'=>'Tahoma', 'size'=>16, 'bold'=>true));
    $phpWord->addFontStyle('myOwnStyle',
        array('name'=>'Verdana', 'size'=>14, 'color'=>'1B2232'));
    $section->addText('Hello world! I am formatted by a user defined style',
        'myOwnStyle');
    $objWriter = PhpOfficePhpWordIOFactory::createWriter($phpWord, 'ODText');
    $objWriter->save($nombreArchivo);
    
    $str = 'Fichero de Word en formato Open Document creado.';
    $str .= '<a href="' . $nombreArchivo . '">Haz click aquí para descargar</a>';
    
    return $str;
});

$app->run();

Ahora vamos a arrancar el servidor web interno de PHP para probar la pequeña aplicación. Ejecutamos en línea de comandos estando en el directorio del proyecto:

php -S localhost:8000

He usado el ejemplo del libro oficial en castellano sobre Silex, modificándolo para ésta prueba. Si quieres puedes ver toda la documentación de Silex en http://librosweb.es/silex/

Web de PHPWord: https://github.com/PHPOffice/PHPWord

Si todo ha ido bien, ejecutando http://localhost:8000/ veremos el mensaje ‘Página inicial.’. Si ejecutamos http://localhost:8000/crearTexto veremos el segundo mensaje, en donde se habrá creado el fichero de texto fichero.odt y podremos descargarlo. Si vemos nuestro directorio del proyecto ahí lo tendremos. En el ejemplo he seguido la documentación de su página oficial para crear dicho fichero.

Resumiendo

¿Qué sencillo usar las librerías para hacer algo tan complejo como un fichero compatible con Word? En casi 40 líneas de código tenemos una aplicación web que crea dicho fichero. Todo gracias a usar dos librerías de Composer y en seguida ya lo tenemos.

Recapitulando, ponemos en el fichero composer.json las librerías que vayamos a usar. Luego incluimos el fichero /vendor/autoload.php y ya tenemos todas las clases de objetos listos para usar. Te ahorra tiempo, es práctico, organizado. Si no estás ya usando los vendors deberías de hacerlo.

¡Un saludo!


FreeFileSync para tus copias de seguridad locales

2014-09-20 - Categorías: General

¡Hola de nuevo! Hoy les traigo una frikada total. Se trata de un programa para hacer copias de seguridad muy sofisticado y a la vez bastante simple de configurar.

Estoy hablando del FreeFileSync, otro programa de código libre que se publica en SourceForge.net. Donde tenemos que ésta misma semana en que les escribo 13.308 descargas, que son muchas comparando con otros proyectos similares.


Es un programa muy muy completo. Podemos hacer copias espejo de una carpeta a otra. Podemos hacer sincronización de archivos, donde se comparan dos directorios y sólo se copian los archivos en los que ha habido cambios. Las sincronizaciones se pueden hacer en una dirección o en ambas.

Siempre con todo lujo de detalles en la interfaz gráfica. Veremos qué archivos han cambiado, cuáles se han borrado de qué sitio, qué carpetas tienes más cambios. Tendremos también contadores totales de la cantidad de cambios abajo a la derecha. Permite filtros para sólo copiar ciertos archivos, todos los archivos o para excluir archivos. Y por si no era bastante, cuando se realiza la copia o sincronización se muestra una gráfica de estado en tiempo real como la de la imagen de arriba.

Compatible con Linux, Windows y Mac. Traducido a múltiples idiomas. Se pueden grabar las configuraciones que hagamos para copiar. También se pueden grabar para ejecutar luego como tarea programada del sistema operativo, con lo que, una vez configurado, podemos estar tranquilos. Cada vez que se ejecute tendremos una copia de todos nuestros valiosos archivos.

Lo tenemos en descarga en su página oficial: http://freefilesync.sourceforge.net/

Otra joya de la informática del mundo del código libre. Por supuesto, también es gratis 😉

Un saludo.


Instalar globalmente Composer en Ubuntu

2014-09-08 - Categorías: General

Este post va a ser bien corto. Se trata de cómo instalar el ejecutable de Composer en un directorio de Linux que está en la variable PATH del sistema.

Los directorios que están en PATH son los directorios en donde se busca el programa cuando queremos ejecutar algo en Linux. Podemos escribir lo siguiente en línea de comandos y veremos cuáles tenemos ahora mismo:

echo $PATH

Tendremos separados por : todos los directorios actuales. Vamos entonces a añadir en uno nuestro ejecutable de Composer, que se trata de un phar. Un fichero .phar es un programa PHP empaquetado dentro de un sólo archivo.

Vamos entonces..

Descargar la última versión de composer

Si tenemos instalado curl podemos ejecutar lo siguiente en línea de comandos:

curl -sS https://getcomposer.org/installer | php

Si sólo tenemos instalado PHP ejecutamos lo siguiente:

php -r «readfile(‘https://getcomposer.org/installer’);» | php

Entonces debemos tener en el directorio en que estamos un fichero llamado composer.phar que podríamos usar con ‘php composer.phar …’. Pero queremos ir un paso más allá. Pudiendo ejecutarlo desde cualquier directorio, ¿recuerdas?

Instalamos en el sistema en PATH

Ejecutamos los siguientes comandos y ya lo tendremos instalado globalmente.

sudo mv composer.phar /usr/local/bin/composer
sudo chown root:root /usr/local/bin/composer
sudo chmod 755 /usr/local/bin/composer

Ahora podremos usarlo simplemente poniendo $ composer ..

Por ejemplo, si queremos actualizar composer debemos usar:

composer selfupdate

Siendo usuario root, si eres usuario normal debes poner:

sudo composer selfupdate

¿Sencillo verdad? Espero haberme explicado bien, si no, mensaje aquí abajo 😉


Mozilla y su navegador Firefox ya son de los grandes

2014-08-31 - Categorías: General

Cómo no, siguiendo con la serie de utilidades de código abierto, no me podía olvidar de una de las grandes joyas de la informática. Estoy hablando, como indica el titular, del navegador Mozilla Firefox.

Es uno de mis mejores aliados al conectarme a la web, vela por mi seguridad, por mi privacidad, sigue fiel a los estándares, es gratuito, de código abierto, está hecho por todos, es para todos.. si enumero todas sus características me puedo quedar aquí escribiendo toda una eternidad así que mejor voy a ir un poco al grano.

Situación actual

Son muchas las bondades que tiene éste navegador. Muchos ya lo conocerán, alrededor del 17-18% de los usuarios navegamos con él. Según los últimos datos que encuentro a fecha en que escribo, el ranking de navegadores queda en el orden siguiente:

  1. Internet Explorer
  2. Firefox
  3. Chrome
  4. Safari
  5. Opera

Si quieren corroborar los datos pueden consultar las estadísticas de StatCounter o NetMarketShare, por ejemplo. Hay muchos datos muy interesantes dispersados por Internet, como el uso de los navegadores por país, donde podemos ver que en muchos países Firefox es el navegador más utilizado. Probablemente que tengamos a Internet Explorer como ganador en el ranking mundial se debe a que viene instalado con Windows, pero eso ya es mi opinión.

Naturaleza

El hecho es que un proyecto como Firefox, esté siendo el segundo navegador más utilizado tiene mucho mérito. Pensemos que está organizado por la Fundación Mozilla, una organización sin ánimo de lucro. Una fundación que vive de donaciones, publica sus trabajos totalmente gratis para todos y además nos da el código fuente. No existe una gran multinacional detrás del navegador, sino que se trata de muchos voluntarios de todo el mundo colaborando junto con unos pocos que forman la Fundación Mozilla.

En su propia web pueden encontrar mucha información sobra la naturaleza de sus proyectos:
https://www.mozilla.org/es-ES/mission/

Podemos ver, cada vez más a menudo, proyectos de colaboración para un mundo mejor. Estoy hablando de GNU/Linux que nos proporcionan un sistema operativo completo, estoy hablando también de Wikipedia con su filosofía de ayudar a todo el mundo ofreciendo gratuitamente el conocimiento, y así unos tras otro podemos encontrar otros en la misma linea.

Colaboraciones

Personas de todo el mundo están colaborando activamente, y grandes empresas como por ejemplo Google ayudan al proyecto. La Fundación Mozilla está metida en el desarrollo y estandarización de muchas funcionalidades que tenemos hoy en dia en nuestros navegadores. Algunas de las cuales están parcialmente desarrolladas o en pleno desarrollo. Podemos ver proyectos para almacenar información en el navegador como IndexedDB o el WebGL para hacer gráficos en 3 dimensiones.

Destaca en 2014 la presentación de la mano de Mozilla y Unity (entorno de desarrollo con motor gráfico para desarrollo de videojuegos) la librería asm.js, con la que se podrá usar el navegador para correr completos videojuegos portando código desde C/C++. En Unity quieren hacer sus herramientas compatibles con la web, con lo que se podrán exportar los videojuegos y ejecutar dentro de navegadores, corriendo a la misma velocidad que los tradicionales videojuegos. En todos éstos avances y muchos más está metida la Fundación Mozilla.

El navegador

Para hablar de Firefox no podemos olvidarnos de los otros proyectos de Mozilla: como el lector de correo Thunderbird, o un nuevo sistema operativo para móviles, el Firefox OS, con el que podremos correr programas hechos completamente con lenguajes web. Ya hay acuerdos con Telefónica para poner en marcha éste sistema operativo, veremos a ver qué tal. Nos podemos hacer una idea de que Firefox está donde tiene que estar.

Tenemos las clásicas herramientas que podemos encontrar en otros navegadores como el historial, la navegación privada que está ahora de moda, los marcadores para guardar las direcciones de nuestras páginas favoritas, y un largo etcétera.

Podemos ver todas las características de primera mano aquí:
https://www.mozilla.org/es-ES/firefox/desktop/

Hace un par de años podíamos ver que Firefox se estaba quedando un poco atrás, estaba siendo un poco lento, y no incluía muchos cambios con las últimas versiones. Pero ya veo que nos traían muchas nuevos cambios haciendo más pequeña la barra de menús que por defecto no está visible. Tenemos un menú desplegable a la derecha donde podemos configurar los accesos directos que queramos. Es muy configurable, teniendo gran cantidad de complementos con los que aumentamos sus funciones.

Si eres desarrollador podrás inspeccionar las webs mientras navegas o desarrollas, viendo al detalle el funcionamiento de una web. La primera imagen de arriba del todo en 3D es una de éstas herramientas, el visor 3D. Es la página de Mozilla, si lo activamos podemos mirar desde distintas perspectivas una web viendo como se dibujan las web internamente, viendo como las capas se amontonan unas encima de otras hasta llegar a lo que realmente vemos. ¿Mola verdad? ¡Qué frikada! Jajaja

También es interesante que ahora los de Mozilla te dan gratis una cuenta Sync, con la que puedes también guardar los marcadores de páginas favoritas, historial, contraseñas, etc. Todo ello en dicha cuenta, no hay problema si se te estropea el ordenador o lo cambias. Si pones tu usuario y contraseña de Sync en otro navegador Firefox tendrás todos esos datos de nuevo.

En resumen, una maravilla, otra joya de la informática que debemos de conocer.

Instalar

En la web de Mozilla tenemos un enlace para descargar el navegador:
https://www.mozilla.org/
Debe salir la versión que te debes instalar según tu ordenador, ya sea Windows, Mac, Linux..

Si tienes Linux como en mi caso sólo con poner lo siguiente el línea de comandos ya lo tendremos instalado:

sudo apt-get install firefox

Si has llegado hasta aquí abajo te digo que ya sólo me queda despedirme. Me permites preguntarte ¿qué navegador estas usando? ¿conocías Firefox? ¿te ha gustado el artículo? ¿falta o sobra algo? Para cualquier cosa, un mensaje aquí abajo, un click en me gusta, compartir, etc.. 😉

¡Gracias! ¡Saludos!


VLC: mucho más que un reproductor multimedia

2014-08-24 - Categorías: General

¡Hola de nuevo!

Hoy he cogido otro de los grandes proyectos de código abierto que tenemos disponibles para usar gratuitamente en nuestro ordenador.

¿No les han enviado alguna vez un vídeo que ha grabado su tio, abuelo, madre, un amigo.. y resulta que cuando vas a verlo no se puede ver? Es habitual que salga un error de códec desconocido. Ésto se debe a que muchos reproductores, aunque cada vez menos, no instalan los decodificadores de vídeo. Se instalan aparte mediante otros programas. Podemos encontrar grandes recopilaciones de decodificadores de vídeo y audio juntos en un mismo instalador.

Pues con VLC casi seguro que no vamos a necesitar instalar nada más, puesto que ya trae dentro del propio programa la gran mayoría de decodificadores que podamos necesitar. Éste ha sido uno de los puntos fuertes a la hora de elegir VLC como el reproductor multimedia por defecto de muchos de nosotros.

Un poco de historia

VLC nace como un proyecto universitario en 1996 en París. Sus siglas significan Video Lan Client, y como su nombre indica se trata de un programa para transmitir video por la red LAN. De ahí que ha ido derivando a lo que ahora tenemos.

Originalmente en el proyecto VideoLAN había dos soluciones: el VideoLanClient (VLC) y el VideoLanServer (VLS). Donde VLS se dedicaba a transmitir el video mientras que el VLC lo recibía y reproducía. Actualmente los dos proyectos se han unido en el VLC con lo que podemos emitir y recibir una señal de vídeo con el mismo programa. Que es lo que se puede ver en la imagen inicial.

Cabe destacar que partes de éste programa se han integrado en otros grandes proyectos. Siendo habitual que encontremos que nos recomiendan instalarlo.

Instalar o descargar

En la propia página web podemos encontrar todas las distribuciones disponibles. Está para varias plataformas, cómo no, para Windows, Mac o Linux lo tenemos disponible. En mi caso, como tengo Linux, pongo lo siguiente en línea de comandos y ya lo tengo instalado:

sudo apt-get install vlc

La web del proyecto: http://www.videolan.org/

Más información

Todas las características del VLC: http://www.videolan.org/vlc/features.html

También es interesante un proyecto que tienen de editor de vídeo basado en VLC, el llamado VLMC (video lan movie creator). Es un proyecto muy prometedor porque el programa sería compatible con casi todo tipo de vídeos sin tener que instalar nada extra. Buscan colaboradores como en todo buen proyecto de código abierto 😉

La web del VLMC: http://www.videolan.org/vlmc/

Para más información dejo un par de enlaces:
http://es.wikipedia.org/wiki/VideoLAN
http://es.wikipedia.org/wiki/VLC_media_player

Gran proyecto, existen muchos colaboradores, partners, y se están incluyendo partes del VLC en otras soluciones de la industria multimedia.

Terminando

Sólo me queda explicar un poco la imagen con la que empezaba el post. Ahí se puede ver cómo el primer VLC abierto está emitiendo la señal. Los cuatro restantes VLC están recibiendo y mostrando la señal que emite el primero.

Estaba curioseando y encuentro que tenemos muchos protocolos de streaming de video HTTP, RDP, Icecast, etc.. Cada uno tiene su forma de configurar y explicarlos no es el fin de éste post. Simplemente hay que coger un VLC darle a Archivo->Emitir entonces elegimos lo que queremos emitir: desde cámara, desde otro emisor, desde disco o archivos. Configuramos y lo lanzamos el servidor. Luego abriendo otros VLC le damos a Archivo->Abrir ubicación de red.. y podremos conectar al servidor.

Parece sencillo pero si vamos jugando con el programa veremos que tiene muchas, muchas, muchas opciones 🙂

¡Un saludo!


Audacity: editor y grabador de audio

2014-08-17 - Categorías: General

Cuando uno entra en el mundo de la informática y va necesitando programas para solucionar ciertas tareas, nos podemos encontrar con que no encontramos fácilmente la solución. Con éste post, pretendo empezar con una serie de programas de ‘fuente abierta’, open source para los amigos, que nos solucionan éstas tareas.

Basta navegar un poco y seguro que encontraremos alguno dedicado a lo que necesitemos.

Instalando

En mi caso tengo una distribución de Linux instalado. Si tienes Linux sólo con poner lo siguiente en un terminal tendrás instalado Audacity en tu máquina:

sudo apt-get install audacity

Si tienes otro sistema operativo puedes ir a la página oficial de descarga y elegir tu versión. Simplemente descargas el fichero y sigues las instrucciones de instalación como se hace con la mayoría de programas.

http://audacity.sourceforge.net/download/

Características

Podemos ver en la página del programa que es capaz de grabar con una velocidad de muestreo de hasta 384 000 Hz si tu ordenador es capaz de soportar tanta resolución, con muestras de hasta 32 bits de coma flotante cada una. Soporta los principales formatos de audio como MP3, AC3, WMA, etcétera.. Podemos cortar y pegar fácilmente mientras visualizamos lo grabado, editar, aplicar filtros, mezclar, hacer zoom a trozos de nuestro audio. Enlaza entradas y salidas, eligiendo de dónde queremos grabar, si queremos escuchar mientras grabamos.

Podemos programar grabaciones, establecer umbrales de activación para grabar. Grabación pista a pista al estilo de un estudio de sonido profesional grabando instrumento o instrumento, o voz a voz, mientras unos se escuchan a otros. Podemos tener múltiples pistas, mezclarlas, editarlas por separado. A parte de los efectos de sonido principales, tenemos 117 complementos.

Analizador de espectro, búsqueda de silencios, búsqueda de ritmo, generadores de ruido, de silencio, y un largo etcétera.

http://audacity.sourceforge.net/about/features

Para los expertos, también permite complementos para aumentar sus funciones.

Como puntos negativos sólo le encuentro que la interfaz es bien sencilla en cuanto a diseño: las formas y colores.

Conclusión

Una joya de la informática. Que seguro que haría las delicias de muchos de los aficionados o incluso profesionales que elijan soluciones del mundo de Open Source. Podemos tener resultados muy profesionales si aprendemos a manejarnos bien con éste programa y si tenemos un buen ordenador con buena tarjeta de sonido.

Para terminar sólo me queda poner la página principal del programa:
http://audacity.sourceforge.net/

Espero que lo disfruten.
¡Saludos!

© 2024 JnjSite.com - MIT license

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