European Union Public Licence

Habitualmente usamos licencias abiertas del estilo a GPL, Apache, MIT… pero siempre te queda la duda de ¿qué ocurre si alguien incumple la licencia?

A mediados de mayo de 2017 se actualizó la licencia EUPL [European Union Public Licence] ahora a su versión 1.2, una licencia para proyectos de código abierto (Open Source) y que tiene algunas ventajas con su uso con respecto a otras opciones del mercado, además de su gran compatibilidad con las licencias habituales de este tipo de código.

Lo primero de todo es que la licencia está disponible en todos los idiomas de la Unión Europea, y descargables, lo que ayuda a su comprensión. La licencia de por sí es bastante sencilla, e incluye un detalle importante, creo, que es la problemática judicial cuando no se aplica la misma y la resolución de conflictos, ya que establece un Tribunal Europeo para estos casos, lo que significa disponer de un lugar en el que se conoce bien la legislación en materia de software y código abierto, con su uso y mal uso. Hay que recordar que todos los programas desarrollados por la Administración Pública en Europa deberían incorporar esta licencia.

Documento en formato PDF y HTML.

Me gustaría hacer mención a algunos fragmentos que creo importantes, en lo que corresponde a la aprobación d ela versión 1.2:

A fin de seguir facilitando el intercambio y la reutilización de los programas informáticos desarrollados por las administraciones públicas en relación con el uso de una licencia de programas informáticos de fuente abierta, debe adoptarse una nueva versión de la licencia EUPL, la EUPL v. 1.2.

Este elemento es importante ya que si las Administraciones Públicas desarrollan código abierto estaría disponible para todos los ciudadanos, que incluso podrían llegar a colaborar en ellos.

Resultan necesarios algunos ajustes en la redacción y simplificaciones para adaptarla a las denominaciones oficiales, a fin de que su ámbito de aplicación sea más amplio, las partes tengan cierta flexibilidad en lo que respecta al Derecho aplicable y se aclare la competencia del Tribunal de Justicia de conformidad con lo dispuesto en el Tratado de Funcionamiento de la Unión Europea.

Como decía antes, está bien que la UE haya puesto a disposición de todos un tribunal que contemple la aplicación y conocimiento de esta licencia.

LICENCIA PÚBLICA DE LA UNIÓN EUROPEA v. 1.2

EUPL © Unión Europea 2007, 2016

La presente Licencia Pública de la Unión Europea (EUPL, por su sigla en inglés), se aplica a la obra (según se define más adelante) suministrada en las condiciones fijadas en la presente licencia. Queda prohibido cualquier uso de la obra distinto del autorizado por la presente licencia (en la medida en que tal uso esté protegido por un derecho del titular de los derechos de autor de la obra).

La obra se suministra en las condiciones fijadas en la presente licencia cuando el licenciante (según se define más adelante) haya colocado la siguiente advertencia inmediatamente después de la mención a los derechos de autor de la obra:

Licencia cedida con arreglo a la EUPL

o haya expresado por cualquier otro medio su voluntad de conceder una licencia con arreglo a la EUPL.

1. Definiciones

En la presente licencia, se entenderá por:

- «licencia»: la presente licencia,

- «obra original»: la obra o el programa de ordenador distribuido o comunicado por el licenciante con arreglo a la presente licencia en forma de código fuente o, en su caso, de código ejecutable,

- «obras derivadas»: las obras o programas de ordenador que pudiera crear el licenciatario sobre la base de la obra original o de alguna de las modificaciones de esta. La presente licencia no define el grado de modificación o dependencia de la obra original necesario para clasificar una obra como derivada; dicho grado se determinará de acuerdo con la legislación sobre derechos de autor aplicable con arreglo al artículo 15,

- «obra»: la obra original o sus obras derivadas,

- «código fuente»: la forma de la obra legible por seres humanos que pueda ser estudiada y modificada más fácilmente,

- «código ejecutable»: cualquier código, en general compilado, destinado a ser interpretado como programa por un ordenador,

- «licenciante»: la persona física o jurídica que distribuye o comunica la obra con arreglo a la licencia,

- «colaborador»: la persona física o jurídica que modifica la obra con arreglo a la licencia o contribuye de cualquier otra manera a crear una obra derivada,

- «licenciatario»: la persona física o jurídica que hace un uso cualquiera de la obra en las condiciones fijadas en la licencia,

- «distribución» o «comunicación»: cualquier acto de venta, donación, préstamo, alquiler, distribución, comunicación, transmisión o cualquier otro acto de puesta a disposición, en línea o fuera de línea, de copias de la obra o de acceso a sus funcionalidades esenciales a otra persona física o jurídica.

2. Ámbito de los derechos otorgados por la Licencia

El licenciante concede al licenciatario una licencia de ámbito mundial, a título gratuito, no exclusiva y que el licenciatario puede subcontratar mientras sigan vigentes los derechos de autor sobre la obra original, y lo autoriza a:

- utilizar la obra en cualquier circunstancia y para cualquier uso,

- reproducir la obra,

- modificar la obra y realizar obras derivadas de la misma,

- comunicar al público la obra o copias de la misma, poner a su disposición o exhibir la obra o las copias y, en su caso, ejecutar públicamente la obra,

- distribuir la obra o copias de la misma,

- prestar y alquilar la obra o copias de la misma,

- subcontratar los derechos relativos a la obra o a las copias de la misma.

Dichos derechos se podrán ejercer a través de cualquier medio, soporte y formato, conocido en el presente o que pueda inventarse en el futuro, en la medida en que así lo permita la legislación aplicable.

En los países cuyo ordenamiento contemple los derechos morales, el licenciante renunciará al ejercicio de los mismos en la medida en que lo permita la legislación, a fin de hacer efectiva la licencia de los derechos patrimoniales anteriormente enumerados.

El licenciante cede al licenciatario, libre de cánones, los derechos de uso no exclusivos sobre cualquier patente de que sea titular, en la medida necesaria para que el licenciatario haga uso de los derechos sobre la obra otorgados por la presente licencia.

3. Comunicación del código fuente

El licenciante podrá suministrar la obra en forma de código fuente o código ejecutable. Si la suministrara en forma de código ejecutable, deberá facilitar además una copia legible automáticamente del código fuente de la obra junto con cada copia de la obra que distribuya, o bien indicar, en una advertencia inserta a continuación de la mención a los derechos de autor adjunta a la obra, un repositorio en el que se pueda acceder al código fuente fácilmente y de manera gratuita durante el período en que el licenciante siga distribuyendo o comunicando la obra.

4. Limitaciones a los derechos de autor

En ningún caso podrá interpretarse la presente licencia de modo que prive al licenciatario de los beneficios de los que pudiera disfrutar como consecuencia de las excepciones o limitaciones a los derechos exclusivos de los titulares de los derechos de la obra, de la extinción de dichos derechos o de cualquier otra limitación aplicable.

5. Obligaciones del licenciatario

La cesión de los derechos en virtud de la presente licencia queda supeditada a ciertas restricciones u obligaciones que habrá de respetar el licenciatario. Dichas obligaciones son:

