slide1

Alt1040. Noticias acerca de Internet, diseño, música, cine, opiniones, weblogs y medios

Es uno de los weblogs de tecnología más seguidos de la blogosfera hispana.

slide2

Bitelia. Blog de software, internet y servicios web

Software y aplicaciones para mejorar tu vida, guías de uso, trucos, listas, noticias y todo sobre tecnología.

slide3

Xataka. Publicación de noticias sobre gadgets y tecnología.

Últimas tecnologías en electrónica de consumo y novedades tecnológicas en móviles, tablets, informática, etc.

slide4

Wwwhatsnew. Aplicaciones, marketing y noticias en la web.

Servicios que os pueden ser útiles para dibujar, gestionar tareas, hacer amigos, encontrar restaurantes...

slide5

Fayerwayer. Discusiones y opiniones de lo ultimo en tecnología y gadgets

Con secciones dedicadas a Internet, Software o Redes Sociales es un referente a nivel de tecnología en español.

Mostrando entradas con la etiqueta programación. Mostrar todas las entradas
Mostrando entradas con la etiqueta programación. Mostrar todas las entradas

15 de junio de 2021

Sistemas embebidos: ejemplos de uso en el género humano

Chip Computer CPU Hardware Icon
Los sistemas embebidos, como siempre decimos en Tribalyte Technologies, por mucho que no nos demos cuenta, son parte de nuestras vidas. De hecho, sin ellos, hoy no tendríamos muchas de las comodidades que la tecnología nos ha brindado a lo largo de los últimos sesenta años.

¿Qué es un sistema embebido?


Para quien todavía no conozca el mundo del “embebido”, de forma muy resumida, podríamos decir que un sistema embebido, también conocido como "empotrado" o "incrustado", es un tipo de sistema electrónico que, contando con un microcontrolador o microprocesador - su "cerebro" - suele encontrarse dentro de dispositivos y productos que, a través de un software (comúnmente desarrollado en C/C++ y Linux) pueden llevar a cabo funciones específicas. Un ejemplo clásico de sistema embebido es el dispositivo de una lavadora moderna. Para hacer nuestra colada es preciso seleccionar nuestro programa de lavado, es decir, pulsar unos botones que, a su vez, contando con un software, permitirán que el “sistema” arranque y que las funcionalidades elegidas se lleven a cabo perfectamente. Esto, muy en resumen y grosso modo, es lo que normalmente ocurre en todo tipo de dispositivo que contenga un sistema embebido.

Security Smartphone

¿Qué impacto han tenido los sistemas embebidos en el género humano?


Tal y como decíamos antes, los seres humanos y los sistemas empotrados llevan más de 60 años de “relación” y los últimos avances en I+D nos han dejado claro que esta alianza simbiótica de máquina/hombre va a reforzarse aún más. Y no solo en nuestro planeta, sino también en todo el espacio.
Sí, exacto, en el espacio. De hecho, no es nada casual que el primer sistema embebido realizado en la historia fuera un sistema de guía desarrollado por el MIT (Massachusetts Institute of Technology) para la NASA y que desempeñó un papel fundamental en las misiones del Apolo hacia la luna. Hoy en día, la astronáutica sigue siendo uno de los sectores que más invierte en la investigación y evolución de los sistemas embebidos. Un caso muy conocido sería, por ejemplo, el de SpaceX, la empresa estadounidense fundada por Elon Musk y que, contando con una increíble inversión en el desarrollo de software embebido, todo apunta a que va a lanzar el primer Sistema de Transporte Interplanetario (STI) para transportar al ser humano a Marte.

Pero, dejando a un lado estos casos extremos, lo que sí cabe destacar es que, a partir de los años 70, el uso de los sistemas embebidos empezó a ganar terreno en todo tipo de industria y sector (desafortunadamente, también para la realización de armamento bélico y armas tecnológicas), hasta colarse en nuestro día a día: medios de transporte, aparatos electrodomésticos, seguridad, automoción industrial, sector automovilístico, ferroviario... incluso dentro del cuerpo humano.

Sistemas embebidos y usos en el cuerpo humano


La ciencia ficción nos ha acostumbrado a pensar en el “hombre biónico” como algo amenazante, siniestro y malvado. De hecho, al escuchar "hombre biónico" u "hombre-máquina", ¿a quién no se le ocurre enseguida alguna escena de "Terminator" disparando contra todo ser vivo? También es cierto que, en el imaginario colectivo, hay ejemplos "más positivos" y pacíficos como pueden ser "RoboCop" o "El hombre Bicentenario". Pero, aparte de la ciencia ficción y de todas las referencias culturales o lugares comunes que podamos tener en nuestra sociedad, y, sobre todo, sin enfocarnos solo en el sector propio de la robótica, los progresos que la tecnología ha realizado en la aplicación de los sistemas embebidos para mejorar y potenciar la condición humana es algo evidente y, más bien, tangible.

A este respecto, hay una serie muy interesante en Netflix que habla sobre los mecanismos que mueven "nuestra máquina", nuestro organismo y que recomiendo a todo aquel que quiera profundizar en ello: Dentro del cuerpo humano.

Sistemas embebidos en la ingeniería biomédica


En el primer capítulo de esta misma serie (espero no destripar demasiado), se cuenta la historia de Jason Little, un hombre americano que perdió su brazo izquierdo tras un grave accidente y que, gracias a un increíble estudio conducido por la Profesora Ranu Jung (del departamento de Ingeniería Biomédica de la Florida International University), a través de una prótesis tecnológica, ha podido recuperar no solo las funciones mecánicas de su miembro fantasma, sino hasta las sensaciones táctiles y neuronales. Es decir, en este caso concreto, no se habla solo de una prótesis estéticamente impecable que cumple con operaciones básicas, sino de un sistema tecnológico extremadamente avanzado que supera las "barreras" del cuerpo humano y que, gracias a una serie de estimuladores de neuronas insertados directamente en el cuerpo de Jason, le permite poner en comunicación directa su cerebro con su brazo biónico.

Pero ¿qué tiene que ver todo esto con los sistemas embebidos? Pues, un pequeño detalle: el sistema en cuestión cuenta, entre otros elementos, con un Raspberry Pi 3 que es un Single-Board Computer, es decir, un ordenador completo en una sola placa (chip) y que, junto con Arduino, representa uno de los entornos de desarrollo más importantes para software y sistemas embebidos.



Otro ejemplo de integración de sistemas embebidos directamente en el cuerpo humano, sería el uso de un desfibrilador cardioversor implantable (ICD) para detectar y regular los latidos irregulares del corazón. Se trata de un dispositivo médico subcutáneo, un microprocesador que, gracias a la emisión de pequeños impulsos eléctricos, puede intervenir en el caso de que detecte alguna taquicardia ventricular peligrosa. En el campo de la electromedicina existen ya muchísimos ejemplos de equipos sanitarios que controlan, cuidan y potencian nuestra salud aprovechando la infinidad de posibilidades que los sistemas embebidos pueden proporcionarle al género humano.

