Acerca de Jose Antonio

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

Saber estar… O cómo los comerciales tienen que tolerar el fracaso

Me acaba de entrar una llamada al teléfono de la empresa, es un comercial de una consultora energética cabreado como una mona porque he aceptado la contra-oferta de Iberdrola cuando ya había firmado con otro proveedor que él trabajaba anteriormente.

Me ha hecho gracia, la verdad, ver que hay gente todavía que no sabe qué es esto del trabajo comercial, que unas veces se gana y otras se pierde, que por muy bueno y simpático que sea el potencial cliente al final son los números y la estrategia de cada uno la que dicta si te contrata o no.

Tengo que reconocerle que a mi también me ha pasado lo de cabrearme cuando un cliente, después de tener todo apalabrado, se iba con otro proveedor por cualquier motivo. A hechos consumados no sirve de nada llamar al cliente para echarle en cara lo poco serio que es o decirle (literal) que van a pagar justos por pecadores porque a partir de ahora van a cobrar por su servicio (no solicitado, por cierto).

En fin, supongo que ya ha dado por hecho que nunca nos vamos a cruzar otra vez y que le merece más la pena desahogarse ante la pérdida económica quemando puentes que algún día pueda necesitar. Porque, digámonos sin tapujos, que un comercial me engañe es lo normal y lo esperado, pero que lo haga un cliente es algo más raro. Un cliente se gana día a día y se pierde solo una vez si se hacen cosas como esas.

¿Tenía oportunidad de venderme otra cosa aprovechando la «culpabilidad» de haberle dejado con la miel en los labios y su comisión por cobrar… Pues si, pero ya es completamente imposible. Ni lo puedo recomendar a nadie (no quiero que me echen en cara que le mando empresas que terminan por abroncar al cliente) y no voy a contratar nada que huela siquiera a la empresa que le mandó a visitarme.

A mi edad ya no estoy por aprender nuevos trucos, el cliente no siempre tiene la razón, pero siempre hay que respetarle, yo respeto a los míos y entiendo sus razones cuando contratan con otros o cuando no contratan conmigo. Eso no les convierte en malas personas ni les amenazo con perjudicar a mis futuros clientes. Le deseo que haya disfrutado de su momento de desahogo y, por mi parte, nada más que esperar que no trate igual a todos sus clientes o terminará con una cartera muy pequeña de ellos.

Yo no soy contrario a hacer una post-mortem con el cliente, así se aprende qué se ha hecho mal, que se podría mejorar y revisar así la forma de presentar los proyectos la próxima vez. En este caso debería haber aprendido a advertir (como si lo hacen con la telefonía) a los clientes de que iban a recibir una contraoferta y darles el argumentario para declinarla. Si no ha aprendido eso, bueno, peor para él porque parece ser que las energéticas se han decidido a empezar a contratacar… Y eso es algo a tener en cuenta.

La deuda técnica

La deuda técnica es un tema importante a considerar en el desarrollo de software. Se refiere a la acumulación de tareas pendientes, como la documentación, el mantenimiento, el refactorizado y la eliminación de código obsoleto. A medida que la deuda técnica aumenta, se vuelve cada vez más difícil y costoso mantener y mejorar el software.

Robot arreglando código

En mi experiencia, hay varias razones por las que la deuda técnica puede acumularse. Una de las principales es la falta de tiempo para dedicar a tareas no relacionadas con el desarrollo de nuevas funcionalidades. A menudo, se priorizan las tareas que producen resultados visibles a corto plazo en lugar de las que tienen un impacto a largo plazo.

Otra razón es la falta de disciplina en el desarrollo de software. A veces, los desarrolladores se sienten presionados por plazos ajustados y optan por escribir código rápido y sucio en lugar de tomarse el tiempo para refactorizar y documentar adecuadamente.

La solución para reducir la deuda técnica es simple pero no es fácil. Es necesario dedicar tiempo y recursos para abordar las tareas pendientes. Esto puede incluir dedicar tiempo cada semana para el mantenimiento y la documentación, o incluso asignar un equipo específico para abordar la deuda técnica.

Además, es importante fomentar una cultura de disciplina y responsabilidad en el equipo de desarrollo. Esto puede incluir establecer estándares de calidad y proporcionar retroalimentación continua sobre el cumplimiento de estos estándares.

En resumen, la deuda técnica es un problema común en el desarrollo de software, pero puede ser manejado si se toman medidas proactivas para abordarlo. Dedicar tiempo y recursos, y fomentar una cultura de disciplina y responsabilidad, son fundamentales para reducir la deuda técnica y mejorar la calidad del software.