- Derecho de atribución: El licenciatario deberá mantener íntegramente todas las advertencias y menciones a los derechos de autor, patentes o marcas registradas, así como las que se refieran a la licencia y a la exención de responsabilidad. El licenciatario deberá adjuntar copias de dichas advertencias y menciones y de la licencia con cada copia de la obra que distribuya o comunique. El licenciatario se responsabilizará de que cualquier obra derivada incluya una advertencia bien destacada declarando que se ha modificado la obra, y la fecha de modificación.

- Cláusula de «izquierdo de copia» (copyleft): Si el licenciatario distribuyera o comunicara copias de la obra original o de obras derivadas basadas en la obra original, dicha distribución o comunicación deberá hacerse en las condiciones fijadas en la presente licencia o una versión posterior de la presente licencia, salvo si la obra original se distribuye expresamente solo bajo la presente versión de la licencia (por ejemplo, comunicando «EUPL v. 1.2 solamente». El licenciatario (ahora en su calidad de licenciante) no podrá ofrecer ni imponer condiciones adicionales sobre la obra o las obras derivadas que modifiquen o limiten las condiciones de la licencia.

- Cláusula de compatibilidad: Si el licenciatario distribuyera o comunicara obras derivadas o copias de estas últimas basadas a su vez en la obra y en otra obra licenciada bajo una licencia compatible, la distribución o comunicación podrán efectuarse con arreglo a las condiciones de dicha licencia compatible. A efectos de la presente cláusula, se entenderá por «licencia compatible» cualquiera de las licencias enumeradas en el apéndice adjunto a la presente licencia. En caso de que las obligaciones del licenciatario con arreglo a la licencia compatible estén en colisión con las derivadas de la presente licencia, prevalecerán las obligaciones de la licencia compatible.

- Suministro del código fuente: Cuando distribuya o comunique copias de la obra, el licenciatario deberá facilitar una copia del código fuente legible automáticamente o indicar un repositorio en que se pueda acceder al código fuente fácilmente y de manera gratuita durante el período en que siga distribuyendo o comunicando la obra.

- Salvaguardia de otros derechos: La presente licencia no faculta para utilizar los nombres comerciales, marcas de producto o de servicio o nombres del licenciante, excepto cuando ello, realizado en la medida de lo razonable y conforme a los usos habituales, sea necesario para indicar el origen de la obra y reproducir el contenido de la mención a los derechos de autor.

6. Secuencia de autoría

El licenciante original garantiza ser titular originario de los derechos de autor sobre la obra original objeto de la presente licencia o haberlos adquirido mediante la licencia correspondiente y estar facultado para otorgar licencias sobre tales derechos.

Cada colaborador garantiza ser titular de los derechos de autor sobre las modificaciones que aporta a la obra o haberlos adquirido mediante la correspondiente licencia y estar facultado para otorgar licencias sobre tales derechos.

Cada vez que el licenciatario acepta la licencia, el licenciante original y los colaboradores posteriores le otorgan una licencia sobre sus propias contribuciones a la obra en las condiciones fijadas en la presente licencia.

7. Exclusión de garantía

La obra se encuentra en proceso de elaboración, siendo objeto de continuas mejoras por parte de numerosos colaboradores. No es una obra acabada y, por tanto, puede contener defectos o fallos inherentes a este tipo de desarrollo.

Por este motivo, la obra, en virtud de la licencia, se suministra «tal cual», sin garantías de ningún tipo, en particular, en una enumeración no exhaustiva, en cuanto a su comercialización, adecuación a un propósito determinado, ausencia de defectos o errores, exactitud y ausencia de infracción de los derechos de propiedad intelectual distintos de los derechos de autor según se afirma en el artículo 6 de la presente licencia.

Esta exclusión de garantía forma parte esencial de la licencia y es condición para la cesión de cualquier derecho con respecto a la obra.

8. Exclusión de responsabilidad

Excepto en casos de dolo o de daños ocasionados directamente a personas físicas, el licenciante no será responsable de los daños y perjuicios de cualquier clase, directos o indirectos, materiales o morales, que pudieran derivarse de la licencia o del uso de la obra, en particular, en una enumeración no exhaustiva, de los daños y perjuicios por pérdida de buena reputación, paro técnico, avería o mal funcionamiento de equipos informáticos, pérdida de datos o cualquier perjuicio comercial, incluso si el licenciante conocía la posibilidad de dichos daños. No obstante, el licenciante será responsable, de acuerdo con las normas legales que regulen la responsabilidad por los daños causados por productos, en la medida en que dichas normas sean aplicables a la obra.

9. Acuerdos adicionales

Al distribuir la obra, el licenciatario podrá suscribir un acuerdo adicional que defina obligaciones o servicios compatibles con la presente licencia. No obstante, al aceptar tales obligaciones, el licenciatario actuará únicamente en nombre propio y bajo su exclusiva responsabilidad, y nunca en nombre del licenciante original ni de ningún otro colaborador, y ello a condición de que acceda a indemnizar, defender y amparar a todo colaborador frente a cualquier responsabilidad en que este pudiera incurrir y frente a las reclamaciones que pudieran presentarse contra él por haber aceptado el licenciatario la mencionada garantía o responsabilidad adicional.

10. Aceptación de la licencia

Lo dispuesto en la presente licencia puede aceptarse haciendo clic en el icono «Aceptar» situado en la parte inferior de la ventana en que aparece el texto de la presente licencia o manifestando el consentimiento de cualquier otra forma similar, de conformidad con lo previsto en la legislación aplicable. Haciendo clic en dicho icono, se expresa la aceptación inequívoca e irrevocable de la presente licencia y de todo su contenido.

Asimismo, el licenciatario acepta irrevocablemente la presente licencia y todas sus condiciones por el mero hecho de ejercer cualquiera de los derechos que le otorga el artículo 2 de la presente licencia, tales como el uso de la obra, la creación de una obra derivada o la distribución o comunicación de la obra o de copias de la misma.

11. Información al público

En caso de que el licenciatario proceda a la distribución o comunicación de la obra por medios electrónicos (por ejemplo, ofreciendo la descarga de la obra a distancia), el canal o medio de distribución (por ejemplo, un sitio web) deberá facilitar al público, como mínimo, la información exigida por la legislación aplicable acerca del licenciante, la licencia y la manera en que el licenciatario puede acceder a dichos datos, aceptarlos, conservarlos y reproducirlos.

12. Extinción de la licencia

La licencia y los derechos otorgados a su amparo se extinguirán automáticamente si el licenciatario incumple alguna de las condiciones de la licencia.

Tal extinción no supondrá, sin embargo, la de las licencias de que disfruten las personas que hayan recibido la obra del licenciatario en virtud de la licencia, siempre que dichas personas sigan cumpliendo plenamente las condiciones de la licencia.

13. Varios

No obstante lo dispuesto en el artículo 9, la licencia representará la totalidad del acuerdo entre las partes en cuanto a la obra.

La eventual invalidez o ineficacia de alguna disposición de la presente licencia con arreglo a la legislación vigente no afectará a la validez o eficacia general de la licencia. En tales casos, la disposición se interpretará o reformulará según proceda para hacerla válida y eficaz.

La Comisión Europea podrá publicar otras versiones lingüísticas o nuevas versiones de la presente licencia o versiones actualizadas del apéndice en la medida en que resulte necesario y razonable y sin reducir el ámbito de los derechos concedidos por la licencia. Las nuevas versiones de la licencia se publicarán con un número de versión único.

Todas las versiones lingüísticas de la presente licencia aprobadas por la Comisión Europea tienen idéntico valor. Las partes pueden utilizar la versión lingüística de su preferencia.

14. Tribunales competentes

Sin perjuicio de lo dispuesto en un acuerdo específico entre las partes,

- los litigios relativos a la interpretación de la presente licencia que se planteen entre las instituciones, órganos y organismos de la Unión Europea, en calidad de licenciante, y un licenciatario, se someterán a la jurisdicción del Tribunal de Justicia de la Unión Europea, con arreglo al artículo 272 del Tratado de Funcionamiento de la Unión Europea;
- los litigios relativos la interpretación de la presente licencia que se planteen entre otras partes se someterán a la jurisdicción exclusiva del tribunal que sea competente en el lugar en que resida o ejerza su actividad principal el licenciante.

15. Legislación aplicable

Sin perjuicio de lo dispuesto en un acuerdo específico entre las partes,

- la presente licencia se regirá por la legislación del Estado miembro de la Unión Europea en el que tenga su sede, resida o tenga su domicilio social el licenciante;
- la presente licencia se regirá por el Derecho belga si el licenciante no tiene sede, residencia ni domicilio social en un Estado miembro de la Unión Europea.

Apéndice

Son «licencias compatibles» con arreglo al artículo 5 de la EUPL:

- GNU General Public License (GPL) v. 2, v. 3
- GNU Affero General Public License (AGPL) v. 3
- Open Software License (OSL) v. 2.1, v. 3.0
- Eclipse Public License (EPL) v. 1.0
- CeCILL v. 2.0, v. 2.1
- Mozilla Public Licence (MPL) v. 2
- GNU Lesser General Public Licence (LGPL) v. 2.1, v. 3
- Creative Commons Attribution-ShareAlike v. 3.0 Unported (CC BY-SA 3.0) para obras que no sean programas informáticos
- European Union Public Licence (EUPL) v. 1.1, v. 1.2
- Québec Free and Open-Source Licence — Reciprocity (LiLiQ-R) or Strong Reciprocity (LiLiQ-R+)

La Comisión Europea podrá actualizar el presente apéndice a versiones posteriores de las licencias mencionadas sin presentar una nueva versión de la EUPL, siempre que contemplen los derechos reconocidos en el artículo 2 de la presente licencia y protejan de la apropiación exclusiva el código fuente cubierto.

Cualquier otra modificación o adición al presente apéndice exigirá la presentación de una nueva versión de la EUPL.

Servidores DNS públicos

Una de las formas más sencillas de optimizar tu conexión a Internet es mejorar la resolución de dominios, el sistema que convierte example.com en una IP, de forma que se puedan cargar webs, correos y prácticamente todo lo que haces en tu día a día.

Los servidorss DNS dan mucha información a sus propietarios (principalmente ahora que las operadoras pueden vender información personal tuya si lo quisieran en Estados Unidos, o de forma agregada en la Unión Europea), de forma que quizá es interesante que te plantees usar sistemas alternativos.

Aquí dejo una lista de algunos proveedores, en algunos casos con IPv4 y otros de IPv6.

Proveedor IPv4 IPv6
Alternate DNS* 198.101.242.72
23.253.163.53
Comodo Secure DNS 8.26.56.26
8.20.247.20
DNS.WATCH 84.200.69.80
84.200.70.40
2001:1608:10:25::1c04:b12f
2001:1608:10:25::9249:d69b
Dyn 216.146.35.35
216.146.36.36
FreeDNS 37.235.1.174
37.235.1.177
Google 8.8.8.8
8.8.4.4
2001:4860:4860::8888
2001:4860:4860::8844
GreenTeamDNS* 81.218.119.11
209.88.198.133
Hurricane Electric 74.82.42.4 2001:470:20::2
Level3 209.244.0.3
209.244.0.4
4.2.2.1
4.2.2.2
4.2.2.3
4.2.2.4
4.2.2.5
4.2.2.6
Norton ConnectSafe* 199.85.126.10
199.85.127.10
OpenDNS Home 208.67.222.222
208.67.220.220
208.67.222.123
208.67.220.123
OpenNIC 96.90.175.167
193.183.98.154
puntCAT 109.69.8.51 2a00:1508:0:4::9
SafeDNS* 195.46.39.39
195.46.39.40
SmartViper 208.76.50.50
208.76.51.51
UncensoredDNS 91.239.100.100
89.233.43.71
2001:67c:28a4::
2a01:3a0:53:53::
Verisign 64.6.64.6
64.6.65.6
2620:74:1b::1:1
2620:74:1c::2:2
Yandex.DNS* 77.88.8.8
77.88.8.1
2a02:6b8::feed:0ff
2a02:6b8:0:1::feed:0ff

Los que tienen un * es porque filtran algunos sitios web de malware, adultos, etc…

Personalmente, si he de quedarme con algunos, elijo primero el de puntCAT (al estar en España) y después buscaría alguno más en España de OpenNIC y posteriormente los de Hurricane Electric. Pero esto va sobre gustos.

Ley de protección de datos europea (General Data Protection Regulation)

A partir de las empresas europeas, que trabajen en europa o aquellos usuarios que lo hagan van a estar sometidos a la nueva regulación de protección de datos aprobada a . Esta nueva regulación, que sustituye la de 1995 y que viene dada principamente por el terrorismo y todos los cambios digitales de estas dos últimas décadas, va a ser aplicada “tal cual”, sin que los países tengan que adaptarla a su legislación propia (creo que es de las pocas vece que esto ocurre).

Esta nueva legislación afecta, por ejemplo, a todas aquellas empresas exteriores a la UE que poeren con usuarios europeos, además, obviamente, de estandarizar la legislación de datos a todos los países miembros. El incumplimiento de esta legislación puede alcanzar un 4%-5% de la facturación mundial de las compañías que la incumplan.

¿A quién afecta?

Este reglamento afecta a todo aquel que recopile datos de residentes en la UE, ya sea el responsable del tratamiento, el procesador de ellos o el titular de los datos, sea de donde sea (o sea, tiene aplicación internacional si afecta a un europeo)

Según la Comisión Europea:

Datos personales son cualquier información relativa a una persona, ya se trate de su vida privada, profesional o pública, que puede ser cualquier cosa, desde un nombre, una dirección de casa, una foto, una dirección de correo electrónico, un banco, información sobre los sitios web de redes sociales, información médica o dirección IP de un ordenador.

Aplicación estatal

Cada estado miembro creará una Autoridad de Supervisión independiente (SA) para conocer e investigar las quejas, sancionar los delitos administrativos… Estos organismos, obviamente, cruzarán datos internamente. En el caso de que una empresa tenga varias sedes, se definirá la SA principal en uno de los países (en principio el principal de la compañía).

Responsabilidad

A la hora de informar, se tendrá que hacer con más datos. Por ejemplo cuánto tiempo se van a almacenar los datos de la persona, la persona responsable del tratamiento de datos y de la protección de datos (que deberá registrarse).

Además, la personalización (o toma de decisiones individualizada automatizada) como podría ser la elaboración de perfiles podrá ser rebatida por los ciudadanos, pudiendo cuestionar las decisiones automatizadas.

Las empresas y organismos deberán tener documentado las medidas que cumplen los principios de protección de datos por diseño y protección de datos por defecto, quedando en manos del responsable del tratamiento. Esto implicará la pseudonimización de datos personales, por parte del responsable del tratamiento.

Consentimiento

La recoipilación de datos deberá ser explícita, lo que significa que en todo momento habrá que informar al usuario de qué datos se disponen. En el caso de los niños, deberá quedar registrado los datos de los padres o tutor legal de manera demostrable y verificable, ya que los controladores de datos deben ser capaces de probar el “consentimiento” (opt-in), pudiendo este ser retirado.

Data Protection Officer – DPO (Director de Protección de Datos)

En el caso de empresas privadas, si la gestión de datos es un elemento principal, se deberá disponer de un director de Protección de Datos que se haga responsable de los mismos. Deberá ser una persona con conocimientos especializados en materia de legislación y prácticas de protección de datos y debería ayudar al responsable del tratamiento o del procesador a supervisar el cumplimiento interno del presente Reglamento.

Además, encontramos la figura del Compliance Officer, que será la persona técnica competente en la gestión de procesos de TI, seguridad de datos (incluyendo el tratamiento de ataques) y otros asuntos críticos de continuidad de negocio alrededor del procesamiento de datos sensibles o personales.

Pseudonimización

Los datos deberán almacenarse de tal manera que no se puedan atribuir a un sujeto en concreto sin información adicional. Un sistema podría ser el cifrado de la información, que requiera una clave externa, y que impida incluso a los propios responsables de los ficheros de su acceso sin ella y de forma controlada.

En caso de que los datos sean pseudonimizados con políticas y medidas internas adecuadas, entonces se considera anonimizado y no sujeto a controles y sanciones del GDPR. Un ejemplo de ello es que los datos deberán pseudonimizarse lo antes posible, encriptar los datos localmente y mantener de forma separada las claves de cifrado.

Hackeos

En caso de que alguien externo consiga hacerse con una fuga de datos, se deberá comunicar en un plazo de 72 horas a la Autoridad Supervisora. En caso de que pueda afectar a los usuarios, también se les tendrá que comunicar. Esto sólo es en caso de datos personalizados, pero no afectaría a los datos anónimos (analítica).

Derecho al olvido

El sistema de derecho al olvido (o borrado) queda sustituido por este reglamento. Un usuario puede solicitar toda su información de la plataforma, ya sea por incumplimiento legal o por uso que sobrepasa los derechos y libertades fundamentales. EJEMPLO: Google Spain v AEPD and Mario Costeja González.

Portabilidad de datos

Una persona puede transferir todos sus datos de una plataforma a otra mediante sistemas de Estándar Abierto estructurados.

Aquí supongo que iremos viendo lo que se consideran estándar, ya que cada sistema, software o concepto puede tener unos requisitos propios.

Privacidad, de facto

Toda plataforma deberá estar diseñada e implementada con la privacidad como punto báse y clave, desde su inicio. Además, sólo se deberá hacer uso de los datos personales en los momentos en los que sea necesario para un propósito específico.

Registro de actividad

Cada vez que se haga un tratamiento en el procesamiento de datos se deberá almacenar un registro que indique qué actividad se ha realizado, con qué fin y qué plazos se han utilizado. En caso de que la Autoridad Supervisora lo solicite, se les deberá entregar.

Si bien es cierto que esta regulación estaba muy pensado para el “cloud”, las “redes sociales” y todo eso, va a generar una serie de problemáticas en muchas empresas, principalmente PYME. Las empresas grandes ya suelen tener a una persona responsable de los datos, pero las empresas pequeñas no. Además, tampoco queda muy claro cuando se habla de la pseudonimización y encriptación de datos si simplemente es mantener la base de datos encriptada (como tener un MySQL con SSL/TLS) o directamente hay que encriptar la información, lo que generaría una complejidad excesida en los sistemas.

La Comisión Europea ha lanzado un sitio web en el que se trata este tema, eugdpr.org, que, como curiosidad, no funciona sobre HTTPS. También la Agencia de Protección de Datos ha lanzado una sección en la que publican bastantes documentos para explicar cada uno de los detalles a cumplir.

Mis canciones favoritas (bueno, quizá no todas)

Seguramente estas son las principales de música dance, aunque hay un poco de todo lo que me gusta. También estoy seguro que me dejo una decena de otras canciones que en este momento ni se me pasan por la cabeza…

Hay canciones en las que simplemente escuchar la primera nota sabes cuál es, sabes lo que significa, sabes que recuerdos te van a aparecer en ese momento, a dónde te van a transportar, con quién, cuándo… La mayoría de estas canciones tienen una historia detrás, otras simplemente me gustan, otras pueden no pegar, pero deben tener algo, un ritmo, una nota que hacen que me guste… Y ha sido complejo elegir esta recopilación de más de 800 canciones de mis listas de Spotify.

  1. L’Amour Toujours – Gigi D’Agostino [youtube]
    Es MI canción. Y punto 😀
  2. Take On Me – a-ha [youtube]
    Canción genial, que da buen rollo, y un vídeo muy chulo teniendo en cuenta cuándo se hizo…

  3. Walking On Sunshine – Katrina & The Waves [youtube]
    Fry (de Futurama) de tanto en tanto va silbando esta canción. Como yo.

  4. Like A G6 – Far East Movement ft. The Cataracs, DEV [youtube]
    Esta canción fue la que seguramente más escuché cuando estuve viviendo en Miami (US).

  5. Video Killed The Radio Star – The Buggles [youtube]
    La primera canción que se emitió en la MTV, y que también me da rollito.

  6. Come With Me – Special D [youtube]

A partir de aquí no hay ningún orden en concreto, simplemente están fuera del TOP, pero son canciones que me gustan, mucho…

Sleep When We’re Dead – ItaloBrothers [youtube]

Without You (perdue sans toi) – Ocean Drive ft. DJ Oriska [youtube]

Al amanecer – LOS FRESONES REBELDES [youtube]

The Ocean – Mike Perry ft. Shy Martin [youtube]

Lean On – Major Lazer & DJ Snake (feat. MØ) [youtube]

Firestone – Kygo ft. Conrad Sewell [youtube]

Kiss You – Sasha Lopez & Ale Blake feat. Broono [youtube]

Drop In The Ocean – OMI feat. AronChupa [youtube]

Are You With Me – Lost Frequencies [youtube]

All I Wanna Do – Martin Jensen [youtube]

(I Can’t Get No) Satisfaction – The Rolling Stones [youtube]

Wicked Wonderland – Martin Tungevaag [youtube]

Making Luv – BBX [youtube]

Ice Ice Baby – Vanilla Ice [youtube]

Flying Free – Pont Aeri [youtube]

My Way – Calvin Harris [youtube]

Shake It Off – Taylor Swift [youtube]

Handzup Motherfuckers – Crystal Lake [youtube]

Fly on the wings of love – XTM feat. Annia [youtube]

El Secreto de las Tortugas – Maldita Nerea [youtube]

Wake Me Up – Avicii [youtube]

I Get Around – The Beach Boys [youtube]

I Gotta Feeling – The Black Eyed Peas [youtube]

On My Body – Carles Pérez & Tannit Wilson [youtube]

Voglio Vederti Danzare – Prezioso Feat. Marvin [youtube]

Call Me Maybe – Carly Rae Jepsen [youtube]

Top Of The World – The Cataracs ft. DEV [youtube]

Don’t Let Me Down – The Chainsmokers ft. Daya [youtube]

EVERYBODY – DJ BoBo [youtube]

Giulia – Dj Lhasa [youtube]

Black Betty – Ram Jam [youtube]

Shape of You – Ed Sheeran [youtube]

Pan y Mantequilla – Efecto Pasillo [youtube]

My Heart Goes Boom (La Di Da Da) – French Affair [youtube]

La Passion – Gigi D’Agostino [youtube]

This is my DJ – Hard in Tango [youtube]

Love You – Timati feat. Busta Rhymes & Mariya [youtube]

Lady (Say Hey) – Jordi MB Feat. Jason Rene [youtube]

Smile – New Limit [youtube]

Instalar WordPress desde cero en Ubuntu 16 (para torpes como yo)

Ahora que estoy volviendo a hacer mis cosas a mi manera, me ha dado por volver a montarme yo mismo los WordPress, de una forma que sea escalable, o al menos que en un futuro me permita crecer. Y para eso he decidido pasar de un hosting compartidos a un VPS.

Uso WordPress desde 2005 y en todos estos años he pasado por todo tipo de alojamiento web: hosting compartidos, dedicados, VPS, gestionados, sin gestionar… Normalmente depende de la cantidad de sitios que he de gestionar para tomar una decisión u otra.

Ahora que estoy volviendo a hacer mis cosas a mi manera, me ha dado por volver a montarme yo mismo los WordPress, de una forma que sea escalable, o al menos que en un futuro me permita crecer. Y para eso he decidido pasar de un hosting compartidos a un VPS. Esto me ha llevado a algunos problemas a la hora de realizar las migraciones, pero al fin y al cabo, hay que empezar por algún sitio.

Este manual está creado y funcionando en un VPS de 5$/mes de DigitalOcean (los de 512MB de RAM). Obviamente está organizado para poder escalar si es necesario, aunque con una máquina de estas, para un blog “normalito” hay más que suficiente, y 60 dólares al año es un precio razonable para tener tu sitio con un control del 100%.

NOTA 1: En esta documentación las IP que usaré son rangos de IP privada (por supuesto hay que sustituirlas por la IP pública que os de vuestro alojamiento) y como dominio usaré siempre example.com (que por supuesto tenéis que cambiar por vuestro dominio).

NOTA 2: Seguro que hay mil formas de hacer esto que os voy a explicar yo. Esta es una de ellas, que a mi me funciona, mejorable, seguro (y si alguien quiere, que comente y lo mejoramos)

Lo primero que recomiendo hacer es tener la máquina creada, y pedir la IPv6. Puestos ya, configurémoslo todo al 100%. Esto implica que una vez tengamos la IPv4 y la IPv6 lo que hay que hacer es configurar las DNS con las entradas siguientes:

@    A      172.16.0.0
www  A      172.16.0.0
@    AAAA   fd12:3456:789a:1::1
www  AAAA   fd12:3456:789a:1::1

Si habéis elegido DigitalOcean como proveedor, lo primero es instalar su sistema interno de estadísticas (esto se puede obviar en cualquier otro hosting):

$ curl -sSL https://agent.digitalocean.com/install.sh | sh

Lo siguiente es poner en hora la máquina:

$ timedatectl set-timezone UTC
$ timedatectl set-ntp on

Y actualizar el sistema:

$ apt-get -y update
$ apt-get -y upgrade
$ apt-get -y dist-upgrade
$ apt-get -y autoremove

Comencemos instalando algo de software base:

$ apt-get -y install software-properties-common curl vim unzip

Lo primero que vamos a montar es la base de datos. Para ello usaremos MariaDB 10.2

$ apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
$ add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ams2.mirrors.digitalocean.com/mariadb/repo/10.2/ubuntu xenial main'
$ apt-get -y install mariadb-server
$ mysql_secure_installation

Lo primero que se hace es descargar e instalar, y posteriormente configurar. Es muy recomendable poner contraseña a la base de datos y eliminar todo aquello que no se vaya a utilizar.

Lo siguiente es la instalación del servidor web. Aunque he utilizado durante muchos años Apache HTTPD, en este caso propongo el uso de nginx.

$ apt-get -y install nginx

Y finalmente vamos a instalar PHP, en este caso la versión 7.

$ apt-get -y install php php-fpm
$ apt-get -y install php-common php-curl php-gd php-iconv php-json php-mbstring php-mcrypt php-mysqli php-xml php-xmlrpc

La instalación la hago en 2 pasos; primero la instalación base, del PHP-FPM y posteriormente algunas bibliotecas añadidas para que WordPress funcione sin problema.

Ahora que tenemos todo instalado, activamos los servicios

$ systemctl enable nginx.service
$ systemctl enable mysql.service
$ systemctl enable php7.0-fpm.service

En este punto podríamos tener un sitio web funcionando, pero hoy en día lo interesante es tener un sitio web segcurizado con certificados SSL/TLS, así que vamos a usar Let’s Encrypt para ello, y que actualice y haga todo sólo. Comenzamos generando una clave segura:

$ openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

E instalamos el software de gestión de los certificados

$ add-apt-repository ppa:certbot/certbot
$ apt-get -y update
$ apt-get -y install python-certbot-nginx

Aunque aún no tenemos ningún certificado, os recomiendo dejar ya el cron puesto para que se autorenueven 8se ejecuta una vez al día a las 0645 UTC; podéis cambiarlo, por supuesto):

