Acerca de Jose Antonio

Yo soy el que manda aqui... ¿Que pasa?

node.js: no, no y no…

Llevo en esto de la programación desde que tenía 11 años (y ya tengo casi 51) por lo que he tenido que aprenderme muchos lenguajes y trabajar con muchos entornos en mi carrera (Vale, de los 11 a los 18 todo era BASIC, pero luego…). Por poner un ejemplo, aprendí C en 1989 y sigo usándolo a día de hoy ¡Bendita IoT! y siempre he sido partidario de respetar todos los lenguajes y todos los entornos, ya que si alguien se ha tomado la molestia de crear un nuevo lenguaje, bueno, pues por algo será…

Lo que vengo a decir aquí es que no todos los lenguajes, frameworks o entornos sirven para todo y eso es algo que hay que evaluar antes de meterse a implementar un proyecto con todo lo que ello conlleva. Yo, particularmente, he hecho proyectos (que algunos siguen en producción a día de hoy) en casi cualquier lenguaje, desde cy c++ hasta Dart pasando por objective-c (sniff), java, javascript, python, php, swift y cosas más raras con usos más limitados (mira que se han hecho maravillas con ruby y no le encuentro todavía el punto), el caso es que no tengo una especial predilección por ninguno y programo en lo que creo más adecuado para el proyecto… Y aquí viene el tema, si quieres hacer un proyecto que envejezca bien NO LO HAGAS EN NODE

Entendedme bien, el concepto de node es brillante, el tomar un lenguaje construido en base a ñapas, una encima de otra, que tarda decenios en estandarizar las cosas más básicas y que tiene a una legión incansable de programadores generando frameworks y librerías que se pueden medir en frameworks por hora y sacarlo del navegador me parece bien. Hacer un repositorio central del librerías que cualquiera puede utilizar y que permita respetar las dependencias me parece bien también y te permite hacer cosas muy complejas en muy poco tiempo… Eso si, no quieras hacerlas durar en el tiempo…

Yo no tengo muchos proyectos en node (¡Gracias a Dios!) pero os pondré como ejemplo uno que terminé hace tres años… O eso creía yo. Es un proyecto hecho en node para el escritorio, que usa electron como motor (y se han hecho cosas simplemente magistrales con electron, como visual studio code) y unas pocas librerías de criptografía y acceso a blockchain (si, habéis acertado, es una aplicación de criptomonedas). Este proyecto, muy bien programado y probado en 2019 lo dejé aparcado (pero disponible para quien quisiera usarlo) y con el boom de las criptomonedas en 2020 quise volver a usarlo… Pero resulta que no solo ya no compilaba sino que no ejecutaba porque las librerías subyacentes se habían actualizado y sin ningún criterio de compatibilidad hacían que objetos que antes tenían ciertos métodos ahora no los tuviesen o la forma de llamar a las cosas en alguna librerías fuesen distnitas… Bueno, cosas que pasan, me pongo a intentar actualizar las dependencias de esas librerías y a cambiar el código afectado (cosa nada fácil lidiando con un año de cambios en el universo js) y consigo volver a compilar y empaquetar el programa (mediados de 2020)… Dejamos todo funcionando y, como somos gente de pocos recursos y trabajamos lo justo con criptomonedas, no volvemos a tocarlo hasta hoy… Dia en el que me encuentro que una librería de mi sistema no funciona con el electron de antes… Y el electron nuevo ha cambiado cosas fundamentales que me obligaran a cambiar todo el código… Y ya no se si estoy con ánimos para hacerlo.

Y esto es así porque el sistema de npm y node no exigen nada a nadie y hay muchos programadores (muchos más en el mundo js que en el resto del universo conocido) que tienen la santa manía de refactorizar cosas y no pensar en el mantenimiento de lo que se ha escrito sino en la virguería que se conseguirá con la siguiente versión…. Así pues, si queréis crear un sistema mantenible que no tenga que actualizarse cada semana con las últimas librerías y tengas que estar investigando qué es lo que han cambiado los mantenedores de ese paquete, por faor, usa cualquier otra cosa que no sea node

Para un prototipo está bien, para todo lo demás, usa algo distinto.

