domingo, 6 de octubre de 2019

Procesando ficheros en JAVA



Con los últimos artículos que estoy escribiendo estoy sentando las bases de dos proyectos en JAVA.

El primero es más pequeño y se basa en una aplicación de consola, y de eso vamos a hablar hoy.

Voy a ir creando una pequeña aplicación de consola que lee todas las líneas de un fichero de texto.

Es bastante simple, pero lo que quiero hacer es crear un proyecto con todas las necesidades que puede tener una aplicación de consola:
  • Librerías externas
  • Sistema de log
  • Fichero externo de configuración
  • Multidioma
  • Generación de un ejecutable (jar) para su posterior uso
Todo el código y los pasos están en el siguiente repositorio: https://github.com/tecnificados/lector

El entorno de trabajo con el que estoy trabajando es el siguiente:
  • Sistema operativo: Windows 10
  • Openjdk version "12.0.2" 2019-07-16
  • IDE: Eclipse 2019-06 (4.12.0)
El primer paso es crear con Maven un proyecto "quickstart" dentro de Eclipse (File -> New -> Maven Project) :



Con esto ya tendremos nuestra estructura lista. Y éste va ser el segundo commit del proyecto: c04808759483432e185fae554a215e682b981af8

Por defecto Maven nos deja el compilador de JAVA con la versión 5.



Ya que estamos utilizando el Openjdk 12, vamos a subirla a esta versión añadiendo estas líneas en el fichero pom.xml:


<maven.compiler.target>1.12</maven.compiler.target>
<maven.compiler.source>1.12</maven.compiler.source>

Podéis ver el detalle del cambio en este commit: 6c483c4abc3f46c0aea1b5679605ac3db27d251a

Si hacemos un "Maven Update", nos debe aparecer la versión correcta en el proyecto.

Ahora vamos a buscar una librería que nos ayude a leer ficheros. Mi favorita es "commons-io" del proyecto Apache. La incluimos en el fichero pom.xml para que sus objetos estén disponibles. Otro commit: 5fa357852024488ab5a43080ee51c446ea7a3c1c

Ahora vamos a hacer una pequeña prueba, vamos crear un pequeño archivo "fichero.txt" que va a tener 10 líneas. Y vamos a escribir unas líneas de código para contar las líneas del fichero utilizando el objeto FileUtils de "commons-io".

El código que escribimos es el siguiente:


