Feliz año nuevo

Una entrada corta, muy corta, para desearos un feliz año 2020… Sea que empecemos los felices años veinte (aunque en el siglo pasado tampoco es que fuesen demasiado felices tampoco) o sea que tengamos que esperar al año que viene para iniciar una nueva década como dice la RAE.

¿Qué espero yo de este nuevo año?

  • Tener, por fin, un proyecto con cierta aceptación (mola tener idéas geniales, pero no mola que nadie te las compre).
  • Dedicarle tiempo al cuidado de la salud, que ya empezamos a tener una edad y no todo va a ser trabajo
  • Recuperar contacto con la famila que, al fin y al cabo, es todo lo que tienes en propiedad para siempre y hay que cuidarlo de vez en cuando.
  • Y, para todo lo demás… No tener más preocupaciones ni miedos que los que ya he tenido, con eso me doy por satisfecho.

Y mis propósitos son…

  • Cabrearme menos (si eso es posible), tendré que empezar a contar hasta 10000 antes de contestar airadamente.
  • Planificar un poco más lo que hago… Que si, que lleva tiempo, pero vale la pena.
  • Buscar gente mejor que yo en todo, colaborar, contratar o aprender de ellas (se acabó el ombliguismo).
  • Perder menos el tiempo con chorradas (esto ya es más complicado, porque mi definición de chorrada es muy esotérica).

En fin… Veremos a ver qué nos depara este año…

Negacionistas

Supongamos que Guillermo es una persona normal, con una carrera técnica en la que sabe un montón de lo suyo y muy poco de lo demás, obviamente no es médico ni nada similar. Un día, en base a unas molestias se pasa por el médico y después de hacerle unas pruebas le diagnostica un cancer.

Guillermo, no contento con el diagnóstico y acojonado como no podía ser de otra manera, decide visitar a otros médicos, solicitar otras opiniones a conocidos oncólogos y todos coinciden en el diagnóstico, cancer. Por suerte es tratable y solo se le pide que empiece el tratamiento cuanto antes.

Pero algo no le cuadra a Guillermo, decide que lo que los médicos han estudiado y a los pacientes que han tratado no son sinónimo de que tengan la razón, intenta documentarse y visita internet con asiduidad, por desgracia el 99% de lo que encuentra le confirma el diagnóstico y el tratamiento. Para el sería una jodienda tener que someterse al tratamiento y decide elegir al 1% que le dice que los médicos están todos compichados con las farmacéuticas para vender carísimos tratamientos contra el cancer y que, en realidad, sus síntomas se curan con agua diluida en principios mágicos…

Guillermo ha decidido que la ciencia médica ya no le sirve, que él y los cuatro iluminados de internet son más listos y ven la verdad más allá de las tramposas multinacionales de las medicinas. Así que se niega a recibir el tratamiento y decide esperar a que el cancer se cure solo con ayuda de medicinas neanthertales. No le ablanda la preocupación de su familia y amigos, él es más listo y nadie ha sabido argumentarle la forma en que las células sanas mutan en cancerígenas de una manera convincente (nada de estudios con cifras, ni causalidadades de esas que se inventan las farmaceúticas)..

Guillermo es feliz sabiendo que él es más listo que los borregos que le rodean aunque sospechosamente su grupo de afectados por la conspiración global de los falsos diagnósticos de cancer va perdiendo miembros a marchas aceleradas, aunque cada día hay nuevos miembros y él activamente evangeliza a todo el que conoce para que evite seguir el tratamiento…

Guillermo muere entre terribles dolores tras un periodo espantoso donde ha perdido el control de sus funciones motoras poco a poco. ¿FIN?

negar

La historia de Guillermo no es ficción, ahora mismo tenemos negacionistas de cualquier cosa que niegan la evidencia y la autoridad de los científicos para casi todo lo que nos ha convertido en una civilización avanzada. No es ya tener una opinión diferente, eso es muy loable, es pensar que su opinión tiene el mismo peso que décadas o cientos de años de estudios e investigaciones y todo se resume en un «Creo que la tierra es plana ¿puedes hacerme cambiar de opinión?»

Merecemos la extinción, pero ya!

Hay algunos que ya se dan cuenta…

Me han hackeado el Spotify!

Bueno, realmente a mi no, ha sido a mi hija, ¿pero qué leche? si lo estoy pagando yo también es mío, ¿no?… Como soy un poco vago os reproduzco el hilo de twitter que mandé ayer para que os hagáis una idea:

Ejemplo práctico, de ahora mismo, de porqué es tan malo poner la misma contraseña en sitios distintos… Dentro hilo..

Esta mañana mi hija me ha mandado un whatsapp diciendo que alguien estaba cambiando la música de su spotify y que no podía oir nada de lo que ella ponía… raro.

Al rato me manda pantallazo del correo que ha recibido

Eso ya es indicio claro de que alguien ha entrado en su cuenta y ha cambiado el correo y, obviamente, la contraseña… En este momento estamos pagando el servicio a una persona que no conocemos.