¿Para qué sirven los bancos?

Hace tiempo que no escribo nada del mundo del emprendedor, pero ahora, más que del emprendedor, me toca hablar del empresario… Porque emprender una aventura es algo emocionante y motivador, pero mantener una empresa es algo que requiere mucho más tesón y resiliencia de lo que nunca te han contado. En esta ocasión vengo a hablaros de un elemento empresarial básico: «los bancos».

Cierta vez que estuve a punto de cerrar la venta de una empresa (más bien un traspaso), la dueña de la empresa que iba a comprar (spoiler, no lo hizo) se preguntaba porqué no teníamos cierto nivel de inversión en la empresa y yo le dije que no teníamos suficientes beneficios para poder hacer inversiones. En ese momento ella me dijo que el dinero no teníamos que ponerlo nosotros, que para eso estaban los bancos. Ahí descubrí que el elemento básico de toda empresa que se precie debería ser un director financiero que pudiese lidiar con los bancos.

Por desgracia en mis empresas no he tenido oportunidad de contratar a un buen director financiero porque estaba demasiado ocupado haciendo buenos productos para mis clientes que, además, nunca he sabido cobrar a su precio y, por tanto, tampoco he tenido demasiado dinero para servicios generales (y por eso llevo 17 años haciendo de hombre orquesta de la empresa)… El caso es que generalmente mi trato con los bancos es bastante breve, no suelo pedir dinero y solo me encargo de mantener la liquidez al nivel que me permite el negocio… Bueno, hasta ahora.

El caso es que pedimos y conseguimos un proyecto de I+D para desarrollar una cerradura inteligente con llaves electrónicas interoperables… Una idea muy ligada a nomorepass y que al CDTI le gustó lo suficiente para aprobarnos la ayuda. Aunque esto de llamarlo ayuda es un poco optimista, el caso es que el CDTI te da un adelanto y cuando terminas el proyecto y te gastas todo el presupuesto, revisa los resultados y si les parece bien te presta el resto del dinero del presupuesto. Es un poco locura, pero si el proyecto es lo suficientemente novedoso y hay mercado puede suponer un empujón interesante. Yo creí que así sería y cometí el tremendo error de solicitarlo, pagar unos carísimos avales a traves de una SGR (ya hablaremos de eso otro día) y contratar a una empresa que nos ayude a conseguir la ayuda y, lo que es peor, poner todo el interés y mis recursos en llevar a término el proyecto.

Estos dos últimos años no han sido los más interesantes para hacer I+D (ni para nada), y los clientes de mi empresa han terminado por ir reduciendo su negocio (al menos con nosotros) y/o retrasando pagos, esto combinado con la inversión que tuvimos que realizar para terminar la cerradura inteligente (nomorekeys se llama por ahora) nos dejó la tesorería temblando… Tanto es así que me vi en la tesitura de buscar financiación, y recordé eso de que los bancos justo dan ese servicio… Pues va a ser que no…

Pedí una línea de crédito (que es una cosa en la que te cobran si no necesitas el dinero y te cobran si lo necesitas, pero que te da la seguridad de poder afrontar pagos extras), no pedí demasiado, 20k que es más o menos el máximo que calculaba que iba a necesitar para poder soportar sin tener que echar a nadie… Y resulta que ahora el banco no da créditos a las empresas si no hay avalistas. ¿¿¡¡!!?? Pero, vamos a ver, ¿No es una empresa? ¿No se supone que pagamos al banco, usemos o no la línea de crédito, precisamente por el riesgo que asume? Da igual que hayas tenido beneficios durante los últimos cinco años, que tengas proyectos aprobados y previsiones de ingresos seguros, el banco no corre NINGÚN riesgo y, lo que es peor, te cobra por no correr riesgos. Entonces, ¿para qué sirven los bancos?

Al final si que he tenido que reducir la plantilla, trago amargo a más no poder en cualquier empresario (de los que se lo curran, no de los que lo heredaron de papá) y, aún así, tendré que seguir buscando fuentes de financiación o inversores ya que aparentemente los bancos ya solo sirven para venderte seguros, alquilarte cosas o ponerte alarmas que nos has pedido (y freírte a comisiones cuando te descuidas)… En fin.