JWT y Postman

O, mejor dicho, como probar tus APIs que usen JWT en postman.

Cuando estamos diseñando APIs es muy normal que, lo primero, las diseñemos sin pensar en el tema de la seguridad y, una vez que están funcionando, ya les añadimos los elementos de seguridad para que no puedan ser llamadas por cualquiera en producción.

Una forma, que yo he usado mucho, para fortificar las llamadas es hacerlo mediante un token que se ha obtenido con las credenciales de un usuario concreto, eso supone hacer una llamada previa al sistema del que se obtiene el token y, después, verificarlo en cada llamada. Esto, siendo un token arbitrario, supone sobrecargar el sistema de seguridad con llamadas de comprobación de token, además, tenemos que hacer caducar los tokens periódicamente ya que cualquier filtración del mismo da acceso a los recursos del usuario durante el tiempo que el token esté sin caducar.

Otra manera, ligeramente diferente, es utilizar JWT (JSON Web Tokens) que se diseñaron para poder transmitir credenciales y otra información entre sistemas de una manera más eficiente y segura. Lo único un poco «especial» es que tiene que haber un secreto compartido entre los sistemas que se comunican. Además, se usa ese secreto para firmar la comunicación, así que no es sencillo generar el token JWT de forma manual para las pruebas.

Si usas postman (que es lo que estoy usando yo últimamente) para hacer las pruebas, hay una manera de solventar el problema y que, básicamente, pasa por rellenar el campo pre-request script con este código:

// JWT generation script adapted from
// https://gist.github.com/corbanb/db03150abbe899285d6a86cc480f674d

var jwtSecret = pm.environment.get('jwt_secret') || ''

// Set headers for JWT
var header = {
	'typ': 'JWT',
	'alg': 'HS256'
};

// Prepare timestamp in seconds
var currentTimestamp = Math.floor(Date.now() / 1000)

var data = {
	'iss': pm.environment.get('jwt_iss') || '',
	'ist': pm.environment.get('jwt_ist') || '',
	'iat': currentTimestamp,
	'exp': currentTimestamp + 30, // expiry time is 30 seconds from time of creation
	'jti': 'jwt_nonce'
}


