buy lasix http://all-treatment.org/buy-levitra-vardenafil/ http://all-treatment.org/buy-viagra-sildenafil-citrat/ isotretinoin online buy cialis online
19 març 2018

Mockito i JUnit

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Molt bon tutorial del què es pot fer i com fer-ho amb Mockito. Quan cal utilitzar mock() i quan cal utilitzar spy(). Vegeu-lo http://www.vogella.com/tutorials/Mockito/article.html

També un altre tutorial per principiants a http://www.in28minutes.com/mockito-tutorial-for-beginners

Si es vol fer servir Mockito amb Spring: https://dzone.com/articles/spring-boot-unit-testing-and-mocking-with-mockito

I en concret si tens problemes amb mockejar una classe abstracta using-mockito-to-test-abstract-classes

 

 

13 març 2018

Private block chain

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Vist al Blog de GFT, escrit per Esteban Chiner:

Ethereum es una de las  plataformas más populares para el desarrollo de smart contracts, como ya comentamos en el post anterior; pero, ¿sabes cómo conectarse a una red pública? ¿sabrías cómo crear nuestra propia cadena de bloques privada? En este post te lo explicamos.

Cadenas Públicas

De forma similar a Bitcoin, en el ecosistema de Ethereum, hay muchos editores visuales (o navegadores) que ayudan a recopilar y analizar estadísticas desde un acceso público.

Para conocer toda la información que se está realizando en Ethereum puedes consultar en Etherscan.io, donde podrás ver los bloques generados, las transacciones y contratos que incluyen, etc.

Normalmente, hay dos tipos de redes públicas Ethereum:

  • Mainnet: se utiliza para proyectos de producción y smart contracts, y normalmente se necesita invertir algo de dinero real (convertido a ether) para poder interactuar con él.
  • Testnet: se utiliza para hacer pruebas y puede haber más de uno, recreado generalmente de forma periódica.
Otra de las herramientas de las que disponemos es Ethernodes.org un navegador que muestra información en vivo de la red Ethereum y sus nodos. En la imagen se puede ver que la mainnet consta de unos 22.000 nodos, el 50% de los cuales está en EEUU o China.

Una forma de conectarse a Ethereum es a través de un wallet o thin node, como puede ser Ethereum Wallet. Este te permite conectar a una red pública, gestionar tus cuentas y tus contratos. Lo que no incluye es un navegador de aplicaciones distribuidas (dApps). Para eso haría falta una versión más completa, llamada Mist.

Cuando ejecutes por primera vez el software Etherum Wallet, intentará conectarse al Mainnet. A continuación, puedes cambiar a una testnet (Develop à Network) y comenzar a minar para obtener ether. Si ejecutas la red privada (“Solo network”), el software Wallet debe cambiar automáticamente a ella.

Lo ideal para hacer pruebas es trabajar con redes privadas (veremos luego cómo crear una) o con una de las testents públicas. Actualmente existen las siguientes:

  • Ropsten: soporta nodos Geth y Parity, y es la que mejor reproduce la blockchain principal.
  • Kovan: inmune a ataques de spam, pero solo soporta nodos Parity.
  • Rinkeby: también inmune a ataques de spam, pero solo soporta Geth.

Seleccionar una u otra dependerá de tus necesidades o infraestructura, pero la que está teniendo mejor acogida últimamente y que usamos internamente para pruebas es Rinkeby puesto que es soportada por el software habitual (Geth, Mist y MetaMask). Para conseguir Ether y poder trabajar en ella simplemente hay que seguir los pasos en este enlace.

Crea tu cadena privada

Una vez que hemos comprobado las cadenas públicas, es buen momento para crear tu primera cadena privada con el cliente (o nodo) con Geth.

La instalación es muy sencilla pero depende mucho del SO utilizado. Simplemente sigue las instrucciones de su web. En GFT lo hemos probado en Linux, Windows, Mac e incluso ¡en una Raspberry Pi! sin problemas.

Con el fin de crear tu nueva cadena privada, seguiremos los siguientes pasos:

  • Preparar el bloque Genesis (primer bloque de la cadena, sin predecesor) e inicializar tu blockchain
  • Arrancar la cadena privada y conectar la consola de administración
  • Crear cuentas y arrancar la minería para así validar las transacciones que lleguen a la red

