Año nuevo: proyecto nuevo. Estoy seguro de que sois muchos los que estáis empezando un sideproject como propósito para el nuevo año. A la hora de elegir la mejor idea, si no queréis picar un montón de código, os vendrá bien saber que APIs tenéis disponibles para juntarlas, remezclarlas y sacar alguna funcionalidad chula.
Es muy importante saber qué herramientas tienes disponibles, y es un conocimiento que además os puede venir muy bien para enfocar mejor esos momentos de desorden en el que vienen un montón de ideas a la cabeza.
Pero, no corráis a poneros a buscar en Google «API pública», por favor. Hay maneras de optimizar el tiempo para que todo lo que dediquéis sea de experimentación y absorción de conocimiento. Además, si optáis por la primera opción, es muy posible que os encontréis que cada una está definida y documentada como su padre y su madre han creído oportuno: puede ser una auténtica locura.
Hay gente que ya se ha encargado de juntar un montón de definiciones de APIs públicas, de tal modo que tu las tengas a mano y ordenadas. Además, así puedes acceder a todas de una misma forma y tener la documentación de una forma más estandarizada.
Para cacharrear con ellas puedes hacerlo como prefieras: desde la web; con un sdk para tu plataforma preferida; o incluso desde la línea de comandos. Sin embargo, si me pedís la recomendación más cómoda (aunque por el momento es la que menos APIs tiene disponibles) yo optaría por una colección para el postman, que es una extensión de Chrome que me tiene enamoradito desde hace años.
Ánimo, elegid vuestro sabor preferido y dadle vida a ese nuevo proyecto.
Estamos viviendo un boom (o burbuja) de las cryptomonedascomparable a la de la fiebre del oro. Tiene algunas similitudes, ya que cualquiera se puede poner a minar y conseguir cryptomonedas «gratis». Veremos todos los detalles de esta práctica centrándonos en conseguir Ether, la cryptomoneda de Ethereum.
Ethereum es una plataforma que utiliza una arquitectura blockchain. En estas, como ya explicamos cuando hablamos de cryptojackingy de las diferencias entre Prueba de trabajo y Prueba de confianza (o interés), cada bloque guarda el hashdel anterior como identificador único, y que al estar encadenados todos los bloques sea, en la práctica, imposible alterar los datos pasados. Para obtener ese hash hay que realizar muchos cálculos, por eso al propietario de la máquina que consigue obtenerlo en primer lugar, la plataforma le da una recompensa (actualmente 5 ETH).
Por tanto, es fácil, si tu quieres obtener Ether sin aflojar la cartera, tan sólo tienes que convertirte en minero poniendo tu ordenador a trabajar por ti. ¡Fa-ci-lí-si-mo!
Veamos, ¿cómo podemos poner a nuestro equipo a trabajar en ello?
Lo primero es obtener geth(Go Ethereum). Es la consola/aplicación de consola oficial. Si tienes instalado el Walletde Ethereum o Mist, ya la tendrás instalada y configurada, ya que es por ejemplo la encargada de sincronizar tu sistema con toda la red de Ethereum para que tengas los mismos bloques que el resto.
Una vez montado sólo tienes que ejecutar el siguiente comando:
geth --etherbase '0xHashDeTuWallet' --mine
Ten en cuenta que si ya tenías geth configurado por tener el Wallet, te bastará solo con usar el argumento «–mine» porque ya tendrás establecido tu coinbase.
Otra opción que tienes es iniciarlo en modo consola y luego arrancar el miner:
geth console
...
>miner.start()
Yo prefiero esta modalidad ya que nos permite consultar nuestro hashratey la dificultad de lo que ha costado conseguir el último bloque, con lo que podremos echar una estimación de cuanto tiempo tardaremos (estadísticamente) en conseguir cerrar uno de los bloques y llevarnos nosotros la recompensa:
Comprobación de tiempo para obtener un hash
Como se puede comprobar en la imagen, en mi máquina se tardarían más de 87.000 días en obtener un hash.
¿Está eso bien? ¿Qué ocurre aquí?
El comando geth no está preparado para usar GPUs, por lo que usa la CPUy por mucho que mi máquina sea un maquinón, mis 8 cores no están a la altura de ninguna GPU.
Para solucionarlo hay dos opciones sencillas: una es usar una implementación en C++ de la definición de Ethereum, la cual sí está preparada para usar GPUs pero que oficialmente no ha sido lanzada; la otra opción (y mi preferida por seguir usando el software verificado) es usar otra aplicación para las operaciones que se conecte a geth para que se encargue del resto.
Para esta última opción hay que poner a geth a escuchar:
geth --rpc --rpccorsdomain localhost
Y luego arrancar ethminercon la opción que queramos:
G usa las tarjetas que estén habilitadas para funcionar con OpenCL.
U usa las tarjetas que estén habilitadas para funcionar con CUDA.
X usa todas las tarjetas.
No vamos a entrar en grandes detalles, pero os contaré que en mi caso tengo dos tarjetas. La NVIDIAdedicada es CUDA y la Intel que usa memoria compartida es OpenCL. Podría parecer que lo mejor es usar la opción «-X» y poner todas a funcionar, pero es un error ya que los recursos del sistema son limitados y entonces se pelearán por ellos… este es un caso de en los que menos es más.
En mi equipo usando una tarjeta dedicada con 4GB se obtiene que estadísticamente tardaría aproximádamente 1500 días en obtener esos 5ETH. Seguro que algún ludópata ya está echando las cuentas, pero la verdad es que con el cambio de 626€ actual, esto supone que se estarían ganando unos 2€ al día. No está mal sin hacer nada ¿verdad? Pero hay que contar que el consumo eléctrico de la máquina (en mi caso) se duplica, que probablemente dentro de 1500 días no se pueda minar con la máquina que estés minando hoy, o que puede que 1ETH dentro de 4 años valga mucho más o mucho menos… Echad vuestras propias cuentas y decidid si vais a jugar o no, porque esto es una lotería y aunque puede que tengáis suerte, las probabilidades están en vuestra contra.
¿No hay ninguna opción de empezar a ganar dinero desde ya?
Sí, claro que la hay. Te puedes unir a un poolque en cierto modo te paga por cada hash prometedor que le mandas independientemente de que sea exitoso o no. Es como si repartiese las ganancias que se generan entre todos los que están trabajando con él.
Podéis estudiar que pool os da más. Yo usé ethermine.orgy ponerlo en marcha es muy sencillo. Sólo tenéis que bajaros un programa, modificar el start.bat para establecer el servidor que os quede más cerca y vuestra cartera y echarlo a andar:
Mi primera experiencia con esto fue que tras tres horas había conseguido ganar 0.00026ETH que al cambio del momento eran unos 0.10€. Habrá quien diga que el valor en euros no vale, ya que mientras escribo estas líneas esa misma cantidad de Ether vale aproximadamente 0.16€, pero podemos verlo de otro modo: cuando pasé Ether que había comprado en Coinbasea mi cartera, el feede la transacción fue de casi el doble de lo que saqué minando durante 3 horas.
Esto es lo que pasa con el Ether, pero con Bitcoiny otras cryptomonedas populares pasa más de lo mismo. Cada uno puede sacar sus propias conclusiones y sus propias cuentas, pero creo que a día de hoy, por mucha burbuja que haya, no vale la pena ponerse a minar cryptomoneda, a no ser que salga una nueva y os aventuréis a ser uno de los primeros mineros igual que aquellos que corrían de un lado a otro de California buscando la próxima veta.
Por estas fechas, algunas empresas que tradicionalmente son más reacias a permitir el trabajo en remoto, reducen la presión y son más laxas con sus trabajadores. Si es vuestro caso y queréis demostrar que se puede trabajar igual o mejor, aquí tenéis unas herramientas que os pueden facilitar la vida:
Conferencias
En las empresas grandes se suelen usar los míticos Skype y Webex, aunque personalmente creo que Hangouts funciona muy bien de un modo muy sencillo. Sin embargo, no siempre vamos a tratar con gente que sepamos lo que tiene instalado, ni siquiera desde qué dispositivo se conectará. Para estos casos, mi recomendación es Appear.in la cual es de una sencillez brutal.
Grabación de vídeo
A veces una demo vale más que mil palabras. Si quieres grabar tu pantalla mientras explicas algo y no quieres estar pegándote con softwares complicados, mi recomendación es que uses Loom.
Control de tiempos
Medir lo que se tarda en hacer las cosas es una de mis obsesiones, como pueden dar fe las personas que han trabajado a mi cargo. Lo que no se mide no se puede mejorar y hay que intentar ser siempre mejores. Cómo medirlo es un tema complicado, puede que te valga simplemente una Google Sheet o puede que necesites algo más avanzado. En estos momentos yo estoy usando dos herramientas distintas: una que mide lo que hago de un modo pasivo (no tengo que interaccionar con ella para que mida), llamada ManicTime; y otra activa que sirve además para control de proyectos y clientes de un modo básico pero efectivo y se llama Toggl.
Con estas herramientas, estoy seguro de que vuestras jornadas de trabajo en remoto serán mucho más sencillas y productivas, y quién sabe, tal vez convenzáis a vuestros responsables para que os dejen ponerlo en práctica más a menudo.
Proyectos a medida, selección de personal IT, formación especializada, y horas sueltas para ayudarte con tus productos y la transformación digital de tu empresa.
Rubber
Como algunos ya os habéis percatado, ha habido cambios y no me refiero a los de la nueva portada de esta web o al cambio de mascotas quitando a Shi y a Sampi y poniendo a Rubberr, no. Me he hecho autónomo (otra vez) y toca explicaros qué servicios os ofrezco.
Los servicios principales son tres:
Proyectos a medida. Cuéntame tus problemas y yo te diré como los podemos resolver con tecnología. Mi dilatada experiencia resolviendo problemas juntando unos y ceros durante la que he hecho aplicaciones de escritorio, web, móvil y otros dispositivos; diseñado grandes sistemas distribuidos; gestionado proyectos de principio a fin y mucho más en una gran variedad de negocios, me habilita para enfrentarme a cualquier cosa que esté complicando el trabajo en tu empresa. Todo tiene solución y yo la encontraré. No sólo te haré un presupuesto acorde a lo que necesitas, sino que me encargaré de todo para que los imprevistos no supongan un fracaso y se resuelvan cuanto antes. De este modo podrás tener tu solución implantada en el tiempo que necesitas sin preocupaciones que te hagan perder el norte.
Selección de personal técnico. A la mayoría de las PYMES les cuesta encontrar a personal técnico, y más si no son tecnológicas. Además las condiciones que ofrecen las consultoras de RRHH no suelen estar adaptadas a las necesidades de las PYMES. Por mi parte, he liderado el proceso de contratación de decenas de personas y he colaborado en la contratación de otras tantas. Si necesitas contratar algún perfil técnico y no encuentras a nadie o no sabes por dónde empezar, yo me encargaré de todo para darte a elegir entre algunos candidatos que se amolden a tu empresa. El coste de este servicio no es un porcentaje de su sueldo, ni algo que tengas que pagar a toca-teja, son 300€/mes durante 18 meses siempre y cuando esa persona siga siendo parte de tu plantilla.
Formación. Es muy difícil mantener a tu equipo al día, que sepan de los últimos avances en inteligencia artificial, blockchain, frameworks, tecnologías cloud, arquitecturas distribuidas, o métodos de gestión (lean, scrum, kanban, …). Además los proyectos surgen cuando menos te lo esperas, por lo que necesitas que alguien que ya esté al día les ponga las pilas. Plantéame qué necesitas que aprendan, para que yo pueda montarte un programa de formación especializada a medida.
Pero esto no es todo, en el desarrollo de los productos de tu empresa o en el proceso de transformación digital que tu empresa está llevando a cabo (y si no es así, debería), necesitarás apoyo de alguien que sepa de tecnología para que colabore en labores muy diversas de asesoramiento y ejecución. Por esto puedes contratarme por horas a un precio que va desde los 75€ la hora suelta, hasta los 52.5€ (30% de descuento) cuando compras packs de más de 60h.
Si no estás seguro de que sea la persona adecuada te sugiero que le eches un vistazo a las recomendaciones que antiguos compañeros, subordinados, jefes y clientes me han dejado en LinkedIn y que puedes ver en el bocadillo que tendrás en la esquina inferior derecha de esta página; o, si lo prefieres puedes ponerte directamente en contacto conmigo para que charlemos un poco de lo que necesitas.
Así como Shi y Sampi tenían un significado para mi (que me guardaré para cuando tomemos una caña celebrando el éxito de alguna de nuestras colaboraciones), Rubber también tiene un significado, y es que en el mundo tecnológico los patos de goma siempre han estado ahí para ayudarnos a resolver los problemas. No lo pienses más, y déjame ayudar a tu empresa hasta que podáis volar sólo con la ayuda de unos patos.
Nowadays, a lot of people is talking about a «conspiracy» that Facebook is denying constantly. Is Facebook listening to us? What can we do to avoid this? Let’s see what are the questions and the answers:
What is people saying?
People say that Facebook apps installed on our mobiles are recording our conversations, analyzing what we say and using this to target their ads.
What is the response from Facebook?
Facebook denies all of those accusations.
Is it technically possible?
Well, record all conversations and send them requires a lot of bandwidth. We are not talking about Echelon, neither recordings made by Google Now assistant. We are talking about all the conversations you maintain all the time, all the dialogues from the TV shows you are seeing and conversations from people near you.
What is the bandwidth you bought from your provider? 1Gb? 3Gb? 10Gb? It doesn’t matter. It is not enough to listen Spotify constantly, so it is not enough to send recordings with your full conversations.
Some people are saying that they record the conversations, analyze those using your mobile phone resources and get keywords that they can send to Facebook servers.
This theory is better but battery consumption… I don’t know.
Does it really matter?
Facebook has all your written conversations, it is the owner of Facebook, Messenger, WhatsApp, Instagram, … It also owns your photos, videos, relations, … Facebook knows who is the first person who you talk every day, also knows what websites you visit and also the visits from your mom or your grandpa.
Facebook is not the only one who knows. Did you visit the link about Google records above? It’s the tip of the iceberg.
So it doesn’t matter if Facebook is listening and recording you. They know everything about you. All great companies know everything about you, so it doesn’t matter.
The only way you can follow to avoid this is become offline, at least offline from their apps and services. Are you prepared to be disconnected from your friends and family? If not, you can’t be safe.
Cuando se ofertan puestos etiquetándolos con roles de Scrum, implícitamente se están asignando unas responsabilidades y excluyendo otras. En muchos sitios, aunque digan que hacen Scrum, no lo hacen y mezclan las cosas. Veamos qué papel desempeña cada uno de los roles de Scrum, para poder identificar de un modo sencillo en qué sitios se aplica bien y en qué sitios no.
Para que nadie se lleve a equívocos, aclararé que en mi opinión Scrum no es la panacea, que no es lo más adecuado en todos los casos, y cada equipo y cada empresa es un mundo. Sin embargo, sí que creo que para hacer Scrum hay que aplicarlo como mandan los cánones, y si no no pasa nada, pero no será Scrum. Será otra cosa.
Product Owner: el Product Owner puede verse como el bus de comunicaciones. Es la representación de los clientes, sponsors y otros stakeholders dentro del proceso de desarrollo. Es quien habla con todos ellos y transmite sus inquietudes al equipo que es quien ejecuta. Es el dueño del Backlog, se encarga de recoger las historias de usuario y establece sus prioridades. Es quien propone qué historias (al establecer su prioridad) deberían de atajarse en el siguiente Sprint. Es quien toma decisiones cuando surgen conflictos, ya sea por decisión propia o porque haya consultado a los stakeholders que corresponda.
Scrum Master: el Scrum Master es el amo del calabozo, ese hombre que aparece dando consejos. Su misión es ser el guardián del método, asegurarse de que se cumplen con las “normas” del Scrum. Es quien se garantiza la forma de las ceremonias, de que no se excedan los tiempos, de que si el Product Owner intenta cambiar el Backlog del Sprint es quien le explica que así no se puede trabajar ni bien, ni rápido.
Equipo: son todas las personas productivas que participan en el proceso de desarrollo. Se auto organizan y autogestionan. Son quienes deciden sobre su proceso y tienen la última palabra sobre todo (al fin y al cabo lo van a hacer ellos), aunque atiendan los consejos del Scrum Master, y trabajen con las limitaciones y objetivos que marque la persona que sea Product Owner.
Hay quien a los stakeholders (clientes, sponsors, etc.) los incluye también, pero estos no participan del proceso de Scrum. En algunos casos participan en las demos, pero lo suyo es que sea el Product Owner el que actúe ahí como una voz única, para asegurarse de que al equipo se le dice una única cosa.
Así, pues, estos son los roles en Scrum. No son otros, son estos y estas son sus funciones, y tienen un motivo. No es bueno que una persona cubra dos roles porque entonces va a empezar a tener conflictos de intereses, y por flexible que sea, el estar cambiándose de sombrero continuamente le pasará factura y no podrá concentrarse en ninguna de las funciones que debe realizar.
Por tanto, si hacéis Scrum, mantendréis esta separación de roles, y si no no pasa nada, pero no estaréis haciendo Scrum, será otra cosa.
This is not a very hard and abstract post, add-ons are something easy, so I hope my explanation to be simple too. It is based on an add-on created by myself that allows any user adding an email to Google Tasks (probably it is more useful than the add-on for MSN Messenger that I created years ago which read received messages with «real» voice). It is a functionality that has been always present on Gmail web client but that is not available on mobile clients.
In order to create a Gmail add-on you need to create a new Google Apps Script project. After that you can add as much scripts as you want to create an interface using Cardsand the functionality to interact with other services, APIs and so.
For instance, in our example the functionality is very basic:
function getContextualAddOn(e) {
var message = getMessage(e);
var subject = message.getSubject();
var permaLink = message.getThread().getPermalink();
var card = CardService.newCardBuilder();
card.setHeader(CardService.newCardHeader()
.setTitle('Save as task'));
var section = CardService.newCardSection();
var button = prepareSend(permaLink);
section.addWidget(button);
section.addWidget(prepareList());
section.addWidget(prepareTitle(subject));
section.addWidget(prepareDueDate());
section.addWidget(button);
section.addWidget(prepareSign());
card.addSection(section);
console.log("Open");
return [card.build()];
}
function getMessage(e){
var accessToken = e.messageMetadata.accessToken;
GmailApp.setCurrentMessageAccessToken(accessToken);
var messageId = e.messageMetadata.messageId;
return GmailApp.getMessageById(messageId);
}
function prepareSend(permaLink){
var action = CardService.newAction()
.setFunctionName("saveTask")
.setParameters({permaLink: permaLink});
return CardService.newTextButton()
.setText("Save")
.setOnClickAction(action);
}
function saveTask(e){
var res = e['formInput'];
var task = Tasks.newTask();
task.title = res["title"];
task.notes = e['parameters'].permaLink;
if(res["due-date"] && res["due-date"] != "")
task.due = res["due-date"] + "T00:00:00Z"
task = Tasks.Tasks.insert(task, res["list"]);
console.log("Saved");
}
function prepareList() {
var response = Tasks.Tasklists.list();
var taskLists = response.items;
var dropdown = CardService.newSelectionInput()
.setType(CardService.SelectionInputType.DROPDOWN)
.setTitle("List")
.setFieldName("list");
if (taskLists && taskLists.length > 0) {
Logger.log('Task lists:');
for (var i = 0; i < taskLists.length; i++) {
var taskList = taskLists[i];
Logger.log('%s (%s)', taskList.title, taskList.id);
dropdown.addItem(taskList.title, taskList.id, i==0);
}
} else {
Logger.log('No task lists found.');
}
return dropdown;
}
function prepareTitle(subject){
return CardService.newTextInput()
.setFieldName("title")
.setTitle("Title")
.setValue(subject)
}
function prepareDueDate(){
var d = new Date();
var dd = new Date(d.setDate(d.getDate() + ( 7 - d.getDay()) % 7));
return CardService.newTextInput()
.setFieldName("due-date")
.setTitle("Due date")
.setValue(dd.getYear() + "-" + (dd.getMonth() + 1) + "-" + dd.getDate())
.setHint("YYYY-MM-DD");
}
function prepareSign(){
var button = CardService.newTextButton()
.setText("@JaviLopezG")
.setOpenLink(CardService.newOpenLink()
.setUrl("https://javilopezg.com/")
.setOpenAs(CardService.OpenAs.OVERLAY)
.setOnClose(CardService.OnClose.RELOAD_ADD_ON));
return CardService.newKeyValue()
.setContent("Developed and maintained by")
.setButton(button);
}
You also have to change script’s manifest. To do this you need to access to the menu «View>Show manifest file». Now you can modify it as you want, following our example you have to replace the content with following lines:
As soon as you save all changes you are ready to publish your add-on. Unfortunately the Gmail add-ons store is not publicly available yet. However, you can get the ID of your add-on and distribute it to your company co-workers in order to allow them install your add on in their gmail accounts. See images below:
Gmail Add-on IDAdd-ons in Gmail settings
I know that it’s frustrating not being able to publish an add-on to all gmail users around the world yet. Anyway, I already have two cool ideas to implement as soon as I was able to distribute it at least to my friends. Something to draw an ordered tree of a conversation thread and an add-on to respond an e-mail with a video in an easy way. And you? What ideas are coming to your head?
🍪 Uso un par de cookies de terceros para que las cosas se vean bonitas y usables. Lee el texto legal.