Y que tiene unos gustos musicales pésimos además.

Después de momentos de desconcierto acertamos a dar con el chat de soporte de spotify que, tras pedirnos copia de los justificantes de pago y alguna cosilla más nos devuelve la cuenta. Bien por @SpotifySpain

Para saber lo que ha pasado, le pregunto si usaba la misma contraseña en otros sitios, me dice que si, compruebo en https://haveibeenpwned.com si su email estaba comprometido y… bingo.

Había otros cuatro sitios en internet donde se registro con la misma contraseña que habían sido comprometidos y, probablemente, de uno de ellos haya salido la contraseña que han usado.

Remedio inmediato: usar @nomorepass_ para generar nuevas contraseñas diferentes y cambiarlas en todas partes.

Por eso, amiguitos, nunca debéis usar la misma contraseña (ni ninguna variación simplona de la misma) en ningún sitio… Y, por supuesto, como no vas a poder recordar las contraseñas, usa nomorepass

¿Qué pasa con Correos?

Desde que su revolucionario cambio de imagen decidió quitar las bolitas de la corona Correos ya no es lo que era. Al menos en mi caso, dejadme que os cuente la última que me ha hecho:

La verdad es que compro muchas cosas en Aliexpress, generalmente porque no las encuentro en proveedores locales, otras veces porque el precio en estos proveedores es varias órdenes de magnitud más grande que en Aliexpress, siempre me fastidia tener que esperar, pero hasta el momento, siempre he elegido que me lo enviasen por correos – los de DHL ya me intentaron robar más de una vez con sus «tramitaciones aduaneras» innecesarias-. En este último pedido no fue diferente, lo hice para mi empresa y, como tal, aparece el nombre de la empresa como destinatario.

El pedido lo hice el 20 de Agosto y Aliexpress me va informando de su evolución, de hecho, estaba muy contento porque el día 28 ya estaba en Madrid tras pasar aduanas y demás… 8 días es muy buena marca para Aliexpress, así que me dispuse a esperar a que Correos llamase a mi puerta el día siguiente… Y no llegó.

A las 20:30 de la noche recibí un sms diciendome que no estaba en la oficina y que habían intentado entregar el paquete sin éxito y que lo volverían a intentar al día siguiente… Obviamente todo esto es un sinsentido. ¿Quien entrega un paquete a una empresa a las 20:30 de la noche? En fin, era jueves y quería tener el paquete para el fin de semana, así que esperé toda la mañana del viernes y el cartero no apareció, así que supuse que la sinrazón se volvía a repetir y me lo entregarían por la tarde. Cerré la oficina, me fui a comer y volví escopetado para esperar al cartero… Esperé hasta las 21:00 dentro de la oficina, y tampoco llegó. Bueno, supuse que habrían tenido algún problema en el reparto y tendría que esperar al lunes… Pero mi sorpresa vino al ir a ver el estado del envío en su aplicación:

Sin ninguna verguenza afirman que vinieron a las 19:37 y que yo no estaba ¡MENTIRA COCHINA! y que tendría que irlo a recoger el siguiente día hábil a la oficina (también comprobé que no habían dejado notificación en l buzón, así que 100% que por aquí no habían pasado).

Pero como yo ya estaba encabezonado, me decido a pasar el sábado por la mañana por la oficina de correos a ver qué había pasado… Después de esperar hasta las 9:30 me indican en la oficina que el reparto de ayer todavía no les ha llegado y no me pueden antender ¡¿?!

Espero mañana (lunes) ir a la oficina a media mañana a ver si, por azares del destino, puedo recoger mi paquete, pero ya habrían pasado 5 días más de los que debían haber pasado… ¡Que alguien me lo explique! ¿tan dificil es hacer que en la página de seguimiento te permitan decir que quieres que te entreguen el paquete por la mañana en lugar de por la tarde? ¿en qué cabeza cabe que si vas a una empresa que esta cerrada a una hora cuando vuelvas al día siguiente a la misma hora estará abierta?

Un poquito de sentido común, please.

ACTUALIZACIÓN 1: Esta semana me ha vuelto a pasar dos veces, el cartero dice que pasa a una hora y no es verdad (a las 12:30 es dificil que no haya nadie en la oficina), luego deja el papel del envío en el buzón al día siguiente, por lo que retrasa 3 días la recepción del paquete (teniendo en cuenta que vayamos a recogerlo ese mismo día y que no haya festivos por medio…) . El caso es que entregas de paquetes certificados NUNCA llegan a nuestra oficina y tenemos que ir a recogerlos aunque se haya pagado por que te los lleven… ¡Algo no funciona!

Subir a maven central una librería propia

Ahora que ya acabas de construir una librería interesante en Java, la has hecho pública (en github, por ejemplo) y quieres que todo el mundo la use… Queda una tarea pendiente, subirla a un repositorio maven para ponerla a disposición de los que utilicen este sistema (o gradle, que hoy en día ya son casi todos).