Es decir, el objetivo principal de la tecnología, desde el amanecer de nuestra especie, siempre ha sido el de mejorar nuestra vida y optimizar nuestras labores. De los primeros utensilios rudimentarios del periodo neolítico, pasando por la máquina de vapor de James Watt y llegando hasta la era de la Industria 4.0.

De la industria 4.0 a la Computación Cognitiva


De hecho, cuando se habla de Industria 4.0, o sea, de la transformación digital de los procesos industriales y de producción para prácticamente cualquier tipo de sector, es imposible prescindir del papel fundamental que los sistemas embebidos han desempeñado y que, según lo previsto, se implantarán aún más a medida que nos acercamos a la quinta revolución industrial. Con el término "Industria 5.0" nos referimos a la interconexión entre hombres y máquinas gracias al uso de las tecnologías más avanzadas como la Inteligencia Artificial, el IoT (Internet of Things) y, sobre todo, el potencial inmenso de la computación cognitiva.

La computación cognitiva, también conocida como "cómputo cognitivo", en pocas palabras, consiste en el reto de reproducir e imitar el funcionamiento del cerebro humano dentro de sistemas informáticos automatizados que hacen uso de una serie interminable de datos. Y no es casualidad que hoy en día solamos referirnos a los datos como "el oro del siglo XXI". Además, dentro de este marco, desde luego, caben todos aquellos aspectos que ya se usan, por ejemplo, en el marketing digital (machine learning, deep learning, Big Data, chatbots, etc.) pero que, ahora, tienen como objetivo final no la mejora o la automatización del trabajo humano sino su completa sustitución por medio de las máquinas.

Todo tipo de maquinaria - mejor dicho la gran mayoría - ya de por sí cuenta con sistemas embebidos que, gracias al desarrollo de software específicos, permiten la automatización de los procesos industriales. La industria automovilística, aeroespacial, ferroviaria, naval, alimenticia, agrícola y un largo etcétera, hoy en día probablemente no existirían sin el uso de sistemas embebidos, PLCs, RTOS, etc.

Pero la pregunta, ahora, es distinta: ya que las máquinas dotadas de computación cognitiva prácticamente no pueden cometer errores, ¿deberíamos encomendar todo tipo de decisión u operación directamente a ellas? Si, pongamos un ejemplo, en el campo médico, un día (y en el mercado ya existe algo por el estilo) pudiéramos contar con la diagnosis hecha enteramente por uno de estos sistemas o, es más, para una cirugía, en lugar de un cirujano, en el quirófano nos encontráramos solo frente a una máquina programada para operarnos sin jamás cometer algún fallo, ¿tú qué harías?

Desarrollo de software para sistemas embebidos


Sobre este tema ya se han abiertos muchos debates y, pese a que ciencia y ética, por su naturaleza, es muy improbable que compartan la misma opinión, el entusiasmo hacia el progreso tecnológico es imposible de mantener a raya a estas alturas. Y, por mucho que la tecnología avance y que se desaten debates de bioética o bioingeniería, el papel fundamental de los sistemas embebidos en nuestra sociedad solo puede que aumente y perdure.

En Tribalyte Technologies, como expertos en el desarrollo de software embebido para diferentes sectores, nos gusta pensar en la tecnología como una herramienta preciosa para crear una sociedad equilibrada y basada en la razón. Una sociedad que hace uso del progreso para conseguir la máxima sostenibilidad, eficacia y confort. Todo lo demás, ya nos lo dirá el futuro de nuestra sociedad.



* Artículo de Alessandro Barbera Formica *



Alessandro Barbera


CMO | Ejecutivo de cuentas



BIO

Soy experto en marketing y comunicación multilingüe (It-Es-En).
La formación en startup y luego la experiencia en empresas internacionales, me han permitido desarrollar un perfil T-shaped en el mundo digital y competencias multidisciplinares en el marketing estratégico y publicitario.



7 de octubre de 2020

¿Qué es Docker? breve introducción y conceptos básicos

Logo Docker
Docker ha sido una propuesta diseñada y desarrollada inicialmente por Salomón Hykes en la empresa "dotCloud" con el propósito de automatizar los procesos de integración continua (CI) y entrega continua (CD). A raíz de su potencia y facilidad de uso, fue liberado como proyecto de código abierto en el año 2013.


Desde su liberación en 2013, el proyecto ha ido creciendo y se ha consolidado como uno de los más importantes en GitHub con el mayor número de estrellas y de forks.

Empresas como Microsoft, IBM, RedHat, HP, entre otras, no tardaron en ver la potencia y valor de Docker y por ello, participan activamente en su desarrollo y crean soluciones propias partiendo de Docker.

DevOps


¿qué es Docker?


Es un proyecto open source utilizado principalmente para el despliegue de aplicaciones en espacios virtualizados. Estos espacios son también conocidos como contenedores.

Es una tecnología muy extendida en la industria del desarrollo de software, siendo una práctica muy frecuente en los equipos de desarrollo. Estos usan Docker para poder desplegar fácil y rápidamente las aplicaciones que crean.

¿qué es un contendor?


Es un espacio virtual (hay diferencias importantes con las máquinas virtuales) en dónde instalamos todo el software necesario para que podamos ejecutar las aplicaciones que vamos desarrollando.

Podemos tener un contenedor con una configuración muy específica. Por ejemplo, podríamos crear un contenedor que incluya Apache, PHP y MySQL con versiones muy concretas y lo podemos desplegar facilmente en otros sistemas en los que necesitemos que se encuentre en ejecución esta aplicación (estas plataformas sólo necesitan correr un servicio de Docker).

El objetivo de los contenedores es incluir todo lo necesario para que una aplicación se pueda ejecutar en cualquier plataforma sin tener que cambiar nada.

¿qué es una imagen?


Un contenedor sólo es posible crearlo a partir de una imagen.
Una imagen, a grandes rasgos, es una plantilla que nos permite crear contenedores. Incluye el diseño y la configuración necesaria para poder crear contenedores concretos.

De forma general, una imagen define el software que vamos a instalar en el contenedor y que versiones tienen que tener. Es decir, las imágenes siguen un modelo y sintaxis estándar.

A modo de ejemplo, podríamos hacer un símil en el mundo del desarrollo diciendo que "una imagen sería una clase y un contenedor el objeto propiamente dicho".

Estos dos elementos son imprescindibles para poder utilizar Docker.