List<String> readedLines = new ArrayList<String>();
try {
     readedLines = FileUtils.readLines(new File("fichero.txt"),"utf-8");
     System.out.println("Lineas: "+readedLines.size());
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

Tenemos que meter un try/catch por si el método "readLines" lanza una excepción.

Si ejecutamos este código, nos debería aparecer esta salida:

Lineas: 10


Hago un commit con todos estos cambios: 1287bbeaaf2c21021ce5432b4fd094ea0426554d

Hasta ahora no hemos hecho nada con el contenido del fichero, pero tenemos una lista en la variable readedLines donde está el contenido de cada línea.

Vamos a añadir más información al fichero de prueba, y vamos hacer que el programa nos escriba en pantalla cada una de ellas.

Sé que es muy simple, pero me sirve para demostrar que estamos leyendo el fichero.

Añadiendo estas líneas podremos ver el contenido de cada línea leída:


for (String actual:readedLines)
{
     System.out.println("\t"+actual);
}

Las podéis ver en el commit: d65b491461ba90ed8a1cdef121a1b043985fc733

El funcionamiento básico ya no va a evolucionar más.

Ahora vamos a mejorar el programa para que tenga unas características más profesionales.

Sistema de log

Voy a añadir la librería "logback", antes era más de log4j, pero como muchos sabéis ha quedado sin mantenimiento.

Añadimos la librería al fichero "pom.xml", y en la aplicación nos creamos una variable estática con esta línea:


private static final Logger log = LoggerFactory.getLogger(App.class);

Ya tenemos el log a nuestra disposición.

A partir de ahora todo lo que sale por pantalla, en lugar de usar "system.out" lo hago con el sistema de log que acabamos de añadir.

En la excepción en lugar de usar "log.info" utilizo "log.error".

Todos los cambios del sistema de log están disponibles en este commit: 94d2d8ee44347ede47e67cef3a92ccedd48e9583

Fichero de configuración externo

Ahora mismo se está leyendo el fichero "fichero.txt" y el nombre del fichero está a nivel de código, una práctica que no es muy recomendable.

Vamos a crear un fichero "conf.properties" donde se va a configurar este parámetro.

A continuación voy a crear un método "configuration()" que será el que realice la lógica de leer el fichero de configuración y asignar su valor.

En este commit están todos estos cambios: e33d60eea78b23eca3e07229e856a5fd5d09a6c7

Multidioma

En aplicaciones de consola, es raro que nos soliciten multidioma, pero todo es posible.

Aquí eclipse nos echa un cable, con su asistente en botón derecho -> source -> externalize strings.

Este asistente nos crea una clase "Message" para realizar la sustitución dinámica de las cadenas que seleccionemos.

Antes de lanzar el asistente he generado unas cuantas constantes, para evitar problemas.

He creado tres ficheros con traducciones:
  • messages.properties: es la configuración por defecto (inglés)
  • messages_en_EN.properties: inglés de Inglaterra
  • messages_es_ES.properties: español de España

Voy a dejar fijado este último con la siguiente línea:


Locale.setDefault(new Locale("es_ES"));


Si fijáramos otro como "fr_FR", al no existir, cargaría el contenido del messages.properties.

El un con todos los cambios que acabamos de generar es: a6033bf9c31cbacae035ae69432b85919714c88b

Antes de continuar voy a refactorizar un poco, no me gusta mucho la estructura que me ha generado el asistente.

Voy a generar una clase Constant con todas las constantes, y un paquete Util con las clases y los ficheros nuevos.



Todos los cambios los tenemos en este commit: 80aa109d65ddfadda75e20228e84ce585afb2ed6

Ejecutable Jar Completo

Y para terminar vamos a decirle a Maven que cuando genere un empaquetado lo haga con todas las librerías que utiliza, y especificarle cuál es la clase principal.

Todo esto lo conseguimos gracias al plugin Shade de Maven, sólo hay que retocar unas cuantas líneas en el pom.xml, y añadir un par de plugins. Podéis ver en detalle estos cambios aquí: 86369ce3d028b405eed691a556a5e7fcf90148ef

Después de esto si lanzamos un mvn package tendremos un jar con todas las librerías que necesita, y está listo para ser invocado con el comando: "java -jar lector.jar"

Espero que os sea de utilidad, ha sido una entrada muy larga, pero he conseguido hacer todo lo que quería en sólo 11 commits.

domingo, 29 de septiembre de 2019

Máquina Virtual con LAMP en Virtual Box

Llevo un par de semanas pensando en un proyecto para ir realizando poco a poco en tecnificados.com, y uno de los componentes que necesito para empezar es  una base de datos relacional.

Lo más cómodo es utilizar MySQL, y para administrarla utilizar PHPMyAdmin, el "problema" es que son muchos componentes a desplegar, y no me gusta instalar muchos servicios en el sistema operativo nativo de mi portátil (Windows).

Dándole una vuelta, he decidido montarlo en una máquina virtual con Ubuntu Server 18.

Y nada, me he puesto con ello y lo he hecho con la última versión de Virtual Box.

Lo que he instalado se llama LAMP, que son las siglas de:
  • Linux
  • Apache
  • MySQL
  • PHP para PHPMyAdmin
He tardado más de lo que pensaba, en otras versiones de Ubuntu Server se instalaba con un solo comando, aquí he tenido que instalar los componentes uno por uno, hacer que se hablen,... y para acabar, he solucionado un bug en el código de PHPMyAdmin (https://stackoverflow.com/questions/48001569/phpmyadmin-count-parameter-must-be-an-array-or-an-object-that-implements-co).

Cuando he terminado he pensado, que si exporto la máquina y la subo a Mega, la puedo compartir y así cualquiera puede descargarse la máquina y evitar volver a hacer lo mismo. Al terminar lo he exportado en formato "OpenVirtualizationFormat 1.0" para que se pueda abrir con cualquier software de virtualización.

Así que os cuento brevemente las características de la máquina:

- RAM: 2 Gigas
- Disco: 40 Gigas (reservado dinámicamente)
- Procesadores: 1

Más cosillas a tener en cuenta:

- Nombre de la máquina: ironman
- Usuario ubuntu: tecno
- Password ubuntu: tecnificados
- Usuario mysql: root
- Password mysql: tecnificados
- SSHServer instalado.


He creado dos "snapshots":



Si no os interesa LAMP y queréis sólo el sistema operativo, podéis eliminar el segundo.

El firewall esta desactivado, y el MySQL soporta conexiones remotas desde cualquier host. A nivel de seguridad deja bastante que desear, pero es un entorno de pruebas.

Para que todo funcione bien, recordar tener abiertos los siguientes puertos:

- 22: acceso ssh
- 80 y 443: puertos para acceder vía web a PHPMyAdmin
- 3306: el puerto por defecto de MySql

Os podéis descargar la máquina a través del siguiente enlace: https://mega.nz/#F!6lMylKLR!nuW8D9A-zRMWcsRiaFAiVA

El tamaño de la imagen es de 1 Giga, espero que os sea de utilidad, y que os haya ahorrado algo de tiempo.

domingo, 22 de septiembre de 2019

Software de recuperación en Windows


Hace unas semanas os comenté que siempre llevo un pendrive conmigo (soy el informático de la familia, de la comunidad de vecinos,...) con algunos programas para limpiar/recuperar un PC con Windows.

Ayer un amigo me pidió por WhatsApp el pen para el lunes, y pensé que era mejor colgar todo el software en MEGA y pasarle el enlace. Luego se me ocurrió escribirlo y compartirlo por aquí.

Ésta es la URL donde os podéis descargar los programas que me han salvado la vida muchas veces, y con los que he devuelto a la vida a muchos Windows:


Dentro hay cuatro instaladores:
  • adwcleaner_7.4.1.exe (AdwCleaner): herramienta de Malwarebytes especializada en el adware. Ideal para limpiar navegadores.
  • avast_free_antivirus_setup_offline (Avast Antivirus): dentro del mundo de los antivirus, Avast es el que más confianza me da para realizar una limpieza total, aunque si se mantiene residente es un poco pesado.
  • DriverEasy_Setup.exe (Driver Easy): con esta utilidad consigo encontrar todos los drivers que un PC necesita, tanto si están sin instalar como si están obsoletos.
  • gu5setup.exe (Glary Utilities): os hablé de esta genial utilidad hace algunas semanas, el sustituto del CCleaner.
Espero que os sea de utilidad.

domingo, 15 de septiembre de 2019

Markdown - Guía rápida



Hoy os quiero hablar de Markdown, un lenguaje de marcado que nos permite formatear nuestros textos de manera rápida y simple, generando una salida similar al HTML.

Para que lo veáis mejor, os pongo unos ejemplos de HTML vs. Markdown
  • Encabezado 1  
    • HTML:     <h1>Título</h1>  
    • Markdown: # Título
  • Encabezado 2
    • HTML:     <h2>Subtítulo</h2>
    • Markdown: ## Subtítulo
  • Cursiva
    • HTML:      <i>Texto</i>
    • Markdown:  *Texto*
  • Negrita
    • HTML:     <b>Texto</b>
    • Markdown:  **Texto**
  • Enlace
    • HTML:     <a href="https://www.tecnificados.com">enlace</a>
    • Markdown:  enlace(https://www.tecnificados.com)
¿Dónde puedo utilizar Markdown?

En la web existen muchos editores que traducen Markdown a HTML ya procesado. Por ejemplo: https://stackedit.io o https://dillinger.io

Pero a mí lo que me gusta es que este formato es soportado en los repositorios de código más importantes como Github, Bitbucket,...

Por eso en la mayoría de los proyectos de estos repositorios, siempre hay un "readme.md" que contiene la documentación inicial.

Guía rápida de Markdown

Cursiva
Texto entre un asterisco * o un guión bajo _ . Ejemplo:

*Texto en cursiva*

Negrita
Texto entre dos asteriscos ** o dos guiones bajos __ . Ejemplo:


**Texto en negrita**

Saltos de línea:
Para generar un párrafo deja una linea en blanco (pulsa "enter" dos veces)
Para generar un salto de linea dentro del mismo párrafo deja dos espacios en blanco al final de la linea

Encabezados:
Con almohadilla(#), se concatenan tantos como niveles necesites. Ejemplo:

# Encabezado H1
## Encabezado H2
### Encabezado H3
#### Encabezado H4
##### Encabezado H5
###### Encabezado H6

Listas
Para crear simples listados se utilizan *, - o +. Utiliza el que más te guste, o combínalos. Ejemplo:
- Ironman
- Hulk
+ Viuda Negra
* Capitana Marvel
* Dr. Strange
+ Spiderman

Listas anidadas
Para crear listas anidadas utiliza cuatro espacios:

- Fase 1
- Iron Man (2008)
- The Incredible Hulk (2008)
- Iron Man 2 (2010)
- Thor (2011)
- Capitán América: el primer vengador (2011)
- The Avengers (2012)
- Fase 2
- Iron Man 3 (2013)
- Thor: The Dark World (2013)
- Captain America: The Winter Soldier (2014)
- Guardianes de la Galaxia (2014)
- Avengers: Age of Ultron (2015)
- Ant-Man (2015)
- Fase 3
- Capitán América: Civil War (2016)
- Doctor Strange (2016)
- Guardianes de la Galaxia Vol. 2 (2017)
- Spider-Man: Homecoming (2017)
- Thor: Ragnarok (2017)
- Black Panther (2018)
- Avengers: Infinity War (2018)
- Ant-Man and the Wasp (2018)
- Capitana Marvel (2019)
- Avengers: Endgame (2019)
- Spider-Man: Lejos de casa (2019)
         
Listas ordenadas
Tenemos que escribir el número seguido de un punto. También se pueden anidar con los cuatro espacios.

1. Fase 1
1. Iron Man (2008)
2. The Incredible Hulk (2008)
3. Iron Man 2 (2010)
4. Thor (2011)
5. Capitán América: el primer vengador (2011)
6. The Avengers (2012)
2. Fase 2
1. Iron Man 3 (2013)
2. Thor: The Dark World (2013)
3. Captain America: The Winter Soldier (2014)
4. Guardianes de la Galaxia (2014)
5. Avengers: Age of Ultron (2015)
6. Ant-Man (2015)
3. Fase 3
1. Capitán América: Civil War (2016)
2. Doctor Strange (2016)
3. Guardianes de la Galaxia Vol. 2 (2017)
4. Spider-Man: Homecoming (2017)
5. Thor: Ragnarok (2017)
6. Black Panther (2018)
7. Avengers: Infinity War (2018)
8. Ant-Man and the Wasp (2018)
9. Capitana Marvel (2019)
10. Avengers: Endgame (2019)
11. Spider-Man: Lejos de casa (2019)

Linea horizontal
Escribiendo *** o --- o ___

Enlaces en línea
Se escriben enmarcando el texto a enlazar entre corchetes [] y el link a seguir entre paréntesis. Ejemplo:

Pulsa [aquí](https://www.tecnificados.com) para ir a mi blog.

Enlaces automáticos
Se escriben introduciendo una URL entre los símbolos <>. Ejemplo:

<https://www.tecnificados.com>

Código
Si necesitas añadir código (html, sql, ...) lo puedes hacer con el acento `

El texto debe estar entre dos acentos. Ejemplo:

`Select name, year from films where year > 1980`

También lo puedes utilizar con varias líneas, pero en este caso deben ser tres acentos ```. Ejemplo:

```
Select name, year
from films 
where year > 1980
```

Imágenes
Insertar una imagen se parece mucho a insertar un enlace. Sólo hay que poner una exclamación ! al principio, y así se visualizará la imagen. Ejemplo:

![Imagen de Ironman](https://terrigen-cdn-dev.marvel.com/content/prod/1x/002irm_ons_cut_dsk_01_1.jpg)

El texto entre corchetes es el texto que se visualizará si la imagen no se carga.

Si además quieres añadir texto alternativo lo puedes hacer añadiendo al final el texto entre comillas. Ejemplo:

![Imagen de Ironman](https://terrigen-cdn-dev.marvel.com/content/prod/1x/002irm_ons_cut_dsk_01_1.jpg "Ironman de pie mirandote fijamente")

Tablas
Las tablas en Markdown son muchísimo más fáciles de escribir que en HTML.

Sólo tenemos que decir cuáles son los elementos de la cabecera, separar los campos con la barra horizontal y separar cada columna con la barra vertical | Ejemplo:

Nombre| Películas
-- | --
Fase I | 6
Fase II | 6
Fase III | 11

Podemos alinear las columnas utilizando dos puntos : junto a las líneas horizontales de la línea de separación. Con dos puntos a la izquierda de la línea, la columna estará alineada a la izquierda. Si los ponemos a la derecha de la línea, se alinearán a la derecha. Si los ponemos a ambos lados, su alineación será centrada. Lo mejor es verlo con un ejemplo:

Saga|Nombre | Películas
:-- |:--: | --:
Gemas del Infinito | Fase I | 6
Gemas del Infinito | Fase II | 6
Gemas del Infinito | Fase III | 11

Caracteres que Markdown interpreta 
A veces necesitamos utilizar caracteres como * o -

Para eso está la barra invertida \

Si la utilizamos justo antes del carácter que no interese, no será interpretada. Ejemplo:

Esto es un asterisco \*

Y con esto acabamos la guía rápida de Markdown.

He creado un repositorio en Github (https://github.com/tecnificados/markdown), donde están todos los ejemplos de la guía rápida. Se encuentran en el fichero "readme.md", que por defecto interpreta. Si queréis acceder al modo texto, para ver la sintaxis de Markdown, hacerlo a través de este enlace:

https://raw.githubusercontent.com/tecnificados/markdown/master/README.md

Espero que os sea de utilidad.

domingo, 8 de septiembre de 2019

OpenJDK - Sin restricciones en producción


Como muchos sabéis la licencia de Oracle JAVA ha cambiado desde que ha llegado JAVA 11 (y ya estamos por la 12, y la 13 a punto de salir...)

A nivel de escritorio y uso "no profesional" no nos afecta. 

Pero si necesitamos utilizarlo en un servidor (con Tomcat por ejemplo), tenemos un pequeño problema, hay que pasar por caja.

La alternativa es usar OpenJDK en lugar del JDK que siempre hemos descargado de la web de Oracle.

Se puede descargar desde su web oficial: https://openjdk.java.net/

Si trabajamos en sistemas Linux no hay ningún problema, ya que por defecto al realizar la instalación de JAVA por defecto ya está utilizando el OPENJDK.

Para sistemas Windows es un pelín más complicado, pero nada que no podamos hacer en menos de cinco minutos.

Lo primero que tenemos que hacer es descargar el OpenJDK:


El de Windows está en esta ruta: 

https://download.java.net/java/GA/jdk12.0.2/e482c34c86bd4bf8b56c0b35558996b9/10/GPL/openjdk-12.0.2_windows-x64_bin.zip



Unos minutos después...

Lo descomprimimos en la carpeta que más nos interese. Por ejemplo: "C:\Java\openjdk-12.0.2"

Esto nos dejará los ejecutables en la carpeta: "C:\Java\openjdk-12.0.2\bin"

Y después de esto, sólo tenemos que ir a las variables del sistema operativo:

Y añadir la ruta anterior a la variable PATH.



Con esto, si ejecutamos en una consola ("cmd") de Windows el comando: "java -version" nos debería aparecer una respuesta como ésta:



Y después de esto ya tenemos nuestro sistema listo para utilizar OpenJDK.

domingo, 1 de septiembre de 2019

¿Necesitas una VPN? Te recomiendo ProtonVPN


Hace unas semanas estaba programando en la playa (me encanta programar) cuando de repente no podía descargar las dependencias que necesitaba a través de Maven. Después de mirar logs vi que mi problema era que mi IP había sido baneada de https://mvnrepository.com, estaba conectado a través del teléfono móvil, y no tenía mucho margen de maniobra.

Después de darle unas vueltas, pensé que la forma más rápida era buscar una VPN y probarlo.

Googleando un poco encontré el proyecto ProtonVPN (https://protonvpn.com/), de los creadores de ProtonMail (https://protonmail.com/).

Ambos proyectos surgen de un grupo de científicos del CERN, querían conseguir privacidad (real) en sus cuentas de correo electrónico, y amparándose en las leyes suizas han conseguido un servicio de email totalmente seguro y privado. El problema era que la privacidad de la red utilizada para conectarse a ese servicio podía ser baja o nula, así que ahora han sacado su propia VPN para conseguir privacidad absoluta.

Tiene varias características que me convencieron desde el principio:

  • Simple y fácil de instalar: instalador de tipo "next, next, next", sin adware de ningún tipo.
  • Modelo freemium: tiene varias modalidades, y una de ellas tiene coste cero
  • Muy ligera: mi sistema operativo no se ha resentido en absoluto. Tras varios años trabajando con muchas VPNs, ésta es sin duda la más limpia que he probado.
  • Registro rápido y eficiente: en menos de un minuto te has registrado en su web.
  • Alta velocidad de descarga: más de un mega por segundo, para lo que yo necesito...
Para utilizarlo, una vez instalado, sólo tenemos que hacer login en la aplicación:


A continuación se nos desplegará la aplicación en pantalla completa con un mapa del mundo para elegir a dónde queremos conectarnos. Para no perdernos en la configuración, lo mejor es buscar el botón "Quick Connect" a la izquierda:


Lo pulsamos y en menos de 20 segundos ya estamos conectados.

La interfaz cambia, y ahora en el mapa nos aparece desde dónde estamos conectados:


Si ahora nos conectamos a cualquier servidor para saber cuál es nuestra IP nos aparece esta información:



Y como podéis ver la velocidad de descarga roza los dos megas por segundo:



En definitiva, si necesitáis una VPN tanto para uso ocasional como para temas más serios os recomiendo ProtonVPN. 

Está disponible para teléfonos móviles, varios sistemas operativos... Vamos que no tenéis excusas.

domingo, 25 de agosto de 2019

Experto vs. No iniciado

Hoy os quiero mostrar un vídeo con el que suelo comenzar todas mis presentaciones y cursos de formación.


Es un pequeño sketch de programa Splunge (RTVE) que tiene ya unos añitos.

Me gusta porque refleja muy bien la situación de falta de comunicación con un experto en un tema determinado (bricolaje en este caso).

Siempre comento a los asistentes que mi objetivo es conseguir no reproducir esta situación.

Ayer di una charla a un grupo de mayores (no tecnólogos) sobre teléfonos móviles (copias de seguridad, mantenimiento del terminal,...), gracias al vídeo se soltaron bastante y conseguimos entre todos liberar varios gigas de sus teléfonos, más de un@ se ahorró cambiar de terminal.

lunes, 19 de agosto de 2019

La máquina autoreplicable de Von Neumann

A Von Neumann todos los informátic@s le conocemos por "la arquitectura de Von Neumann", para que os hagáis una idea, todos los ordenadores, teléfonos móviles, tablets, consolas,... funcionan siguiendo esta arquitectura (virtualmente hablando).

Pero de entre todas las cosas que hizo (https://es.wikipedia.org/wiki/John_von_Neumann), siempre ha habido una de sus teorías que me ha llamado la atención: "La máquina de Von Neumann".

Este concepto se basa en la autoreplicación, que es lo que hacen los virus cuando se infiltran en nuestro organismo. Si pensamos en los virus informáticos, son máquinas de Von Neumann al 100%.

La teoría de estas máquinas surge de la idea de realizar tareas muy pesadas en entornos hostiles, a los que el hombre no puede acceder, por ejemplo: extracción de mineral en otros planetas.

Voy a demostraros la potencia de estas máquinas a través de este problema:

Supongamos que en el planeta X se ha encontrado una veta de mineral, con el que se obtiene hierro después de procesarlo. Estimamos que en la veta hay 20.000 toneladas de ese mineral. Tenemos una máquina que extrae una tonelada del mineral en una semana, y después tarda tres días en procesarlo y obtener hierro. ¿Cómo hacemos para extraer todo ese mineral? Hay que tener en cuenta que ningún ser humano puede pisar en ese planeta.

a) Primera idea: mandamos un cohete con un robot, el robot extrae el material, lo procesa, lo mete en el cohete y éste hace viajes de ida y vuelta con el material.


Éste es nuestro amigo, que sólo conoce 2 órdenes: Extrae y Procesa

Tiempo de extracción y procesado: 10 x 20.000 = 200.000 días ->  548 años (redondeando)

Se nos va un pelín de tiempo.

b) Con la máquina de Von Neumann: mandamos un cohete con un robot igual que el anterior, pero además puede autoreplicarse en 30 días consumiendo una tonelada de material en el proceso.

Nuestro amigo, que ahora conoce 3 órdenes: Extrae, Procesa
 y Replica

Supongamos cinco iteraciones en el proceso de replicación:

1) Robot original:
     - Extrae material y lo procesa: 10 días
     - Se replica: 30 días
     - Resultado: un robot adicional (primera generación)
2) Tenemos dos robots
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: dos robots adicionales (segunda generación)
3) Tenemos cuatro robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: cuatro robots adicionales (tercera generación)
4) Tenemos ocho robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: ocho robots adicionales (cuarta generación)
5) Tenemos 16 robots:
     - Extraen material y lo procesan: 10 días
     - Se replican: 30 días
     - Resultado: 16 robots adicionales (quinta generación)

Se acaba la fase de autoreplicación, si todo ha ido bien en total tenemos a 32 robots funcionales, y hemos perdido:

 - 31 toneladas de material (en las replicaciones), nos quedan 19.969 toneladas por extraer
 - 200 días (5 iteraciones de 40 días)

Veremos si han merecido la pena estas pérdidas, teniendo en cuenta que nos quedan 19.969 toneladas por extraer.

Empezamos la fase de extracción:

19.969 x 10 = 199.690 días 

199.690 días / 32 robots = 6.240 días -> 17 años (redondeando de nuevo)

Hemos perdido algo de material, pero el tiempo se ha reducido considerablemente: 531 años.

Si aumentáramos el número de iteraciones de la replicación, podríamos seguir bajando el tiempo.

Un genio este Von Neumann.

Imagen de Johnny 5 por cortesía de Wikimedia: https://es.wikipedia.org/wiki/Johnny_5

martes, 13 de agosto de 2019

Aplicación en datos.gob.es


Hace unas semanas enviamos el repositorio que creamos en diciembre (todos los municipios de la península) a datos.gob.es, y nos lo han  publicado en su sección de aplicaciones: https://datos.gob.es/es/aplicaciones

Estamos muy contentos por estar allí  (https://datos.gob.es/es/aplicaciones/conquista-iberia-legacy) y estamos muy agradecidos.


datos.gob.es es el portal de Datos Abiertos Nacional, allí se encuentran federados todos los portales de Datos Abiertos de municipios, empresas públicas y diferentes organismos que ponen a disposición de todos nosotros sus datos para que podamos "trastear" con ellos: generar aplicaciones, informes, visualizaciones, etc... La filosofía Open Data que tanto nos gusta.

Gracias de nuevo, intentaremos seguir generando aplicaciones y datos que utilicen toda la potencia de los Datos Abiertos.

domingo, 28 de julio de 2019

Windows en orden con Glary Utilities

Para poner un pc a punto con Windows tengo una suite de aplicaciones en un pendrive con el que en un par de minutos dejo cualquier PC bastante limpio.

Antes la que más utilizaba era CCleaner, pero debido a los cambios que ha sufrido en los últimos meses, años,... He decidido buscar otra, y la he encontrado: Glary Utilities.

Desde su web (https://www.glarysoft.com/) podemos descargar esta herramienta: Glary Utilities 5

Una vez instalada y después de ejecutarla, lo primero que nos dice es cuanto tiempo tarda en arrancar nuestro PC, si el tiempo es excesivo podemos ir al administrador de inicio (dentro de la propia aplicación) y configurar que aplicaciones queremos que se inicien automaticamente.


Como podéis ver mi pc, tardaba bastante en arrancar.

También posee el acceso a su propio desinstalador de aplicaciones, limpiador del registro de Windows, chequea la versiones de las aplicaciones instaladas y te avisa de cuales deberias actualizar urgentemente,...

En definitiva, todo lo que se necesita para dar un repaso al sistema operativo.

Su interfaz es bastante intuitiva y las pruebas que he hecho han ido muy bien.



Si queréis aprovechar el verano para dar un repaso a vuestro Windows sin formatear, ya sabéis.

domingo, 9 de diciembre de 2018

Municipios de la Península


Como ya os comenté hace tiempo quería subir todos los datos con los que fue posible construir los juegos "Conquista Iberia" y "Conquista Castilla y León".

Después de un par de horas de programación he subido dos nuevos repositorios al Github de Tecnificados: https://github.com/tecnificados

Por un lado:

  • mongodbToJson: pequeño proyecto de consola en JAVA 8 para conectarse a MongoDB, extraer datos de una coleción y escribirlos en formato JSON. Estoy utilizando Maven, y unas cuantas librerías que siempre llevo "conmigo".
  • conquistaIberiaLegacy: en este se encuentran todos los municipios en formato JSON. En cada municipio hay información bastante interesante como:
    • Su centroide
    • Su poligono (o multipoligono)
    • Los códigos de los municipios con los que limita (algo que no se consigue fácilmente)
Ambos proyectos los he liberado bajo licencia APACHE 2.0, lo que quiere decir que cualquiera puede hacer lo que quiera con ellos, pero debe mencionar al autor.

Poco a poco, pero voy cumpliendo mis objetivos.

domingo, 25 de noviembre de 2018

Ahora con repositorio oficial


Ya tenemos cuenta para Tecnificados en Github: https://github.com/tecnificados

A partir de ahora empezaré a subir pequeños desarrollos a esa cuenta, para comentarlos con vosotros por aquí.

martes, 18 de septiembre de 2018

Certificados SSL gratis para tod@s


Hace ya más de dos años aparecieron estos certificados que nos permiten de manera gratuita, aplicar el protocolo SSL a nuestros dominios y subdominios (ya podemos navegar vía https). 

Esto nos viene muy bien ya que ahora que todos los navegadores más comunes, catalogan las páginas sin https como no seguras.

Estos certificados vienen de un proyecto financiado por la organización EFF (Electronic Frontier Foundation) y la Fundación Linux .

Su objetivo es mejorar la seguridad de la web y ya de paso, permitir que cualquier persona pueda certificar su dominio, sin tener que desembolsar nada de dinero.

Todos los navegadores ya vienen de serie con sus CEAs así que no hay que andar peleándose con los almacenes de certificados del sistema operativo, o de cada navegador.

Si necesitáis más información podéis acceder a su web: https://letsencrypt.org/

Es muy fácil solicitar el certificado que necesitemos y renovarlo automaticamente. Además gracias a la comunidad (que se ha volcado con el proyecto), hay muchas utilidades para los diversos servidores: Tomcat, Apache, IIS,...

Y para más confianza, las grandes empresas como Google ya lo están utilizando, e incluso impulsando el proyecto.

Desde Mayo de este año incluso ya se pueden solicitar certificados de tipo wildcart (comodín, ejemplo: *.tecnificados.com).