Crear el bloque Genesis

  • Crear una carpeta vacía, donde guardaremos la configuración y se almacenarán los elementos internos de la cadena.
  • Entra en la carpeta nueva y crea un bloque Genesis (genesis.json). El siguiente es un ejemplo típico pero en este post hay muchas más información sobre la configuración.
{
    "config": {
        "chainId": 15,
        "homesteadBlock": 0,
        "eip155Block": 0,
        "eip158Block": 0
    },
    "difficulty": "200000000",
    "gasLimit": "2100000",
    "alloc": { }
}

 

  • En el mismo directorio, ejecuta el siguiente comando para inicializar la cadena de bloques. Esto creará una subcarpeta donde se almacenará la configuración y bloques.
geth --datadir="mychaindata" init genesis.json
  • Arranca la red (actualmente de un solo nodo):
geth --datadir="mychaindata"

Con estos simples pasos ya tenemos una red privada corriendo pero le faltan dos cosas muy importantes: crear cuentas y activar la minería. Para activarlo arrancaremos la consola y haremos las tareas administrativas desde ahí.

Adjuntar una consola de administración al nodo

En una nueva terminal (para no parar el nodo en marcha), al ejecutar el siguiente comando debes ser capaz de obtener un control total sobre el nodo en ejecución. Consulta la Geth Management API para obtener más información sobre los comandos disponibles.

Si estamos en Windows simplemente ejecutando el “attach” será suficiente:

geth attach

Sin embargo, en sistemas basados en Linux hay que indicar el IPC donde conectar. Para eso hay que mirar la consola de la otra pantalla y verás un mensaje del tipo (“IPC endpoint opened:
<<IPC_file_location>>”). Con esa información ejecutaremos el siguiente comando:

geth attach ipc:<<IPC_file_location>>

Se abrirá una consola y podrás interactuar con el nodo, por ejemplo, ejecutando los siguientes comandos que listan las cuentas actuales (por ahora ninguna) y la información básica del nodo, respectivamente:

> personal.listAccounts

> admin.nodeInfo

Creación del usuario y activación del modo minería

En la misma consola creamos uno o varios usuarios con el siguiente comando, que nos pedirá una contraseña para la cuenta:

> personal.newAccount()

Una vez creadas las cuentas, las podemos ver con el comando “personal.listAccounts”.

Pero ahora lo que tenemos que hacer es desbloquearla para luego poder interactuar con ella y poder minar. El siguiente comando pedirá la contraseña para poder desbloquearla:

> personal.unlockAccount(“<<your account (e.g. 
0x5e97870f263700f46aa00d967821199b9bc5a120”)

Con esto lo único que queda es empezar a minar, con el siguiente comando:

> miner.start(<<num_treads>>)

Esto activará el modo de minería, que se encargará de validar las transacciones que lleguen a nuestra blockchain. Además, el ether acumulado por la minería irá a la cuenta que hemos activado.

Con esto ya tendríamos una blockchain privada básica funcionando. A partir de aquí se puede ampliar o mejorar en muchos aspectos, por ejemplo añadiendo más nodos, activando el RPC para interactuar con la red, “inspeccionar” las transacciones recibidas, gestionar las cuentas, reconfigurar la blockchain (ver bloque génesis), etc.

Bonus: arrancar todo en un solo comando

Los pasos anteriores se han seguido de una manera didáctica, pero se podría hacer lo mismo con un simple comando:

geth --datadir="mychaindata" --maxpeers 4 --nodiscover --mine --
minerthreads 1 --unlock 0 console

Que, siguiendo el orden de los comandos, arranca el nodo Geth a partir de la configuración inicial (en “mychaindata”), con un máximo de 4 peers (nodos en la red), sin descubrimiento de peers automático (se tienen que añadir manualmente), con el minado activado con un solo thread, desbloqueando la cuenta 0 (la primera que creamos) y abriendo la consola directamente.

Recuerda que al desbloquear la cuenta como parte del comando nos pedirá la contraseña de esa cuenta al arrancar.

Conclusiones

En este post hemos aprendido a navegar por las redes públicas (Mainnet o Testnet) utilizando los navegadores de bloques más comunes (por ejemplo, Etherscan.io) y cómo conectarse con Ethereum Wallet. También hemos aprendido a crear nuestra propia red privada usando Geth, generando el bloque de genesis, inicializando la cadena de bloques y ejecutando el nodo de minería.

12 març 2018

RxMarbles: Reactive programming

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

La programació reactiva és un paradigma de programació declarativa per  a quan hi ha una o més fonts d’esdeveniments asíncrons.

A RxMarbles podeu veure una descripció dels diversos operadors d’aquest paradigma.

Per exemple:

  • Map( x => x *10 )   retorna una seqüència igual a la d’entrada però multiplicant per 10
  • Reduce ( x,y => x+y )  retorna l’acumulat de la seqüencia d’entrada
  • Count( x => x>10 ) retorna el nombre d’elements d’entrada que siguin superiors a 10

26 febr. 2018

Readme Driven Development

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Normalment els projectes informàtics es dissenyen > s’implementen > es proven > es documenten.

Però normalment la implementació sempre s’allarga, aleshores això treu temps a les proves i encara més temps a la documentació. I això porta a que les aplicacions estiguin:

  • Poc provades
  • Mal documentades.

Una solució això és utilitzar l’estratègia TDD  (Test Driven Development) on els projectes es dissenyen > es creen del joc de proves > s’implementa la solució > es proven > es documenten

Amb aquest paradigma com a mínim s’assegura que hi hagi proves ben fetes. Però sol passar que el projecte no està ben documentat.

RDD (Readme Driven Development) capgira totalment la cadena del projecte. El projecte es documenta, es creen els jocs de proves i finalment s’implementa i es prova. Però això que sembla tan poc intuïtiu té molta lògica.

La documentació no només serveix per explicar com fer servir l’aplicació, sinó que permet als usuaris (i aquí usuari vol dir tant l’usuari final, com el qui haurà de mantenir el codi de l`aplicació, com qui l’hagi d’estendre,…) fer-se una idea del que acabarà sent i si els pot fer servei o no.

A continuació cal formalitzar aquesta documentació i escriure un joc de proves, per veure realment si el que s’ha descrit és realista i realitzable.

I finalment quan s’està segur del què es vol fer i de com ha de quedar aleshores es fa la implementació i es prova.

Més informació

 

 

 

23 febr. 2018

Tutorial SVG

Author: Joaquim Perez Noguer | Filed under: Web

Un bon tutorial SVG per entendre com es pot utilitzar-lo manualment.

 

Here’s how your completed code should look:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Hand Coded SVG</title>
  <style>
  html, body {
    height: 100%;
    width: 100%;
    background: #e9e9e9;
  }
  body {
    margin: 0;
    text-align: center;
  }
  .grid {
    width: 750px;
    height: 500px;
    margin: 0 auto;
    padding-top: 100px;
    padding-left: 100px;
    background-image: url('grid.png');
    position: relative;
  }
  .grid::before {
    content: "";
    border-left: 1px solid #7c7cea;
    position: absolute;
    top: 0;
    left: 100px;
    width: 750px;
    height: 600px;
  }
  .grid::after {
    content: "";
    border-top: 1px solid #7c7cea;
    position: absolute;
    top: 100px;
    left: 0;
    width: 850px;
    height: 500px;
  }
  svg {
    stroke: rgb(0, 0, 0);
    stroke-width: 5;
    stroke-linecap: round;
    stroke-linejoin: round;
    fill: none;
  }
  </style>
</head>
<body>
<div class="grid">
<svg width="750" height="500">
<defs>
<g id="leftalign">
<!-- Left align icon made with lines -->
<line x1="3" y1="3" x2="48" y2="3"></line>
<line x1="3" y1="19" x2="65" y2="19"></line>
<line x1="3" y1="35" x2="48" y2="35"></line>
<line x1="3" y1="51" x2="65" y2="51"></line>
</g>
<g id="rightcaret">
<!-- Right caret icon made with a polyline -->
<polyline points="
  3 3
  30 28
  3 53
"></polyline>
</g>
<g id="browser">
<!-- Browser icon made with rectangle and lines -->
<rect x="3" y="3" width="80" height="60"></rect>
<line x1="3" y1="19" x2="83" y2="19"></line>
<line x1="20" y1="3" x2="20" y2="17"></line>
</g>
<symbol id="alert" viewBox="0 0 86 86">
<!-- Alert icon made with ellipses and a line -->
<ellipse cx="43" cy="43" rx="40" ry="40"></ellipse>
<ellipse style="fill:black;" cx="43" cy="65" rx="5" ry="5"></ellipse>
<line style="stroke-width: 8;" x1="43" y1="19" x2="43" y2="48"></line>
</symbol>
<symbol id="play" viewBox="0 0 86 86">
<!-- Play icon made with ellipse and polygon -->
<ellipse cx="43" cy="43" rx="40" ry="40"></ellipse>
<polygon points="35 23, 60 43, 35 63" />
</g>
<symbol id="download" viewBox="0 0 64 71">
<!-- Download icon made with path -->
<path d="
  M 18 3
  L 46 3
  L 46 40
  L 61 40
  L 32 68
  L 3 40
  L 18 40
  Z
"></path>
</symbol>
</defs>
<use href="#leftalign" x="100" y="100"></use>
<use href="#rightcaret" x="300" y="100"></use>
<use href="#browser" x="500" y="100"></use>
<use href="#alert" x="100" y="200" width="100" height="100"></use>
<use href="#play" x="300" y="200" width="100" height="100"></use>
<use href="#download" x="500" y="200" width="100" height="100"></use>
</svg>
</div>
</body>
</html>

That covers the essentials of hand coding SVG! Let’s recap and summarize what we learned:

  • Setup your <svg> element to wrap your whole graphic.
  • Use <line> and <polyline> to create lines.
  • Use <rect>, <ellipse> and <polygon> to create closed shapes.
  • Use <path> to create anything you want.
  • Group shapes with the <g> element.
  • For group like behavior with extra features, use <symbol>
  • Use the <defs> element to define any reusable symbols and groups.
  • Place your defined reusable symbols and groups with the <use> element

 

14 febr. 2018

FOSDEM 2018

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Ja podeu veure tots els vídeos de FOSDEM 2018 a https://video.fosdem.org/

Per exemple aquí teniu els vídeos gravats a l’aula de Mozilla.

FOSDEM

is a free event for software developers to meet, share ideas and collaborate.
Every year, thousands of developers of free and open source software from all over the world gather at the event in Brussels.

Thank you all for a great FOSDEM 2018!

7 febr. 2018

Kotlin

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Kotlin és un llenguatge de programació que s’executa a la màquina virtual de Java i també es pot compilar al codi font de JavaScript o utilitzar la infraestructura del compilador LLVM.

La filosofia del llenguatge Kotlin és aprofitar tot lo bo del Java i en canvi simplificar-lo radicalment, per fer la vida més senzilla als desenvolupadors. El seu desenvolupament inicial va ser a partir d’un equip de programadors de JetBrains amb seu a Sant Petersburg, Rússia. 

Encara que la sintaxi no és compatible amb Java, Kotlin està dissenyat per interoperar amb el codi Java i utilitza la biblioteca de classes Java existent.

A partir d’Android Studio 3.0, Kotlin és un llenguatge de programació totalment compatible amb Android i permet a l’usuari triar entre la segmentació Java 6 o el bytecode compatible amb Java 8.

Més informació:

29 gen. 2018

Google Sheets, un Excel amb llenguatge natural

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Vist a blog.google

Google Sheet demo

29 gen. 2018

Google AutoML: intel·ligència artifical a l’abast

Author: Joaquim Perez Noguer | Filed under: Ciència i tecnologia

Google ha creat una nova eina, Auto ML, amb la qual els usuaris podran entrenar els seus propis algoritmes d’aprenentage. Vegeu:  cloud.google.com/automl

Algunes persones ja han suggerit que en el futur els usuaris podran disposar d’IA com aquell qui disposa de l’electricitat. Pot ser això és la primera pedra a aquest futur.

Més informació: technologyreview.es

29 gen. 2018

CSS by example: cssreference.io

Author: Joaquim Perez Noguer | Filed under: Web

A cssreference.io hi ha una bona guia visual amb exemples de com escriure un bon CSS i escollir l’efecte que més t’agrada.