DevOps BootCamp BCN, desde los ojos de un Noob (II de II)


Entre podcast, lecturas técnicas, meditaciones y pequeños diseños, pasan los minutos. Llega la hora del café, quedan apenas 90 minutos para el tan ansiado “seminario practico”, por fin podré poner en practica tantos datos y procedimientos bajo la dirección de alguien veterano, y ¡¡“by the face”!! ¿Qué más se puede pedir?

Primera taza de café, abro el portátil y me conecto a mi cueva: ssh tx@…. Parece todo ok, no hay avisos en el correo, los discos siguen estables y no ha habido “usos extraños”. ¿Actualizaciones? Unas pocas, ok, apliquemoslas en el equipo de chekeo.

Segunda taza, todo ha ido correcto, pide reinicio, umm… Me recuerda la tan recurrente frase “deploy en viernes tarde”… No hay problema, abro el navegador y accedo al control de mi Ubuntu MaaS (para despliegue de equipos con facilidad), con dos golpes de ratón reviso y lo configuro para un “rescue mode”; si no hay incidencias en el apagado anterior, lo reinicio normal y a correr.

Tercera taza ¡¡8:15!! !!Qué nervios!! Pago y salgo hacia “everis-living-lab”. 

Gente en la entrada, ambiente desenfadado, ¡¡Mola!! Aunque sea en entorno MS Windows, aprenderé la metódica, solo espero que no empiecen con el cansino pique del “pingüino abriendo ventanas”…. He venido a aprender, no voy a bajar al fango, esto no es una discusión de bar… (Cosa que alguno disimulo muy bien, pues hablaba en ponencias ajenas, con la misma soltura con la que te llama la atención el dueño del bar).

9:00 Hace un rato que he subido, elegido asiento y ojeado la sala. ¡¡Tienen buenas instalaciones!! pero ya vamos 30 minutos tarde respecto al plan…
9:15 Se oyen chistes y risas pero nadie sale al escenario…
9:25 Me voy a fumar…

9:30 Un joven sale al escenario y empieza a darnos la bienvenida, disculpándose por el “caos con el horario”, dándonos las gracias por asistir (“A vosotros por organizarlo” pienso entre mí), gracias a los patrocinadores (Son educados y agradecidos; vamos una hora tarde, pero lo tendrán estimado...).

- Bueno, no va a haber prácticas porqué ya sabemos que no os suele gustar estar aquí con los portátiles y bueno, nos hemos llevado una pequeña reprimenda desde la dirección… - Termina diciendo el orador.


Pensamientos rápidos: ¿¿Que no hay qué??
¿¿Que no nos gusta el qué??
¿¿A qué han venido el resto??
¿¿Una pequeña reprimenda??
¿¡¿¡¿¡DONDE ESTA EL NUNCHAKU!?!?!?
 (si cada vez que he comentado este aparatejo, no os ha picado el hacer clic en los enlaces, puede ser buen momento, para poner esta situación en contexto)

Raudo resumen del DevOps BootCamp BCN

Tras haber pasado un poco de todo hasta las lineas anteriores, querría hacer una reflexión, que es la verdadera razón por la que me he animado a escribir (esta pedazo de chapada):

Tu, si tu, organizador de eventos. Gracias, sinceras y sin ironías ni gaitas. Gracias por todo lo que has hecho. Gracias por buscar gente para organizar, te has promocionado, has conseguido a los patrocinadores, gracias por conseguir a los ponentes, has conseguido un lugar más que adecuado para la ocasión, incluso ¡¡¡Conseguiste comida para los asistentes!!! (Se os escapo el café, aunque teníais razón, los del bar eran malos y lentos; la pastelería de la esquina le daba mil vueltas).

¿Puedes imaginarte cuál era mi sentimiento sobre el “cambio de planes”? 
Exacto, como el titulo de la canción del tantas veces nombrado nunchaku.

Por favor, con un planing “mundial” claramente marcado, si vas a cambiar algo, piénsatelo dos veces, que lo mismo le puedes estar haciendo la puñeta a alguien. Como no mirar por el retrovisor cuando no oyes ruido cercano o al cruzar la calle y te llevas un susto de mil webs al encontrarte de morros con un silencioso coche eléctrico...

No, no me lo tome bien, ni mucho menos. Me sentía como Olix cuando raptaron a Idéfix.

- Entiendo que se tomaría dicha decisión en base a algo – procuraba que esta voz sonara más fuerte en mi mente que todas las demás.- Ellos son los expertos, por algo lo habrán hecho.

“Sube al balcón”, vino a mi cabeza. Es una técnica que uso más frecuentemente de lo que deseo. Se trata de mirarte a ti mismo, al otro y a la situación en perspectiva, como tercera persona no involucrada (Supera el NO, William Ury). Tocaban pensamientos rápidos sin moverme del asiento.

Bus de vuelta, 22:05; menos hora actual, 9:45; 12 horas y 20 minutos. El friky este (yo) se ha metido una pechada horas para algo. ¿Debería mandar todo al carajo por “una pequeña” desilusión? Nipala (abreviatura empleada en ciertas jergas para indicar: “Ni pa’la hostia”).
OK, ¿Modo de actuar?, sigue con el plan que dictan los “sapiens”, al fin y al cabo, son los expertos, algo habrán preparado. … …

Para no ser injusto (a mi entender claro), proseguiré brevemente con lo sucedido.

Primera charla, Ana y Adrián. Parecían dos pesos pesados en la materia, muy posiblemente lo sean. Ella hacia uso de unos esquemas para explicar y el hacia de comentarista. Supongo que el binomio es bueno, puede darle vidilla y dinamismo al tema. Lo cierto es que Adri (como le llamaban en confianza los organizadores) tenia el efecto de distraerme de lo que me interesaba, la metódica, que Ana iba desglosando con claridad paso a paso. Me hacían gracia tanto los comentarios como la manera de expresarse (lo cierto es que me identificaba con el cuando empecé a dar clases a grupos “grandes”), pero no retenía lo expuesto por su compañera, él estaba nerviosamente alegre (luego supe que había publicado un libro sobre el tema). Me perdía, me aburría y el cansancio iba ganando terreno y otra vez Kubernets me remato… Acabaron y cual “The Flash” corrí a socorrer mi agarrotada masa gris con un café, tras otro, tras otro… A partir de ahí, la cosa mejoro.

2ª charla: Manuel Sanchez y Txema Gonzalez. Ciclo de Vida
3ª Nacho Fanjul. Test de integración.
4ª Ramón Espuga. Antipatterns.