$ crontab -e

Contenido a añadir:

45 6 * * * certbot renew --dry-run

Lo siguiente es activar los Firewall (por ahora abrimos el nginx 80/443 y el SSH 22):

$ ufw app list
$ ufw allow 'Nginx Full'
$ ufw allow 'OpenSSH'
$ ufw enable

Vamos a montar un servidor de correo que permita el envío de correo sólo interno, para los correos que se manden desde el propio WordPress. Este sistema estará cerrado a correos externos o cualquier otra cosa.

$ apt -y install mailutils
$ ufw allow 'Postfix'
$ ufw reload

Ahora que está instalado, vamos a configurarlo

$ vim /etc/postfix/main.cf

Contenido a modificar:

inet_interfaces = loopback-only
mydestination = $myhostname, localhost.$mydomain, $mydomain

Iniciaremos el servicio de correo

$ systemctl enable postfix

Ahora configuraremos el sistema para que tenga nuestra cuenta de correo como base:

$ vim /etc/aliases

Contenido a modificar/añadir:

postmaster:    root
root:          mi.correo@example.com

Y para aplicar la configuración, ejecutaremos:

$ newaliases

Para acabar la parte de configuración del servidor, lo que queda por hacer es limpiar la web por defecto:

$ rm /var/www/html/index.*