function base64url(source) {
    // Encode in classical base64
    encodedSource = CryptoJS.enc.Base64.stringify(source)
    
    // Remove padding equal characters
    encodedSource = encodedSource.replace(/=+$/, '')
    
    // Replace characters according to base64url specifications
    encodedSource = encodedSource.replace(/\+/g, '-')
    encodedSource = encodedSource.replace(/\//g, '_')
    
    return encodedSource
}

// encode header
var stringifiedHeader = CryptoJS.enc.Utf8.parse(JSON.stringify(header))
var encodedHeader = base64url(stringifiedHeader)

// encode data
var stringifiedData = CryptoJS.enc.Utf8.parse(JSON.stringify(data))
var encodedData = base64url(stringifiedData)

// build token
var token = `${encodedHeader}.${encodedData}`

// sign token
var signature = CryptoJS.HmacSHA256(token, jwtSecret)
signature = base64url(signature)
var signedToken = `${token}.${signature}`

pm.environment.set('jwt_signed', signedToken)
console.log('Signed and encoded JWT', signedToken)

En el mismo vemos que se usan estas variables que deberemos incluir en el entorno o en la petición:

  • jwt_secret : secreto compartido con el otro sistema
  • jwt_iss: issuer (como queramos identificar al emisor)

En cualquier caso también podríamos añadir el campo sub si es parte del payload que recibe nuestro API, o cualquier otro campo adicional que decidamos incluir, ya que el proceso de firma se realiza en ese momento y las fechas de expiración se actualizan justo antes de lanzar la petición al API por lo que no estarán expiradas en las pruebas.

Lo único que quedaría pendiente sería usar el token generado en la cabecera (o donde corresponda) ya que este código genera la variable {{jwt_signed}} esta la podemos usar donde queramos.

Sigo buscndo formas más sencillas para hacer las pruebas sin salir del Visual Studio Codel, si las encuentro las pondré por aquí.

Emosido engañado (no tanto..)

Pues si, a todo el mundo le toca y esta vez me ha tocado a mi. Llevo años comprando en AliExpress y, por fin, me la han colado!

Bueno, no es tanto así porque ya me lo esperaba, una oferta increíble (y tanto) de un pendrive de 2TB… Si, amigos, 2TB de capacidad en un solo pen drive y por solo 6,05 Euros… Obviamente no podía ser verdad, pero bueno, por probar qué perdemos (spoiler, perderemos pasta)

Increiblemente la tienda tiene más comentarios positivos que negativos y, bueno, uno que es un poco naïf decide hacer el intento… Y, efectivamente, en menos de 10 días tengo el paquete con mis dos flamantes pen drives, los meto en el ordenador y éste me informa de que su capacidad es de 2TB…

¿Será verdad? Bueno, nada mejor para demostrarlo que comprobar si escribe archivos… Me pongo a probar y si, aparentemente consigo grabar 300Gb… Eso si, de USB 3.0 nada, tarda como 4 horas es grabar esto… La sorpresa viene cuando intentas volver a leer esos archivos… Ni están ni se les espera, así que le paso un test destructivo a ver qué me encuentro

Vaya, vaya… Con que no tenemos más que 15Gb de verdad, son los dos teras más pequeños que me he encontrado. Bueno, toca reclamar a Aliexpress a ver si tenemos suerte (¿necesitáis spoiler?)

Después de que el vendedor se riera en mi cara solo me queda la opción de protestar ante Aliexpress… Y estoy esperando la respuesta todavía. He aprovechado y me he puesto a mirar los comentarios de otros usuarios y he visto que había como 500 y pico avisando ya de que esto era un timo (tapados por otros 2300 que dicen que no lo es). La moraleja aquí es que hay que mirar solo los comentarios negativos, que el resto (o el porcentaje) no son representativos.

En fin, que doy por perdidos mis 12 Euros a cambio de poder escribir este post…

ACTUALIZACIÓN 1:

Parece que Aliexpress se ha decidido a tomar medidas y hace que el vendedor me devuelva el dinero (aparentemente)

Polarización

Me vais a perdonar porque abandone los artículos técnicos por un momento y os suelte una turra sociológico-política, pero es que últimamente entro mucho en twitter y me hierve la sangre más de lo que debiese, así que me voy a explicar un poco más calmado aquí que puedo poner todos los caracteres que quiera.

Imagen generada por la IA midjourney

Me podéis llamar progre (si, me gusta el progreso), izquierdista (si, creo que todos los humanos somos iguales y hay que hacer lo necesario para que la pobreza y la desigualdad no exista) e incluso me podéis tildar de rojo (no es mi color favorito, pero no tiene connotaciones negativas. En fin, que cada uno es como es y tiene opinión de casi todo (mejor si esta es informada). Tengo muchos y buenos amigos que son de derechas, de todos sus tipos, los hay muy cristianos, los hay liberales en lo económico y conservadores en lo demás, los hay que lo son porque es lo que escuchan en la tele (que tampoco han entrado a pensar mucho en ello, pero si lo dicen por algo será) y luego están los que son españoles ante todo y saben que los extranjeros son inferiores y han venido a quitar el trabajo a sus hijos (igual si se dedicasen a estudiar este riesgo no existiría…). Muchos de estos amigos son buenísimas personas y nada malvados, no dejaría de ser su amigo por nada del mundo.

El caso es que en el micro-cosmos de twitter y, según parece, en muchos medios de comunicación hay una tendencia increíble a evaluar los mensajes según su procedencia y catalogarlos como malos o buenos según si es de mi tendencia política o de otra. Hemos reducido la crítica a buscar las cosquillas a los que no son de nuestro bando, a pensar que los unos son unos demonios y los nuestros unos angelitos, y no, eso no es así. El espíritu crítico ha de guiar nuestros pensamientos siempre, tenemos que librarnos de estereotipos, de buscar segundas intenciones. Tenemos que leer los mensajes, analizarlos y decidir si estamos de acuerdo o no en conciencia, no como miembro de una tribu, sino como ser humano con nuestra conciencia y nuestras contradicciones.

No voy a poner ejemplos aquí, solo tenéis que leer las cuentas de zascas (que también se han polarizado en una de zascas a la izquierda y otra de zascas a la derecha) para ver que la coherencia no existe en ningún sitio y que los mensajes que mandamos al contrario no nos los solemos aplicar (ver la paja en ojo ajeno). Lo que si os pido, seais rojos, morados, azules o verdes es que intentéis mirar el mensaje primero y el emisor después y un último consejo (de los que vendo y para mi no tengo)… Recuerda que no siempre tienes la razón. Escribir el último tweet no te convierte en el ganador, solo en el que se ha cansado más tarde.