El último ponente hablo sobre Artifacts. Robert Bemejo, un veterano, que estaba interrumpiendo tanto como los otros ponentes le hacían referencias en las charlas previas… Jocoso y dicharachero, fue el único en hacer un breve “no comentario” sobre los linuxeros (amigos de Jenkins), mientras nos vendía MS Azure desde un mac…

En fin, esa fue la sensación, no era un “seminario” ni una “oportunidad” para aprender, era el momento de explicarle a los más o menos coleguitas (a los ya convencidos), lo “cool” que somos con este sistema corporativo. Que es totalmente licito y no por ello los ponentes son menos, al contrario, al margen de la temática, se lo hicieron bien. Consiguieron que entendiera las distintas partes. Pero no hubo prácticas. No obstante, en su defensa diré, que Manuel prometió hacerme llegar al correo los enlaces para las prácticas, “que son chungas” decía, “y si te atascas comenta y te hecho un cable”… Un chungo es lo que me ha dado esta mañana, pensaba yo…

13 horas y cientos de kilómetros después me recogía mi “Rotkehlchen”, esperando le dijera que aquello había servido para algo (que no pudiera hacer con youtube). Yo también lo espero...

P.D.: Raudo y veloz Manuel cumplió su palabra de enviarme tanto las presentaciones como las "prácticas". ¡¡Muchas gracias Manuel!!
Presentaciones y "Challenges"

DevOps BootCamp BCN, desde los ojos de un Noob (I de II)



23 de Mayo - “La Propuesta”

- Coñe, con este lio de la nueva plataforma no he mirado en que invertir el tiempo cuando termine de dar clase… (Pensamiento con perspectiva a 10 días)

31 de mayo - “Idea feliz”

- ¡¡Listo!! Me he quitado de encima las clases; el cambio de plataforma no me robara mucho tiempo y ya tengo tiempo de coger y sacar a delante los trabajos de los clientes. Por fin acaba este sin vivir que me carga de ansiedad (Pensamiento iluso). A ver qué hay cerca… Charla Linkedin, “Personas 4.0: El aprendizaje en las empresas”, la ¡¡DevOps!!

1 de junio “La negociación”

- Ei Schatz, ¿Te parece una escapada express? Hay un seminario en Zaragoza que puede ser interesante, puede que te aburras un poco pero podemos pasar el resto del finde allí. En la peor, en coche volvemos en un salto rápido. (Creo que lo llaman conciliación familiar).

Dos pequeños ojos me miraban diciéndome sin palabras, “¿¿No te basta con estar todo el día o estudiando o trabajando que también quieres pasarte el finde en esas frikadas??”.

8 de junio, 21:35 - “El planing”

Reflexiones tras conversación telefónica con el programador y con mi “jefe”:
- Manda web’s, pues este tío no se ha enterado de nada ... llevamos 3 meses de retraso para montar un wordpress… menos mal que es “agile” y tenemos reuniones cada 15 (después 7) días… Dónde está el nunchaku que el hierro oxidado ya lo tengo localizado.

- Vaya… pues en Zaragoza no hay entradas para la BootCamp… Mira, en BCN y Madrid aún hay. Perfecto, BCN que ni pintado, encajan horarios de autobuses ida-vuelta y la estación esta a tiro piedra del CATAzure (lugar del Camp). Por 61€ más cafés puede que aprenda algo con esas famosas “practicas”, que youtube está muy bien, pero alguien que te da una colleja y te dice “la estas cagando aquí”, es más practico.

10 de junio - “El miedo”

19:51. Sé que un miembro del PEUM va a ir a la camp, pero tengo grandes dudas si no será una perdida de tiempo (y dinero), debido a lo Noob que soy (¿Síndrome del impostor?). Resuelvo contactar con Alberto y tras exponer mis “conocimientos” (o algo así), me anima a acudir, pues considera que si tengo base como para aprovechar gran parte del evento. (No te lo he agradecido suficiente, ¡¡Muchísimas Gracias!! Tenias razón).

13 de junio por la noche “Aplazando otros quehaceres”

- Bueno, no está siendo tan malo, los imac tienen reparación, el equipo de medición de gases está instalado, faltan algunos datos para facturas y que lleguen las ultimas piezas para poder facturar. Las cosas pintan bien (me decía a mi mismo), tengo que sacar tiempo para montar el Opensense en la cueva (idea original traída de “Palabra de Hacker”, cap Montar un SOC) y pensar en como sustituir el potenciómetro para la pistola de calor (prototipo para reflows).


14 de junio por la mañana “El detonante”

Sin este suceso, es probable que no hubiera acudido… Por whatsapp, 9:03:
- Ei!! (A un compañero de curro). Estoy revisando la nueva web, por si quieres comentarme algo.
- Traki man! (me responde) estoy picando alumnos, tengo para rato. Estas solo en eso….
11:01 - Aquí es donde recuerdo aquella frase que oí en PEUM…: “No me digas que no se puede, dime que no sabes cómo hacerlo”, llevo años diciéndolo, menos mal que se lo oí a alguien más...

12:55 - No le escribiría nada, en la reunión de la siguiente semana se lo exponemos (me recomienda el compi), déjale que disfrute este finde antes de que se sobrepase...

Pensamiento rápido: Yo me estoy partiendo el culo para que esto salga adelante y quien tiene que ejecutarlo, ¿¿Ni se empana ni se moja?? - ¿¡¿Donde está el nunchaku!?!

- Ok, pues yo hago ídem. ¡¡Que tengas buen finde!! - Respondo con humor (y una sonrisa de medio lado)

15:00 tras comer, me lamento...
- No he ido a la charla de “Personas 4.0” y total para nada... ¡¡El Camp!! - Golpea mi mente como Mjolnir. Cual pollo sin cabeza reviso si hay entradas (sí que quedan) ¡¡Bien!! Buses... ¡¡No hay!!

- ¡¡Scheiße!! (una palabra mal sonante en alemán).
- Mist – Me corrigen dos pequeños ojos con binomio de paciencia y cariño.

A toda prisa, buscando entre mil combinaciones encuentro algo que encaja, llego demasiado temprano 3:30 del sábado, pero llego; y bastante más caro, “pero llego”, me repito a mí mismo. Me viene a la mente la imagen de Hannibal Smith cuando tenia una idea rondando en la cabeza. Me llevo el portátil pequeño, desde allí voy gestionando los equipos y los chequeos con Ubuntu MaaS; Lista de podcast, descargadas para el viaje. El ebook por si las moscas…