Y sustituirla por otra cosa que “no moleste mucho”:

$ vim /var/www/html/index.html

Contenido a crear:

<!DOCTYPE html>
<p>Hello World!</p>

En este momento, si visitas la web desde la IP, deberías ver un mensaje por pantalla que diga: Hello World!. A partir de aquí podríamos utilizar este sistema para todas las webs distintas que queramos.

Para comenzar lo que haremos es crear la base de datos:

$ mysql -u root -p

Accederemos con la contraseña que configuramos en su momento, y crearemos la base de datos:

CREATE DATABASE example CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

Porteriormente crearemos un usuario que tenga permisos para controlar la base de datos:

GRANT ALL ON example.* TO 'exampleuser'@'localhost' IDENTIFIED BY 'examplepassword';

Y antes de salir, lo que haremos es refrescar los permisos:

FLUSH PRIVILEGES;

Recuerda que para salir del servidor de base de datos puedes escribir “quit”.

El siguiente bloque es el de subir el propio WordPress, el software; el objetivo es crear el lugar donde subiremos el software y dejarlo de forma ordenada.

$ mkdir /var/www/example.com/
$ cd /var/www/example.com/
$ wget https://wordpress.org/latest.tar.gz
$ tar xzvf latest.tar.gz
$ rm latest.tar.gz
$ mv ./wordpress/* ./
$ rm -rf ./wordpress/

Y posteriormente configuraremos los permisos de los ficheros y de su sistema:

$ chown -R www-data:www-data ./
$ find /var/www/example.com/ -type d -exec chmod 755 {} \;
$ find /var/www/example.com/ -type f -exec chmod 644 {} \;

El primero de estos comandos lo que hace es dar permisos a los ficheros como el nginx genera; el segundo da permisos a las carpetas y el tercero a los ficheros. En principio con estos permisos se debería poder trabajar sin problema.

Comenzaremos a configurar el WordPress con su fichero de configuración. Aunque el software de instalación permite generarlo, he preferido crear una plantilla base con ciertas configuraciones:

$ cp wp-config-sample.php wp-config.php
$ vim wp-config.php

Contenido:

<?php
define('DB_NAME', 'example');
define('DB_USER', 'exampleuser');
define('DB_PASSWORD', 'examplepassword');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
// Crear esto con https://api.wordpress.org/secret-key/1.1/salt/
define('AUTH_KEY', 'xxxxx');
define('SECURE_AUTH_KEY', 'xxxxx');
define('LOGGED_IN_KEY', 'xxxxx');
define('NONCE_KEY', 'xxxxx');
define('AUTH_SALT', 'xxxxx');
define('SECURE_AUTH_SALT', 'xxxxx');
define('LOGGED_IN_SALT', 'xxxxx');
define('NONCE_SALT', 'xxxxx');
//
$table_prefix = 'example_';
define('WPLANG', 'es_ES');
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', false);
define('WP_CACHE', true);
define('WP_SITEURL', 'https://www.example.com');
define('WP_HOME', 'https://www.example.com');
define('COOKIE_DOMAIN', 'www.example.com');
define('AUTOSAVE_INTERVAL', 30);
define('EMPTY_TRASH_DAYS', 7);
define('WP_POST_REVISIONS', false);
define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('WP_AUTO_UPDATE_CORE', true);
define('IMAGE_EDIT_OVERWRITE', true);
//
if(!defined('ABSPATH')) define('ABSPATH', dirname(__FILE__) . '/');
require_once(ABSPATH . 'wp-settings.php');
?>

He puesto como configuración de “CHARSET / COLLATE” la de “utf8mb4” que permitiría una gestión avanzada de idiomas “raros” (no occidentales, como el chino, japonés, cirílico, árabe…) sin problema. Obviamente aquí cada uno que configure los detalles como le parezca mejor. Esto es una plantilla que yo uso.

Ahora que tenemos el fichero, vamos a quitar permisos para que no pueda ser modificado o leído por terceros:

$ chown www-data:www-data wp-config.php
$ chmod 600 wp-config.php

El siguiente bloque es el que va a permitirnos tener sitios webs distintos. La primera vez hemos de reconfigurar el sitio web por defecto, que se supone que sólo será para cuando se acceda a las IP (o cuando haya algo configurado apuntando a esas IP pero no sea algo que tengamos en marcha).

$ cd /etc/nginx/sites-enabled/
$ rm default
$ cd /etc/nginx/sites-available/
$ rm default
$ vim default.conf

Contenido:

server {
  listen 80 default_server;
  #listen 443 ssl http2 default_server;
  server_name _;
  root /var/www/html;
  index index.html index.php;
  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
  location ~ /.well-known {
    allow all;
  }
  location ~ /\.ht {
    deny all;
  }
}

Activaremos el sitio web, para que funcione y posteriormente comprobaremos que el nginx dice que está todo correcto:

$ ln -s /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/
$ nginx -t

Lo que nos debería mostrar por pantalla un mensaje tal que:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Si todo va correctamente, ahora sí que crearemos un sitio web para el WordPress; lo crearemos en dos fases. La primera simplemente haremos que responda el sitio y que se puedan generar los certificados de seguridad. Posteriormente los activaremos.

$ vim example.com.conf

Contenido:

server {
  listen 80;
    listen [::]:80;
  server_name untor.com www.untor.com;
    root /var/www/untor.com;
  location ~ /.well-known {
    allow all;
  }
}

Activaremos el sitio y comprobaremos que la configuración es correcta y reiniciaremos el servicio:

$ ln -s /etc/nginx/sites-available/untor.com.conf /etc/nginx/sites-enabled/
$ nginx -t
$ systemctl restart nginx.service

Ahora crearemos el certificado y los ficheros necesarios para que vaya el HTTPS:

$ certbot --nginx certonly

Elegiremos las opciones y los certificados que se requieran, y una vez que estén creados, los añadiremos al fichero de configuración. Sustituiremos el que acabamos de crear por uno mucho más detallado:

$ vim example.com.conf

Contenido:

server {
  listen 80;
  listen [::]:80;
  server_name example.com www.example.com;
  return 301 https://www.example.com$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  #ssl on;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_session_timeout 1d;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
  resolver 208.67.222.222 valid=300s;
  resolver_timeout 5s;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  server_name example.com;
  return 301 https://www.example.com$request_uri;
}
server {
  listen 443 ssl http2;
  listen [::]:443 ssl http2;
  #ssl on;
  ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
  ssl_ecdh_curve secp384r1;
  ssl_session_cache shared:SSL:10m;
  ssl_session_tickets off;
  ssl_session_timeout 1d;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
  resolver 208.67.222.222 valid=300s;
  resolver_timeout 5s;
  add_header X-Frame-Options DENY;
  add_header X-Content-Type-Options nosniff;
  add_header Strict-Transport-Security max-age=15768000;
  ssl_dhparam /etc/ssl/certs/dhparam.pem;
  server_name www.example.com;
  root /var/www/example.com;
  index index.php;
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
  }
  location ~* \.(bmp|bz2|cur|doc|docx|exe|gif|eot|gz|htc|ico|jpeg|jpg|mid|midi|mp3|mp4|ogg|ogv|otf|png|ppt|pptx|rar|rtf|svg|svgz|tar|tgz|ttf|wav|webm|woff|woff2|xls|xlsx|zip)$ {
    expires max;
    add_header Cache-Control "public";
    log_not_found off;
  }
  location ~* \.(atom|css|js|rss)$ {
    expires 1d;
    add_header Cache-Control "public";
  }
  location ~ /.well-known {
    allow all;
  }
  location ~ /\.ht {
    deny all;
  }
  location ~* wp-config.php {
    deny all;
  }
}

Si todo va bien, ahora deberíamos probar este fichero, y si nos da correcto, reiniciar el servidor web:

$ nginx -t
$ systemctl restart nginx.service

Ahora es el momento de irte a tu navegador web, y visitar https://www.example.com/ (el dominio que hayas configurado), y debería aparecerte el instalador de WordPress que te pedirá el nombre de tu sitio, tu usuario y contraseña, etcétera.

En principio el sistema ya está funcionando correctamente, y permitiría, usando estos últimos bloques, disponer de varios sitios web funcionando en paralelo. pero antes de acabar quiero hacer unos pequeños cambios a la configuración del PHP.

$ cd /etc/php/7.0/fpm/
$ vim php.ini

Sustituir:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Por:

error_reporting = E_ALL

Este cambio no debe afectar en principio a nada, ya que el muestreo de errores seguirá apagado, pero si en un momento determinado se ha de activar, lo mejor es que muestre absolutamente todos los errores habidos y por haber.

Sustituir:

upload_max_filesize = 2M

Por:

upload_max_filesize = 32M

Este cambio es bastante útil para el WordPress, ya que permitirá que se puedan subir ficheros (imágenes, adjuntos, etc…) -los llamados Media- de ese tamaño que pongamos. Por norma general si sólo usas imágenes 2 Megas puede ser una cifra correcta, pero si realmente trabajas con imágenes de calidad, ficheros PDF o similares, seguro que se queda corto, por lo que puedes subirlo a 32 Megas, 128 Megas, e incluso si tienes vídeos y los quieres subir así, a 1 Giga (o más). Tampoco recomiendo pasarse.

Sustituir:

;date.timezone =

Por:

date.timezone = UTC

Y ya mi TOC me lleva a configurar algo que genera a veces problemas en muchos sistemas, que es la hora. Al principio pusimos la máquina en hora UTC, y ahora configuramos el PHP para que siga también esa regla. Finalmente lo único que queda es aplicar los cambios, reiniciando el propio PHP.

$ systemctl restart php7.0-fpm.service

Y hasta aquí el sistema que configura una máquina Ubuntu 16 para uno o más WordPress, con sus certificados HTTPS, con un sistema integrado de caché (activando además la propia de WordPress), con una base de datos de última generación, con un PHP a su última versión… Comod ecía, seguro que hay más trucos, configuraciones y demás, pero esto ha de servir de base para una instalación de uno o varios WordPress, y que funciona.

Desinstalar paquetes problemáticos de un Synology

Si alguna vez te has encontrado con problemas al desinstalar un paquete de tu Synology, prueba estas instrucciones para hacerlo directamente desde la raíz del sistema.

Desde hace varios años que trabajo en casa con un par de Synology DiskStation DS216se. Es una buena manera de tener backups en casa con un gran panel de gestión y de forma sencilla. Seguramente ahora tomaría la decisión de hacer algunos cambios (y probablemente los haga) como añadirle discos SSD que he tenido la posibilidad de comprobar con clientes y amigos, pero es lo que hay.

Uno de los problemas que me he encontrado en uno de los que tengo es la imposibilidad de desinstalar un paquete desde el propio panel. El problema estaba (seguramente) en que en una primera desinstalación algo falló y se quedó colgado y a medias. Al intentar desinstalarlo me decís que no podía acceder al MariaDB, pero si accedía por CLI ya no existían las bases de datos ni nada. Estaba corrupto el sistema.

Tras probar y probar finalmente decidí que la mejor solución era desinstalar los paquetes manualmente por bash, así que activé el SSH y me metí en el sistema. Para esto, lo primero que hay que tener es acceso SSH, que está en el Panel de Control -> Terminal y SNMP. Allí se activa la opción SSH y se aplican los filtros del Firewall. Si dejáis el puerto 22 por defecto la cosa será muy compatible con todo.

Una vez esté activado el SSH, lo siguiente es entrar por un terminal (tipo el Putty), entrar en vuestra IP por el puerto 22, con vuestro usuario (y teniendo permisos de root, que os hará falta).

Lo siguiente es ir a estas carpetas y erradicar todo su contenido:

  • cd /volume1/@appstore
  • sudo rm -rf nombredelpaqueteaeliminar
  • cd /var/packages
  • sudo rm -rf nombredelpaqueteaeliminar
  • cd /usr/local
  • sudo rm -rf nombredelpaqueteaeliminar

Una vez hecho esto, podéis volver al panel del Synology, entrar en la zona de paquetes y ya os habrá desaparecido el paquete por completo.

Configuración Inicial de WordPress

Hoy en la WordPress Barcelona estoy dando una charla sobre la Configuración Inicial de WordPress. Es curioso porque hace 3 años cuando comenzamos las meetups en Barcelona, la primera de ellas (que también di yo) se llamaba La configuración perfecta y básicamente el concepto de la presentación era el mismo. En aquella ocasión había una carga técnica muy elevada que, como feedback de aquella ocasión, en esta he eliminado a la mínima expresión necesaria.

En esta presentación comienzo desde el momento en el que el WordPress ha sido instalado pero aún no has entrado, explicando detalles sbre el acceso HTTPS, actualizaciones, la configuración básica del propio sistema WordPress, los plugins básicos que debería llevar WordPress de srie instalados (no quiero que los lleve, pero sí que tú los instales), y cómo configurar cada uno de ellos de la mejor forma inicial.

Pues, a partir de aquí no me queda nada más que decir que si te interesa, puedes descargarte la presentación Configuración Inicial de WordPress (PDF 5.42 MB).

Recuperando la Inocentada del año 2000

En el año 2000 se produjo una de las mejores inocentadas de Internet… aunque seguramente está mal que lo diga, porque la engendré yo mismo…

Hace unos días en la entrevista con Joan Boluda de hablaba de la inocentada del año 2000 en la que con otros colegas montamos una versión alternativa a la “tarifa ondulada” que Telefónica daba en aquella época para conectarse a Internet. Básicamente en aquella época la conexión la conexión se havcía a través de Telefónica pero la conectividad te la daba un proveedor externo. El problema en general era que la llamada de teléfono tenías que pagarla.

En España se llevaba tiempo solicitando que las operadoras implementasen una tarifa plana 24 horas por 3.000 pesetas (o 18 €uros), pero no había manera: lo úncio que teníamos era por ese precio una conexión de lunes a viernes de 1800 a 0800 y todo el fin de semana y festivos.

Para reivindicar, lanzamos una URL [http://www.telefonicaonline.com@3633535149/tp24h] que mostraba lo que hoy se encuentra en la página de la inocentada. Esta página era un “descargar como…” de la original, y con los textos cambiados para que tuviera los 18 euros y las 24 horas. Todo enlace de contratación en línea se quitó y dejé sólo el que se llamase al 1004.

Para hacer la pelota grande, hubo que darle un poco de bombo. Y lo que hice fue, a las 23:55 del día 27 comentar a algunas personas del IRC que me habían pasado esa dirección, y que Telefónica iba a lanzar esa Tarifa Plana 24h. al cabo de 5-10 minutos, gente de mi entorno me pasaba esa dirección “porque le había llegado”. La rueda había comenzado a girar.

En aquella época estaba de moda que todo se hiciera y notificase por SMS, y apareció como noticia del día en iBrujula.com, lo que hizo que le llegase esa noticia a multitud de gente. A media mañana miles de personas sabían ya de la página.

Al final del día hice el cambio de la página para informar de la inocentada de por sí, aunque al cabo de varios días seguía llegando y llegando tráfico. Y tal fue el caso que al cabo de un par de días me llamó Victor Domingo, presidente de la Asociación de Internautas, para comentar sobre unos temas, y de paso me preguntó si yo había sido el que había montado “ese tinglao”. Tras un tira y afloja, porque no me decía el porqué de si lo había hecho yo o no, sup que en el 1004 habían tenido ciertos problemas. Por un lado la información que llegaba era que estaban buscando a ver quién había hecho esto porque lo querían denunciar. Lo siguiente era que el 1004 “se había caído” (vamos, que llamabas y salía comunicando, como lo que pasaba antes en fin de año) y para acabar fue que tuvieron que montar un protocolo de urgencia porque la gente llamaba para pedir la Tarifa Plana 24 horas.

Esto podría ser el punto álgido de la historia, pero la historia continua. Y es que cuando ya me había olvidado del tema, el 6 de enero, como muchas familias, quedé a comer en casa de unos tíos y, mi primo, me preguntó e medio de la comida “si había visto el zumbao ese que hizo una web de internet el día de los inocentes”, que lo había visto en las noticias de Telecinco. Mi cara fue todo un poema porque mis padres sabían más o menos lo que había hecho, pero no su alcance.

La gente que en esa época nos movíamos por Internet simepre me han dicho que ha sido la mejor inocentada de la historia… tengo mis dudas, pero la verdad es que yo me lo pasé genial.

Y ahora un apunte técnico… porque mucha gente me pregunta que porqué funcionaba la URL de la inocentada [http://www.telefonicaonline.com@3633535149/tp24h]. La respuesta es sencilla y compleja a la vez. Voy a intentar explicar un par de temas y lo veréis claramente.

La situación es que yo en aquella época ya tenía un servidor dedicado, y como tal, tenía mi propia IP (216.147.88.173). En ese servidor, si accedías por la IP salía una página por defecto, no asociada a un dominio. y Ahí es donde coloqué la página de la inocentada. El siguiente paso fue convertir la IP a decimal. Esta IP: 216.147.88.173 y este número: 3633535149 son lo mismo (una es la IPv4 y la otra es la IP en decimal). Le añadimos la carpeta tp24h para darle “color” al asunto… y el truco final, que es poner una arroba delante del número (IP), que lo que hace es pedir un “login”. Obviamente, al no pasarle un password y el sevidor no pedir nada, esa parte es ignorada, por lo que se podía poner el www.telefonicaonline.com@3633535149/tp24h sin problema.

Y ahí la explicación de cómo se gestó la parte técnica de la inocentada para que cualquiera que no fuera muy técnico en esa época se tragase que estabas accediendo realmente a Telefónica, cuando en realidad no lo hacías.

Interés de un usuario según tiempo

¿Cómo sabrías qué le interesa a un usuario según lo que lee? Pues Yahoo! te ofrece una solución basado en el tiempo de lectura y que se pasa un usuario en una página en concreto.

¿Cómo sabrías qué le interesa a un usuario según lo que lee? Pues Yahoo! te ofrece una solución basado en el tiempo de lectura y que se pasa un usuario en una página en concreto. Y lo hace desde su patente US20150127662A1 llamada Dwell-time based generation of a user interest profile.

El objetivo es crear un perfil de usuario y que se basará en los documentos que visite y lea, el tiempo que pase en ellos y su temática. Así que si tenemos un usuario, lo primero que habrá que hacer es revisar qué artículos está visitando y en cada uno de ellos medir el tiempo que pasa. Hay que tener en cuenta que se puede calcular el tiempo de lectura basado en la cantidad de texto que hay en el bloque principal de una página, o por la duración de un audio o vídeo.

En base a los tiempos que está un usuario en cada página y las temáticas de estas páginas se podría crera un perfil temático, dadas las puntuaciones obtenidas por el sistema.

En este primer momento el usuario se conectaría al sitio web, en el que estaría identificado, se le mostrarían elementos relacionados a un contenido principal, basado en el histórico o en el propio contenido que está accediendo. En bas e alo que el usuario haga, la información sobre él se irá mejorando y ampliando.

Para determinal el peso de los contenidos hemos de tener en cuenta algunos elementos previos y posteriores, como los clics, si ha hecho scroll, en qué lugar se encontraban los enlaces anteriores, dentro del resto de contenidos… y sobre todo el tiempo que el usuario está en una pantalla interactuando con ella. En el momento en el que un usuario interactúe de alguna manera con alguno de los elementos que se porponen (vistas previas, tooltips, etc…) se le comenzarán a aplicar unos pesos a la actividad. En base a todos estos factores se creará un peso global que identificará el interés del usuario en un contenido en concreto.

Filtrar crawlers en Google Analytics

Desde hace ya un tiempo los robots de indexación (Googlebot, Yandexbot, …) además de indexar el código de la página y sus imágenes, también son capaces de compilar el resultado de la misma, incluyendo el código javascript de ellas. Entre estos códigos está el de Google Analytics, que controla algunos de los robots, pero no todos.

Además, también es posible que en alguna ocasión haya alguien que esté escrapeando tu sitio, y que eso altere tus estadísticas en Analytics.

Si quieres filtrar algunos crawlers en Analytics, puedes hacerlo creando un filtro tal que el siguiente:

y en el patrón del filtro, puedes poner, para empezar, esto:

(amazon|digital ocean|fastweb|ovh hosting|vpn)

Aunque siempre puedes ir añadiendo los distintos proveedores que vayas encontrando en tus datos del propio Google Analytics. Unos datos más fiables hacen tomar decisiones aún más inteligentes.