¿Quién es el jefe de los hackers?

La verdad es que esta entrada es un experimento de SEO, dado que el nunca bien ponderado Chema Alonso ha decidido spammear esta cadena de texto para que le redirija a su blog, he querido probar si Google tiene alguna forma inteligente de discriminar la importancia o popularidad de un blog a la hora de incluir una entrada en su índice.

¿Quien es el jefe de los hackers?

Es evidente que no se quien es el jefe de los hackers, si que se que el director de datos de telefónica no lo es y, por lo que he visto, su misión es más dar visibilidad a los problemas de seguridad que intentar arreglarlos.

Si quisieramos, de todas maneras, evitar que los hackers se hiciesen con nuestras contraseñas lo más sencillo sería utilizar un gestor de contraseñas que solo las guardase en uno de nuestros dispositivos, sin copias en la red y con un método seguro y fiable de enviar las credenciales desde el móvil al ordenador (o el sistema que lo necesite), ahora mismo este sistema es nomorepass.

Además, para aumentar la seguridad física en nuestro hogar o en el apartamento que queremos alquilar y darnos todas las garantías, estamos trabajando en una cerradura inteligente de fácil instalación y muy, muy avanzada… Pero de eso hablaremos un poco más adelante.

Cómo hacer que tu casa te reconozca

A ver, en realidad esto ha sonado mejor de lo que realmente es, pero, ¿te gustaría poder decirle a tu casa que estás dentro para que sepa si hay que lanzas una alarma o simplemente saludarte? Pues algo muy similar vamos a poder hacer con home assistant, por lo que te recomiendo que te leas la entrada anterior si quieres continuar con ésta.

Si tienes home assistant ya instalado hay un concepto que puede parecer extraño al principio, pero que es fundamental para lo que queremos hacer, el concepto de «persona». Puedes acceder al menú de personas desde Configuración -> Personas:

Este menú te dará opción a crear todas las personas relevantes para tu casa y te permitirá hacerles seguimiento… Básicamente lo que queremos es saber si están dentro o fuera de la casa para tener esa información disponible para nuestras automatizaciones (o para saberlo cuando nos llega un paquete de Amazon y queremos saber si hay alguien en la casa, por ejemplo).

¿Seguimiento?

Para poder hacer el seguimiento de una persona necesitamos que ésta nos informe de una manera o de otra de su situación con respecto a la casa, eso en home assistant se hace con os device.trackers que son, ni más ni menos, que la parte de código que recibe la información de la situación de un dispositivo. Hay un montón de trackers que os invito a explorar para ver cual es el más adecuado para vosotros. Como mi objetivo es que el seguimiento sea transparente y consuma la menor cantidad posible de datos y energía os voy a proponer dos tackers que, además, son muy sencillos de configurar:

1. Aplicación de home assistant

Tenéis disponible en vuestra tienda favorita la aplicación home assistant que os da acceso remoto a vuestra instalación (bueno, lo de remoto lo veremos en otra entrada, que tiene su miga) y que, además, permite al móvil comunicarse con home assistant para darle datos sobre la localización del dispositivo (y otras cosas como si está cargando o no y la cantidad de carga restante que tiene).

Una vez instalada la aplicación veremos que aparecen entidades nuevas en home assistant y que podremos ponerlas en e interfaz o, como es el caso, utilizarla como sistema de seguimiento para una persona… Para ello solo tenemos que acceder al menú personas, crear la persona si todavía no existe y editarla, lo que nos llevará a una pantalla como esta:

En la parte de «Rastrear dispositivo» veremos que en el desplegable nos aparece un device_tracker con el nombre del móvil donde hemos instalado la aplicación. Lo seleccionamos, grabamos y, a partir de este momento la casa nos tendrá localizados.

2. Usando un tracker bluetooth

Esto está bien, pero igual no queremos que todos los miembros de la familia tengan que instalarse la aplicación móvil, así que buscando otro método para saber si están o no en casa me encontré con que todos en la familia tenemos activo el bluetooth del teléfono (para conectar con los altavoces, los cascos, el coche, o lo que sea…) si eso es así podríamos hacer que la raspberry (que tiene bluetooth integrado) nos localice siempre que estemos a una distancia que permita llegar al bluetooth de nuestro teléfono. Dicho y hecho, para configurar este comportamiento solo hay que usar el bluetooth tracker y poner lo siguiente en el archivo configuration.yml:

device_tracker:
  - platform: bluetooth_tracker

Luego solo tenemos que reiniciar el sistema y automáticamente nos creará un archivo known_devices.yml que contendrá todos los dispositivos bluettoth que ha detectado y permite ponerles nombre y decidir si vamos a seguirlos o no (por defecto sigue a todos los nuevos, por lo que es recomendable cambiar ese comportamiento cuando ya estén detectados todos los dispositivos). Si no aparece vuestro móvil en un rato lo mejor es que pongas el móvil a buscar dispositivos bluetoot para tenerlo activo mientras reinicias home assistant y así te aseguras de que lo detecta.

Una vez detectados los móviles que nos interesa solo tenemos que volver a personas y repetir el mismo procedimiento… A partir de ese momento podremos saber si están en casa o no (o al menos los móviles) y verlo en el interfaz:

Automatiza tu casa

Creí, francamente, que ya había escrito sobre el tema de la domótica en mi blog, pero revisando me he encontrado que no he escrito casi nada sobre el tema, así que comienzo ahora a desvelaros, muy poco a poco, qué es esto de la automatización y cómo puedes controlar tu casa y hacerla más inteligente con un coste ridículo (y aprendiendo un montón).

domótica

Como resumen, la domótica aglutina todo lo que podemos controlar de manera remota 8o programar localmente) en nuestro hogar. Son esas cosas que nos permiten encender la calefacción horas antes de que lleguemos de un viaje, abrir y cerrar persianas sin que estemos o apagar y encender luces cuando se detecta nuestra presencia. Dado que esto es un campo muy amplio, os recomiendo que visitéis webs más especializadas para descubrir el montón de cosas que se pueden hacer. Yo, por mi parte, iré recopilando las cosas interesantes que voy haciendo por si os sirve de algo.

Lo primero…

Para poder «jugar» un poco con la domótica necesitamos algún controlador en el que centralizar todas estas opciones. En mi caso me he decidido por home assistant, que tiene un montón de información en internet y del que disponéis de plugins y librerías para cadsi todo. La instalación es tremendamente sencilla si vamos a utilizar una raspberry pi (recomiendo que sea la 4, pero la 3 también nos serviría igualmente). La guía de instalación para raspberry pi está bastante bien y la podéis encontrar en este enlace.

El proceso consiste, básicamente, en descargarte la imagen de internet, grabar con esa imagen una tarjeta SD y si tenéis conexión por cable simplemente meter la sd en la rasperry, enchufar el cable de red y esperar a que arranque, tendréis el sistema de configuracion en la url http://homeassistant.local:8123/. Si vais a usar wifi desde el primer momento el proceso es un poco más complicado, básicamente consiste en copiar este archivo (modifica a tu gusto el SSID y contraseña) en la particion de boot del SD que acabáis de grabar (en CONFIG/network/) y llámalo my-network:

[connection]
id=my-network
uuid=72111c67-4a5d-4d5c-925e-f8ee26efb3c3
type=802-11-wireless

[802-11-wireless]
mode=infrastructure
ssid=MI_SSID
# Uncomment below if your SSID is not broadcasted
#hidden=true

[802-11-wireless-security]
auth-alg=open
key-mgmt=wpa-psk
psk=MI_CONTRASEÑA_WIFI

[ipv4]
method=auto

[ipv6]
addr-gen-mode=stable-privacy
method=auto

En fin, una vez que tengáis home assistant instalado toca poner los datos tuyos y los del domicilio donde vas a instalarlo y el sistema se encargará de buscar por red las integraciones a las que pueda acceder directamente.

En siguientes entradas veremos aspectos interesantes sobre cómo configurarlo para tener acceso a dispositivos zigbee, a detectar presencia propia o a hacer automatizaciones… Por ahora intentad tener el controlador preparado e id buscando dispositivos para hacer de vuestra casa una casa inteligente.