1 hora 45 minutos y bajando… Toca sprint, y no es agile...

- Schatz, ¿Me llevas a la capi? He encontrado un bus para BCN.
Una gran sonrisa me responde y asiente.
Ducha, mochila con lo imprescindible y al coche. 35 minutos para llegar al bus. “Jesus Christ yo te imploro”, que no haya caravanas…

En Ruta

19:30. Ya en el bus, 7 horas por delante antes de otras 5 esperando se abra el Camp. Duermo lo que puedo mientras escucho algunos podcast de “Entre Dev y Ops”. El bus tiene cargador USB, datazo positivo.

Llegamos a las 3:30 – vaya, para una vez que me viene bien que lleguemos tarde…

- “Ok google, llevame a CATAzure” - y empiezo a caminar… Hay tiempo, medito sobre cosas profesionales, personales, cómo sustituir el potenciómetro por un transistor y añadir botones para su control…
- Ya es la tercera vez que esa patrulla pasa junto a mí… - Pienso para mí mismo. Aún pasarían otras muchas veces… y yo ya lo sabia.

Madrugada, sudadera negra con capucha, mochila negra con funda dura (para portátil)… Sospechoso soy, después de lo ocurrido aquí, ¿Quien puede culparles?

A paso ligero por costumbre, llego a las proximidades, es aún oscuro y tengo “protección no oficial”. Busco un lugar para sentarme y hacer tiempo; ha de ser sin acceso por detrás; ha de tener un amplio campo de visión para ver qué se acerca; debo de ser bien visible para los viandantes y para mí “escolta”, que sigue pasando cerca y despacio.
Genial, he encontrado un lugar apropiado, no quiero que me roben con facilidad y estoy cansado, puedo caer dormido y soy una presa fácil. Hago uso del colega “google” para ver qué cafeterías de las que están en la zona abren temprano. Hay una que abre a las 7:00. Dos horas y media por delante, espero que tengan buen café…

Kubuntu, ¿hacia la humanidad?