Caraceterísticas importantes de Docker


  • las imágenes y los contenedores se gestionan de una forma centralizada por medio de un servicio que se encuentra en ejecución en el sistema operativo. Este servicio es conocido como "dockerd".

    En sistemas basados en linux (en las distribuciones más recientes) este servicio se encuentra gestionado, como muchos otros, por systemd.

    Lo que normalmente hacemos es utilizar el cliente de Docker (comando docker) para poder conectarnos con este servicio y poder gestionar imágenes y contenedores.

    Este comando se encarga de conectarse al servicio de docker y realizar todas las operaciones de administración sobre este servicio como son la gestión de imágenes y contenedores, configuraciones de red, etc.

  • existen multitud de imágenes que tienen configuraciones estándar.

    Es bastante habitual encontrarnos con equipos de desarrollo que van a necesitar el mismo stack tecnológico (Apache, PHP, MySQL por ejemplo). Para ello existe un repositorio centralizado conocido como Docker Hub (https://hub.docker.com/) en donde se encuentran cientos de imágenes registradas que podemos descargar y posteriormente utilizar para crear nuestros contenedores partiendo de esas imágenes.

  • los contenedores admiten múltiples configuraciones, incluyendo la asignación de contenedores a distintos segmentos de red. Esto nos permite, entre otras cosas, crear contenedores que se van a ver entre ellos partiendo de un contexto de red común.

  • en docker también podemos crear clusters de contenedores, crear volúmenes y otras muchas funcionalidades que facilitan la actividad de un DevOps.

Diferencias Contenedores vs Máquinas Virtuales


Las máquinas virtuales han sido la forma estándar y tradicional de desplegar múltiples aplicaciones con diferentes infraestructuras en una misma máquina o sistema.

Las máquinas virtuales se basan en un Hypervisor que es un software que permite la instalación de otros sistemas operativos (invitados) sobre el sistema anfitrión.

Las máquinas virtuales tienen una desventaja importante, cada sistema invitado es completamente independiente del sistema anfitrión, tiene su propia gestión de recursos, procesos, tareas, etc. Esto dificulta la gestión de las aplicaciones que instalamos en estos sistemas invitados.

En cambio docker, lo que propone es no instalar un sistema operativo invitado sino aprovechar las características que ya se encuentran disponibles en el sistema anfitrión. Esto es posible gracias al uso de un motor de Docker (Docker Engine).

Docker Engine es un servicio como cualquier otro que se encuentra en el sistema operativo anfitrión pero tiene la ventaja de que se pueden desplegar sobre este servicio diferentes contenedores y cada uno de estos contenedores va a ser completamente independiente de los otros, compartiendo la misma base (librerías, aplicaciones, etc) del sistema operativo.

Es mucho más liviano trabajar con imágenes y contenedores que trabajar con un sistema operativo completo, que es lo que hacemos con las máquinas virtuales con un hypervisor como por ejemplo VirtualBox o VMWare.




21 de noviembre de 2019

El lenguaje Go cumple 10 años

Golang
El pasado 10 de noviembre tuvo lugar el décimo aniversario de Go, un hito celebrado por la comunidad global de desarrolladores de este lenguaje de programación con conferencias como Gopherpalooza en Mountain View y KubeCon en San Diego, además de docenas de reuniones en todo el mundo.


Go, también conocido como Golang, es un proyecto de código abierto que combina la velocidad de desarrollo de un lenguaje interpretado como Python, con la eficiencia y seguridad de un lenguaje compilado como C o C++.

Fué creado en Google el mes de noviembre de 2009 por Rob Pike, Robert Griesemer y Ken Thompson, co-creador con Dennis Ritchie de Unix y del lenguaje de programación C.

Lo más destacado es que Go fué diseñado ex profeso para mejorar la productividad de máquinas con más de un núcleo, en red y enormes bases de código, lo que permite a los programadores escalar rápidamente tanto el desarrollo como la implementación de software.

A medida que el uso de Go ha ido creciendo (tiene más de un millón de usuarios en todo el mundo), se han construido más y más servicios básicos con él. Las aplicaciones populares de código abierto creadas en Go incluyen Docker, Hugo, Kubernetes. La plataforma de nube híbrida de Google, Anthos, también está construida con Go.





Hay más de un millón de desarrolladores que usan Go en todo el mundo, englobando la banca y el comercio electrónico, los juegos y los medios de comunicación, la tecnología y otras industrias, en empresas tan diversas como American Express, Capital One, Dropbox, IBM, Monzo, New York Times, Salesforce, Square, Target, Twitch, Uber y, por supuesto, Google.

Un claro ejemplo es la empresa argentina dedicada a compras digitales Mercadolibre que usa Go para escalar y modernizar su ecosistema de comercio electrónico, mejorar la rentabilidad y los tiempos de respuesta del sistema.

El equipo de desarrollo de MercadoLibre crea y mantiene sus APIs, compatibles con la mayor parte de proveedores en la nube, en base a soluciones de microservicios. Históricamente, la arquitectura de desarrollo de software de la compañía tenía como pilar Grails y Groovy respaldado por bases de datos relacionales. Sin embargo, este gran marco con múltiples capas pronto se encontró con problemas de escalabilidad.

La conversión de esa arquitectura heredada a Go simplificó esas capas intermedias y produjo grandes beneficios de rendimiento. Por ejemplo, un servicio Go ahora puede ejecutar 70.000 solicitudes por máquina con solo 20 MB de RAM.

"Go fue maravilloso para nosotros", explica Eric Kohan, Gerente de Ingeniería de Software en MercadoLibre. "Es muy potente y fácil de aprender, y con la infraestructura de back-end ha sido excelente para nosotros en términos de escalabilidad".

El uso de Go permitió a MercadoLibre reducir el número de servidores que usan a un octavo del número original (de 32 servidores a cuatro), además cada servidor puede operar con menos potencia (originalmente cuatro núcleos de CPU, ahora hasta dos núcleos por procesador).

Con Go, los tiempos de compilación de MercadoLibre son tres veces más rápidos y su conjunto de pruebas se ejecuta 24 veces más rápido. Esto significa que los desarrolladores de la compañía pueden hacer un cambio, luego compilar y probar ese cambio mucho más rápido que antes.

Hoy, aproximadamente la mitad del tráfico de Mercadolibre es manejado por las aplicaciones Go.

Puedes leer más sobre el éxito de MercadoLibre con Go en el siguiente estudio: MercadoLibre crece con Go

Gracias al crecimiento de Go, se ha creado un nuevo centro para desarrolladores de Go: go.dev

Comienza a aprender:


31 de marzo de 2019

Llega Code Jam 2019, la competición de programación de Google

Codejam 2019
Code Jam es una iniciativa organizada por Google que reta a los programadores de todo el mundo a poner a prueba sus habilidades resolviendo múltiples rondas de problemas de algoritmia. Se permite el uso de cualquier lenguaje de programación y entorno de desarrollo para dar solución a estos problemas.


En esta temporada, se presentan problemas algorítmicos desafiantes (algunos de ellos son interactivos) para la comunidad global de programadores.

Cada año, el equipo de ingeniería de Code Jam y un grupo exclusivo de colaboradores de Google dedican miles de horas combinadas en la creación, prueba y publicación de algunos de los problemas algorítmicos más difíciles del mundo.

Este año se ha incorporado la característica de "formular una pregunta", que ofrece a los participantes la oportunidad de interactuar con los ingenieros de Code Jam durante las rondas en línea. También se están introduciendo nuevos conceptos, como la capacidad de probar una solución en sus servidores, así como proporcionar certificados a los competidores.

La ronda de clasificación se lleva a cabo el 5 de abril (regístrate aquí).
De las decenas de miles de participantes en el concurso, solo los 25 primeros calificarán para asistir el viernes 9 de agosto a la gran final en las oficinas de Google en San Francisco, Mountain View (California).

El nuevo Campeón del Mundo se llevará a casa $15,000, mientras que los 1.000 mejores competidores ganarán una camiseta de edición limitada de 2019.




Desafíos de la edición 2018 y ejemplos de resultados de uno de sus participantes

:

1- Rounding Error (5pts, 9pts, 11pts)


Enunciado del problema: Rounding Error, Problem

Respuesta » C++ (G++) code

#include 
using namespace std;
#define rep(i,a,b) for(int i = (a); i < (b); ++i)
#define rrep(i,a,b) for(int i = (b); i --> (a);)
#define all(v) (v).begin(),(v).end()
#define trav(x,v) for(auto &x : v)
#define sz(v) int(v.size())
typedef vector vi;
typedef long long ll;
typedef pair pii;

int solve(){
 int n, l;
 cin >> n >> l;

 int ans = 0;

 priority_queue pq;

 int left = n;
 rep(_,0,l){
  int c;
  cin >> c;
  left -= c;
  int res = 200 * c - n;
  while(res >= 0){
   res -= 2*n;
   ans++;
  }
  pq.push(res);
 }
 rep(i,0,left){
  int res = pq.top();
  pq.pop();
  if(res < -n){
   pq.push(-n);
   --i;
   continue;
  }
  res += 200;
  while(res >= 0){
   res -= 2*n;
   ++ans;
  }
  pq.push(res);
 }
 return ans;
}

int main(){
 int t;
 cin >> t;
 rep(i,1,t+1){
  cout << "Case #" << i << ": " << solve() << endl;
 }
}

2- Mysterious Road Signs (10pts, 20pts)


Enunciado del problema: Mysterious Road Signs, Problem

Respuesta » C++ (G++) code
#include 
using namespace std;
#define rep(i,a,b) for(int i = (a); i < (b); ++i)
#define rrep(i,a,b) for(int i = (b); i --> (a);)
#define all(v) (v).begin(),(v).end()
#define trav(x,v) for(auto &x : v)
#define sz(v) int(v.size())
typedef vector vi;
typedef long long ll;
typedef pair pii;

void solve(){
 int s;
 cin >> s;
 vi m(s), n(s);
 rep(i,0,s){
  int d, a, b;
  cin >> d >> a >> b;
  m[i] = d+a;
  n[i] = d-b;
 }
 
 map mm, nn;
 map mn;

 rep(i,0,s) mm[m[i]] = nn[n[i]] = mn[pii(m[i],n[i])] = 0;

 int ix = 0;
 trav(pa, mm) pa.second = ix++;
 ix = 0;
 trav(pa, nn) pa.second = ix++;
 ix = 0;
 trav(pa, mn) pa.second = ix++;
 
 vi mr(s), nr(s), mnr(s);
 rep(i,0,s){
  mr[i] = mm[m[i]];
  nr[i] = nn[n[i]];
  mnr[i] = mn[pii(m[i],n[i])];
 }

 vector ml(sz(mm)), nl(sz(nn)), mnl(sz(mn));
 rep(i,0,s){
  ml[mr[i]].push_back(i);
  nl[nr[i]].push_back(i);
  mnl[mnr[i]].push_back(i);
 }

 auto cnt = [&](int fr, int to, vi &v){
  return lower_bound(all(v), to) - lower_bound(all(v), fr);
 };

 auto good = [&](int fr, int to, int m1, int n1){
  int z = -1;
  if(mn.count(pii(m1, n1))) z = mn[pii(m1,n1)];
  int x = mm[m1], y = nn[n1];
  
  int res = cnt(fr,to, ml[x]) + cnt(fr,to, nl[y]);
  if(z >= 0) res -= cnt(fr,to, mnl[z]);

  return to-fr == res;
 };

 auto len = [&](int fr, int m1, int n1){
  int lo = 1, hi = s-fr+1;
  while(lo+1 < hi){
   int mi = (lo+hi)/2;
   if(good(fr, fr+mi, m1, n1)) lo = mi;
   else hi = mi;
  }
  return lo;
 };
 int rek = 0, num = 0;

 rep(i,0,s){
  int res = len(i, m[i], n[i]);
  if(i+res < s) {
   int j = i+res;
   res = max(res, max( len(i, m[i], n[j]),
       len(i, m[j], n[i]) ) );
  }
  if(res > rek){
   rek = res;
   num = 0;
  }
  if(res >= rek) ++num;
 }
 cout << rek << ' ' << num << endl;
}

int main(){
 int t;
 cin >> t;
 rep(i,1,t+1){
  cout << "Case #" << i << ": ";
  solve();
 }
}

3- Transmutation (15pts, 18pts, 12pts)


Enunciado del problema: Transmutation, Problem

Respuesta » C++ (G++) code
#include 
using namespace std;
#define rep(i,a,b) for(int i = (a); i < (b); ++i)
#define rrep(i,a,b) for(int i = (b); i --> (a);)
#define all(v) (v).begin(),(v).end()
#define trav(x,v) for(auto &x : v)
#define sz(v) int(v.size())
typedef vector vi;
typedef long long ll;
typedef pair pii;

ll solve(){
 int m;
 cin >> m;

 vi r1(m), r2(m);
 rep(i,0,m) cin >> r1[i] >> r2[i];
 trav(x, r1) --x;
 trav(x, r2) --x;

 vector g(m);
 trav(x, g) cin >> x;

 ll tot = 0;
 trav(x, g) tot += x;

 auto works = [&](ll y){
  vector gg = g;

  gg[0] -= y;

  rep(_,0,m-1){
   rep(i,0,m) if(gg[i]<0){
    if(gg[i] < -tot) return false;
    ll pr = gg[i];
    gg[i] = 0;
    gg[r1[i]] += pr;
    gg[r2[i]] += pr;
   }
  }
  trav(x, gg) if(x < 0) return false;
  return true;
 };

 ll lo = g[0], hi = tot+1;
 while(lo+1 < hi){
  ll mi = (lo+hi)/2;
  if(works(mi)) lo = mi;
  else hi = mi;
 }
 return lo;
}

int main(){
 int t;
 cin >> t;
 rep(i,1,t+1){
  cout << "Case #" << i << ": " << solve() << endl;
 }
}






17 de febrero de 2019

Stack Overflow e InfoJobs se asocian para ofrecer más oportunidades de trabajo

Stack Overflow Jobs
La formula de asociación funciona de la siguiente manera: los trabajos técnicos publicados en InfoJobs también se encontrarán en los trabajos de Stack Overflow Jobs siempre que cumplan con los estándares de calidad de trabajo de Stack Overflow.


El principal requisito de calidad es que las ofertas de empleo deben buscar profesionales cuya principal tarea sea solucionar un problema técnico mediante el desarrollo de software.

¿Cuáles son los motivos de este acuerdo?


Stack Overflow es la comunidad online de programadores más grande del mundo y en España cuenta con 900.000 visitantes cada mes.

En Stack Overflow cualquier persona que codifica puede encontrar soluciones a sus problemas técnicos.

Por otro lado, el Informe Anual del mercado laboral presenta los siguientes datos: en 2018 se publicaron en InfoJobs alrededor de 350.000 vacantes (un 10% más que el año anterior) en búsqueda de profesionales en el sector de la Informática y las Telecomunicaciones.

Y esta demanda seguirá creciendo en virtud de la encuesta realizada a más de 1.000 empresas en la que el 47% de las grandes corporaciones tiene previsto contratar perfiles tecnológicos en los próximos 24 meses.

Dominique Cerri, directora general de InfoJobs, explica que

"el principal beneficio de este acuerdo y que contribuye a un cambio de paradigma en la contratación de profesionales IT para nuestras empresas, es que Stack Overflow se alinea con nuestra ambición de que sean las ofertas las que encuentran al candidato y no el candidato el que debe buscar las ofertas. En este sentido, Stack Overflow sólo muestra las ofertas de empleo a los usuarios que encajan con el perfil solicitado".





Fuente de información: InfoJobs firma un acuerdo con Stack Overflow, la comunidad de programadores más grande del mundo

¿Qué tipo de perfiles profesionales se demandan?


Fundamentalmente:

  • Analistas, Business Intelligence o Data Scientist: roles para personas que escriban código personalizado, no personas que solo usan herramientas de desarrollo.
  • CTO (Chief Technical Officer): máximo responsable del departamento tecnológico, informático y técnico de una compañía.
  • Programadores, diseñadores o ingenieros de software.
  • Gerentes de producto: trabajan en conjunto con los desarrolladores para implementar nuevas características técnicas.
  • Probadores de software (QA o Test Developer).
  • Administradores de sistemas y DevOps (Development Operations).


Code Programmer


¿Cómo puedo optimizar las búsquedas de empleo?


La plataforma permite realizar búsquedas por preferencias de usuario:

  • Búsqueda por tecnología (Acceder)
  • Búsqueda por salario (Acceder).
  • Buscar trabajos más recientes (Acceder).
  • Buscar trabajo en empresas populares (Acceder)

Contratar a los desarrolladores es difícil


Programadores profesionales y aspirantes visitan Stack Overflow cada mes para ayudar a resolver problemas de codificación, desarrollar nuevas habilidades y encontrar oportunidades de trabajo.

Fundada en 2008, Stack Overflow se asocia con empresas para ayudarlas a comprender, comprometer, habilitar y contratar a desarrolladores de todo el mundo.








10 de enero de 2019

Aprende a programar javascript con Grasshopper, la app de Google para iOS y Android

Javascript Programming
Grasshopper (saltamontes en español) es una aplicación para dispositivos móviles diseñada para enseñar a codificar Javascript real.
Es una app gratuita, orientada a perfiles sin experiencia en programación, que cubre los conceptos básicos de programación.


Grasshopper es una de las últimas creaciones del taller para productos experimentales de Google, Área 120 que forma parte de Google Inc. Se trata de una incubadora dónde los trabajadores de Google lanzan docenas de ideas novedosas, que luego (las que prosperan) se abren al público en sus versiones beta. Grasshopper se lanzó en abril del pasado año.

El nombre Grasshopper rinde honor a Grace Hopper, uno de los primeros pioneros en la programación de computadoras.


Grasshopper App


1. ¿Qué conceptos básicos de JavaScript cubre?


Actualmente, Grasshopper enseña a utilizar el popular lenguaje de programación JavaScript, utilizado por más del 70% de los desarrolladores profesionales.

Grasshopper usa JavaScript para enseñar conceptos de programación fundamentales que son universales para casi todos los lenguajes de programación:

  • Los fundamentos: cómo funciona el código, funciones, variables, cadenas, bucles for, arrays, condicionales, operadores, objetos y cómo todos estos elementos interaccionan entre sí.
  • Animaciones I: dibuja formas utilizando la popular librería 3D, definiendo funciones, callbacks y animaciones.
  • Animaciones II: creación de funciones más complejas con 3D y los temas del curso The Fundamentals.

2. ¿Qué debo hacer después de usar Grasshopper?


Si has disfrutado de Grasshopper y deseas llevar sus habilidades de codificación al siguiente nivel, el equipo ha identificado varias opciones en las que puedes continuar su viaje de codificación:

  • Seguir recibiendo clases en línea:: nos hemos asociado con Coursera, una compañía que trabaja con las principales universidades para ofrecer cursos online. Estas son algunas de las clases que ofrecen y que podrían ser el próximo paso perfecto después de completar The Fundamentals:
    * Fundamentos de programación con JavaScript, HTML y CSS
    * Algoritmos, Parte 1
    * Especialización en diseño web + Portafolio y certificado
  • Ir a un bootcamp: para los estudiantes con sede en EEUU, en Seattle, St. Louis, Kansas City, Miami o Tampa, también nos hemos asociado con LaunchCode, una organización sin fines de lucro, para ofrecer campos de entrenamiento de codificación gratuitos a un número selecto de estudiantes.
    Puedes registrarte aquí.
Además, si estás interesado en una carrera basada en la tecnología, considera inscribirte en el programa de Certificación Profesional de Soporte de TI de Google + Coursera.


Grasshopper App


3. ¿Cómo puedo obtener la aplicación?



4. ¿Qué debo hacer si quiero eliminar mi cuenta de Grasshopper?


Envía un correo electrónico a grasshopper-support@google.com y el equipo de soporte te ayudará a eliminar tu cuenta.


26 de marzo de 2018

StackOverflow: ya están disponibles los resultados de la encuesta anual de desarrolladores 2018

The Mosted - App de noticias
StackOverflow acaba de publicar los resultados de la encuesta anual de desarrolladores para este año 2018. La encuesta ha tenido lugar el pasado mes de enero y han participado más de 100.000 encuestados de todo el mundo, por lo que se trata de la encuesta más amplia y completa en el ámbito del desarrollo de software.


Los resultados reflejan tendencias de la comunidad de desarrolladores como cuales son los lenguajes más queridos y los más temidos, que herramientas de trabajo usan a diario, preferencias laborales y temas de carácter novedoso como la inteligencia artificial o la ética en la codificación.

Developer Survey 2018 - StackOverflow

¿Qué es StackOverflow?


Stack Overflow es una plataforma que lleva una década siendo el mayor referente para el mundo de la programación.

Este portal es utilizado por una comunidad de desarrolladores informáticos para encontrar soluciones a problemas de programación en diferentes lenguajes.

El uso del sitio web es muy sencillo: el usuario se registra, hace pública su pregunta, y recibe las respuestas.

Las respuestas son publicadas por los miembros de una comunidad determinada o por otros usuarios con las mismas experiencias que encontraron solución al problema planteado.

Todos los usuarios pueden votar por las preguntas y por sus respuestas, cuando se vota por una pregunta, el usuario puede calificarlas como más relevante o menos relevante; por otra parte, cuando se vota por las respuestas, éstas pueden ser más acertadas o menos acertadas.

Cada mes, cerca de 50 millones de personas visitan StackOverflow para aprender, compartir y construir sus carreras.
Se estima que 21 millones de estas personas son desarrolladores profesionales y estudiantes de nivel universitario.

Cada año desde 2011, Stack Overflow ha preguntado a los desarrolladores sobre sus tecnologías favoritas, hábitos de codificación y preferencias de trabajo, así como también sobre cómo aprenden, comparten y suben de nivel o escalafón profesional.

Algunas conclusiones de los resultados de este año


  • DevOps (metodología para creación de software) y el aprendizaje automático son tendencias importantes en la industria del software actual. Los idiomas y marcos asociados con este tipo de trabajos van en aumento, y los desarrolladores que trabajan en estas áreas obtienen los salarios más altos.
  • Los desarrolladores son, en general, optimistas sobre las posibilidades que ofrece la inteligencia artificial, pero no están de acuerdo sobre cuáles son los peligros de la IA.
  • Python ha aumentado en los rangos de lenguajes de programación en nuestra encuesta, superando a C# en popularidad este año, al igual que superó a PHP el año pasado.
  • Las mujeres dicen que sus mayores prioridades son la cultura de la compañía y las oportunidades para el desarrollo profesional, mientras que los hombres dicen que sus mayores prioridades son la remuneración y el trabajo con tecnologías específicas.

Lenguajes de programación, scripting y marcado


JavaScript
  • 69.8%
HTML
  • 68.5%
CSS
  • 65.1%
SQL
  • 57.0%
Java
  • 45.3%
Bash/Shell
  • 39.8%
Python
  • 38.8%
C#
  • 34.4%
PHP
  • 30.7%
C++
  • 25.4%
C
  • 23.0%
TypeScript
  • 17.4%
Ruby
  • 10.1%
Swift
  • 8.1%
Assembly
  • 7.4%
Go
  • 7.1%
Objective-C
  • 7.0%
VB.NET
  • 6.7%
R
  • 6.1%
Matlab
  • 5.8%
VBA
  • 4.9%
Kotlin
  • 4.5%
Scala
  • 4.4%
Groovy
  • 4.3%
Perl
  • 4.2%


Framework, librerías y herramientas


Node.js
  • 49.6%
Angular
  • 36.9%
React
  • 27.8%
.NET Core
  • 27.2%
Spring
  • 17.6%
Django
  • 13.0%
Cordova
  • 8.5%
TensorFlow
  • 7.8%
Xamarin
  • 7.4%
Spark
  • 4.8%
Hadoop
  • 4.7%
Torch/PyTorch
  • 1.7%


Bases de Datos


MySQL
  • 58.7%
SQL Server
  • 41.2%
PostgreSQL
  • 32.9%
MongoDB
  • 25.9%
SQLite
  • 19.7%
Redis
  • 18.0%
Elasticsearch
  • 14.1%
MariaDB
  • 13.4%
Oracle
  • 11.1%
Microsoft Azure
  • 7.9%
Google Cloud Storage
  • 5.5%
Memcached
  • 5.5%
Amazon DynamoDB
  • 5.2%
Amazon RDS/Aurora
  • 5.1%
Cassandra
  • 3.7%
IBM Db2
  • 2.5%
Neo4j
  • 2.4%
Amazon Redshift
  • 2.2%
Apache Hive
  • 2.2%
Google BigQuery
  • 2.1%
Apache HBase
  • 1.7%


Plataformas


Linux
  • 48.3%
Windows Desktop or Server
  • 35.4%
Android
  • 29.0%
AWS
  • 24.1%
Mac OS
  • 17.9%
Raspberry Pi
  • 15.9%
WordPress
  • 15.9%
iOS
  • 15.5%
Firebase
  • 14.5%
Azure
  • 11.0%
Arduino
  • 10.6%
Heroku
  • 10.5%
Google Cloud Platform/App Engine
  • 8.0%
Serverless
  • 4.5%
Drupal
  • 3.0%
Amazon Echo
  • 2.9%
Windows Phone
  • 2.7%
SharePoint
  • 2.7%
ESP8266
  • 2.2%
Salesforce
  • 2.2%
Apple Watch or Apple TV
  • 1.9%
IBM Cloud or Watson
  • 1.4%
Google Home
  • 1.4%
Gaming console
  • 1.3%
Mainframe
  • 0.8%


Podéis visualizar todos los datos de la encuesta en el siguiente link:

Developer Survey Results 2018




25 de marzo de 2018

The Mosted - la app de noticias para tu smartphone

The Mosted - App de noticias
Antes de comenzar, en caso de que no hayáis oído hablar de ello antes, Flutter es una SDK de aplicaciones de Google, que sirve para crear "aplicaciones móviles modernas". Está en fase beta desde Marzo, pero viene con una gran documentación y herramientas, incluyendo algunas aplicaciones de producción ya en el mercado.


Por Antonio Bernardino, CTO y Cofundador de The Mosted.

¿por qué los desarrolladores de aplicaciones nativas deben considerar seriamente Flutter?


Soy un desarrollador aficionado, y acabamos de lanzar nuestra aplicación usando Flutter.

Solo para que entendáis que tipo de aplicación hemos lanzado, se trata de un agregador de noticias con el cual puedes seleccionar tus propios intereses y fuentes preferidas, y leer todas las noticias al instante, en un solo lugar.

Cierto es que existen apps similares en el mercado, pero nos diferenciamos por la sencillez del funcionamiento y por los elementos sociales que iremos incorporando en los próximos meses.

Queremos unificar el agregador con una plataforma social que permita a los usuarios no solo leer noticias, sino también compartir y generar experiencias sociales a través de ellas.

La hemos llamado The Mosted y está disponible tanto en Android como iOS.

De vuelta con Flutter... Deciros que desarrollar en Flutter fue una experiencia tan placentera que debía compartirla con la comunidad.

Me llevó alrededor de 15 días codificar la mayor parte de la app, incluido el tiempo que le dediqué a aprender a usar la SDK.

En los intentos previos, desarrollamos aplicaciones nativas en Android / Java e iOS / Swift 4, que estaban siempre en diferentes fases de desarrollo. Pero Flutter no solo nos ayudó a construir rápido, sino más importante aún, nos ayudó a tener la apps en los diferentes sistemas operativos al mismo nivel. ¡Fue muy divertido! No hace falta decir que ahora ya soy fan de Flutter.

La primera vez que me topé con Flutter fue en Enero de este año. Estaba todavía en Alpha. No profundicé demasiado, y mentalmente lo metí en la misma categoría que React Native, que también está bien. Pero este mes pasado, Google la pasó a Beta y me decidí a echarle un vistazo.

Solo a simple vista, la comparación con React Native era bastante obvia. A nivel conceptual, las similitudes comienzan y terminan con el modelo de programación reactiva. No obstante, en mi humilde opinión, Flutter da un salto generacional en términos de ideas clave que ha implementado. Como desarrollador, también intenté usar React un par de veces, pero realmente nunca me gustó demasiado porque usa mucho HTML.

Estoy acostumbrado a programar en Java y Javascript y sinceramente pienso que Dart no ofrece mucha ventaja sintáctica, los formatters son horribles y los code-styles un poco confusos. Si te gustan los estilos claros, te aconsejo probar Golang, lo uso desde hace 4 meses y es el lenguaje más claro y fácil de aprender del momento.

Donde realmente destaca Flutter es un par de funcionalidades como los estilos compartidos (las apps son totalmente iguales en Android y en iOS) y en el Hot-reload, que para mí es todavía mejor que el de Java, derivado de la forma en que almacena los estados y que te permite cambiar todo el design y visualizarlo en 2 segundos.

La advertencia es que Flutter es nuevo, por lo que existen problemas y limitaciones y, por supuesto, problemas desconocidos que pueden surgir. No obstante, muchas limitaciones son un objetivo claro para el equipo de desarrollo de Flutter y estoy seguro que se irán resolviendo rápidamente.


Sobre The Mosted


The Mosted es una startup de Barcelona que ha desarrollado una plataforma que recoge en tiempo real las noticias publicadas por los principales medios de comunicación y las categoriza por intereses.

Esta plataforma funciona además con un algoritmo que a través de tecnología machine learning y sentiment analysis ofrece al usuario contenido relacionado de forma que quien usa la app solo encuentre contenido de su interés sin información intrusiva ni contenido que no le interese.

Una de las apuestas principales del proyecto es luchar contra las noticias falsas, que es uno de los grandes problemas de la industria de la información actualmente, que a través de la tecnología desarrollada y la participación de usuarios se podrá limitar.

Además, la compañía organiza eventos de forma gratuita en colaboración con espacios de Coworking en Barcelona.

Sus speakers o partners han sido tanto empresas locales como Vive Virtual (realidad virtual) o también a nivel internacional con la CNN (Reino Unido).

El próximo speaker será un Software Engineer de una de las grandes tecnológicas que dará un speech "live" desde San Francisco sobre Coches Autónomos y la industria en general.

El evento tendrá lugar el próximo martes 27 de Marzo a las 18:45 en Spaces Barcelona 22@, el centro de innovación de Barcelona:

El Coche Autónomo de Silicon Valley . Público · Organizado por The Mosted

Información sobre el evento


Conoce todo sobre el Coche Autónomo y lo que las grandes tecnológicas de Silicon Valley se traen entre manos:

- ¿Qué es un Coche Autónomo? ¿Cómo funciona? ¿Como sabe si un peatón pretende cruzar o está solamente parado? ¿En qué se diferencia las fases de perception y motion planning?

- ¿Quiénes son los big players de la industria? ¿Es Tesla el pionero del mercado? ¿Está construyendo Apple su propio coche autónomo? ¿Cómo se diferencian el Model S (Tesla) del Waymo (Google) o del coche autónomo de Uber?

- ¿Cuál es la proyección de la industria de aquí al 2025?

Coche autónomo


10 de marzo de 2018

Inscripciones abiertas para Code Jam 2018

Únete a la comunidad Code Jam y enfréntate a una serie de problemas algorítmicos para tener la oportunidad de ganar el título de Code Jam Champion en la final de Toronto (Canadá) y obtener un premio valorado en 15.000 dólares.
La ronda de clasificación comienza el próximo 6 de abril a las 23:00 UTC.


¿Qué es Code Jam?


Code Jam es una iniciativa organizada por Google que reta a los programadores de todo el mundo a que pongan a prueba sus habilidades resolviendo múltiples rondas de problemas de algoritmia.
Se permite el uso de cualquier lenguaje de programación y entorno de desarrollo para dar solución a estos problemas.

Esta competencia de programación internacional comenzó en el año 2003 como un medio para identificar a los mejores talentos de ingeniería para un empleo potencial en la compañía Google y consiste en un conjunto de problemas algorítmicos que deben resolverse en un período de tiempo fijo.

A partir de 2015, Google también lleva a cabo Distributed Code Jam (Code Jam Distribuida), con el foco en algoritmos distribuidos. Este se ejecuta en paralelo con el Code Jam regular, con su propia calificación y ronda final, para obtener un premio máximo de $10,000, pero solo está abierto para las personas que clasifiquen a la ronda 2 de Code Jam (hasta 3000 personas).




Resultados de Code Jam 2017


Los 26 mejores concursantes lucharon durante cuatro horas extenuantes de competencia en Dublín, Irlanda, pero finalmente Gennady Korotkevich de Bielorrusia se llevó el título de Code Jam 2017 World Champion y el premio de $15,000.


Finales Mundiales de Code Jam 2017


Transmitido en tiempo real el 11 de agosto de 2017.
Tiempo de grabación: 5:48:34



Aprende más



Code Jam en las redes sociales



Otras competiciones de codificación de Google


  • Kickstart para estudiantes universitarios que buscan desarrollar sus habilidades de codificación y seguir una carrera en Google.
  • Código Hash para estudiantes de África, Europa y Oriente Medio que buscan trabajar en equipo con problemas reales de Google.




20 de noviembre de 2017

Bravent y Microsoft promueven el desarrollo de la primera aplicación móvil colaborativa para la Asociación Española Contra el Cáncer

El cáncer sigue siendo una de las principales causas de mortalidad en el mundo. En concreto, en España se diagnostican 247.00 casos nuevos cada año, y lamentablemente, esta cifra sigue en aumento.
El diagnóstico de cáncer produce en la mayoría de las personas una mezcla de confusión, temor, dudas, y mucha soledad.


La atención inmediata a pacientes diagnosticados y familiares se hace absolutamente necesaria para evitar problemas mayores como la depresión o la pérdida de autoestima.

Actualmente, los pacientes o familiares que requieren de esta atención, tienen que acudir presencialmente a los Centros de la Asociación, llamar por teléfono o contactar a través de la web. Un trabajo que cada vez se hace más duro para la AECC porque cada vez hay más personas que demandan estos servicios.

La solución: el desarrollo de una app colaborativa

Estudiando estas necesidades, Bravent y Microsoft pusieron al servicio de la Asociación Española Contra el Cáncer sus conocimientos tecnológicos para el desarrollo de una aplicación móvil que pudiera poner en contacto directo a los pacientes y familiares que solicitaban ayuda con los voluntarios formados por la Asociación.

Esta app, permitirá llegar a más personas, sobre todo jóvenes, que utilizan el móvil como principal dispositivo para comunicarse, y optimizará el proceso de comunicación entre voluntario y paciente, haciéndolo mucho más efectivo y rápido a través de la creación de un chat.

Un proyecto de todos

"Queremos que en este proyecto participe toda la Sociedad ya que, creemos que es un problema que nos afecta a todos, directa o indirectamente". Dice la responsable de MKT de Bravent.

Es por esto que se ha publicado como Proyecto OpenSource para que todo aquel que tenga conocimientos de programación pueda poner su granito de arena y subir su parte de código al repositorio GitHub que se ha creado para ello.

El desarrollo se ha comenzado con la herramienta Xamarin, lo que permitirá estar disponible en las tres plataformas principales del mercado (iOS, Android y Windows Phone), para así llegar al máximo número de usuarios.

Además, para la gestión del chat se está empleando BOT framework de Microsoft con la idea de utilizar los servicios cognitivos de Micrsofot en un futuro cercano.

"Animamos a todos aquellos que quieran aprender o que tengan unos conocimientos mínimos de programación a que participen en este proyecto. Necesitamos más voluntarios para crear la aplicación que ayudará a miles de personas a pasar por el duro trance de la enfermedad del cáncer". Expone la responsable de MKT de Bravent.

Participa en el desarrollo de la primera app colaborativa para AECC: http://info.bravent.net/app-contra-el-cancer





23 de octubre de 2017

Google pone fecha límite al uso de reCAPTCHA en su primera versión

Y remite la información a través de un email del tipo
"usted está recibiendo este correo electrónico porque está registrado como administrador del sitio web de reCAPTCHA, y su sitio web sigue utilizando reCAPTCHA v1, versión que dejará de funcionar a partir del 31 de marzo de 2018".


¿Qué es reCAPTCHA?


reCAPTCHA es un servicio gratuito que protege a los usuarios de Internet del spam y el abuso en sus sitios web, siendo el proveedor de CAPTCHA más utilizado en el mundo.

Utiliza técnicas avanzadas de análisis de riesgos para diferenciar a los humanos y los bots, impidiendo que el software automatizado participe en actividades abusivas en tu sitio web y permitiendo, al mismo tiempo, que los usuarios validados pasen con facilidad.

Con la nueva API, un número significativo de usuarios humanos validados superarán el desafío reCAPTCHA sin tener que resolver un CAPTCHA.



¿Cómo funciona?


La nueva version (reCAPTCHA v2) elimina completamente el recuadro con números y/o letras que estábamos acostumbrados a ver.



Esta tecnología analiza cómo han interactuado los usuarios en un sitio web, cómo hacen clic en el botón 'enviar formulario', cómo mueven el ratón, su comportamiento de navegación, etc.

De esta forma podremos acceder a un sitio web sin ser conscientes de que hemos pasado el filtro de la Inteligencia Artificial(IA) de Google y sin necesidad de detener la navegación para demostrar que no somos robots.

El nuevo CAPTCHA está disponible para todo tipo de webs y navegadores, y si la IA tiene dudas, mostrará un rompecabezas con imágenes en pantalla para validad la autenticidad del usuario.

reCAPTCHA se presenta en forma de widget que puedes añadir fácilmente a tu blog, foro, formulario de registro, etc.



¿Cómo integrar la api en tu blog o página web?


En la página para desarrolladores, Developer's Guide, se explican los pasos a seguir para su implementación.

Para comenzar a utilizar reCAPTCHA, tenemos que registrarnos para obtener un par de claves API para nuestro sitio.

El par de claves consiste en una clave pública del sitio y una clave secreta:

  • la clave pública se utiliza para invocar el servicio reCAPTCHA en tu sitio web o aplicación móvil.
  • la clave secreta autoriza la comunicación entre el backend (servidor web) de tu aplicación y el servidor reCAPTCHA para verificar la respuesta del usuario.
A continuación, elegimos el tipo de reCAPTCHA:

  • reCAPTCHA v2: requiere que el usuario haga clic en una casilla de verificación que indica que el usuario no es un robot.
  • Invisible reCAPTCHA: no requiere que el usuario haga clic en una casilla de verificación, sino que se invoca directamente cuando el usuario hace clic en un botón existente en su sitio o puede invocarse a través de una llamada API de JavaScript.
  • reCAPTCHA Android Library: esta librería proporciona APIs nativas de Android que puedes integrar directamente en una aplicación.
Por último, especificamos los dominios autorizados o nombres de paquetes (packages) para el uso de estas claves API.

Página de administración de claves API del servicio reCAPTCHA: Manage your reCAPTCHA API keys

Si ya estás registrado y quieres actualizar el servicio a la nueva versión, accede al panel de administración y genera un nuevo par de claves para tu dominio.

En el lado del cliente hay que añadir:

  • la librería javascript <script src='https://www.google.com/recaptcha/api.js'></script>
  • el siguiente elemento html <div class="g-recaptcha" data-sitekey="API_KEY"></div> dentro del formulario, dónde sustituimos el valor API_KEY por la clave pública del sitio.
El action del formulario html nos dirige hacia una página de servidor dónde se procesan los datos enviados por el cliente.

  • en la página de servidor, hay que sustituir el valor API_SECRET por la nueva clave privada.
Si quieres incorporar el captcha en tu página de WordPress, tan sólo tendrás que acceder a la siguiente página oficial e instalar el plugin siguiendo las instrucciones detalladas: https://es.wordpress.org/plugins/google-captcha/

API de Android de reCAPTCHA


Google presenta la nueva API de Android de reCAPTCHA (Making the Internet safer and faster: Introducing reCAPTCHA Android API).

Como parte de la API de Google SafetyNet, mitiga los riesgos en los dispositivos móviles a través de una seguridad mejorada y utiliza la última tecnología Invisible reCAPTCHA para optimizar la experiencia del usuario.