Vamos a verlo con un ejemplo que he subido esta mañana… Hay cosas que todavía no entiendo del todo, pero el resultado ha sido bueno, por lo que, al menos, podremos usar esta receta como guía para próximas veces.

El código que intento subir es una librería simple que tengo alojada en github con su pom.xml básico y que si te descargas el proyecto podrías compilar e instalar en tu maven con mvn install. La dirección es esta:

https://github.com/yoprogramo/nomorepass-java/

Ahora, para que todo el mundo pueda descargárselo como dependencia y no tenga que hacer el mvn install del proyecto, tenemos que subirlo a un repositorio público, podemos ver una guía en esta página: Guide to Public Maven Repositories. Tal como explican en la página, lo más sencillo para publicar en Maven Central es usar el repositorio Sonatype. Dicho y hecho… Lo intentamos por aquí.

Lo primero es crear una cuenta en el Jira de Sonatype aquí. Lo siguiente, y esto es un poco «tricky» es crear un ticket solicitando un nuevo id de grupo en esta dirección. No se puede pedir cualquier id de grupo (en mi caso quería pedir com.nomorepass) y generalmente se pedirá alguna prueba de que el dominio es tuyo. En mi caso este es el ticket que creé: https://issues.sonatype.org/browse/OSSRH-49426, para demostrar que el dominio era mío cambié el DNS e incluí una entrada TXT con el identificador del ticket:

Una vez autorizado (tarda un poco, es un proceso manual) hay que modificar nuestro código y prepararlo para la subida, pero, antes de eso, tenemos que generar nuestras claves gpg para poder firmar el código. eso se hace con este comando:

gpg --gen-key

Una vez generada podremos acceder a la lista de claves con el comando:

gpg --list-keys

Toma nota del id de la clave y recuerda la contraseña que usaste para generarla, porque tendrás que recordarla. Además, tendrás que publicarla en algún servidor de claves públicas para que pueda ser comprobada.

gpg --keyserver hkp://keys.gnupg.net --send-keys <el-id-de-la-clave>

Ahora empezamos a modificar el pom.xml para que cumpla con los requisitos para el repositorio Maven Central. En nuestro caso pusimos esto:

<groupId>com.nomorepass</groupId>
  <artifactId>nomorepass</artifactId>
  <version>1.0</version>
  <packaging>jar</packaging>

  <name>Nomorepass java library</name>
  <description>NoMorePass protocol 2 implemented on Java.</description>
  <url>https://nomorepass.com</url>

  <licenses>
    <license>
      <name>Apache License, Version 2.0</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
    </license>
  </licenses>

  <developers>
    <developer>
      <name>Jose Antonio Espinosa</name>
      <email>[email protected]</email>
      <organization>Nomorepass</organization>
      <organizationUrl>https://nomorepass.com</organizationUrl>
    </developer>
  </developers>

  <scm>
    <connection>scm:git:git://github.com/yoprogramo/nomorepass-java.git</connection>
    <developerConnection>scm:git:ssh://github.com:yoprogramo/nomorepass-java.git</developerConnection>
    <url>https://github.com/yoprogramo/nomorepass-java/tree/master</url>
</scm>

Y, una vez informado de todo esto, hay que incluir los plugins que nos permitirán hacer el despliegue directamente. Yo añadí esto:

<distributionManagement>
    <snapshotRepository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </snapshotRepository>
    <repository>
      <id>ossrh</id>
      <url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
    </repository>
</distributionManagement>

Y puse en mi directorio de maven settings.xml los datos de mi usuario

<settings>
  <servers>
    <server>
      <id>ossrh</id>
      <username>xxxxxxxxxx</username>
      <password>xxxxxxxxxx</password>
    </server>
  </servers>
</settings>

Por último, toda la sección de build (que no tenía) la sustituí por esto:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-gpg-plugin</artifactId>
        <executions>
          <execution>
            <id>sign-artifacts</id>
            <phase>verify</phase>
            <goals>
              <goal>sign</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.sonatype.plugins</groupId>
        <artifactId>nexus-staging-maven-plugin</artifactId>
        <version>1.6.7</version>
        <extensions>true</extensions>
        <configuration>
          <serverId>ossrh</serverId>
          <nexusUrl>https://oss.sonatype.org/</nexusUrl>
          <autoReleaseAfterClose>true</autoReleaseAfterClose>
        </configuration>
      </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.2.1</version>
          <executions>
            <execution>
              <id>attach-sources</id>
              <goals>
                <goal>jar-no-fork</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.9.1</version>
          <executions>
            <execution>
              <id>attach-javadocs</id>
              <goals>
                <goal>jar</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
    </plugins>
</build>

Y ya, finalmente, pude ejecutar el mágico:

mvn clean deploy

Si todo ha ido bien, el artefacto estará subido a un repositorio que tendremos que promocionar a «Release» para que se sincronice con el repositorio central… Pero al final ya lo tendremos disponible para todo el mundo…

Aquí podéis encontrar lo que acabo de subir: https://search.maven.org/artifact/com.nomorepass/nomorepass/1.0/jar