*/Disclamer Alert: La siguiente entrada deriva de mi experiencia personal con esta distribución, no pretendo crear un paragon de cual distro es mejor/*


“TOC; trastorno obsesivo compulsivo con los pequeño detalles que nos tocan los huevos.”


Leyendo entre las cositas que siempre veo en el canal de Slack y sobre las aventuras de @infogon preparandose para la hackaton, me entero de que anda probando una distro de linux “Kubuntu”, hmmm interesante pense, haciendo un poco de reseach lo primero que encuentro es esta pequeña cita de nuestra querida wiki sobre la palabra “kubuntu”

“Es un derivado oficial de Ubuntu y su nombre significa "hacia la humanidad" en el idioma bemba, y se deriva de ubuntu ("humanidad").”

Vale, hasta en el titulo de la página oficial leemos “Kubuntu | Friendly Computing”, Dejan muy en claro que son user friendly y con una interfaz super mona, que te promete ser mas productivo, conectarte la tostadora de la cocina por bluetooth y hacerte todas las tareas del colegio, me quedo la curiosidad de comprobar que tan verdad era esto.

Por lo general, siempre he usado por temas de trabajo la version Gnome 16, que es con la cual trabaja un SDK sobre el que hacemos algunos desarrollos junto con una compañia rusa y es la que nos exigen, supongo que por tema de librerías (no lo dejan muy en claro, son rusos, es así y ya está, usted no pregunte.) Pero el otro dia por andar haciendo algunas cositas raras experimentando terminó corrompiendo la mayor parte de la partición entera de mi linux, dañando el sistema operativo completamente, “RAYOS” pensé, "seria una buena excusa para salir a probar ese famoso pedacito de HUMANIDAD que tanto prometen".

Instalando… tomo mis precauciones y separo la particion /home, (practica recomendada para todos los que cambian de distro frecuentemente), cosa que no tenia previemente hecha y me toco guardar archivos manualmente.

Vale, hasta ahora lo primero que me encuentro es el tipico botón de inicio con logo imitando a windows, “Vale tío, puedes hacer un OS desde cero e imitas a la competencia”, eso siempre me a chocado, pero no nos armemos prejucios, mirare un poco mañana en la mañana, cierro la tapa de mi notebook para descansar.

Cuando la destapo al día siguiente para mi sorpresa lo primero que me encuentro es con esto:



“Bonita bienvenida humana” pense, abro mi terminal, me logueo por consola, ok, no prejuzguemos aun no realizo los updates necesarios y así que se corregirá con ello, efectivamente listo todo, me dispongo a amoldar el computador a mi criterio o viceversa, lo que pase primero.

En el file explorer mi primera impresión fue una explosión de colores de carnaval destructivas a la vista, juro que conté por lo menos los 7 colores del arcoiris entre ventana y ventana.

Vale, voy a cambiar el fondo de pantalla, click derecho y me encuentro con más menus de opciones que cabina de avión, de verdad me empiezo a encontrar con una curva de aprendizaje “no very user friendly”. A la derecha en la barra de tareas recuerdo haber visto más iconos que en un aeropuerto así que supe que me tomaría un tiempito conocerlo a fondo.

Primer Round, intentar mandar un simple correo: configuro mi correo correctamente con el “Kmail” nunca lo había probado hasta ahora, se empieza a llenar la bandeja de entrada, intento de mandar un mail super urgente y se queda allí en la bandeja de outbox sin pasar a la de salida, simplemente viéndome, como si se riera de mí. ¿Habré puesto mal alguna configuración? ¿Me equivocaría yo? Busco como por una hora sobre el tema pero ninguna información. Dejalo asi, no perdamos tiempo con ello y resuelve mandando el mail del movil, mientras descargo mi IDE.

Voy a prepararme un café, cuando vuelvo y regreso al computador de la suspensión veo que lanza como unos rayos cósmicos, esta vez para darme la bienvenida, ingreso mi pass y para mi sorpresa los caracteres de los títulos de los archivos en mi escritorio desaparecen, en lugar de ello veo manchas de los mismos rayos cósmicos que aparecieron recién, lo mismo por los títulos en el menú de inicio que solo aparecían como manchas negras en los textos, problemas con la interfaz de usuario pense, respiro profundo, hubiera continuado tranquilo si mi TOC me lo permitiera, prefiero reiniciar y ver si el problema se corrige.

Ok, se corrige el problema y al abrir mi mail, sorpresa, salen los 24 correos de prueba que estaba mandando. Pareciera que no es muy compatible con la suspensión del equipo.

Listo, vamos manos a la obra, por lo general uso dos monitores, pero en mi TOC, siempre con mi sistema operativo anterior ubico el display de la izquierda solo un poco más arriba, en esta disposicion.




perfecto pense, cuando me propongo a maximizar una ventana en el display derecho subiendola al tope me encuentro con que la ventana literalmente se va a la mierda y desaparece en frente de mis ojos, al parecer creando un espacio invisible en esta area.


Pero como es posible que una funcion basica que ya funcionaba bien previamente la hayan intentado de resolver con un parapeto visual, y apenas tengo un par de horas conociendo la UI.

Vale tio, no pasa nada, pongamos los dos displays uno al lado del otro, a pesar de que los monitores no estan alineados.

Pasan un par de días y me voy encontrando detalles tras detalles, los mails a veces salian, a veces no, lo resolvi cambiando el cliente a mi fiel "evolution" que usaba ya en gnome. En los momento cuando se restaura la suspención, simplemente pienso que me esta guiñando un ojo con sus rayos de colores donde ya no solo desaparecia las letras en el menu de inicio si no hasta en el boton "login".

Un día, repentinamente compilando con el codeblocks, se quedo allí.. la ventana congelada, ya me habia pasado antes... allí se quedo, viendome... kill -9... se quedo allí la ventana... bueno media ventana porque en realidad se veian como trozos del IDE con mi codigo... Reinicio completamente... codigo roto... tuve que volver a construir los archivos nuevamente por segunda vez, porque era la segunda vez que me pasaba.


mensaje directo a mi colega en el otro escritorio de la oficina.

Ramirez, ¿aun tienes la imagen esa del gnome que mandaron los rusos?
Sí ¿por que?
¿Me podrias crear una imagen?
¿Que paso con el kubuntu ese que te recomendaron?
Nada, nada... de pronto me dieron ganas de nuevo de volver a lo viejo.


Todos alguna vez, los que habremos convividos con algun diseñador gráfico o con algun frontend hemos escuchado la famosa ley que habla del "- = +" hasta ahora gnome me habia cumplido muy bien con esa ley y habia olvidado lo bien y comodo que se siente al dar click derecho y...




Menos mal que separe mi carpeta de /home desde un principio, me dio la facilidad de volver con todos mis archivos de usario, tanto asi que se vino entre el logo de usuario el logo del maldito Kubuntu.




Lo dejaré alli simpaticamente para guardar un recuerdo de esa experiencia desagradable, mientras me tomo un vodka rusa para tranquilizar los nervios alterados por mi TOC y el vivir de ese pedacito "hacia la humanidad".

Tu código no habla (o al menos a mí no me dice nada)

No sé si alguna vez os habéis encontrado este código:

Para los más curiosos, el código pertenece a una librería escrita en Go para la lectura de archivos de Excel y en resumen sirve para pasar una fecha del calendario gregoriano a un número entero. Ese número entero, llamado número Juliano, se puede utilizar por ejemplo para hacer comparaciones entre fechas.
El código original estaba escrito en Fortran y lo publicaron Henry F. Fliegel y Thomas C. Van Flander en 1.968 en una carta al director en la revista Communications of ACM (CACM, volumen 11, número 10, Octubre de 1.968, página 657). Os dejo un enlace por si queréis leer el artículo original .
Lo curioso de este código y por lo que encabeza el artículo, es precisamente por el comentario:

Al parecer, este código no está únicamente en ese repositorio. También se puede encontrar en las fuentes de Linux, Android, Excel … y es fundamental para todas las operaciones con fechas, sin embargo, el artículo no detalla su funcionamiento y como se puede apreciar, los nombres de las variables y las constantes no ayudan mucho.
Así que lo copiamos y pegamos siempre que lo necesitamos pero nadie parece entenderlo.

Nota: por cierto, no es que me pase el día leyendo código de GitHub, la imagen viene de un mensaje en Twitter de Kenn White (@kennwhite). Tampoco me paso el día en Twitter aunque algunos lo creáis.
Particularmente me recuerda mucho al teorema de Fermat (xn + yn = zn). Al parecer, en el margen del cuaderno donde Fermat escribió su conjetura nos dejó también este párrafo:
He descubierto una demostración realmente maravillosa de esto que este margen es demasiado estrecho para contener
El teorema se publicó en 1.658, los matemáticos tardaron 358 años en demostrarlo. Todo un tipo el tal Fermat.
Pero no nos vayamos por las ramas, este artículo no va de Fermat ni de números julianos, por muy interesante que sea, habla de documentación del código. De la falta de comentarios en realidad.
No estoy seguro de cómo empezó el cambio de paradigma que pasó de "tienes que comentar tu código" a "los buenos programadores no escriben comentarios en el código". Nos encontramos referencias por ejemplo en el libro Clean code de Robert Martin que a tanta gente cambió la vida:
As useful as javadocs are for public APIs, they are anathema to code that is not intended for public consumption.
Me guste o no me guste lo que has escrito ¿podrías explicarme por qué? Si haces una aseveración de ese estilo, con esa rotundidad, o me das una demostración o continúas con "con un par". A tu criterio.
En primer lugar, deberíamos debatir sobre qué es público cuando hablamos de código fuente. Si trabajo para una empresa que se dedica a escribir componentes parece claro que "público" significa "aquellos métodos que se exporten". Si trabajo desarrollando código en equipo en cualquier otro tipo de empresa "público" significa "cualquier parte del código" porque antes o después, no nos engañemos, vamos a acabar leyéndolo.
Al fin y al cabo nuestro querido Martin no escribió sólo ese párrafo. Desarrollaba un poco más la idea. Tenía todo un libro para ello de hecho: si conseguimos que los nombres de nuestras clases, propiedades, métodos y variables sean más expresivos y cuenten qué es lo que hace cada parte del código, entonces los comentarios son irrelevantes. Además, si escribimos pruebas sobre nuestro código podemos conseguir que las propias pruebas constituyan la documentación del código. Recordemos que los comentarios no se compilan, no se puede asegurar su integridad: puede que tengamos un comentario que no refleje la realidad del código. Es realmente el código quien dice la verdad, no los comentarios.
Parece lógico. Y últimamente cada vez es más habitual que escuche cosas como éstas:
No escribimos documentación porque somos frescos y ágiles y creemos que el código en funcionamiento es mejor que una documentación exhaustiva
Así que a partir de ahora podemos ya podemos pasar sin miedo del "no documento porque no me da la gana" como hacíamos hasta ahora a obviar la documentación sin miedo porque somos fresquitos y ágiles y a partir de este momento nuestro código ya es mágicamente expresivo y tenemos un 100% de cobertura de código. Me gustaría saber en qué punto del manifiesto ágil pone que no hay que documentar, pero eso es otra historia y cómo empecemos a hablar de Agile este artículo no acabará nunca.
No sé vosotros, pero si alguien me da un código y me dice que busque la documentación entre las pruebas unitarias me enfado bastante. Imaginad por un momento que el código tiene una cobertura del 80%. Muy alto, pero puestos a imaginar. Imagináos que estoy en un método privado al que llama un método privado de una clase interna al que llaman varios métodos privados de otras clases internas a los que llama un método público de una clase pública que maravilla de las maravillas tiene varios tests.
¿Realmente la respuesta a "no escribo comentarios" es que ejecute las pruebas de esos métodos línea por línea y adivine qué es lo que se pretendía hacer? ¿Me estáis tomando el pelo?
El truco entonces parece ser escribir código expresivo. En un código expresivo el propio código describe lo que tiene que hacer. Dado que el lenguaje natural es ambiguo (recordemos el problema del arzobispo), creamos lenguajes de programación con palabras clave más o menos sencillas, lo único que nos queda entonces para identificar la intención del código son los nombres de clases, propiedades, variables y métodos. Estos nombres deberían reflejar lo que el programador pretendía a la hora de escribir el código y su forma de pensar para resolver el problema. Lo malo es que tu forma de pensar y la mía son totalmente diferentes, así que abrimos una discusión para ver cuál es el nombre de variable más adecuado.
Por ejemplo, vamos a ver cómo indicamos en nuestro código que se debe aplicar un descuento cuando el volumen de la venta supera la media de ventas de una tienda:
 
 if (purchasedQuantity > salesAverage)
     ApplyPromotion();
 
Parece claro pero aún así, purchasedQuantity puede que no sea el nombre más adecuado: cantidad comprada. Quizá fuese mejor que indicásemos que es la cantidad adquirida por el cliente, además, salesAverage ¿qué es? ¿la media de ventas de la tienda o la de la empresa? Quizás fuera mejor algo así:
 
 if (purchasedCustomerQuantity > salesStoreAverage)
     ApplyPromotion();
 
Qué queréis que os diga, para un artículo en un blog o para un ejemplo en un libro, no está mal, pero si cualquiera de vosotros me contáis que mientras escribís código, en ese momento en que todo fluye y parecéis uno con el teclado, empleais más de una décima de segundo en elegir el nombre de una variable os responderé que me estáis mintiendo descaradamente.
Pero sigamos con el ejemplo, esa condición es sencilla, pero si las cosas se complican puede que deseemos sacar esa condición a un método que nos hará todo mucho más expresivo:
 
 if (MustApplyPromotionToCustomerAtStore(purchasedCustomerQuantity, salesStoreAverage))
     ApplyPromotion();
 
Mucho mejor, dónde va a parar. Ahora MustApplyPromotionToCustomerAtStore nos indica si debemos aplicar la promoción. Basta con leer MustApplyPromotionToCustomerAtStore y evitamos hacer la comparación en nuestra cabeza para saber si la línea está bien. Nos falta escribir el código de MustApplyPromotionToCustomerAtStore pero es sencillo y podemos utilizar en otras partes del código llamadas a MustApplyPromotionToCustomerAtStore. MustApplyPromotionToCustomerAtStore es la solución. MustApplyPromotionToCustomerAtStore al poder. Nada como MustApplyPromotionToCustomerAtStore desde la invención de la cerveza light.
¿Cuántos habéis notado el clik en vuestro cerebro al leer MustApplyPromotionToCustomerAtStore? ¿Cuántos os habéis detenido un segundo mientras leíais? ¿Cuántos os habéis saltado la dichosa palabreja cada vez que aparecía en el párrafo anterior? Y es que los nombres de métodos complejos no son precisamente fáciles de leer, al cabo de un rato nos negamos a distinguir entre MustApplyPromotionToCustomerAtStore y MustApplyDisscountToCustomerAtStore.
Por eso hay ocasiones en las cuales lo más simple es un comentario:
 
 // Si debemos aplicar la promoción al cliente
 if (MustApplyPromotionToCustomerAtStore(purchasedCustomerQuantity, salesStoreAverage))
     ApplyPromotion();
 
Mi código está lleno de comentarios así. Es mi manera de escribir. Así cuando leo el código voy pasando directamente por los comentarios sin detenerme realmente en las instrucciones que no me interesan. En realidad, leo el pseudocódigo, no el código.

Nota: Creía que era cosa mía pero existe incluso un estándar llamado Commenting Showing Intent [CSI] que llega a las mismas conclusiones a las que llegué yo cuando comencé a escribir comentarios de este tipo.
Os escucho decir "pero entonces tendrás que cambiar el comentario cuando cambies el código". Por supuesto. Y el nombre de las variables. Y el nombre del método MustApplyPromotionToCustomerAtStore por mucho cariño que le haya cogido. Y posiblemente también el documento de requisitos y el manual de usuario. ¿Creíais que la vida del programador era fácil? Que no se compile no quiere decir que no sea nuestra responsabilidad.
Porque todos sabemos que hacer código expresivo no es fácil. Un ejemplo de una interface sencilla:
 
public interface IJobProcessor
{
 int Process();
}
 
Simple, un sólo método Process que como su propio nombre indica suponemos que procesa y dado que está dentro de una interface llamada IJobProcessor supongo también que procesa un trabajo.
Me preocupa un poco el valor de retorno: ¿tengo que devolver un código de error? ¿el número de registros procesados? ¿el máximo de grados Kelvin que ha alcanzado el procesador durante la ejecución? Al fin y al cabo, si me das una interface no documentada puedo hacer lo que me venga en gana.
No me vendría mal algo de ayuda aunque supongo que siempre puedo mirar el código de las pruebas porque: vosotros también escribís pruebas para los interfaces ¿no es así? Vamos, como todo el mundo.
Alguno me dirá que realmente no es un código expresivo: en lugar de un entero debería devolver una clase con propiedades diferentes una para el código de error, otra para el número de registros y otra para los grados Kelvin y que además el interface se debería llamar IJobDataBaseQueryProcessor. Posiblemente yo me conformaría con esto:
 
// Interface para las clases que ejecutan consultas sobre la base de datos
public interface IJobDataBaseQueryProcessor
{
 // Ejecuta la consulta. Devuelve el número de registros afectados
 int Process();
}
 
Por supuesto, preferiría que fueran comentarios de XML que pudiera añadir automáticamente a mi documentación pero tampoco vamos a ponernos exquisitos.
Ya puestos, lo que realmente me gustaría saber es:
  • ¿Cuáles son las precondiciones del código? ¿que argumentos necesita?
  • ¿Qué vas a hacer con el valor de retorno?
  • ¿El código se va a ejecutar dentro de un hilo, hay alguna consideración sobre inmutabilidad, invariantes o dependencias?
  • ¿Qué tipo de excepciones debo lanzar? ¿Las excepciones se deben controlar dentro del propio proceso?
No me digas que todo esto va dentro de los nombres de los métodos porque no es así. Y si tengo que leer todo tu código para enterarme, sinceramente: no me interesa.
Y sólo un punto más para dejar claro mi punto de vista: el código dice lo que el código hace. No dice lo que el código debería hacer. Lo que el código debería hacer lo dicen los requisitos e incluso el manual de usuario. Si me haces enfrentarme a 60.000 líneas de código sin un sólo comentario al menos espero que tengas al día los requisitos.
A pesar de lo dicho hasta ahora, he decidido que quiero ser cool y agile y voy a dejar de comentar mi código así que os jod... esto... mi código a partir del siguiente parpadeo será explícito y lleno de test que podéis consultar en cuanto tengáis alguna duda. Todo estará en el código. Lo que veis es lo que hay. No preguntéis. Trabajo mucho, no esperaréis que me acuerde de todo.
Aunque lo que realmente espero es que la próxima vez que alguien os diga "soy cool y agile y no comento mi código" recordéis ésto:
The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it 's not whether they prefer Python or Java.
It 's whether they can communicate their ideas. By persuading other people, they get leverage.
By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it.
Absent this, their code is worthless.
Joel Spolsky – Advice for Computer Science College Students


Nota: por si alguien se lo preguntaba, el problema del arzobispo se utilizaba para ilustrar la dificultad del procesamiento del lenguaje natural en sistemas de Inteligencia Artificial. Se basaba en una conversación del Sombrerero Loco del libro Alicia en el País de las Maravillas que era algo así (escribo de memoria):
  • Y eso fue también lo que pensó el arzobispo
  • ¿Eso? ¿Qué es eso?
  • Eso es lo que pensó el arzobispo. ¿No sabes lo que es eso?
  • Sé lo que es eso cuando se trata de una liebre o un pájaro pero no sé que es eso que pensó el arzobispo.

Aventuras de la hackathon (De la muerte tecnológica al estado de zombie inteligente): Martes final IX of IX

Llegando a la meta último siendo el único corredor


10:30 Ultima visita a la tienda (¿no me odian aún?)

Devolvía las dos memorias y me dieron dos más. Sin problemas. Esa gente es excelente.

Llegue a casa. Las memorias funcionaron bien pero igualmente las testee dos veces. Todo correcto.

Aun así con el monitor de sistema activo las cosas iban muy despacio y la memoria se acercaba a la saturación. Xubuntu por defecto trae un swap file (Es un espacio del disco de intercambio  con la memoria para liberarla de trabajo) de 1Gb.

Internet: Investigación y Egos

Investigando los posts del tema descubrí que la swapfile me podría ayudar que la memoria no se saturase. Solo perdería algo de disco (140 Gb libres, es un lujo que me podía permitir)

Lamento que muchos blogs de Linux estén escritos por descerebrados que solo quieren hacer ego de sus muchos recursos cuando tocan estos temas.

El Swap File no es la mejor solución y es poco recomendado si usas memorias por encima de los 8Gb (incluso con 4Gb es dudable si es necesaria) así que mucho blogueros en lugar de explicar las cosas te mandan a comprar memorias "que no están caras" en lugar de ceñirse al tema que tratan. Pero lo más fastidioso (además del tiempo perdido en sus opiniones poco útiles) es que parecen una copia unos de otros pareciendo que solo lo ponen como una manera de mostrarse por encima. Muchos blog de linux  están perdiendo su esencia por este tipo de blogueros.

En fin. Mi monitor de recursos me mostraba: 2.5, 2.7 de memoria y la swap file llego a estar llena.

Así que para no quedarme corto cree un swap file de 4Gb + 1Gb que ya tenia.

Mi experiencia me ha demostrado que es enorme el swap file por ahora. Lo máximo que ha ocupado hasta la fecha es 2.2 creo pero si he logrado una fluidez interesante.

La condición:  Abrir de un programa a la vez y darle tiempo de completar su ciclo de inicio. No abrir pestañas demás de los navegadores. (ahora alterno entre Chrome o Firefox según mi estado de animo) y estar atento al monitor de recursos

Sobre VsCode: Es un excelente editor que he usado muchas veces pero no me ha convencido el resultado que me dio en esta aventura. Si puedo evitar usarlo mejor.

Jetbrains: Estoy impresionado sobre el funcionamiento de los IDE's sobre 32bits. Me he vuelto fan absoluto. Además he ido cambiando los valores de la JVM y cuando me he pasado por debajo de lo básico el IDE no se ha colgado pero si me ha avisado que debería cambiarlo para un mejor rendimiento. Excelente. Además de mantener todo mi perfil (themes, fuentes y plugins) online para usarlo en nuevas instalaciones si lo necesito.

Sobre el ordenador. A pesar de estos buenos momentos juntos mi ordenador oficial será otro que me darán la semana que viene pero este marca mi vuelta a Linux. Y me ha encantado la aventura. Soy así. He aprendido un montón sobre todo de mi propia ignorancia. De a poco pillare una mother, memorias, mejores discos. Será mi Bebe personal. Se lo ha ganao.

Si has llegado aquí pasando por los demás posts. Gracias por leer y espero hallas disfrutado del camino. Nos vemos en el slack de PEUM

Aventuras de la hackaton (Ser autónomo tiene sus ventajas): Lunes VIII of IX

La noche es mas oscura justo antes del amanecer 

Esa frase salida de los comics de Batman es dedicada a @Degs. Un usuario del slack de PEUM que le encanta DC Comic y sobre todo Batman. Para ti amigo siempre con cariño. Recuerda que existe más mundo que Gotham City

10:00 Amanece que no es poco

Siempre me levanto con energía para solucionar cualquier problema. Unos lo llaman optimismo, otros idiotez. En mi caso ambos tienen razón. 

Preocupado por la memoria del ordenador abrí la tablet y busque memorias DDR2. No es cosa trivial encontrarlas, y además hay unos temas de MHz y velocidades a tener en cuenta. 

Bastante rápido encontré unas adecuadas. Un Sim de 2Gb que cumplía las condiciones. Tardaban 24 horas en enviarlo. No lo pedí aun

Genial. Fui a la tienda donde adquirí el ordenador. Pregunte si tendría más memorias y un DVD Grabador de paso. Lo primero lo vería, lo segundo estaba seguro de que si. 

Ok. Volví a casa. Enciendo el equipo y logre una estabilidad de 1.4GB de memoria y con picos controlables si se iba a un determinado ritmo. 

Eso me llevo a adelantar cosas del proyecto y dentro de todo estaba contento de poder avanzar. 
Unas horas después apague el ordenador. 

Me pensé lo de las memorias y de pronto me entro una sensación (eso que llaman intuición pero es más el inconsciente haciendo uso de la experiencia). Con el ordenador apagado revise la placa y anote el tipo de placa. Entre a Internet con la tablet y encontré en un lugar (que no era la empresa fabricante) un pdf de los detalles de la placa y sus limitaciones.

ummm. Veamos. Miremos. Bajemos a la parte de memor... Voilá ahí estaba. Los slots de la mother no soportaban slims de 2GB. Como mucho de 1Gb. ahhh. Vaya detalle. 

Confiaba que el de la tienda las consiguiera. Hora de volver al curro. Enciendo el ordenador y uppsss.
'Insert boot disk' 

Me reí. Pensé. Bah. Algún error de la BIOS. Vamos a ello. Nop. No era un error de la BIOS

Como tonto reintente un par de veces más sin resultado (¿recuerdan que cuando adquirí el ordenador le paso exactamente lo mismo con windows pero no le di importancia?)

Vale, Vencido, derrotado. agot... Deja de llorar. Escorpión como soy con el estigma del ave fénix no podía por una razón sanguínea dejarme caer.

Tenia distribuciones de test junto con las oficiales. Algo comente en un post anterior. Así que a bootear desde el CD. Energía tengo. Valor no. Había un par de soluciones posibles pero tenia miedo de perder el disco, algo ridículo porque si no lo solucionaba no tenia disco, pero mi mente es así de enrevesada a veces. 

Hay un test que traen todas las distribuciones de Linux y que no había usado. Voy a ser sincero lo puse para no sentir que no hacia nada mientras me auto compadecía por mí situación. 

Memory Test: Dos versiones usadas. Dos veces comprobado. Uno de los slots de memoria fallaba estrepitosamente en el testeo.

Ahhh amigo. Por eso las irregularidades de Kubuntu 12 cuando lo instale, ¿los problemas de rendimiento? y seguramente el problema del disco. 

Vale, Conocemos el problema. De 2Gb de memoria (que ya era poco) solo tengo la mitad.
Genial. Menos memoria. Sin Disco. La cosa mejoraba por momentos. Mire la hora.

14:00 Mala hora para tener un negocio

Tienda cerrada. De todas maneras le envíe un WhatsApp al de la tienda (Si tenia su WhatsApp porque como recordaran es cliente mio) 

Ansiedad, mal comer, derrotismo. En fin. Lo normal en una espera.

17:30 Dame una solución please. 

Llegue a la tienda y OH OH. 2 Gb esperándome a cambio del que le traía yo. Y LA GRABADORA. El día cambiaba de color al fin. Ajustes económicos hechos me volví a casa no sin antes pasar por una tienda y adquirir 3 DVD's. ¿Porque 3 y no uno? porque en el pack le quedaba 3 y eso fue una suerte ya verán porque.

La Grabadora fue como la seda. Las memorias no tanto. Ambas fallaban.  Una provocaba que la motherboard pitara continuamente (probablemente un cortocircuito en los componentes de la memoria) y la otra congelaba la BIOS y volcaba unas rayas raras en el monitor. 

Tranquilos. No pasa nada. Hay faena por delante. Avise al de la tienda. Quedamos para el día siguiente resolverlo. Mientras tenia un plan. No se porque no me fiaba del disco que tenia puesto así que fui probando otros míos. Logre instalar uno de 40Gb IDE. 

Bootear desde CD -> kubuntu 12 de nuevo. (Tranquilos. No hacia más falta las actualizaciones) La idea era entrar a internet, bajar un ISO y grabar en el DVD. 

Pase como una hora mirando ISO's. Eso es como ser adicto al azúcar y tener un vale para una casa de chucherías. Quien dice una hora dice más pero me avergüenza reconocer que se me iban las horas. 

Al final estaba perdido por cual seria la mejor opción así que pensé. Si ya tenia un Xubuntu seria por algo. Dicho y hecho. Xubuntu 18.04 bajando. 

Hace unos años grabar en DVD era todo un arte (encontrar el DVD, tener la grabadora adecuada, el software que si legal o no. Historias) Kubuntu tiene k3b que es un software de KDE veterano en la grabación de CD's y DVD's. Tuve muchas dudas con las opciones porque no tenia ni idea pero la verdad es que por más que miraba internet no me aclaraba. Tenia 3 DVD. Probemos. 

Una maravilla. Funciono a la primer sin tener que elegir nada especial. Todo Auto y el DVD era bootable. 

Genial. Siguiente paso. Instalar Xubuntu 18.04
Fue como la seda en el disco de 40Gb. Perfecto. Ahora las herramientas. 

Ir rápido no siempre es lo mejor. 

Primero el node... umm... No me bajaba el 12 que era el último. Ni siquiera el 10 que es el último LTS. Que raro. 

Probé VsCode. No lo instalaba. No encontraba una versión para esa distribución, pero si Ubuntu es Ubuntu y lo instale en Kubuntu... ¿Que está pasando? 

Baje la toolbox de Jetbrains. Más de lo mismo. No iba porque no estaba instalada la opción de las AppImages.

En cambio WebStorm y PhPStorm bajados de forma independiente si
Algo no estaba bien con esa distribución.

Fue increíble ver abrirse WebStorm en un entorno que era demasiado poco para VsCode. ¿Como era eso posible? En WebStorm todo iba correcto. 

Chrome. Bien. 

De pronto y sobre todo por no tener node (indispensable para mi curro) se me ocurrió que podía estar pasando. 

Revise las instalaciones posibles de VsCode. El error indicaba que para mi arquitectura no existía una versión. En el repositorio todos eran amd64.... Y ahí salto la alarma. Estaba con una distribución de 32 bits.

En linux existe un comando: arch. Te devuelve la arquitectura que tienes en ese momento. Me devolvió i686

i686 es un indicativo que estas usando un OS de 32bits en una arquitectura de 64bits. 

Cuando me baje la ISO me baje la ISO equivocada. Si si. Despistado y tonto. Así soy yo. En fin. La solución era obvia. Internet. Xubuntu. ISO amd64. 

Esta vez grabe con xfburn que es una opción de GNOME a la grabación de DVD's. Como la seda otra vez.

22:00 horas. Termina ya que tengo la vista cansada de leerte

Ahora si ¿si?. Si. Grabe en el disco de 160Gb sobre el kubuntu fallido. Todo fue correctisimo. Pero aun teníamos el problema de la memoria. Post largo. Sigamos mañana.

Aventuras de la hackathon (La semana se viene con fuerza): Domingo noche VII of IX

Retroceder nunca, rendirse jamas 

(gran titulo para una mala peli)

21:00 Aprendiendo cosas por huev... Obligación. (aun domingo)

Esa noche iba a ponerme al día. Actualizar el código, escribir estos artículos, y además recibirá el aplauso de todo el mundo por superar los problemas y adelantar faena. Así seria sin dudas (Eso de tener energía no es tan bueno como cuentan)

Nunca me he preocupado demasiado de la administración de recursos de mi ordenador. Creo que es un mal de nuestros tiempos que simplemente se compra más de todo y ya.

En la situación que estaba iba a aprender un par de cositas.

Lo primero fue que el paquete de VsCode que use no funciono como debía. Demoraba demasiado para no tener plugins ninguno y al final se congelo un buen rato (yo use una versión bajada de los repositorios de microsoft. Luego descubriría que Ubuntu tiene un snap (una versión alternativa a las AppIamge pero de la mano de Ubuntu) que funciona mejor pero en ese momento no lo sabia.

Así que fui por el WebStorm (además me gusta el webstorm y de todas maneras le iba a dar una oportunidad.) llegados a este punto tratare que no se note mi fanatismo reciente por Jetbrains (todo hay que decirlo).

El arranque del IDE fue lento (cosa normal siempre que lo abres por primera vez, pero puede que un poco más de lo normal). No tuve que configurarle nada porque toma de mi cuenta online (si así se lo solicito) los temas, fuentes, y plugins que estaba usando.

Una vez que se inicio y se reinstalaron los plugin hay que reiniciarlo. Así que pude medir la velocidad de inicio. Estaba lento. Bueno. Era de esperar supongo. 

Pero OH LA LA. Ahí estaba. Preparado para la lucha. Perfecto. Abrí terminal y Chrome. Bueno. Comenzó un camino hacia el desastre y mi odio a la poca optimización de recursos de parte de Chrome. 

Las distribuciones de Ubuntu (supongo que las demás también pero no lo sé) llevan un monitor de recursos que te indica el estado de los procesos abiertos, la memoria, el uso de la cpu, disco y demás.

Cuando abrí Chrome el sistema se congelo un rato. Un rato largo. No se colgó pero ahí estaba. Si movía el mouse tardaba como dos minutos en hacer el movimiento. Espere y con paciencia fui acercando el mouse a la X de la ventana para cerrarlo. Cerrado Chrome todo fluía más o menos bien. 

Recordemos que también estaba abierto el WebStorm. 

Como sobrevivir a esto y no morir en el intento? puffff.

Abrí el monitor de recursos y use algo de las GUI de Linux que me encanta y es la posibilidad de poner una ventana siempre por encima de las demás. De esa manera podía ver como evolucionaba todo sin que nada me tapara la información.

23:00 Llevas de pie demasiadas horas. Todo lo que hagas lo harás mal 

Cerré todo. Reinicie el sistema. Más que nada porque estaba empezando a preocuparme de nuevo de no llegar. 

Abrí el monitor de recursos primero que nada. Ventanita siempre por encima y al lio.

Clone el repositorio del proyecto. Abrí WebStorm. Los productos de JetBrains te permites cambiar variables de la JVM (Por si hace falta aclararlo todos los productos de Jetbrains se desarrollan sobre Java) pero por ahora no toque nada.
El WebStorm indexa el contenido del proyecto para luego asistirte en el código (llamadas automáticas de import, funciones propias o de los module de node, búsqueda de carpetas en los paths, etc.) Ese indexado consume algunos recursos así que espere a que terminara de hacerlo (que no es rápido pero si eficaz) y mire el monitor. WebStorm consume recursos lenta pero inexorablemente. 

Siguiente paso. El navegador. Chrome.
Chrome debería ir a una clínica de tratamiento de la adicción a la RAM. No solo se abre una instancia de Chrome sino varias y todas consumiendo. No se como es eso pero se disparo de repente. 

Paciencia.

Apaciguado Chrome quedaba otro demonio que no había tomado en cuenta.

En el terminal ejecute el dev de yarn para el proyecto y ahí apareció en el consumo de memoria: Node.

Los limites de la memoria estaba casi casi alcanzados. Hora de decisiones. 
Cerré Chrome y abrí Firefox.
Nunca podre negar que Firefox es más liviano que Chrome pero hasta ahí las ventajas que me encontré. 
Quería navegar hasta mi cuenta de github para pillar un paquete para el proyecto que ya tenia con estrellas y Github lo tengo en la validación por dos pasos. O sea que cuando me logueo con un dispositivo por primera vez me envía un sms con un código que debo ingresar para verificar que soy yo. 

Firefox me lanzo "Esta pestaña ha fallado" un par de veces que se iba con actualizar la página pero entonces Github volvía a enviar el SMS. Un desastre que se me repitió en otros sitios a lo que intente entrar con firefox. 

Tema aparte ya tenia el proceso de instalación del paquete y eso funciono correctamente. Pero cuando use la devtools de Firefox me lleve otra decepción. Demasiada información irrelevante que no me permitía encontrar los datos que buscaba con facilidad. 

FireFox no me gusta para desarrollo. (Lo siento Juan). Y Chrome era un consumidor de memoria. 

03:00 Duerme anda

Otra vez entraba en estado de agotamiento mental y estrés sicológico. NO LLEGABA!!!! Pensando que ya había hecho lo posible,  con los ojos cerrándose y agotadisimo apague todo y fui a dormir. 

Me esperaba una semana de más complicaciones pero también de encontrar el camino final. Vamos a por el ultimo tramo!!!.

Vuejs para programadores jQuery. Galería. Load More XVI

Vuejs para programadores jQuery. Galería. Load More XVI En el artículo de hoy vamos a tratar el tema de plugins de jQuery (crearemos dos) ...