Bitácora

2023

29.Dic.23

Episodio S: Saludando al 2024
2.116 reproducciones en total

Me he puesto a leer el libro de Swift in Depth, practicando los ejercicios. Me ha gustado como mi nivel de comprensión es más alto, como voy asimilando los conceptos, entendiendo un poco más de lo que me imaginaba, recordaba o me creía capaz.

28.Dic.23

Me comprado el libro de Swift in Depth que estaba de promoción por 20€. Aunque lo puedes leer en la web gratuitamente no es nada cómodo. Así que he esperado a una promoción que suele estar entre 20-25-30€.

Llevaba 2 o 3 capítulos leídos y decidí tenerlo mejor en EPUB.

21.Dic.23

Hoy ha sido mi primer día sin tocar código. Me ha costado, me gusta tanto que puedo hacerlo incluso en estos días de “vacaciones”, pero debo intentar desconectar. Centrarme en otras cosas, aquello que he ido guardando para hacer más tarde, para leer más tarde y que por el proyecto no he querido dedicar tiempo a ello.

El día 2 de enero volveré.

20.Dic.23

He enviado ya el proyecto final. Tal como quería el día 20 de diciembre, para tomarme unos días de vacaciones del proyecto, dejar de tocarlo y pensar en otra cosa.

Le he dedicado un total de 540 horas y 50 minutos, esos son 22 días y medio de continuo trabajando o 68 días o 3 meses en jornadas de 8 horas.

Desde el mes de mayo hast ahora, quedaron mas o menos así los meses:
Mayo: 17 horas
Junio 13
Julio 29
Agosto 146 horas
Septiembre 80
Octubre 62
Noviembre 112
Diciembre 81

Me ha respondido el correo pocas horas después de recibido. Eso me alivia. Saber que ya lo tiene.

Después de enviarlo, me he puesto a ver un par de vídeos de Julio Cesar, uno de una master class de arquitectura y otro una entrevista de cambio profesional de uno de los alumnos. Después a escuchar lass primeras clases de Swift, me gustaría dar un repaso a todas las clases del bootcamp.

También he revisado esos recordatorios de por leer, por ver que me he guardado este semestre, e ir limpiando esa lista.

He también comenzado a mirar vídeos de lo que será el siguiente paso: publicar la app.

He visto un vídeo sobre TestFlight y hace días una actualización de un curso de Udemy en la que explica con poner las compras integradas

Es el siguiente objetivo.

18.Dic.23

He solucionado el error de la activación y desactivación del password. Mi planteamiento era erróneo, estaba dejando a un solo botón la responsabilidad de 1) habilitar contraseña si no había, 2) mostrar la ventana de mostrar activa tu contraseña, 3) solicitar la contraseña si quería desactivar la Nueva para después, 4) mostrar esa ventana y 5) solicitar la nueva contraseña.
Así que después de, primero no tener ni idea, buscar algún tutorial donde mostrara la lógica, preguntar a chatGPT, fue este último quien me dio un camino el cual seguir, al mostrarme que separaba el trigger de la propiedad que guarda si se requiere contraseña.

Está vez no lo celebre tanto, quizá porque sentía la presión de tener una fecha límite para la entrega; pase directamente a lo siguiente.

Luego corregí un par de bugs, y me puse a probar cómo mejorar la vista de las cuadrículas de las fotos, le di varias vueltas y ha quedado bien, pero no me ha terminado de gustar algún detalle. También hay algo con las animaciones, que no son del todo fluidas, no está mal, pero se que podría quedar mejor.

Son pequeños detalles, mañana me gustaría limpiar el código, quitando el polvo, comentarios, párrafos en blanco, etc.

17.Dic.23

He estado viendo la manera en enviar los archivos zip del proyecto. Una es con un enlace de descarga, con su contraseña, y a los archivos zip también con contraseña.

Aunque ya comprimidos los podría enviar por correo electrónico perfectamente, sin los packages, el de Vapor apenas pesa nada.

He preparado una pequeña descripción de los proyectos, para que sea más fácil tener una idea general de qué va mi proyecto final.

15.Dic.23

Episodio R: Revelando mi proyecto final
2.099 reproducciones totales.

Esta es la comparativa del bosquejo de las pantallas y el resultado final.

Aunque el diseño ha cambiado, la idea y el contenido es el mismo, de alguna manera he seguido el plan, con sus ajustes, algo normal. Estoy contento con el resultado.

14.Dic.23

Espero sea la última vista que añado al proyecto final. 😝. Sentía que faltaba y me he aventurado. He cambiado en la Tab Explorar la vista del botón Encuentros, no tenia nada. Así que he añadido 12 cuadrículas, una por cada mes en la que se muestran el icono de un par de banderas por cada encuentro completado ese mes, hasta 5, para que las cuadrículas sean iguales de tamaño.
Comencé por el diseño, un bosquejo en la pizarra me ayudó a definir la vista.
Después hay que asegurarse que los elementos estén alineados.
Me suele suceder que hasta que no estoy dentro del problema no comienzo a ver aspectos no previstos.

  • ¿Que pasa si algún mes no hay ningún ejemplo completado?
  • Si ha empezado en diciembre ¿cómo genero la cuadrícula de los meses desde enero?
  • Si hace 10 encuentros en un mes ¿porque se amontonan más banderas y la cuadrícula cambia de tamaño?
  • Ahora que cambia el año ¿cómo diferenciar los meses de cada año? ¿Debe existir una cuadrícula por cada mes de cada año?
  • Tengo una cuadrilla que invita a pulsar, ahora tengo que poner un detalle. ¿Que muestro en ese detalle? ¿Cómo lo muestro?

⠀Van surgiendo retos, quizá es la falta de planeación.

13.Dic.23

He conseguido hacer la vista mensual de los dailies interactiva. Es decir, que cuando se pulse algún día con el daily hecho muestre en la parte inferior la instrucción. Lo he cambiado a la parte de explorar y que se vayan añadiendo dailies al listado que aparece abajo.
Me ha gustado como ha quedado.

He empezado ahora con la vista de los encuentros, quisiera mostrar 12 grids, en los cuales se pueda ver en un gris el conteo de los encuentros realizados. Para poder entrar al detalle.

12.Dic.23

¡Tengo ya proyecto que entregar!

Me hace falta hacer algunas pruebas, pero lo que faltaba por integrar: la contraseña y la actualización de nuevos ítems lo realiza.

Me da mucha tranquilidad, el ya tenerlo terminado. He hablado con un par de compañeros del bootcamp, uno de ellos casi lo tiene, el otro lo ha dejado porque le costó mucho implementar Vapor. Otros 3 no lo tienen tampoco terminado. Me da gusto saber que he podido hacerlo y sobre todo que el feedback de los 2 a quienes de los enseñé (Rubén y Alberto) ha sido muy positivo.

11.Dic.23

Voy limpiando cada vez más esa lista de tareas sobre el proyecto final. Al final he ido solventando incluso las que en su momento no encontré solución. Como el hecho de poder obtener los tags de los encuentros filtrados (completados y pendientes) y ponerlos como filtros. Antes fotos todos los tags para filtrar y resultaba que algún tag no contenía ningún encuentro. Ahora si.

Estoy dando otro repaso a la parte del password. Desde su creación hasta poder usarlo, porque encontré un error y al revisarlo me he encontrado que puedo plantearlo mejor. Hay que refactorizar.

10.Dic.23

Hoy he estado trabajando en el proyecto unas 4 horas. Corrigiendo bugs y añadiendo o cambiando funcionalidades que en un principio definí y que en la práctica tienen que ser de otra manera.
Quedan muchos detalles, pero hay dos plazos, el primero el 31 de diciembre, como proyecto final. Después otro para publicar la app. El cual no me he planteado fecha, pero me gustaría que fuera en enero o febrero. Tendré en estos días que definir ese deadline de lo contrario no tendré ningún incentivo más allá del placer que me da trabajar en esta app. Debo clarificar ese objetivo de entrega.

8.Dic.23

He añadido ya las imágenes de las insignias, pronto tendré que ponerme con el listado de dailies y las actividades, es quizá sentarme en la mesa del comedor y comenzar a escribir, una lluvia de ideas.
La calidad de las actividades no influirá en la valoración del proyecto. Así que puede ser una primera toma de contacto y quizá sobre todo crear un método para ir añadiendo items en cualquier momento. Podría crear un atajo en el que fuera introduciendo ideas y que rellenara un numbers, mismo que pudiera después exportar a un json para incluir en la app.

6.Dic.23

Hoy he generado las imágenes que llevará la app, al menos para la entrega como proyecto final. Mañana se termina la suscripción de mid journey, que si de Baja el mes pasado, junto con HWS+ para ahorrar un poco, además de que midjourney lo estaba infrautilizando.

Ha tocado componentizar las vistas. De la vista principal, extraer una sub-vista para que en todas se pudiera ver el código sin hacer scroll.

También quiero dar la opción de poder ver los encuentros obtenidos con 3 vistas. Por categorías, por tags y un listado normal.

Hecho esto me gustaría refactorizar los @Environments y @StateObjects que me parece que están algo desordenados. ¿Donde generar la fuente de datos? En la ventana principal de la app o en cada tabs, aunque luego se comparten.

Refactorizar sin romper nada.

4.Dic.23

Toca hacer ajustes a la interfaz de usuario. Cambiar / corregir las vistas. Como el usuario debe percibir la app, que le debe llevar a hacer, a donde debe dirigirse su mirada, donde debe tocar, hacia donde tiene que ir después de cada pulsación.

Por intentar de ser minimalista no he sido claro. Algunas etiquetas las he dejado solamente con un icono y no expresan exactamente lo que quiero que sepa el usuario. Así que toca corregir.

Hay que mover trozos de código de un sitio a otro, de una vista a otra y refinar sus acciones.

Ayer pensé en calcular las horas que me quedan, las horas que según las estadísticas llevo trabajada diariamente multiplicadas por los días que tengo. Aunque eso sería añadir demasiada presión, presión innecesaria.
Esta semana trabajaré en mejoras en la UI según el feedback recibido, luego se lo mostraré a Nic para aún afinar más y probar bugs. Para después pnerme a refactorizar el código, hacerlo más legible para otros. Para poderlo entregar.
Ahora mismo tengo ya un proyecto entregable, pero mejorable.
En enero será ya un camino distinto, el viaje hacia la App Store y publicarla, que aún tengo un trecho.

3.Dic.23

Hoy he seguido mostrando la app a un par de personas. Me ha servido mucho para saber que tengo que agregar, que la interfaz sea más descriptiva y sobre todo que responda a lo que los usuarios creen que hará cada elemento.

Me ha dado mucha idea de que mejorar. Ahora es pensar como van a ser esos cambios. Que poner exactamente.

2.Dic.23

Hoy he dado a un amigo a probar la app. Hay que decir que el es usuario de Android, con lo cual la navegación lo tenía un poco confundido.

He descubierto algunos bugs que tengo que resolver y añadir etiquetas con la descripción donde ahora solo hay un icono.

Se que esto debería hacerse al inicio, en un Keynote, que con los botones te vaya llevando la navegación. Lo intenté hacer, pero no estaba seguro del diseño final, de hecho este diseño ha sido una evolución a partir de lo que veía que no me gustaba, lo cambiaba y luego había otro elemento que no armonizaba, el cual volvía a cambiar y así.

1.Dic.23

Episodio Q: Quitando el pesimismo
2.062 reproducciones en total

Spotify me ha mostrado el wrapped del año

30.Nov.23

¡Que subidón!

Entre las varias tareas que tengo en el backlog del proyecto, las que he ido realizando o bien descartando temporal o completamente. Llegué a la que tenía que añadir un filtro por tag. para las actividades que el usuario aún no ha obtenido. Primero tanteé la posibilidad de añadir tokens en la barra de búsqueda, que añadiendo un “#” se mostrara el listado de tags para seleccionar y filtrar. Con Core Data, me di cuenta de que no iba a ser nada sencillo, así que descarté hacerlo de esa manera.
Busqué en alguna app nativa la manera en que se podía filtrar por etiquetas. ¿Cómo lo hace Apple? La app de recordatorios tiene una manera de filtrar. Un scroll horizontal donde por botones pulsas que etiqueta quieres o no quieres que esté.
Así que me pareció buena idea implementarlo.
Tenía que ser una subvista. Primero añadí los botones con los todos tags y uno al inicio que pusiera todos.
Que el usuario solo pudiera filtrar por hasta 2 tags. Una tag pulsada una vez no podía volver a ser seleccionada, y que cuando pulsaba más de dos tags la primera seleccionada se eliminara. (Primeras entradas, primeras salidas)
Luego para pruebas puse el listado de actividades no obtenidas aún. Y aquí viene la parte complicada: actualizar el nspredicate cada vez que se pulsaba un botón.
Busque en NsPredicates 💬 | Example Cheatsheet como filtrar si los elementos contienen algún elemento que está en el array.

29.Nov.23

Estoy haciendo grandes avances en la app. Hoy he añadido la funcionalidad de recordatorios. La posibilidad de añadir hasta 3 recordatorios para recordar que tienes que hacer un daily. Que quizá deberían anularse los posteriores si es que el daily ha sido completado 🧐. Ahora caigo en eso. (Si es posible quitarlo, quizás no)
En fin, luego he hecho un poco de limpieza, haciendo test me doy cuenta de los métodos que no utilizo y los borro.
Cambio de ubicación o a variables estáticas, sobre todo si llevan algún campo String, por ejemplo la imagen de placeholder. Si el usuario no ha puesto una, o si carga con error o así.

28.Nov.23

He encontrado una oferta que me ha gustado mucho como la he preparado. La inscripción se hacía directamente en su web. Para comenzar tenía 2 preguntas:

Cuéntanos qué proyectos o desarrollos has realizado de forma autodidacta

Explícanos como mejoras tus conocimientos de forma autodidacta

Las cuales me tomé el tiempo para responder.

Posteriormente venía el formulario de inscripción, lo vinculé a LinkedIn y venía un campo llamado Carta de motivación, el cual también completé sinceramente y a conciencia.

Para finalizar tenías la opción de añadir 3 referencias, de 3 contactos. A los cuales puse al manager de mi anterior empleo, a un compañero del Bootcamp y al Project Manager de Apple Coding Academy. Primero avisé a los 3 por mensajería, los que me respondieron que con gusto lo harían.

Me ha hecho mucha ilusión esta oferta, he tardado algunas horas en preparar lo que escribiría, revisarlo, conocer a la empresa, navegar por sus webs, ver los servicios que ofrecían, descargarme sus apps. En si conocer a la empresa. La que me di cuenta que pone énfasis en sus trabajadores (fotos de ellos, encuentros que hacen), lo cual me ha gustado.

Vuelvo a estar motivado y feliz por haber encontrado una oferta así.

27.Nov.23

Voy avanzando en la revisión de pantallas. Añadiendo animaciones, enfatizando en lo que debería ver el usuario primero. Quitando, sobre todo quitando alguna cosa que no me gusta o considero que no debería ir. Añadiendo alguna otra que creo que si debería estar.
Es un proceso que no se termina, además porque hasta que no reciba el suficiente feedback no estaré realmente seguro de los cambios necesarios. Queda una pantalla por animar y revisar.

Puede que la próxima semana pague ya la cuota de desarrollador Apple, que me ponga a revisar que hay por ahí.

También he pensado en cuando publique la app. Los dailies serán gratuitos, quizá 100 o 200, el usuario podrá comprar el pack Encuentros, con una cantidad limitada de ellos y hasta 300 Dailies (por ejemplo) y luego la modalidad de suscripción en la que recibirá actualizaciones con nuevos Encuentros y Dailies .
En un futuro podría añadir más tipos de actividades, como algún reto o quizá íntimas. Aún no lo he pensado demasiado.

24.Nov.23

He recalado las imágenes que se guardan de los encuentros. Estaba guardando la imagen original, que para las pruebas pesaba unos 13Mb y era de unos 4.000 x 2.000. Así que cada vez que la mostraba el sistema tenía que re-escalar esa imagen y mostrarla en una altura de 150 para la lista y de 400 de ancho para mostrar el detalle. Lo cual cada vez iba gastando cada vez más memoria, llegué a ver que consumía ¡¡400Mb por unas cuantas fotos!!
Así que busqué en mis notas en que clase habíamos visto ese tema del escalado de fotos y vi el vídeo. Lo implementé, reescalando dos veces la imagen, una para el detalle y otra para el listado.
La diferencia considerable, tanto en memoria de las fotos guardadas en la carpeta de documentos, como en el uso de la app.

23.Nov.23

He mejorado la vista del detalle Encuentro, creo que se ve más moderna. He añadido un ScrollView la imagen la he puesto en la parte superior, del ancho de la pantalla. El botón de guardar lo he puesto en rojo, como el resto de botones. A las instrucciones puedes darles un tap y te aparecen en un popUp. Me
Ha costado definir el diseño, o no encajaban bien los elementos o no terminaba de convencerme.

Mañana tocará refactorizar el tamaño de las imágenes, que al guardarlas no las escalo lo suficiente (que viendo el código no estoy seguro si se escalan o no) con lo cual consumen muchísima memoria.

Debería dedicarle más tiempo al proyecto, estoy ahora solo por las tardes, unas 4 – 5 horas. Por la mañana entre el entrenamiento y deberes de casa apenas me da tiempo de meter ofertas y ver algún vídeo de HWS+ que tomo como calentamiento. Aunque me he dado cuenta que esas pocas horas estoy más enfocado, me distraigo menos, estoy más concentrado. Quizá porque me presiono a enfocarme, quizá el monitor que solo me permite tener una ventana abierta, no lo sé.

Hace años siempre tuve la intención, idea, sueño de escribir un libro, de volverme escritor. Ahora veo este proyecto que he escrito yo como va tomando forma. Una similitud que me vale, porque la app cuenta una historia, tiene un principio y un fin, un mensaje para el usuario, una legibilidad que se refleja en la facilidad de uso. La editorial la App Store.

21.Nov.23

Ha sido un buen día. No he encontrado ninguna oferta que meter, pero he avanzado en el proyecto. Mejorando la estética de las pantallas y añadiendo animaciones.

Le he instalado a Nic la app para que la pruebe y me sugiera cambios. Descubra bugs y me de su punto de vista sobre algunas pantallas.

20.Nov.23

He conseguido cambiar la vista de las fotos a algo más parecido a la app de Photos, un grid de 3 fotos pegadas una a otra con una borde blanco de separación.
Aunque analizando el rendimiento me he dado cuenta de que está consumiendo mucha memoria. Es verdad que no he puesto ninguna vista thumbnail sino que está cogiendo la foto original.
Algo tendré que cambiar

Comencé con las animaciones, aunque no sabía bien por dónde empeza, ni que animar. Quizá lo más fácil para ir empezando sea, coger el libro de Swift animations de Big Mountain Studio ir avanzando páginas y ver que animaciones puedo meter en que parte.

Hoy las que he querido implementar no quedaban del todo finas.

Lo bueno de hoy. He logrado mejorar la vista de las fotos y organizar los meses por fecha.

17.Nov.23

Episodio P Puliendo el proyecto final Publicado

2.032 reproducciones totales

He añadido todos los mensajes de error que pudiera lanzar la app. He quitado los print y los he cambiado por breakpoints. No sabía muy bien por dónde comenzar.

Así que en el proyecto de prueba, añadí algunas funciones con throws para que lanzaran el error cuando presionara un botón. Cree un struct con un el Modelo de lo que sería el error y un enum con la tipología de error, el título y el mensaje que mostraría al usuario y así centralizarlo. Hice algunas pruebas y estando conforme lo apliqué al proyecto final.

Primero fui a la primera vista y miré si tenía algún throws o do,try,catch en el viewModel para añadir las propiedades correspondientes, que se presentara la alerta, y añadir los cambios si hubiese algún error. Así con dos vistas.
Decidí que era mejor buscar los throws, los prints, los catch para ver todas las “marcas” que había dejado, normalmente ponía print(>> Error…, eso facilitó un poco, aunque no lo hice en todo

16.Nov.23

Hoy me han respondido de Sngular. Le escribí ayer a Alberto Díaz, con quien tuve mi última entrevista en septiembre, diciéndole que Ricardo no me había respondido aún. Se disculpó y me comentó que de momento no hay ningún proyecto concretado al que puede entrar. Pero que si hubiese alguno me llamaría, así que aún no doy esa oportunidad como perdida, simplemente pospuesta.

15.Nov.23

Ha sido un buen día. He conseguido mezclar los contenedores del día y el context con los dailies para que se actualice en cuanto el usuario completa el daily.

Corregí e hice varios cambios antes, refsctorice las vistas con el ZStack para que ya incluyera el color de fondo y quitar así 3 o 4 líneas de la view que se repetían en todas las views. Volví a corregir la ”compra” de la actividad que se triplicaba en los movimientos quitando mas saldo del que debería.

Una vez hecho el calentamiento me puse con la vista mensual. Una vez que comienzas el proceso mental y vas corrigiendo, comprobando, avanzando en la solución lo mejor es no detenerse, no distraerse terminar el ciclo hasta que lo consigues o te das cuenta de que no lo vas a conseguir. Es lo que a mí me funciona. Y ayer me funcionó.

Hice una tercera función donde pude cambiar aquello que necesitaba para que los datos los tomara directamente de la fuente de la verdad (the source of the truth”. Filtrar los dailies correspondientes al mes, comparar la fecha que representa el contenedor del día del mes con la fecha de daily y pasar esa información a la vista.

Lo conseguí, un reto para mi, lo veía como de los puntos principales que debía tener la app. Una emoción por haberlo conseguido que me llena de felicidad. Momentánea por que enseguida se presenta el siguiente reto: la vista anual.

Con las bases, un descanso me puse a corregir la vista anual, que era resuelve el mismo problema pero de manera distinta, podría decir más sencilla. Porque no hay que lidiar con días de la semana ni inicios de mes. Todos comienzan el día uno y terminan su último día (también hay que calcular eso), así que con el mismo proceso de pensamiento y sus ajustes corregí la vista anual. Que no es necesario que se actualice cuando el usuario le da al botón, porque está en el apartado de estadísticas, pero tenía el error de que al comprar las fechas convertidas a número. Por ejemplo (23118) para el 8 de noviembre del 2023, se pintaba al mismo tiempo el 18 de enero del 2023 porque el “número” era el mismo. Así que bug como un triceratops. Con esta nueva implementación, solucionado.

14.Nov.23

Ha sido un buen día. He seguido corrigiendo y añadiendo cosas al proyecto final. Puliendo los detalles, sigo sin poder corregir la vista mensual, pero mañana le dedicaré otra vez un rato a ver si puedo darle la vuelta.

De una oferta me han pedido los datos, vía web los he añadido, es una agencia de colocación.

13.Nov.23

Hoy no he estado muy animado que digamos. Es probable que hoy se me haya pasado la mano entrenando y me sentía cansado, incluso podría decir desmotivado, efectos del abuso. Por la mañana prácticamente no toqué nada sobre programación, entre que hay que preparar la comida para comer a la 1 y entreno de 9 a 11, decidí dejarlo para después de comer.

No tenía ganas de abrir el proyecto final, quizá sea porque he llegado un punto en el que quedan detalles, también quedan correcciones que me costarán trabajo, que no estoy seguro cómo corregir y ya no digamos si síguete podré implementar.
Así que me puse unos vídeos de Hacking with swift, de Swift Avanzado, alguno demasiado avanzado, y lo decía Paul Hudson que él le costó tiempo entenderlo, así que con un vídeo de 40 minutos para mi iba a ser casi imposible comprender todo lo que estaba explicado, al menos se que existe.

Ya un poco más tarde, casi me obligué a abrir el proyecto y comencé a corregir la vista mensual. El problema que tiene es que no se refresca cuando el usuario completa el daily, están en la misma ventana y como para poner en cada día del mes se genera un array de tags que hace match con el día del mes, no recibe la información de que el usuario ha completado ese daily y tiene que salir y volver a entrar. Para solucionarlo tengo que coger la información directamente de la Fuente, del context y el problema surge cuando quiero crear un calendario con esa información, que podría o no estar completa. En el array soy yo el que pinta toda los cuadros del día, en el context dependí de que estén ahí.

Logré hacer el calendario con el context, pero aún tiene varios errores, comenzaba poniendo el día 1 un domingo sin importar el mes, y no estoy seguro como pinte el último día del mes.
Quizá lo mejor sería hacer una mezcla entre ambos, que yo pinté la cuadrícula y el context rellene.

Espero mañana encontrarme un poco mejor de ánimo.

9.Nov.23

La de pequeños detalles que estoy solucionando en el proyecto. Del listado que me hice, creo que eran unas 24 tareas, las he dejado en unas 6.

Voy probando y puliendo detalles, afinando la estética. Van quedando quizá las más difíciles, en las que tendría que hacer cambios más significativos.
Quedan algunas features que debo añadir, como el login. También me gustaría añadir el on-boarding, las instrucciones.

Espero la próxima semana tenerlo terminado.

8.Nov.23

Hoy ha tocado hacer menos tests, pero más pruebas, estoy encontrando y corrigiendo bugs que a los que no me había enfrentado si no tuviera que implementar los botones de borrar Dailies y borrar todos los datos de la base de datos. Lo positivo es que los voy corrigiendo.

He hecho un listado de lo que debería hacer y lo que debería corregir y es largo, además van saliendo correcciones mientras hago correcciones, parece que no se terminará nunca.

Mejoras, detalles que voy puliendo, van dando forma.

6.Nov.23

Hoy tocaba hacer tests de los viewModels del apartado de dailies. Hay un método que obtiene de la base de datos el listado de dailies, los ordena por fecha (el más reciente al final) y del que tengo que devolver la racha actual de dailies completados. Con la particularidad que:

  • si el daily de hoy está hecho, se suma a la racha
  • Si no está hecho, busca el de ayer y si está hecho, comienza a contar la racha

⠀Hasta ahí todo bien. En teoría, desde el inicio del juego todos los días tienen su daily, son consecutivos, hay un método que se encarga de rellenar la base de datos con todos los días hasta el día actual, si es que el usuario no ha entrado varios días a la app o bien el daily del día si entró ayer.

Los datos de prueba que hecho son un json que tienen fechas fijas no consecutivas. Con lo cual tomando esos datos en los test la racha debería ser 0. Tendría que crear dailies al momento del test con días anteriores para que se crease una racha.

El punto está en que no he podido conseguir que cuente la racha tomando en consideración las fechas, tendría que considerar la de hoy e ir restando días segun avanza y el l daily está completado, en cuanto no esté completado o falte un día la racha se rompe.

He estado un rato largo con ese método y no logré hacerla hacer así, intenté varias aproximaciones, escribirlo en la pizarra, pero no lo conseguí ( o no lo he conseguido) pase a los siguientes viewModels y he descubierto que los tests ahora se me dan mejor.

No me ha dicho nada de la empresa de consultoría, debería escribir al recruiter a ver si me da alguna información.

3.Nov.23

Hoy ha sido un buen día. He terminado los tests de 2 viewModels , y he refactorizado nombres de variables, métodos, eliminado los que no estaba utilizando.

Me ha gustado porque lo he conseguido. He conseguido probar la bbdd de Coredata y sobretodo desde otra perspectiva, más “madura” podría llamarle en cuanto a escribir y evitar repetir código.

Me ha hecho sentir muy bien.

2.Nov.23

Parece que tengo todo lo que quiero incluir en la app. Que no es todo lo que me gustaría, pero prefiero que esta versión entregable quede así y ahora comenzar a dar un repaso a todo.
Me estoy apuntando todo lo que habría que revisar / corregir. La lista crece por minutos.

Cuando me he dado cuenta de que tenía todo me he quedado un poco parado. No sabía cuál era el siguiente paso. Esta parte no la había visualizado, ni contemplado, así que sé que hay que revisar todo, pero ¿que tendría que revisar?

He reorganizado las carpetas y archivos del proyecto, limpieza y organización.

El siguiente paso sería añadir todos los tests que faltan, ahí me daré cuenta de bugs y podré refactorizar algo de código. Con eso me pondré mañana.

1.Nov.23

Bueno, tengo el endpoint de post de la acción sugerida (daily o encuentro). Me he frustrado porque no recordaba cómo crear el Modelo y la migración en Vapor, esta vez no consulté ningún vídeo de la clase, lo resolví viendo el código que ya tenía.
Lo quise hacer bien, poniendo relaciones en la base de datos, pero me daba un error de Foreign Key al hacer post del json. Después de intentarlo solucionar, me decidí hacerlo por la manera fácil, ponerlo todo como String en lugar de relacionar las tablas. Así a la primera.
He hecho el método en la app y mañana probaré la conexión entre app y server.

Sería la última funcionalidad “complicada “que me queda, sino recuerdo mal.
Tocará repasar el diseño, hacer algunos ajustes que quiero unificar más el tamaño de letra y ponerme con los bugs.
He recubierto uno, que seguro solo pasa el primer día de mes con la vista del calendario mensual, que la fecha que tengo seleccionada hacer temblar la vista, literalmente.

Hoy no me he sentido del todo bien anímicamente, me entra el bajón y comienzo con el ciclo mental de que no lograré este cambio profesional. En cualquier oferta piden experiencia, mínimo 2 años. Hace días que no aplicaba a una, hoy he enviado a 2. De la consultora siguen sin contactarme, mi mujer me ha dicho que les escriba. Me dijeron que para este mes tendrían un proyecto en el que podría entrar.

30.Oct.23

Está terminada la feature de activar contraseña y biometría (faceId o touchId), he visto que está una tercera opción que es opticalId. Aún no lo pongo en al acceder a la app, para no hacer más lentas las pruebas. Lo dejaré para más adelante, cuando haga el splash y demás.

Ahora estoy trabajando en las sugierencias de dailies y actividades que puede hacer el usuario, estarán en la misma vista y con un segmentedPicker se podrá cambiar entre ellos. He hecho el de daily, mañana el de encuentro, en Vapor la lógica para recibir ese json y el viewModel para enviarlo.

El jueves recibí por LinkedIn un mensaje directo de una recruiter diciendo que buscaban un perfil como el mío, le he contestado hoy, le he dado mi número de teléfono y no me ha vuelto a escribir. Vi que había vuelto a ver mi perfil.
Quizá no vio de primeras que no tengo experiencia, pero escribir sin asegurarse de que sea lo que estás buscando, y sobre todo luego no escribir absolutamente nada me ha parecido de muy mala educación. Mañana le escribiré para saber que ha pasado.

29.Oct.23

Quiero hacer un repositorio trabajando con Realm, necesitaba encontrar un tutorial que me diera las directrices de cómo comenzar.
Encontré uno y después busqué en mis notas las ideas que app que pensaba para el podcast. Así que haré una en la que registres tus repeticiones máximas en wods de los ejercicios de Crossfit. Es decir un WOD se compone normalmente de varios ejercicios funcionales diferentes, tomemos como ejemplo el clásico Fran, en el que de deben completar en el menor tiempo posible 21 repeticiones de Thruster, después 21 dominadas, después 15 Thruster y 15 dominadas, finalmente 9 Thruster y 9 dominadas. Escrito en la pizarra del Box se suele ver así:

For time
21-15-9
Thruster 43kg
PullUps

A menos que lleves años entrenando y estés muy, muy, muy en forma, realizar cada bloque de repeticiones sin soltar la barra o sin bajarte de la estructura no es posible.

Me he dado cuenta que además de comparar tus tiempos con el mismo entrenamiento hecho tiempo atrás o tus máximos de peso en cada ejercicio es difícil saber que estás mejorando realmente, puedes guiarte por sensaciones, pero no es comprobable.

Quizá las 21 repeticiones de Fran con 43 kg no puedas hacerlas Unbroken (sin soltar la barra) pero puede que si escalas el WOD a 30 kg lo logres. Si esa así ese es el registro que deberías hacer en la app. 21 repeticiones de Thruster con 30 kg el 1 de octubre, y 10 repeticiones de Thruster con 43 kg.
Eso te servirá de referencia para el WOD que vuelva a tocar thruster, aunque no sea un Fran. Quizá sea un Chipper, formato en el que tienes que es una sola ronda y tienes que completar todas las repeticiones del ejercicio antes de pasar al siguiente, suele ser un alto volumen de repeticiones por ejercicio.
Con esa referencia puedes estimar el tiempo que te llevara completar el WOD y el peso que deberías cargar.

Lo intenté hacer en Excel hace tiempo pero no lo alimente lo suficiente, así que se quedó en eso, una idea.

27.Oct.23

Hoy he avanzado en el procedimiento para crear el password. Un poco más complejo de lo que me pude imaginar en un inicio. No es simplemente añadir una vista en la que se escriban dígitos (en este caso). Quizá necesitaba hacer un fluogtama antes, pero lo hice directamente picando código.

La vista con el TextField lo tenía ya hecho. Al escribir un carácter se iluminaba un corazón, hasta un total de 4.
Así que cuando en la ventana de Contraseña el usuario activa la opción de usar contraseña se muestra la vista de los 4 corazones. Primero pensé en no usar el teclado sino una vista personalizada con los números del 1 al 9. (La hice), al pulsar se rellenaba la propiedad y 4 era el máximo que admitía. Claro hay que pedir confirmación de la contraseña, con lo que primero añadí otro textfield de confirmación. Al meter 4 dígitos en el primer campo tenía que hacer focus (cambiar al siguiente textfield automáticamente. La confirmación válida que sean los mismos dígitos que en el primer campo, así que sino eran los mismos, los borraba y el usuario tiene que escribirlos nuevamente.
¿Y que pasa si el usuario olvida la contraseña? En este caso no podría acceder y tendría que borrar e instalar nuevamente la app. Así que ¿porque no crear una palabra de seguridad que el usuario pueda usar como recurso para recuperar la contraseña. Cree otra vista, en la que primero tendría que crear una palabra de seguridad para que apareciera el campo contraseña. Los dígitos de la contraseña se ocultan pero la palabra se muestra, eso no es coherente.
Después de hacerlo decidí quitarla, primero tengo que hacer funcionar la contraseña antes de complicarme con un paso más.

Así que el usuario activa la opción de usar contraseña, se muestra la vista, introduce la contraseña y la confirmación, ¿y si se arrepiente y quiere cancelar? Hay que poner un botón de cancelar, que borre los campos, vuelva atrás y desactive usar contraseña.
Después de varios intentos, Hecho.
Ya tiene activa la contraseña,¿ y si quiere desactivarla? Habrá que pedírsela de nuevo para ejecutar la acccion.
Así que al desactivarla tiene que mostrar otra vista pidiéndole la contraseña. Necesitaré un campo más que muestre la ventada de Desactivar contraseña (que pensándolo ahora puede ser la misma que pida al inicio).

Entre en un bucle en el que activas la opción, te muestra la vista de contraseña, guardas y desactivas la contraseña te muestra la otra vista, cancelas, te muestra la primera etc. Algo no iba bien.
Corregido.
Ahora queda guardar la contraseña en el Keychain, para ello he ye ido que volver a ver el vídeo de la clase del bootcamp.
Lo implemento, da error , tengo que poner todo en una class… pero eso será mañana..

26.Oct.23

He terminado el tutorial de SwiftUI y Firebase, muy completo, muy detallado, con el adjunto de los proyectos iniciales y finales.
Realmente es un proyecto sencillo, un listado que puedes marcar como completado, la parte interesante es centralizar la información en Firebase, filtrarlo por usuario, anónimo o registrado. Registro con usuario de Apple.

Me gustaría hacerle modificaciones para adaptarlo a la idea de app que tenía en mente de DogMinder. Ya veremos que no le he dedicado hoy nada de tiempo al proyecto final. Quería ver cómo implementaba el usuario y contraseña, aunque no es exactamente como lo voy a implementar yo, porque en el tutorial se genera un usuario anónimo. Aquí es añadir una contraseña solamente.

25.Oct.23

Hoy he terminado la vista de la cantidad de encuentros completados por mes.

He comenzado ahora con el apartado de preferencias y con el login.
Tendré que comenzar a trabajar en los textos, para irlos puliendo poco a poco, hasta alcanzar el resultado deseado.

Es curioso como en las últimas 2 o 3 semanas he añadido a 3 reclutadores de empresas, ninguno me ha contactado todavía.
El último post que publiqué en LinkedIn ha tenido poco más de 800 impresiones. Nada mal para un post de 2 imágenes y quizá apenas 100 palabras.

24.Oct.23

Episodio O Ornamentando el podcast publicado!
1.919 reproducciones

23.Oct.23

He comenzando un nuevo repositorio: SwiftUI y Firebase. Todo iba bien, hasta que llegó el momento de instalar Firebase en el Mac. Me daba una mezcla entre temor y asco. Temor porque se fuese a romper algo y la Mac mini dejara de arrancar o se comportara de manera extraña, como si le estuviera instalando un virus de manera consciente. Asco porque sentía como si estuviese ensuciando mis proyectos, se que solo se instalará en éste, pero w dolo si metiera la mano en n porquería para después tocar el teclado.
Al final lo instalé y pude continuar con el tutorial.

Por la tarde tocaba ponerse en el proyecto, sigo pintando la UI, descubriendo más bugs y dudando sobre lo que debería incluir o no como pantallas.
Tendría que escribir un listado con los errores que me voy encontrando para corregirlos una vez que tenga la app vestida.
He puesto como versión mínima la 17.0, de esta manera puedo utilizar la gráfica de pastel para mostrar la cuenta de ratings, porque con la lineal no se apreciaba muy bien.

22.Oct.23

He comenzado a seguir un tutorial de SwiftUI y Firebase. Está hecho con DocC y la verdad es que bastante bien explicado al menos lo que llevo hecho. Pone que en total son poco más de 5 horas.

20.Oct.23

Hoy he terminado por fin el proyecto del podcast, me ha tomado más tiempo del que creía, al final esta semana le he dedicado casi toda la semana, pero me ha gustado el resultado final.

Además de hacer en proyecto hay que darle un ReadMe, la presentación, subirlo a GitHub, ponerlo el enlace a la página del podcast.

18.Oct.23

Casi tengo terminada el proyecto del Podcast Próxima Parada Swift. El diseño está como quiero, el reproductor de audio. Falta alguna parte de lógica sobre todo relacionada con Swift Data. Espero terminarlo hoy, puede que añadir tests y ponerlo en GitHub.

17.Oct.23

Mi cuarto día con COVID y no he tenido cabeza para pensar en el proyecto.
Ayer me puse a trabajar en el diseño más que en la lógica, pero no me era sencillo, como si la mente se me quedara en blanco y no pudiera resolver ningún problema porque sencillamente no hay conexiones sinápticas dentro de mí.
Hoy un poco mejor por la tarde, he trabajo en el proyecto del podcast y va quedando mucho mejor. Ya he podido hacer que se reproduzca, seleccionar con un slider el tiempo, y con botones adelantar o retroceder unos segundos.
Me gustaría incorporar la velocidad, pero hay que encontrar el punto en el que aumentas la velocidad y la voz no se escucha como ardilla.

13.Oct.23

He terminado la parte de los Dailies. He hecho unas mejoras.

  1. Que no se pinten los cuadros de las fechas que no hayan pasado todavía. Así no parecerá que no hay ninguno hecho.
  2. Deshabilitar y difuminar los botones de mes anterior y mes siguiente si ha alcanzado la fecha del primer daily o bien ha llegado al día actual.
  3. Corregido un bug al generar el daily del día.

⠀He comenzado con la vista de estadísticas.

12.Oct.23

Desde que empecé com este cambio de profesión, los días festivos locales y nacionales han dejado de ser días de fiesta. Puedo tomarme cualquier día de fiesta como lo hice con el cumpleaños de Nic, o cuando sea nuestro aniversario de bodas o en mi cumpleaños. He ganado esa flexibilidad. Práctico y estudio porque me gusta, porque así lo he decidido, por que lo disfruto.
Disfruto el hecho de tener un reto, de tener que añadir una funcionalidad al proyecto que tengo, el saber cómo hacer mejor código.

No quiero y afortunadamente no tengo una fecha límite en la cual deba conseguir un empleo, ojalá sea lo más pronto posible, pero si no está siendo así me da la oportunidad de: 1) avanzar en el proyecto final del bootcamp y 2) aprender aún más. Se que teniendo un empleo multiplicaré mi aprendizaje (al menos eso espero), ganaré experiencia en el mundo real. Mientras tanto solo queda seguir (constancia) poniéndome retos que desarrollar (trabajo duro) y los resultados llegarán, quizá cuando menos me lo espere.

He tenido 2 sensaciones distintas al trabajar hoy con los proyectos. La primera frustración con el proyecto del podcast. Frustración por no poder entender porque el simulador daba un error al querer hacer un Predicate (un filtro) con las categorías de los episodios que están en un array de enteros de reo del episodio. Lo he intentado cambiar a un array de PostCategories con su respectiva relación, pero tampoco filtra y da error. Simplemente no lo entendía y logré solucionarlo. Ha sido desesperante por no tener la información, no encontrarla y no saber exactamente el motivo del error. Entiendo que viene del array enteros, que tiene que ir como una relación a otra tabla.

Me gustaría volver a probarlo con más calma en otro momento.

Por otro en el proyecto. He finalizado con los encuentros . Solo queda un pequeño detalle que no se actualiza el listado después de haber completado uno incompleto, la etiqueta no cambia. Hay que ir al inicio del NavigationStack para que lo haga .

He empezado con los dailies. Al ya tener el viewModel es mucho más rápido. He “vestido” primero el contenedor de la instrucción. Y después la pantalla donde irá la etiqueta del saldo, la de la racha actual, la vista mensual, la frase sobre matrimonio y la instrucción.

Dal querer ponerme con la vista mensual, de la que ya tenía el diseño, pero me hacía falta la funcionalidad: que mostrara un corazón si el daily de ese día estaba hecho o no. Misma tiene que actualizarse cuando cambio al mes anterior o al mes siguiente.

Sencillamente no sabía cómo hacerlo, como si no lograra imaginarme la solución, no veía como unir un rectángulo con un listado de Dailies .
De cada rectángulo tenía la fecha, la había puesto como etiqueta en formato (yymd). Tenía que tener un valor en cada registro de daily que convirtiera la fecha de ese daily en el mismo formato.
Teniéndolo así hay que hacer una criba. Cada rectángulo tiene que preguntar si el array de dailies filtrados por los realizados,, contiene ese etiqueta. Si la tiene pondrá un corazón, sino una X.

Lo conseguí! Conseguí pintar el calendario mensual con los dailies hechos. Ha sido una sensación de felicidad, de logro, de satisfacción que me ha hecho el día.

11.Oct.23

Tengo que definir el alcance que quiero tener con el proyecto del podcast. He conseguido tener el listado de categorías y del cual filtraré los episodios mostrados. Otra tab con una presentación mía, y un listado con los repositorios que tengo, todo esto obtenido desde la web.

Mejorar el reproductor y listo.

En cuanto al proyecto final he conseguido darle funcionalidad a la página de la edición del episodio. Quedan algunos bugs que he encontrado al navegar, los tengo apuntados en la pizarra.

Si logro avanzar una pantalla cada dos días terminaré a tiempo.

He metido dos ofertas más, con carta de presentación, una de ellas buscaban alguien con 5 años de experiencia, pero aún así me ofrecí como candidato, lo escribí en la carta de presentación.

10.Oct.23

He conseguido, aunque no con el detalle que me hubiera gustado el hacer que la foto se pueda ajustar el tamaño y la colocación de la foto en el marco donde se muestra. Era como me lo esperaba, sencillo pero con complicaciones, aún quedan detalles como que el marco que contiene la foto permite que por detrás se vea si la foto se hace demasiado grande o se coloca muy en el borde. Tiene un marco que indica donde irá la foto.
Existe un contenedor en SwiftUI que podría probar. O bien dejar la foto tal cual si no lo consigo hacer como me gustaría.

El diseño de la vista del detalle lo tengo hecho. Faltan las funcionalidades. Estoy utilizando el mismo view model que tenía para las pruebas. Mañana tocará probar.

He publicado mi primer post en LinkedIn. Ha sido sobre un error de xCode y el archivo del proyecto.

9.Oct.23

Estar trabajando a la vez en dos proyectos me está permitiendo avanzar más. El del podcast lo suelo usar para “calentar”. En teoría es más fácil, o lo que quiero implementar no es tan complicado. He dividido en métodos la posibilidad de descargar el archivo de audio, guardarlo en disco y reproducirlo, primero lo busca en la carpeta de documentos y si no está lo descarga.

En el proyecto he logrado terminar la vista de encuentros canjeados. Primero mostrando una vista por categorías, en la indica los completados y los pendientes, para acceder a los encuentros filtrados a la siguiente pantalla y que se pueda filtrar por completados y pendientes desde el menú.

Mañana tocará hacer la ventana de detalle, donde completar el encuentro.

8.Oct.23

Hoy he estado un rato con Paul avanzando en la app de BusCity. Hemos comenzado ya con las vistas. La primera la de búsqueda por is de parada. Solo hemos estado una hora.

Luego me he puesto con la del podcasts. He extraído la celda de la vista, y sus botones. Además de crear un struct para los datos del audio, durationpath y downloaded. Quiero poner la progressView de la reproducción.

Además que he leído en el libro de Working with data de BigMountain algo esclarecedor.
El ObservedObject es al StateObject lo que el Binding al State.

6.Oct.23

En el proyecto del podcast he conseguido poner dos stepper con los cuales ajustar la velocidad de reproducción y la pitch del audio. Aún tengo que definir bien los parámetros, para que sea en pasos y se escuche más o menos bien.

Una funcionalidad más añadida.

Respecto al proyecto he terminado el botón de obtener, con el saldo que tiene obtener actividades, que se descuente del saldo, que cambie la actividad a comprada y que muestre un sheet con los detalles.

He comprendido el funcionamiento y uso del action: () → Void que permite ejecutar un closure en la vista padre al pulsar un botón de la vista hijo. Lo he podido ver claro al querer ejecutar una acción después de pulsar el boton de confirmar en el popup que aparece después de darle a obtener.

5.Oct.23

Me he picado con el proyecto del podcast, quería poder reproducir los episodios desde la app, así que primero tenía que subir los audios de todos los episodios y añadirlos a la entrada de WordPress correspondiente. Como el tamaño máximo de los archivos que se pueden subir es de 30MB, he buscado un compresor web de audio. Así pude comprimir y subir los faltantes.

Teneindo la web del audio en el content del post, me he puesto con obtener de ahí la ruta que está entre ciertos anclajes HTML. Así que con ayuda de regex (expresiones regulares) tenía que encontrar el patrón dentro del cual está la URL del audio.

Me ha costado entender los String.Index del rango obtenido para poder obtener la URL. Con ayuda de ChatGPT, stackoverflow y algún post lo conseguí.

Después la tarea el añadir un botón que reprodujera el audio. Recuerdo que tenía un proyecto de un vídeo de SwiftBeta donde reproducía sonidos. Así que vi el código y lo implementé en mi proyecto.
No tiene una progress bar, ni pausar, ni reproducción automática ni nada. Solo es un botón de play que busca el post por id, descarga el content, obtiene la URL, descarga el data y lo reproduce.
¡Reto conseguido!

4.Oct.23

Hoy me ha enviado un amigo un tweet de una persona que publicó que en la empresa donde trabaja están buscando desarrolladores. En México principalmente, pero están abiertos a contrataciones fuera sino encontrasen.
Al principio dudé, me metí al Twitter de esta persona y hasta que no sentí que fuera de fiar no preparé el coreo que envié.

No creo tener muchas posibilidades, pero tampoco me cuesta, ni pierdo nada.

Por la mañana he visto un vídeo de Paul Hudson, que me recomendó un compañero del bootcamp sobre SwiftData.

Vi en su repositorio de github y me comentó que era mucho más fácil que CoreData así, que por probar le di una oportunidad.

Para practicar implementé en un nuevo proyecto que será otro repositorio que tiene como finalidad ser el podcatcher cliente de mi podcast. Así que la idea es descargar la info de los episodios del json de WordPress, guardarlo en SwiftData y poder marcar como favoritos, escuchados etc.
Lo logré implementar, lo básico, sin apenas diseño, pero funcional.

La dificultad la encontré al descargar el contenido del episodio, las notas, que se descargan en formato HTML. Así que hay que hacer una conversión, que me ha costado conseguirlo.

Me gustaría añadir el reproductor, así que tendré que organizar los audios para poder ser descargables.

En el proyecto he rehecho la navegación de los encuentros, una vez que he visto que la primera versión no era tan intuitiva.
Como no podía ser de otra manera, he encontrado algo que debo contemplar también: el saldo de los puntos debe permitir canjear el encuentro.
Mañana me pondré con ello.

2.Oct.23

Parece que tengo ya el diseño completo. Está adaptado al ejemplo no a lo que las vistas de la app tienen que presentar. He trabajado en los modificadores de los textos. Son 6 tamaños diferentes. Las celdas que mostrarán la info de las categorías, y los botones, aún me queda por unificar, pero voy viendo avances.
He elegido un tipo de letra, para el cual he puesto 5 diferentes (aunque muy parecidos entre ellos) todos con forma redondeada.

He estado hablando con un compañero del bootcamp, que está haciendo su proyecto de app de una app recordatorios para perros. Hemos comentado dudas, dificultades y avances. Veo que voy más o menos bien. Su enfoque ha sido diferente, toda la información del usuario la sube al servidor. Yo toda la manejo en local.

He visto que hoy comienzan las inscripciones al curso de essentialdeveloper. Son 2.000€, me parece accesible y muy buen precio por lo que he visto en los vídeos que tienen vale la pena. No es el momento, me gustaría ganar algo más de experiencia, tener un poco más de dinero y haber terminado el proyecto.

Estoy seguro de que lo haré, me gustaría el próximo año.

29.Sep.23

Me han rechazado de otra oferta. Me lo han comunicado por correo. Que valoran positivamente mi candidatura pero no se ajusta a las características de las necesidades actuales de la empresa.

Estoy ahora con el diseño de la app. Busqué ayer imágenes con diseños, colores formas y demás. Se los pasé a mi mujer, a mi hermano y a mi mamá a ver cuál descartaban y cuál elegían. Al final me decidí por uno de fondo oscuro, colores rojo, gris y naranja.
Me estoy haciendo las formas, botones, para luego crear las estructuras y aplicarlas a las pantallas.

27.Sep.23

Episodio N: Navegando río arriba publicado
1.857 reproducciones en total

25.Sep.23

Hoy he comprado el libro de Swift Animations Mastery de Big Mountain Studio. Lo he comprado con descuento por 33€, aún tengo duda si comprar el de Working with data que serían 20€. Poco más de lo que me hubiera costado el primero sin este descuento.

He terminado la vista mensual, añadiendo los botones de mes previo y mes siguiente. Aún no estoy seguro cómo voy a meter en cada día del mes o del año el icono de hecho.

También hice la vista de la ventana de login. Quería replicar la ventana de Grid Diary donde solo se ven 4 puntos para introducir el password. Cuando el usuario introduce un dígito cambia de la silueta negra de un corazón un corazón rojo relleno.

La verdad que hoy no le he dedicado demasiado al proyecto. Por lo menos tengo ya esta vista deseada, me había imaginado tenerla porque me parece bonita.

Ha comenzado hoy un curso de la web The essential developer, donde explicaban el porqué como desarrollador iOS debíamos seguir un camino diferente, continuar aprendiendo de las fuentes adecuadas. Son 3 partes, esta primera es como de descubrienmiento, nada de código sino convencimiento para ser mejor. La pregunta que dejaron al final fue:

¿Por qué quiero llegar a ser un desarrollador iOS Senior?

Quiero desafiar mis capacidades, haber logrado no solo cambiar mi profesión de vendedor a desarrollador iOS, a la edad de 40 años, sino de tener los conocimientos suficientes para crear no solo una app sino una solución nativa, robusta y mantenible en el lenguaje Swift.

¿Qué necesito para conseguirlo?

Encontrar a las personas que han conseguido desbloquear el conocimiento de lo que un verdadero desarrollador iOS debe tener y aprender todo lo que pueda ellas.

24.Sep.23

Hoy he quedado con Paul para comenzar a picar código del proyecto de CityBus que estamos haciendo en conjunto. Una app que nos sirva para aprender Swift. Él ha preparado el diseño de las pantallas en Figma . Después de algunos ajustes, tenemos ya el diseño, sino final el que más se podría acercar a lo que será.
Quedamos normalmente cada semana, los domingos por la tarde. Hoy tocaba de 18 a 20 para iniciar.
Ya teniendo los endpoints que tiene la API del ayuntamiento para la información de los tiempos de llegada.
Comenzamos por el modelo, y después el fetch de los json para obtener los datos de las paradas de las líneas de autobús.

Las dos horas se me han pasado volando, le he compartido pantalla y he ido explicando el proceso, parte del código, nada de URLSession de momento, sino los métodos y los tests que nos permitían asegurarnos que se estaba haciendo la llamada y recibiendo los datos.

La próxima semana más.

22.Sep.23

Me había puesto como objetivo hoy hacer la vista anual y mensual de los dailies hechos.
La anual una cuadrícula donde se muestren los meses como columnas y los días del mes como filas.
La mensual en la que quería mostrar que el primer día del mes se ubicara en el día de la semana que le corresponde.

21.Sep.23

He trabajado en el repositorio de Anime que hice de ejercicio en el bootcamp, refactorizando, organizando y eliminando algunos archivos que no utilizaba. Lo subiré a GitHub y pondré el enlace en la web.

Me gusta el refactorizar, minimizar líneas de código, quitar código repetido y optimizar los métodos.

Por la tarde he avanzado en el proyecto. He hecho la vista de las insiginias ganadas. Por cada 4 actividades completadas el usuario gana una insignia. Y si tiene insignias por ganar aparece un placeholder en primer puesto indicando que aún se puede ganar otra.

El diseño no es el final, quiero tener toda la información que se mostrará preparada para ello cuando llegue el momento.

Teniendo la información procesada es más rápido generar las vistas porque tienes que mostrar.

Era el siguiente paso que tenía que dar, dejar de pulir y darle tantas vueltas a proceso de datos, en coredata, consultas y demás para tener algo que mostrar.

20.Sep.23

Hoy ha sido un buen día:
Me he inscrito a una oferta, he publicado el repositorio de la app BigBang Theory en github y en mi web, después de solucionar algunos problemillas con el archivo del proyecto y la creación del repositorio remoto.

Y he hecho avances en el proyecto final. Avances en el detalle de la vista de encuentros, que guarda foto, rating , comentarios. Se pueden canjear ya encuentros con los puntos ganados, se puede ver el saldo.

He empezado a trabajar con las estadísticas, mostrar los avances del usuario, lo que ha hecho en la app me parece un feedback imprescindible en cualquier app.

16.Sep.23

No te fin de semana no tocaré el código del proyecto. Tengo que replantearme la estrategia que voy a seguir, me lo estoy complicando demasiado y quiero simplificarlo y sobre todo avanzar. Me ha recomendado mi mujer que me tomé este sábado y domingo de descanso. He hablado con Paul y con Paco y me han recomendado: una generar muchos proyectos, y otra avanzar y crear una versión Beta a la cual después hacer mejoras.
Así que haciendo caso a la recomendaciones descansaré, me replantearé cosas y pondré en orden mis próximas acciones.

14.Sep.23

Hoy he tenido la tutoria con Julio. Menos mal que ha sido ahora, porque ha visto mi código y, es verdad, es farragoso. Perdí el rumbo y no he aplicado lo que nos ha enseñado.
Asi que toca re-hacer mucha cosa.

Por un lado me entro el bajón de que lo había hecho mal, que no había aprendido lo que nos ha enseñado, de que queda menos tiempo y tengo que hacer muchos cambios. Es donde entra la duda si realmente he aprendido lo que se tiene que tener para trabajar de esto, es doloroso cuando las horas de trabajo que le has dedicado no están bien, no han sido productivas en termino de app.
Luego pienso todo lo que he aprendido al hacerlo de esa manera, con lo que me he topado y agradezco que sea ahora y no al final cuando sepa que tengo que cambiarlo.
Estoy aprendiendo, no tengo que olvidarlo, y me voy a equivocar muchas veces sobre todo ahora que estoy dando estos primeros pasos solo.
Para eso es este proyecto, para afianzar lo aprendido lo que puedo aplicar en un proyecto real.
Aún con los ánimos un poco por el suelo, debo seguir, ser consciente de que esto me pasará muchas veces en esta profesión. Aprender a trabajar aún con estos percances , aprender a retomar fuerzas y ánimos. Que se van incrementando cuando, ahora que he comenzado a refactorizar todo, va saliendo lo que quiero que salga.

13.Sep.23

Me he lanzado a la piscina a rehacer los tests de CoreData. Tenía problemas porque al tener campos derivados no se podían crear las bbdd en memoria, tenia que ser en disco. Lo cual creaba una cantidad de ficheros temporales por cada test.
Así que decidí quitar esos campos, 4 en total. Cambiar los tests e incluso refactorizar la clase para dividirla en j 3 más específicas, más especializadas.

Los primeros tests de importación desde el Bundle han ido bien. Los de network no, después de varias pruebas, descomponiendo todo en partes más pequeñas, intentando ver donde estaba el problema seguía dando un error de acceso de memoria y no logré encontrar el porqué.

Se me ocurrió volver a refactorizar las funciones para poder reutilizarlas, una que obtenga los datos y otra que los guarde en la bbdd.
Me he quedado con un sentimiento de frustración al final del día.
Aunque he avanzado lo suficiente. Creo que voy en la dirección correcta y quiero que todos los test pasen, no como antes que solo pasaban 4 de 24.

11.Sep.23

Hoy ha sido la entrevista con la consultora. La tercera. Estaba nervioso, ansioso, tenía que dominar los pensamientos de mi cabeza, quitarles tensión. El sábado mi hizo algunas preguntas Nic a modo de preparación. La que me hizo y me hicieron en la empresa Es ¿Que crees que podrías aportar a la empresa? Menos mal que Nic me la hizo, esa y algunas más. El preparar tu cabeza para responder esa pregunta con antelación te hace tener una idea sobre lo que responder.

Hoy fue como hacer una vista global, me metí a la web de la empresa, a sus redes sociales, a youtube, vi un par de vídeos sobre kanban y Gestión de proyectos, bastante interesantes. Conocer un poco el ambiente que hay, la filosofía, el crecimiento que ha tenido, los proyectos en los que participan.

Me daría mucho gusto poder pertenecer a esa empresa, despierta un genuino interés saber que una empresa se esfuerza en convertirse en un mejor lugar para trabajar.

La entrevista creo que la he hecho bien, sonriente todo el rato, menos nervioso de como estaba antes de comenzar o incluso la hora anterior al comienzo. Luego fue más una charla, un conocernos y que me conozcan, que sepan como soy, que es lo que he hecho.

Hoy no tengo cabida en la empresa, no hay un proyecto en el que pueda aportar y que me aporte experiencia. Parece ser que para finales de octubre, digamos noviembre puede que, si se cierra el proyecto tengan un lugar para mí. Me lo harán saber.
No me quita la ilusión, al contrario me da esperanza y prefiero empezar en el lugar adecuado en el momento adecuado que por la premura tener un mal comienzo.

Paciencia y trabajo.

8.Sep.23

Hoy he decidido comenzar a hacer mejoras en la web del podcast o de mi mudanza profesional no se como llamarlo. He cambiado el tema, he puesto varios links en lo que podria decir mi perfil. En general cambiado un poco el aspecto, ahora con la búsqueda de empleo.
También he hecho limpieza en mi GitHub, quitando muchos repositorios que hice antes del bootcamp. Quiero ahora publicar los que representan lo que se hacer en la medida de lo posible.

6.Sep.23

Episodio M: Maniobrando con prudencia publicado

1823 reproducciones en total

4.Sep.23

Tenía he empezar a buscar ofertas y aplicar y no lo hice. Lo fui posponiendo conforme iba avanzando el día, pensando: “Avanzo un poco más en el proyecto y por la tarde a las 4 empiezo”. “Un poco más y a las 7 me pongo a buscar por LinkedIn”. “A las 8 que estoy en medio de algo”. Y así hasta no hacerlo.

Tengo que decidirme para empezar, marcarlo como compromiso para obligarme a hacerlo, para incluirlo en la rutina. No es sencillo, pero ya es tiempo, 7 meses sabáticos han estado bien, es momento de vencer el miedo y cambiar de profesión.

3.Sep.23

He soñado con el proyecto, con código, con cómo abordar un problema. Con la manía que de que tiene que se eficiente el manejo de datos con CoreData. He implementado en el servidor un endpoint que proporciona el número de versión de los datos que hay en la bbdd servidor, así la app consulta cada vez que se abra si hay nuevas actividades o nuevos dailies y los descarga. Endpoints los que se filtran los registros de bbdd en función a un id proporcionado, que es el último que tiene la bbdd de la app, así sólo se muestran los datos que se deben descargar.

Otro es el los dailies que tiene como tarea el usuario realizar, si entra todos los días, en la bbdd se carga uno aleatorio, y ese número variará en función a los que esten disponibles en local. Para no hacer una consulta cada vez solicitando el total de datos, guardaré en UserDefaults la cantidad, obtengo un dato aleatorio a partir de ella y así solo tengo que consultar en la base de datos ese id. Si lo hubiese un dato almacenado pues hago una consulta y lo guardo. Se tendría que ir actualizando con cada nueva version. Si el usuario pasa varios días sin entrar a la app se rellenarán las instrucciones con una cadena de caracteres vacía, porque de momento no va a influir más que para contar que no lo ha hecho.

También tengo el proyecto con Paul un oyente del podcast con el que he estado en contacto las últimas semanas y nuestra idea es publicar la app de bus de zaragoza. Estamos con el diseño y me he puesto a ver de qué manera obtendríamos los datos del endpoint que está publico. Aunque no es fácil organizar la información. No es homogénea. Habrá que hacer algunos malabares para obtener, que quizá deje en un json en la bbdd que se cargue al iniciar. Que obtenerlos será una sola vez.

2.Sep.23

Hoy he decidido dedicarle un rato al proyecto. Poco más de una hora. Sabiendo cuál es el siguiente paso, me quedé a medias el viernes y quería avanzar ya que lo tenía en mi cabeza en segundo plano.

Aunque debo también desconectar para descansar un poco y estar fresco cuando inicie la semana.

1.Sep.23

Comienza septiembre y es tiempo de ajustarse a lo planeado. El próximo lunes comenzaré a buscar empleo de manera activa. No estoy seguro cuánto tiempo le deba dedicar, pero será una búsqueda diaria programada, eligiendo las ofertas que se encajen a mi perfil.
El próximo día 11 de septiembre tengo la tercera entrevista con la empresa consultora. Esta vez con una persona que lleva la sección de apps de la empresa. Es mi opción más cercana, pero no tengo nada seguro, así que toca buscar.

Sobre el proyecto. Terminé ayer la parte de la carga de la información, podría decir que son como los cimientos de la app, la fuente de la verdad, de donde emana la razón de ser, de donde viene la esencia, lo que dará al usuario. Queda la transformación, que es organizar y distribuir esa “agua” de la forma mas asequible, añadirle sustancia, embotellarla para ponerla a disposición, que es como veo los viewModels.
Finalmente quedará la presentación, las views. La ms dosis, la estética, las raciones que harán que el usuario obtenga los beneficios que busco al hacer este producto: Mejorar su vida en pareja*

Hoy he hablado con la jefa de la empresa de la que he pedido la excedencia, me ha dicho que teníamos un asunto pendiente y cómo iba. Le di a entender no volvería diciéndole que estaba ya buscando trabajar, que estaba en medio de un proceso de selección. Me preguntó que si por lo menos medio tiempo, le dije que no.
No pensaba volver, menos mal que me ha llamado ella sin previo aviso y me ha cogido desprevenido, así no le di tantas vueltas a esa llamada y luego gracias a escribirlo en mi diario pude dejar de darle vueltas después.
Ya está hecho, he soltado esa liana y ahora estoy en el aire, con otra muy cerca de mi mano pero de la que no me he agarrado.

31.Ago.23

Por fin! He logrado que actualice los registros si hay una nueva versión de ellos en el servidor. La primera carga de datos se hará en local, y la actualización añadirá a los ya existentes. Me ha costado encontrar porque los fallaban, los tests fallaban. Y eran detalles tan pequeños que me costaba pensar que era eso. Más encontrarlos, porque uno están aqui, otro allá. Y otro era por el servidor.

Por fin los tengo hechos, ahora toca ponerlos en el lugar correcto.

26.Ago.23

Este fin de semana tocará ponerse con el proyecto, ya que me tomé el miércoles libre y aprovechando que mi mujer tiene que preparar una prueba técnica de una entrevista (la cuarta del proceso) que tendrá el lunes.

Como lo disfruto no lo veo como un castigo sino una oportunidad para avanzar. De hecho voy más lento de lo que planeé antes de saber lo que conllevaba, al inicio del bootcamp. Subestime la complejidad o sobre-estime mi velocidad así que en agosto no lo tendré terminado. Y ni siquiera puedo decir ahora cuando tiempo me tomará. Lo bueno es que la prorrogara hasta final de año me permitirá tener la tranquilidad de terminarlo a tiempo.

El 10 de septiembre finaliza mi periodo de excedencia, no me he puesto en contacto con la empresa (ni la empresa conmigo), pero no tengo ninguna intención de volver.
El plan era en septiembre ponerse a buscar empleo, así que es quitar unas horas al proyecto para la búsqueda. No sé cuánto tiempo me pueda llevar y aunque me gustaría tenerlo terminado antes de comenzar a buscar no es la mejor opción. Incluso dedicando pocas horas a la búsqueda tendría tiempo suficiente para avanzar. Así no tengo tiempos muertos. Terminarlo para ponerme a buscar tampoco es lo mejor.
Es momento de probarme, salir al ruedo y ver si con las herramientas que tengo soy capaz de obtener mi primer empleo como desarrollador.

25.Ago.23

Tengo que hacer esto:
Poner endpoints de prueba en el Sever
En el package de network añadir protocolos para que se puedan cargar datos en local que inyecte a las previews.

Eso fue lo que pensé a primera hora de la mañana. Me puse a modificar el package que he incluido en el proyecto final para que provea las clases y los métodos que quiero utilizar. Mi intención era que la misma clase me sirviera para descargar datos del endpoint y también para hacer los testing con datos en local. La solución: Protocolos. Utilizar un protocolo que asegurara los métodos que se proveerán, y que me permitiera cambiar con un parámetro cuando sea para testing, por defecto sería el descarga de red.
Me ha costado, por un momento pensé en descartar todo y dejarlo así, pero algo me decía que iba por el camino correcto. Al final lo conseguí. El que sería el último intento y que me daría el test pasado ✅, no lo fue porque me hacía falta cambiar un parámetro que tenía que coger la url de otro protocolo para que proporcionara la ruta local del archivo json que proveería todo.

Después del intento fallido esa siguiente vez ha funcionado.

Hay un baile que suelo hacer cuando consigo realizar el reto planteado. Nic lo llama “el baile de la guitarra”. La verdad es que surgió porq canción de Quédate de Quevedo / BZRP. La ponían en el Box mientras hacíamos el WOD de Crossfit, de la cual no entendía nada de la letra, solo el QUEEEEEDATE, y de esas canciones que se quedan en segundo plano en tu cabeza un día comenzó ese ritual. Es reflejo del subidón de endorfinas que te da cuando logras completar un reto.

Por la tarde el plan era hacer la base de datos Local. Todos los campos y las modificaciones que había visto en el Sketch que sería mejor hacer. Lo documenté en el
Numbers donde llevo esos registros y me puse a ello.

Después comencé a realizar los datos de prueba que mostrará el contenedor de simulación para las previews de SwiftUI.
Me ha tomado más tiempo del que pensaba, primera porque lo quería hacer bien, tener datos variados y que se pudieran filtrar, así que tenían que tener cierta coherencia y ser heterogéneos. Para los sencillos en los que necesitaba un json con id y nombre, se los pedí a chatgp3, incluso hasta los de 4 propiedades, hice algunos ajustes en los valores y ya. Pero el principal que son los que denomino Encuentros llevan más información y están relacionados con otras tablas, esos me ha costado más.

Ha sido un día productivo y veo avances más rápidos a la hora de programar porque ya tengo una idea más general.

23.Ago.23

Hoy es el cumpleaños de mi mujer, Nicole y me tomaré este día de descanso, quizá estudie un poco porque ella se pondrá al ordenador después de comer un rato para una videollamada.

19.Ago.23

Por la tarde me he puesto 45 minutos a planear el día de mañana. La idea es iniciar ya el archivo final. Antes tengo que replantearme todo lo que he visto y aprendido con el Sketch que he hecho. Replantearme la base de datos, los nombres, el flujo de información, que era la idea de hacerlo así, tener un panorama general y más real de lo que me pude imaginar en un inicio. Me he dado cuenta de que es complicado ver cómo será el proyecto final sin la experiencia de haber hecho nunca la app.

Puede que el tema sean animales, quizá de logo de app terminen siendo dos colibríes, las categorías serán orejas de bebés de distintos animales. El color por definir, en principio los he hecho todos color salmón.

18.Ago.23

Por la mañana he leído el libro de Big Mountain studio de SwiftUI, me da ideas de cómo presentar las pantallas de la app.
Por la tarde he integrado el viewModel de las assignments a una pantalla de prueba. Para que mostrara la información que quiero que muestre: las actividades totales. Las completadas , las incompletas los filtros con los NSPREDICATE , cuando obtener la información del FetchResult y cuando del managedObjectContext. Estoy logrando ejecutar la idea que tengo, así que estoy avanzando, siento que voy por buen camino. El lunes tocará ya crear el proyecto final.

17.Ago.23

Hoy me he puesto con el viewModel de las Actividades, que aún sigo buscando nombres para ello, esta vez les he puesto assignments. Puedo jugar hasta que tenga el proyecto final y una visión general de lo que será finalmente.

Me he dado cuenta de que necesito otro viewModel, uno que lleve el conteo de los corazones y de las actividades canjeadas. Probablemente necesite una tabla más, pero cuando me ponga a pensarlo y probar veremos. Tendré que guardar en algún lugar el histórico de transacciones, y si el usuario tiene o no disponible saldo.

Me he sentido más suelto haciendo este viewModel. Además de que he encontrado la manera de hacer tests de los métodos del viewModel en la base de datos.
Tenía un post que busque hace unos días, pero que era complicado, así que lo decidí dejar para un día como hoy de tener ganas de meterme en ese rollo. No logré que hacerlo funcionar, era demasiado complejo, para estos momentos de mi carrera y para el proyecto. Encontré otro más sencillo, pero sentía que no estaba probando realmente el viewModel, que era lo que tenía que probar. Los dos me dieron una idea de lo que tenía que hacer. Le pregunté a ChatGPT y me dio una implementación mucho más sencilla. La adapte a mis necesidades y logré testear los métodos del viewModel creando un archivo de bbdd por cada unit test. Los test fallaron y luego pasaron. Es la mejor implementación que logré hacer.

16.Ago.23

Hoy ha sido la entrevista técnica. No hubo, o por lo menos hasta ahora no la hay ningún enunciado, un proyecto que entregar. Prefieren conocer a la persona, y con los egresados del bootcamp llevan algún tiempo seleccionando a alguno para trabajar porque saben que el nivel es bueno.

Para la entrevista pensé, para lo tranquilidad, que ni tenía nada que perder, de hecho un poco la doy por perdida, una oportunidad para saber cómo son las entrevistas que preguntan, como se tienen que preparar y la siguiente hacerlo mejor. Me dije: Voy a ver que puedo aprender de esta persona. Y fue con esa actitud con la que me presenté, humilde, sincero, seguro pero identificando donde tengo inseguridades.
Hice énfasis en los tests que fue lo que me fallo en la anterior (lo aprendido). Y estuvimos hablando más de una hora.

Me ha preguntado de todos los temas que les interesan que sepa: comenzó por Git, repositorios, ramas, commits, hablamos de tests, Bases de datos, librerías de terceros, SwiftUI, UIKit, notificaciones, permisos de galería y cámara, cifrado, herramientas como Jenkins, Firebase.

Le pregunté si tenían ellos package propios, como era el día a día de un desarrollador, hablamos sobre la formación continua, las prestaciones de la empresa al respecto, el trabajo en equipo.

Al final me comentó que había hecho una buena entrevista y que en los próximos días me dirían algo.

Me he quedado con una buena sensación. No quiero crearme expectativas, pero sin quererlo mi cerebro imagina como sería que no era fuera mi primera oportunidad laboral.

15.Ago.23

Es festivo nacional, el box abre más tarde, Nic no trabaja así que decidí tomármelo con más calma. Después de entrenar y almorzar, volvimos a casa y me puse con el proyecto de 12:30 a 15:30.
Por la tarde a seguí con el viewModel de los Daylies.

Primero por la mañana escribí de lo que se tendría que ocupar este viewModel, que información me tenía que devolver, que información tenía que calcular. Partiendo de esa base, escribí cada una de esos requerimientos en el archivo en forma de comentarios y después detalle cuáles serían los pasos a seguir para conseguir lo requerido.

Los que hice fue: Obtener el dayli del día y calcular la racha actual de los daylies hechos.

Me ha costado ponerme en modo algorítmico, hasta que conseguí el Segundo que era el más complicado. Después de lo pase a chatgp y me hizo una versión mas eficiente, cambiando la recursion por un bucle while . Con esa nueva perspectiva del problema, hice una tercera versión esta vez con 2 funciones de programación funcional. Comprobé que en el playgrounds dieran el mismo resultado las tres con varios datos de prueba y valores aleatorios y lo si por bueno. Después lo implementé en el viewModel.

Finalmente llevaba idea de repasar el tema que me hicieron la recomendación de la prueba técnica de Tyris, sobre los tests. Era desacoplar el componente de URLSession , busque en mi índice de temas por clase y fui a ver el vídeo donde Julio César lo explicaba.
Lo aplique al proyecto de Movies que presenté. La implementación era más fácil de lo que creí, de los he recordaba. Falta ahora aplicarlo a las vistas.

14.Ago.23

Hoy tengo la entrevista a las 12 con otra empresa de consultoría por vídeollamada. 

Episodio L: Lidiando con muros

1.770 reproducciones

Me he sentido bien en la entrevista, me he soltado. Si la idea es conocerme me he expuesto, las cualidades que tengo, lo que mejor he hecho en mi carrera, que buscaría en una empresa para trabajar, como seria mi compañero ideal.

Me he sentido cómodo, sincero y sin ninguna presión sobre que ésta era mi oportunidad, siento que a partir de ahora tendrá más oportunidades, así que lo mejor es aprovecharlas y una manera de no regarla es estar tranquilo, no estresado. 

El miércoles tengo la entrevista técnica, que me imagino serán preguntas, no se si una prueba técnica como tal, ya veremos que tal va.

10.Ago.23

Hoy a las 12 me llamarán de una consultora para una entrevista. La segunda después de haber hecho el bootcamp.
Me han convocado para otra reunión el día lunes 14 a las 12 del día. Me imagino que será videollamada. Estoy tranquilo, tampoco es que esté ansiando ya trabajar, si las entrevistas van bien quizá para septiembre. Sino en septiembre me pondré la mitad de tiempo a buscar, la otra mitad a terminar el proyecto. Cambiando las prioridades.

09.Ago.23

Hoy han convocado a una tutoría del bootcamp. Hemos podido estar 10. Cada uno ha comentado sobre su proyecto. Del bootcamp del año pasado solo 4 de las 12 personas entregaron el proyecto final. Este año ha pospuesto la fecha de entrega y hoy nos ha puesto un deadline para hacer un entregable, a mi el 1 de septiembre. Quiero terminarlo o avanzar lo más que pueda este mes y poder tener una primera beta para ese día.

4.Ago.23

He hecho hoy las vistas de iPhone que tenía en sketch de Keynote, aún no termino, pero creo que he podido hacerlas sin mucho problema. Falta terminar y comenzar con las de iPad y las de Apple Watch. Donde tengo que pensar exactamente que quiero mostrar, en el Apple Watch quizá solo un recordatorio y poder marcar si está hecho o no.

3.Ago.23

Veo avances en el sketch del proyecto final. He logrado propagar el mensaje de error a la interfaz de usuario, con mensajes específicos del error. Aún me quedan detalles y las pruebas. Además de no estar seguro si mostrar una pantalla personalizada del error o bien la alerta estándar de iOS, dejaré esta primera seguramente para no complicarme de más.

Comencé mi día haciendo una nueva versión de mi CV, una consultora que se presentó en la despedida del bootcamp y a la que envié un correo solicitando una entrevista, me contacto por un mensaje de a LinkedIn pidiéndome mi CV y datos de contacto. Asi que fue lo primero que hice del día, una hora me ha llevado.

Después quería hacer los tests del viewModel de configuración, me encontré que no sabía cómo testear las propiedades que guardo en UserDefaults vía AppStorage. Y que había que hacer varias modificaciones para hacer lo mismo con los datos a guardar en CoreData. Quizá me haga falta más información, una guía de cómo hacer tests paso a paso. Sobre todo de estos procesos más complejos.
Me di cuenta de que m llevaría más tiempo y lo he dejado.

Son esos momentos donde la cabeza te juega malas pasadas y te hace desconfiar de lo que sabes hacer.

2Ago.23

Estoy con el proceso de on-boarding , de bienvenida de la app. Publicando los datos en un servidor. Hay que hacer una configuración inicial. Presentar la app, que el usuario sepa que es, en que le va a ayudar y sobre la privacidad. Después una configuración inicial de los datos. Descargarlos, transformarlos a la base de datos de CorrData, pedir algunos datos personales al usuario como fotos nombres y fechas. Guardarlos.

Lo fácil que es enredarse con la interfaz, querer que quede no mas atractiva sino que satisfaga mis manías, que si el padding, que si los los marcos de las fotos, si al final estoy seguro que el diseño lo cambiaré, no es el diseño final. Aun así pierdo algo de tiempo en ajustar algo que después cambiaré por completo. Me debo centrar en la parte lógica y dejar la interfaz para después. Sobre todo para estas pantallas de las cuales no tengo un bosquejo de como deberían ser.
De momento en escala de grises ya el color definitivo llegará.

28.Jul.23

o que me ha costado montar 3 tablas en la base de datos del servidor e importar los registros desde un json. La que me llevó toda la tarde fue la importación del listado de actions con referencia a la tabla type y category. Simplemente no he sido capaz de importar el json con esas referencias, probé de todas las maneras y todos los test. Descomponer el proceso en pasos más pequeños, simular el proceso con otros datos, cambiar los tipos de datos. Lo que pude obtener en claro era que al decodificar el json a tipo action daba un error y salía por ese catch. Lo único que se me ocurre como última opción es que el json de action además de llevar el typeId incluya también el name . Concatenar los registros en el json.

Luego pensando la información no la cargaré desde el json sino desde la base de datos de un archivo csv que generaré desde el Numbers y que contendrá todos los registros.

27.Jul.23

Sigo trabajando en la parte del servidor y la base de datos. Haciendo ajustes como por ejemplo en los nombres de los campos de las tablas y las mismas tablas. Quitando campos que en un principio pensé que eran necesarios. La dificultad de bautizar las propiedades y que ese nombre sea representativo, descriptivo de lo que realmente son.
Por ejemplo de haber nombrado la estructura Activity, que es el listado de actividades que tendrá que realizar el usuario en el juego. A nombrarlo Action. Dentro de de esa estructura tenía los campos titledescriptioncost y value. Donde el título era el enunciado que había que realizar el usuario, pero para las acciones diarias, para las actividades era una pista, porque la descripción detallada era otro campo y el título vendría vacío. El costo eran los corazones que le descontaban al usuario por adquirir la actividad y el valor era lo que ganaba. Los he cambiado a hint que es la pista de las ahora actions, la description que ahora son las indication porque realmente son indicaciones lo que da. El cost que ahora es el price y el value que ahora es la reward. Me parecen más descriptivos y claros de lo que representan.

26.Jul.23

Estoy haciendo pruebas con los datos de prueba que si de alta en una base de datos de SQLite ayer. Los exporté a un json, luego cree un modelo, que tuve que convertir a otro porque en SQLite no logré generar datos boleamos, y luego lo puse en una base de datos de core data para mostrarlos en la preview. Ha sido más laborioso, pero me encontré con algunos aspectos que debo considerar cuando tenga el proyecto real.
Lo siguiente es preparar en vapor esa base de datos para consumirla desde la app.

25.Jul.23

Hoy retomaré el registro en toggle y las clases de inglés.

Ayer me centré en una clase. La última del módulo de Swift 5.7 donde se daban genéricos y protocolos. Me ha aherdsso mucho más claro ahora que en su momento.

24.Jul.23

Hoy retomo el proyecto. Quiero en el día dividirme o segmentarme el horario.
Lunes y Viernes podría empezar a las 11:30, martes, miércoles y jueves las 10:30.
Me gustaría dedicar 2 o 3 horas al día a repasar clases y estudiar. También me gustaría preparar un modelo de prueba técnica en SwiftUI y UIKit que me sirva de portfolio y de base para las que tenga que hacer. Adaptarlas y tomarlas de ejemplo para las que me pidan en entrevistas.

Para el proyecto debería comenzar con el modelo de datos. Crear una base de datos de ejemplo y comenzar a ello. El diseño lo haré en escala de grises de momento hasta que me decida por el color principal.
Elegir unos iconos y terminar las medallas.
Terminar de afinar el diseño de las pantallas con las mejoras de las últimas apps que me descargue.

Tengo de tiempo de 11:00 a 14:00 y de 17:00 a 21:30 (aunque no todos los días de la semana) 7:30 diarias más o menos. Una jornada de trabajo.
Día: 2 – 2 – 4 : Estudiar – Portfolio – Proyecto
Semana: 10 – 10 – 20

Esta semana la tomaré de prueba para ir haciendo ajustes y ver que tanto avanzo.

19.Jul.23

He recibido la prueba técnica. Es menos laboriosa que la última que hice, que fue en UIKIT, ésta la hice en SwiftUI. Curiosamente es la misma API: MovieDB.
En pocas palabras era descargar un listado de películas, mostrar el detalle, crear una vista de **descargando*, ni hay datos y un aviso de error. Con una arquitectura, usando el token o ApiKey que ellos proporcionan, tests unitarios y poco más.
He hecho lo que pedían y unas pocas mas, barra de búsqueda, tabBar, Grid, Gauge.
¿Podía haberla hecho mejor? Por supuesto.
¿Me ha llevado más tiempo del que debería? Si, porque me he sentido muy lento, es como si mis neuronas volvieran a buscar la conexión sináptica en la que estaba almacenado el kwnow-how del código.
Poco a poco fui recordando, fui sintiéndome cómodo escribiendo código, recordando como se hacía. Comencé con la parte del Network, sus tests, luego las vistas y el viewModel.
Comencé a las 12, terminé a las 21:30, de 14:30 a 17:00 para comer y echar una siesta.
Me sentí más relajado que la última vez, no sentía tanta presión, quizá por la seguridad que el conocimiento te da, quizá porque no es la única oportunidad, quizá porque lo he visto como un ejercicio de práctica más que como el único examen de conocimientos que tendré.

Ya veremos. Ha sido una vuelta con un primer entrenamiento más intenso del que me hubiera gustado, pero que he aguantado bastante bien. Sobre todo que se me ha pasado la tarde volando, he disfrutado y me he divertido.

18.Jul.23

Hoy ha sido mi primera entrevista post-bootcamp. Una primera toma de contacto; un primer filtro para pasar a la siguiente etapa: una prueba técnica. Por lo que me ha dicho un compañero del bootcamp, de otro compañero es una mini app sobre movieDb. La propuesta salarial no es para tirar cohetes, más bien baja, entre 18 y 24 mil brutos al año. Entiendo la apuesta que una empresa debe hacer por una persona que viene de otra profesión, que no tiene experiencia, que no tiene medios para evaluar su desempeño o valía técnica. Una vez dentro como en toda empresa habrá negociar si los resultados son los esperados.
Estoy emocionado, esperando la prueba, pero a la vez cauto y reservado, no quiero entusiasmarme más de la cuenta por el revés que me puede traer.
Si está oportunidad no es para mi, vendrán otras, mientras tanto puedo seguir con mi proyecto de fin de bootcamp / primera app publicada.

También he quedado a las 21 para hacer una vídeo llamada con un escucha del podcast. Sobre el mensaje que puse en twitter hace tiempo buscando compañeros desarrolladores para hacer equipo y crear una app. Se le ve motivado, cauto también, pero muy ilusionado de crear apps y le lleven a generar ingresos extras. No busca, al menos por ahora, un empleo full time de Swift developer, pero no dejado ver una posibilidad de aceptarlo si llega la oportunidad.

17.Jul.23

Vuelta al cole!
Se han terminado las vacaciones.
Momento de retomar donde lo dejé. Tendré que:

  • Establecer un nuevo horario
  • Grabar un episodio
  • Retomar el proyecto final
  • Dar un repaso a las clases grabadas
  • Terminar de leer los libros que compré
  • Contestar la encuesta del bootcamp
  • Hacer la entrevista mañana por la tarde

⠀Episodio K: Kilimetrando el camino. Publicado!
1.693 reproducciones

15.Jul.23

Se han terminado las vacaciones. Desde el 26 de junio que

7.Jul.23

Hoy ha sido la reunión para presentarnos una empresa de consultoría de software que está buscando personal para desarrollar iOS. En principio son 15 desarrolladores los que buscan, del bootcamp está ya incorporada una persona desde hace tres semanas, otra que se incorporará en agosto, y buscan a más personas que pasen por un proceso de selección por supuesto.

Tengo que mejorar mi perfil de LinkedIn, aunque sin experiencia en el sector tampoco tengo mucho que actualizar. Quizá poner proyectos y habilidades.

En un rato más tendremos la reunión del fin del
Bootcamp a ver que nos cuentan.

Aunque estando de vacaciones mi cerebro está demasiado relajado y no me permite pensar en código, en estudiar, ni siquiera en contestar la encuesta del bootcamp que nos han pedido responder. El próximo viernes llegaré a Zaragoza y el lunes espero ya ponerme en modo proyecto y búsqueda de empleo.

23.Jun.23

Episodio J: Justificando unas vacaciones Publicado!
1528 reproducciones

Fin de las clases del bootcamp

5 meses de clases, + de 950 horas de práctica, de 10 módulos de programa, de 45 proyectos de práctica, 2 mini apps y cientos de líneas de código.

Una montaña rusa de emociones, de la frustración a la felicidad, por el orgullo, la ilusión, la ansiedad, la inseguridad, el cólera, la irritabilidad, la inspiración y valentía.
Toca el momento de darme un descanso, de tomármelo un poco más lento, de bajar las revoluciones.
Este bootcamp si todo se encamina a lo que me he planteado será la mejor decisión que he tomado de esta mudanza profesional.

21.Jun.23

3 días para terminar el bootcamp. He preparado hoy el episodio J y estos 5 meses he estudiado un poco más de 950 horas.
Quizá me enfoco demasiado en las horas, pero la práctica, la dedicación, el reservar tiempo únicamente a aprender y repetir es la manera de obtener experiencia. “Horas de vuelo”. A los pilotos se les mide la experiencia y conocimiento en horas de vuelo (entre otros factores), entre más horas de vuelo de entiende que tienes más experiencia y estás mejor preparado para más desafíos. Es por ello que lo tengo mucho en consideración, no es el único factor, porque al principio de esta andadura esa práctica era con temas básicos y se hizo un poco repetitiva sin profundizar demasiado, sin embargo sentó las bases para el bootcamp, para toda esa información y conocimiento que me ha venido y sobre todo a la velocidad que he tenido que asimilarlo.
Ha sido la mejor decisión el haberme tomado este “periodo sabático” y centrarme únicamente en aprender a programar, seguir trabajando y disminuir las horas de estudio y hacer el bootcamp hubiera sido extenuante.
Tengo confianza en lo que he aprendido, falta que esta titulación avale ante las empresas a las que postule para un puesto y enfrentarme a la realidad.

20.Jun.23

Hemos hecho una app de chat, utilizando chatgp3. Aunque como no lo he contratado, no responde claro. Una interfaz de chat bastante más fácil de hacer de lo que me imaginaba. Con animaciones sencillas pero que dan un efecto resultón.

19.Jun.23

Una semana de bootcamp es lo que me queda. Me sorprende lo rápido que ha pasado, aún recuerdo cuando tenía esa emoción por comenzar. El primer día todos contentos y con mucha ilusión.
El primer mes fue lento, los días duraban mucho, era el cambio de una rutina diaria a otra completamente distinta. A partir de ahí, las semanas pasaron y pasaron cada vez más rapido, se volvió parte de mi vida. Sabia lo que me esperaba con lo cual la asimilación era más rápida, menos sorpresas y menos incertidumbre.

Ahora este camino ha llegado a su destino, un lugar donde viven muchos desarrolladores iOS, que tienen en común ese conocimiento, ese interés. Viven de ello, habrá gente que emigre a otros lugares, cambiando o ampliando sus conocimientos, otros quizá vivan aquí y en otro lugar dependiendo de su proyecto. Hay que nació aquí, toda su vida ha sido desarrollador y se especializó en Swift en cuando pudo. Pertenecen a este territorio informático o ingenieros en ciencias de la computación.
He emigrado del territorio de las ventas, del comercio al menudeo y ahora, una vez que termine, para poder asentarme en esta ciudad tendré que conseguir una fuente de ingresos. Ser parte de esta ciudad de desarrolladores iOS tiene ese requisito: vivir del desarrollo nativo en iOS.

18.Jun.23

Esto leyendo ahora el libro de big mountain studio de SwiftUI, pequeños grandes descubrimientos sobre las vistas.

16.Jun.23

Estamos trabajando con el framework Vision para el reconocimiento de manos, animales, códigos de barras y algún otro. En tiempo real con la cámara haciendo vídeo, así que cuando detecta un objeto lo enmarca y pone el texto del objeto que es.

Le he enseñado a mi mujer y a mi sobrina, al medio día cuando logré hacer que funcionara. En la cocina con algunos vasos y botellas. Cuando detectó varios vasos los enmarcó y puso en inglés glass debajo de cada uno de ellos.
A lo que mi mujer dijo: ¡Mira le pone cuadritos!
Me reí mucho.

15.Jun.23

El libro de CoreData de BigMountainStudios está siendo una buena inversión. Es Justo lo que sentía que me hacía falta por aprender, muchos detalles en relaciones de las tablas y su interacción. Explicado de una manera sencilla de entender, visual, con ejemplos prácticos y claros, ahondando en lo que en el bootcamp pasamos muy rápidamente. Sin el bootcamp no habría tenido las bases para poder poner datos de prueba en las previews para los ejemplos.

Necesito ahora este tipo de tutoriales e información que ahonden en el tema y no se queden en la superficie. Al ya poder comprender y tener el background ese primer grado de especialización es alcanzable. Con el tiempo podré comprender esos temas más complejos, más especializados que veo en algunos posts.

14..Jun.23

El libro de CoreData de BigMountainStudios está siendo una buena inversión. Es Justo lo que sentía que me hacía falta por aprender, muchos detalles en relaciones de las tablas y su interacción. Explicado de una manera sencilla de entender, visual, con ejemplos prácticos y claros, ahondando en lo que en el bootcamp pasamos muy rápidamente. Sin el bootcamp no habría tenido las bases para poder poner datos de prueba en las previews para los ejemplos.

Necesito ahora este tipo de tutoriales e información que ahonden en el tema y no se queden en la superficie. Al ya poder comprender y tener el background ese primer grado de especialización es alcanzable. Con el tiempo podré comprender esos temas más complejos, más especializados que veo en algunos posts.

13..Jun.23

Hemos visto los modelos de entrenamiento de ML, y hemos entrenado, rápido y mal a uno para que rque conociera personajes de anima, en mi caso de DragonBall. Con tan pocas imágenes y malas, no ha podido inferir si las imágenes que le pasábamos que probable era las que tenía “identificadas”.
Por lo tanto fallaba demasiado.
Hay una pagina con muchos recursos (datasets) que puedes descargar para entrenar modelos, otra pagina de apple con modelos ya entrenados. Que solamente tienes que descargar y añadir a la app. Obviamente con su codigo correspondiente para su uso, que funcionan mucho mejor en cuanto a detección de objetos.

No se me ocurre alguna idea práctica que pueda implantar con estos modelos, todavía, y menos en la app. Así que tendré que darle una vuelta, pero me sorprende lo fácil que es ahora usar los modelos. Entrenarlos es laborioso.

12..Jun.23

Hoy comenzamos el módulo Machine Learning. Primer día de teoría, un repaso sobre la evolución que ha tenido hasta hoy la inteligencia artificial y como apple lo integró en su momento desde el iPhone X para que los desarrolladores pudieran comenzar a utilizar las herramientas como CoreML.

09.Jun.23

1.412 reproducciones
Episodio I: Implicando a mi mujer
Publicado!

07.Jun.23

Quizá deba grabar este viernes 9 y el próximo viernes 23 o sábado 24, una vez termine el bootcamp, irme de vacaciones y volver o incluso grabar allá.
He avanzado en el proyecto final, hemos definido la información que debe llevar las vistas que se mostrarán en la app, después he hecho el screen flow y los primeros bosquejos de las vistas.
Me he suscrito a Midjourney que me ayudará a generar las imágenes de la app, le pediré a mi sobrina, estos días que esta aquí si quiere ayudarnos con eso. El sábado por la tarde tuvimos sesión de app y participó. Me da gusto involucrar a mi mujer y a mi sobrina, me dan otros puntos de vista. Intento escuchar sus ideas y no imponer las mias, para tener solo mis ideas podría hacerlo solo, pero su punto de vista es diferente y puedo ver más allá de mi visión original.
Cerca de 5 horas le he dedicado, y ha sido provechoso. Estas 2 semanas que quedan tendré que dedicarle suficiente tiempo para que en mis vacaciones esté un poco más relajado, pueda ver vídeos de la WWDC2023, genere las imágenes y los retoques finales, para que al volver sea e comenzar a escribir código.

06.Jun.23

¿Debería twittear más? Veo que todo el mundo lleva el hype de la WWDC, de las novedades, de los nuevos productos y me pregunto
¿en que medida me entusiasma eso?
No es un producto que me gustaría tener ahora mismo. Le falta años de mejora. He de aceptar que en la Presentación me imaginaba viendo una película con las gafas, ese manera tan sutil que tiene el marketing de llegar en profundidad y despertar el deseo. Son caras y no hay de momento muchas aplicaciones desarrolladas para ellas.
Las novedades del sistema operativo dan el aviso a los desarrolladores de que apple creo que son una señal de lo que puede hacerse, de cómo se van comiendo a apps que tengan ciertas funcionalidades. La aplicación de journal que han presentado, dejará fuera muchas aplicaciones que hagan lo mismo con una calidad más baja. Las nuevas funcionalidades del Apple Watch para ciclismo, exigirán a apps similares que se esfuercen por ofrecer más de lo que han implementado.

05.Jun.23

Episodio H: Hilvanando fuentes publicado!
1.393 reproducciones
Ha comenzado la WWDC 2023!
Han presentado Vision Pro, gafas de realidad virtual que todo el mundo esperaba.
La gente no iba a quedar satisfecha con lo presentado, su opinión de basa en lo que le han faltado, en lo que no han pensado y los errores que han cometido.
La primera parte, donde presentan las novedades del sistema operativo, me parece el escaparate donde muestran aquellas funcionalidades que para los que estén interesados en la tecnología y no sean expertos sean los portavoces de lo que se podrá hacer. Un puente para acercar a que todo el mundo pueda aprender a programar, a transmitir el uso de funcionalidades para los no-tecnólogos. De todas las funcionalidades del teléfono y su sistema operativo no utilizamos el 100%, muchas son totalmente desconocidas. Y ese es el momento de darles bombo y platillo.
Quedarán cientos de vídeos técnicos por ver, que muchos desarrolladores ni siquiera verán, porque de todas las funcionalidades de las que podemos desarrollar no las usamos ni las conocemos la mayoría.
Las preguntas que me quedan son
¿ahora tengo que aprender esto?
¿Ahora lo tengo que aprender de esta manera?
¿Todo lo que he aprendido vale de algo?
La respuesta es si, si y si.
Dice ChatGPT que el primer teléfono móvil se vendió en 1983, el primero coche en 1.886 y la primera emisión de televisión pública en 1928, aunque la televisión se hizo comercialmente pública hasta 1950. Todos los productos necesitan años de innovación para alcanzar una madurez. Las gafas para Apple acaban de nacer, aunque el producto tenga ya varios años, queda que la compañía tenga la constancia suficiente para seguir iterando sobre el producto.

03.Jun.23

He terminado de leer y libro de Brais Moure Git y GitHub. Me tendré que ver el vídeo, aunque creo que muchos conceptos me han quedado claros con la teoría, el módulo pre-grabado de git del bootcamp y lo que me contó un compañero del bootcamp en una videollamada.
Siempre quedará como libro de consulta por los comandos hasta que los utilice lo suficiente.

01.Jun.23

Hoy he aprovechado la oferta de big mountain studio para comprar dos libros a los que ya les había echado el ojo. Uno sobre CoreData y otro sobre SwiftUI. Con 40% de descuento y recomendado por el profesor. He aguantado la tentación de comprarlos desde hace 1 mes sabiendo que con la WWDC 2023 pondrían un jugoso descuento.
He estado practicando ya lo último que me quedaba del módulo de desarrollo seguro, aún queda otra clase que repasar. Me siento entusiasmado porque he podido hacer lo que tenía en mi cabeza. El ejemplo que desarrolló el profesor en clase, con mis variantes.
Básicamente son 3 ejemplos. Uno cifrar un texto, para después descifrarlo. Otro generar el hash y guardarlo en la carpeta documentos, en user defaults y en la keychain. El último de un listado de personas cifrar únicamente el email para guardarlo cifrado.
Aunque ha simple vista, por la cadena de caracteres con la que es representado, el hash o el hash criptográfico y el texto cifrado parecen ser la misma cosa, no lo son. El primero cifra el texto para después obtenerlo, el otro es el “sello de garantía” de que ese texto no ha sido modificado en ningún momento, ( normalmente en la transmisión entre dispositivos ) y que es exactamente lo que se ha remitido.
Me ha costado verlo, pero practicando lo he comprendido.
Además he puesto ese feedback (necesario) al usuario de que al pulsar el botón la app ha realizado la acción. Una pantalla que muestra un círculo con un candado, o un documento con un candando que gira durante dos segundos para después desaparecer.
He comprobado que se guardaba en los destinos correspondientes, menos en el Keychain al que no tenemos acceso por seguridad. El Keychain es como la bóveda del banco, al que tu vas pides lo que tienes guardado y si es así te lo da, pero tú no puedes entrar ahí.

28.May.23

Aunque no he llegado a las 50 horas. Esta semana para tener visitas en casa y estudiar lo he hecho bastante bien. Mientras ellos descansaban, yo estudiaba un poco. Rascando minutos del tiempo sin descuidar y procurando estar también con ellos.
Estoy haciendo algunos diagramas a manera de repaso sobre el cifrado de información. Ver en un esquema lo que implica el cifrado me facilita comprender

26.May.23

Tenemos visitas. Mi cuñado y mi sobrina. El de quedará hasta el martes y mi sobrina hasta el 30 de junio. Así que tengo que ingeniármelas un poco para no perder la constancia. Hoy me he despertado y me he puesto a estudiar hasta que se han levantado y hemos desayunado juntos. Después he vuelto otro rato al ordenador mientras se preparaban para salir y hemos estado casi todo el día fuera. Yo he vuelto a las 17:00 para repasar un poco y estar listo para la clase.
Esta semana veo complicado llegar al objetivo de horas. Incluso grabar el episodio.

25.May.23

Hoy ha tocado estudiar un poco y mudarme de sitio. Llegan visitas y utilizarán mi estudio-dormitorio para quedarse unos días. Así que toca hacer los preparativos. Menos horas de estudio, pero se puede compatibilizar.

23.May.23

Hemos avanzado en el proyecto de App. Ha tocado definir el modo de juego. Hacer una simulación.
Será una App en la que tienes que ir completando acciones diarias, fáciles, unidireccionales y que no requieran mucho esfuerzo, pequeños detalles de pareja. Realizarlas te dará 1 punto, conseguir rachas semanales, quincenales y mensuales ye dará insignias por racha. Esos puntos los puedes canjear por actividades, que tienen un coste y te dan ciertos puntos e insignias de actividades. Ir acumulando insignias te da materiales, que te permiten ir escalando en una escalera al conseguirlos.
Los nombres aún no están definidos, pero la idea del juego inicial es esa. Engancharte para que vayas realizando actividades con tu pareja y puedas ver el avance.
Espero esta semana hacer una simulación de juego para darnos una idea del volumen de puntos que se puedan conseguir y ver si es “jugable”.
También definir los campos, tablas y relaciones de la base de datos.
El diseño de las insignias pensaba hacerlo con la ayuda de Midjourney.

22.May.23

Hemos visto de manera muy sencilla y rápida como implementar en un servidor una base de datos. Cómo crear la tabla, hacer la lógica y las respuesta que daria el servidor.
Me ha parecido sencillo, aunque es una implementación muy pequeña. Tengo la intención de cómprame un libro de vapor, al que le tengo echado el ojo de Tibor Bödecs Server Side Swift 49€ el que espero esté de promoción cuando comience la WWDC 2023. También el libro de Core Data de Big Mountain 97€

18.May.23

Estoy pensando en comprar el libro de big mountain Studio. Aunque no estoy seguro cual. SwiftUI views, Animations o CoreData .
Esperaré a que empiece la WWDC a ver si dan algún descuento especial, si no hay ningún cambio con CoreData, creo que es el que debería comprar. Si hay un nuevo CoreData alguno de los otros dos.

17.May.23

Hemos terminado una mini-app de trazos. Una aplicación de tipo documentos, en el que tienes un lienzo en el que puedes trazar líneas de diferentes grosores y colores. Que se guarda automáticamente después de cada trazo y de la que generas un archivo nuevo por cada lienzo.
No hemos puesto opciones como borrar, deshacer, pero me sorprende lo fácil que ha sido, con básicamente 4 archivos queda implementada esa mini-app.

16.May.23

Anoche, como muchas noches sueño con la clase. Pero hoy me ha dado la sensación de haber tomado la misma clase otra vez en mi sueño. Es como repasar lo mismo que hemos visto en clase, pero en mi sueño.
Es como si mi cerebro asimilara los conocimientos dados en clase.

15.May.23

He comenzado a vislumbrar como podría ser el modo de juego de la app. Estoy entusiasmado porque Nicole se está involucrando con este proyecto, eso si ha pedido su crédito respectivo dentro de la app. “Con la ayuda de” o “co-planifiadora

14.May.23

Estoy comenzando a tener un poco de ansiedad por el proyecto final. Intento relajarme diciéndome que tengo suficiente tiempo todavía.
Hoy ha sido dia de descanso, así que me he resistido para no encender el Mac mini haciendo alguna tarea de casa.
Tengo suficiente tiempo, me gustaría tener tiempo para la planificación, pero también para seguir practicando los temas que estamos viendo. Mi idea es terminar las clases el 23 de junio y tener ya toda la planificación hecha y que quede la parte de código. Que digo yo en 55 dias me dará tiempo.


13.May.23

Episodio G Germinando mi proyecto de app. Publicado
1295 reproducciones

12.May.23

Hoy espero dar ese segundo análisis a la app de matrimonio, para ir definiendo lo que implicara y como se hará.
No me gustaría, no quiero comenzar a picar código sin tener claramente lo que voy a hacer y como quedará. No quiero estar cambiando los requerimientos, ni el alcance. Excepto por aquello que me sea demasiado complicado implementar, pero de eso me tendría que dar cuenta en la implementación.
Episodio G: Germinando mi proyecto de app. Grabado!
Lo he editado en garage band y exportado a mp3. No me ha dado tiempo de publicarlo.
Lu he subido a adobe podcast para que mejorará el audio. Ha quitado el eco, aunque creo que me ha cambiado el tono de voz. Así que no creo que publique esa versión. Aun tengo que decidirlo. Mañana espero tenerlo.

11.May.23

Practicando CRUD en CoreData me encuentro comportamientos incomprensibles, como que se vayan grabando datos en la base de pruebas de la preview, añadiéndose cada vez que que refresca.
He logrado añadir nuevos registros CREATE, y editar la tabla de actividades, y la tabla relacionada comentarios pero no consigo que se refresque la pantalla con esa información, que la vuelva a cargar. He descargado una app para abrir la base de datos de SQLite y confirmo que se guarda. Queda probar porque no se muestra al abrir de nuevo el detalle de la actividad.
Cuarto día de ñl módulo de seguridad y es cuando comienza a tomar sentido el cifrado y el descifrado de la información para el envío de un “mensaje” entre cliente y servidor. Ha sido un poco cómplices entender, mientras el profesor resolvía algunas dudas yo buscaba por internet un diagrama que me clarificara esa teoría de manera visual.
No era el único al que se le dificultaba entender la explicación. Al final ha quedado claro.
Eso me lleva a pensar ¿En que porcentaje podría decir que he aprovechado el curso? ¿Cuánto conocimiento del total que se nos ha dado he conseguido adquirir realmente? Quizá la manera de saberlo es con el proyecto final. Cuánto podré aplicar, cuanto lo haré con buenas prácticas y como será el resultado final.

10.May.23

Nic me ha ayudado ha hacer el análisis de la última opción que tenía de proyecto de app. La de presupuestos de trabajos de autónomos. Que básicamente es llevar el control de leads, presupuestos hechos, aceptados y cobrados de un fontanero, electricista o instalador. Me ha gustado la idea, aunque no para proyecto del bootcamp. Porque aunque es sencillo, es a la vez complejo lo que me interesa que incluya, y nl integra demasiado bien una API de red, básicamente porque no es necesario. Así que ella idea ganadora es la de matrimonio app.
Hoy primera clase práctica de seguridad. ¿Como asegurarse de que la llave que está abriendo la cerradura es la que corresponde a esa persona y es la correcta sin guardar una copia de la llave?
Guardando una referencia secreta de puntos que me digan si esos puntos coinciden con la forma de la llave.
Aunque al principio de la clase me ha costado un poco seguir el porque nos explicaba de UTF8DataHash y base64. Cuando hemos llegado al momento de saber como validar la contraseña de un usuario ha quedado un poco más claro.

9.May.23

Segundo día teórico de desarrollo seguro. La cantidad de vulnerabilidades de los sistemas que utilizamos día a día que han sido explotadlas, pero como los perjudicados son otros y las noticias no dan la suficiente información porque no son medios especializados nos enteramos mal de lo que realmente ha sucedido.
Las empresas van parcheando los fallos que ya han encontrados. Reaccionan a lo que ya han intentado los malos así que siempre hay hueco para ese riesgo, que aunque sea pequeño permitiría un desastre.

6.May.23

Creo que debería ponerme ya a planificar el proyecto del bootcamp. Hoy, según lo planeado, tocaba tutoría pero por temas de la mudanza del profesor se ha pospuesto. Ayer comentó que le gustaría saber cómo íbamos con el proyecto. Hay quien ya está trabajando en ello. Yo ni siquiera he empezado.
Así que tocará planificar todo, este mes o estos dos meses que quedan, antes de tocar una línea de código me gustaría tener todo bien claro para ir por el camino más directo posible y no tener que cambiar de rumbo a mitad.
Me encuentro que no se como empezar, ¿como se comienza con esto? Tocará buscar información y escribir en la pizarra.
Por la tarde de hoy me he puesto 4 horas a analizar la idea que tenía de app para el proyecto final.
Comencé buscando las preguntas que debía hacerme sobre la app. Descripción, por qué, para quien, problema que resuelve. Y me di cuenta que debía cumplir con dos especificaciones.

4.May.23

He terminado de estudiar TDD y test. Hoy comienzo con Core Data.
Me ha dado una sensación abrumadora porque cada nuevo tema es como un peso más con el que debes andar cuando creas una aplicación. Atrás quedó cuando era una pantalla y tres o cuatro archivos. El bagaje de conocimientos que debes tener para crear una app robusta se va haciendo mayor conforme te especializas, conforme profundizas.
Es complicado aprendérselo todo de memoria, al crear un proyecto nuevo he tenido que ir a buscar cómo era el método para decodificar un json. Lo he vuelto a escribir en el nuevo proyecto, la diferencia es que ahora sé que es lo que hace cada línea. Aunque siempre el no saberlo de memoria hace que me entren las dudas, me deja la mente en blanco y tengo que aceptar que no es así, que no es un fracaso ni significa que no estoy aprendiendo sino fluye la escritura del código. No es una sensación agradable.
He terminado el libro de Testing Swift de Paul Hudson. Se nota que esta desactualizado, algunos métodos y propiedades que usa han quedado obsoletos (deprecated) otros han entrado en desuso. Alguna parte me la he saltado, porque no le he visto sentido dedicarle el tiempo en ese momento, se salía de mi intención de lo que tenía en mente practicar. Siempre es una buena guía otro mentor, otra manera de entender el código.
Por ejemplo, hoy he aprendido cómo abstraer en dos métodos, uno creando mi propio XCTAssert para propiedades @Published y otro para consultas a CoreData a través del NSManagedObject. El primero de Paul Hudson y el segundo de Julio César Fernández.
Ambos son fruto de una refactorización de código. Código repetido abstraído en un método que sea polivalente.
Me ha dado gusto pensar que, Justo antes de que nos enseñara ese método de búsqueda, estar pensando que podría poner en otro archivo un listado de métodos al que llamar en una sola línea. Como si mi abstracción estuviera a mitad de camino de la de él. Me he sentido en el camino correcto, a falta de experiencia y conocimiento. Una versión scalated de mi profe que es RX si lo ponemos en términos de Crossfit.

2.May.23

Hoy ha tocado repaso de Test y TDD. He retomado el libro de Paul Hudson Testing Swift y me ha dado gusto darme cuenta entender mucho de lo que hace tiempo solo veía como teoría.
Me gusta ver diferentes puntos de vista, diferentes maneras de explicar lo mismo, de enseñar el mismo tema por diferentes personas. Tomar lo mejor de ello y que me quede más claro.

1.May.23

Episodio F: Fortalenciendo las bases publicado!
1.257 reproducciones

25.Abr.23

He subido ya el proyecto terminando de la app de anime. Aunque siempre se puede mejorar tengo que cumplir con la entrega. Seguiré añadiendo alguna funcionalidad, también quiero añadir tests para que sea un proyecto que pueda mostrar.
Hemos hecho un proyecto en UIKit haciendo TDD. Modelo, persistencia, Logica.
Siguiendo la metodología, y al final cuando hemos ejecutado el simulador la tabla con la información de los animes ha salido a la primera.
La práctica, siento que ahora voy más suelto, a base de repetir, de entender los componentes y seguir un método. He podido seguir la clase haciendo al mismo tiempo el proyecto y los tests. Cuando me rezagaba podía seguir los pasos por mi cuenta.
Es una alegría cuando ves los resultados de las horas dedicadas a esto, cuando sientes esa soltura, esa confianza de que así es como debe hacerse.

24.Abr.23

Hoy ha tocado refactorizar código. La app de Anime del ejercicio de SwiftUI. He arreglado pequeños detalles que tenía en un listado.
Este refactoring me está ayudando a comprender mejor el funcionamiento, a cómo se entrelazan las partes.
Aunque al final del día me he metido en el refactoring de la ordenación para dos vistas y hacerlo desde un solo sitio. No lo he terminado.
Tampoco está refrescando la vista de vistos cuando marco alguno desde la pantalla de detalle y no entiendo porque. Hoy espero arreglar eso y terminar.

23.Abr.23

Me he comprado el libro de Git: GitHub de Brais Moure.

21.Abr.23

He terminado con el ejercicio de app de biblioteca de animes.
Al menos con el enunciado obligatorio y el opcional.

He hecho un “backlog” con aquello que quiero mejorar. Me gustaría limpiarla un poco. He hecho vistas que no necesito, añadido información que no he usado y quizá lo más importante dejar la fuente de la verdad, ahí donde van todos los datos en una sola clase y no en dos como tengo ahora. Este fin de semana quiero terminarla para pasar a meterme de lleno con los tests. De los que no he practicado nada aún.

Estoy contento con cómo ha quedado. Las animaciones, y el diseño. Pudiera ser mejor, pero a manera de práctica me parece que es suficiente.

20.Abr.23

Me he comprado el libro Diseño Ágil con TDD de Carlos Blé. Recomendado por un compañero del bootcamp. Ahora que empezamos con el módulo de testing.
He pasado de tener una imagen, a pensar que

¿¡pero si se escribe el triple de líneas de código con los test que el código que se está probando!?

A cada vez ir un poco más rápido avanzando por el

Red – Green – Refactor

En cada método.
Con experiencia será cada vez más rapido:

  • escribir la cabecera método que necesitas
  • escribir las formas en que podría fallar, el test.
  • asegurarse que el test que has escrito falle realmente
  • probar que el test se puede pasar, escribiendo en el método con lo mínimo necesario
  • implantar el método con lo que debe hacer

Ir avanzando de esa manera me de ría hacer sentir más seguro sobre el código que voy escribiendo.

Si no, ¿como sabes que lo que escribes realmente hace lo que tiene que hacer? Y sobre todo ¿como te aseguras de que si cambias algo todo sigue funcionando?

18.Abr.23

Quedan dos meses de bootcamp. Aun queda mucho por aprender y muchos temas de los que se vienen son de los que menos he tocado, quizá los había escuchado pero otros puede que ni siquiera sabía que existían.

Ayer terminé con el enunciado del ejercicio de app de SwiftUI de anime obligatorios. Hoy comenzare con los opcionales, me gustaría terminarlos pronto y practicar con otra app lo que hemos visto que no he podido practicarlo. La app de movieDB por ejemplo con ese llamada a la API tan rebuscada. También los efectos de transición entre pantallas que no he practicado.

Hemos comenzado con Test unitarios y TDD. Como primera clase del módulo es teórico. Un poco de historia, conceptos, herramientas, ejemplos y la metodología.

Los test vistos así parece una requerimiento más, que añade una carga más que debe ser cumplimentada. Más código a escribir y asegurar que funcione. Por la poca experiencia que tengo con los tests, me parece un control de calidad acorde al producto que fabricamos, es decir, a todos los productos se les prueba su calidad, resistencia y seguridad, ¿por qué el software tendría que ser diferente?

17.Abr.23

La clase de inglés del viernes me ha dejado pensando.
He dejado de ver las clases como clases en si, lo estoy tomando como si fuera li oportunidad para conocer a una persona de otra nacionalidad, de un país diferente y hablar con ella. Eso me hace estar mucho más relajado y al estar relajado siento que puedo hablar más fluido.
Me doy cuenta que puedo expresarme, quizá ideas más complejas me cuesta más, por la falta de vocabulario, o quizá sea la adopción del vocabulario que entiendo cuando lo leo o escucho pero no llego a utilizar al hablar, es como si no lo encontrara en mi archivo de PalabrasCuandoHablo. Será leer palabras y que piense una frase para usarlas.
Me divierto, cuento como soy, lo que he hecho, lo que me gusta. Me da la sensación o eso quiero creer que entusiasmo a la persona con la que hablo. Nos reímos un poco y me doy la oportunidad de no sentir demasiada vergüenza cuando hablo de mi.

14.Abr.23

Episodio E: Esclareciendo los próximos pasos. ¡Publicado!
1177 Reproducciones

09.Abr.23

Hoy he comenzado con otro ejercicio del bootcamp: Crear un catálogo de películas y series de anime. Esta vez en SwiftUI. Así que hay que cargar los datos, mostrar el listado y el detalle.
Me gustaría hacerlo con un diseño neumorfico, tengo unos diseños hechos del proyecto de Hacking with swift+ y espero poder replicarlo.

08.Abr.23

Hoy han sido las primeras clases de refuerzo del bootcamp. Para quienes se sientan rezagados, con dudas que teman preguntar y demás han puesto clases hasta 23 de junio. Yo me he apuntado. Para repasar y compartir lo aprendido.

03.Abr.23

Hoy he estudiado 6 horas y 36 minutos. Para ser Semana Santa no está mal. Nic está de vacaciones así que se me hace feo dejarla sola 10 horas del dia.
Estoy ahora con la app de ejercicio de BigBang, que según los requisitos del enunciado ya la tengo completada.
Aunque quiero seguir añadiendo funcionalidades a modo de práctica.

31.Mar.23

Anoche me fui a la cama, como todas las noches después del curso, me quedé un rato más añadiendo un NavigationStack a la app de prácticas que estamos haciendo sobre películas. Me fui a dormir y comencé a soñar sobre ordenar el listado y la navegación. Me costó un rato conciliar el sueño, más de lo habitual. Por la mañana recuerdo que soñaba con lo mismo, y me decía a mi mismo que necesitaba soñar otra cosa, que no había descansado.
No era un problema lo que estaba resolviendo, simplemente practicando.
Creo que estos dos últimos meses he estado soñando más o menos igual entre semana.
Aprendiendo Swift.

1.116 reproducciones
Episodio D Creando mis métodos ¡publicado!

30.Mar.23

Hoy ha sido un buen día, entre que he poseído quedar con una amiga y me ha dado tiempo de estudiar 9 horas. Tengo ya casi el “esqueleto” de la app de ejercicio que tiene como tema los episodios de la serie Big Bang Theory.

He intentado hacer un CollectionView dentro de una TableView estática, pero no lo he logrado. Lo he intentado algo asi como una hora. Luego he decidido seguir con los requisitos del enunciado. Quizá mañana vuelva a probar.

28.Mar.23

He empezado con los ejercicios de concurrencia, la descarga de info contenida en un post de WordPress. Justo como hice hace tiempo cuando practicaba para mostrar los post de Próxima Parada Swift con UIKit.
Después de practicar varias veces y aun con todas las veces que practiqué con el patrón callback, combine y Async-await aun tengo que mirar el código. No me lo he aprendido de memoria, pero hay una cosa distinta: lo entiendo mejor. Los errores que me da xCode soy capaz de saber a que se refieren, los ejercicios enunciado sé lo que piden y aunque no recuerdo de memoria el código, puedo ir a buscarlo y aplicarlo al ejercicio.

26.Mar.23

He subido los ejercicios de avanzado y he olvidado mejorar el algoritmo de los números romanos. 😳
Hoy le echaré un ojo.

25.Mar.23

Hoy ha habido tutoría. Algunos han comentado que van avanzando en la idea de su proyecto final, otros como yo aun no lo tenemos claro. También hemos comentado sobre la retroalimentación sobre las clases, el ritmo, la manera de explicar, en general cómo lo llevamos.

Reafirmo la decisión que tomé de dejar de trabajar y enfocarme solo en el bootcamp. Algunos han comentado que se han visto “atropellados”, en primera por la cantidad de información que es y el tiempo que requiere además de la clase diaria de 4 horas, los ejercicios y practicar. Sumado a compatibilizarlo con el trabajo, así que tienen jornadas frenéticas.

Así que yo no hubiera podido tampoco trabajar y hacer el bootcamp. Sería demasiado, encima de dedicarle el fin de semana. No tendría tiempo para nada y creo que hubiera perdido calidad de vida y el aprendizaje sería más lento.

23.Mar.23

Sigo trabajando en el enunciado de los ejercicios Avanzados. Aun me quedan dos o tres. Espero hoy terminarlos. Y pasar al siguiente. Son 3 enunciados en total. Uno de algoritmos, otro de concurrencia y asincronía y el tercero de una mini app de consulta sobre los episodios de la serie Big Bang Theory.

22.Mar.23

Definitivamente resolver algoritmos me gusta, hoy me he pasado prácticamente todo el día intentando resolver el algortimo que a partir de una cadena con un número Romano, devuelva su valor en número Decimal. Con control de errores, validación de la cadena.
He tenido que consultar en internet las reglas de escritura de los números romanos.

21.Mar.23

Hemos comenzado a ver los componentes de SwiftUI.

20.Mar.23

Siento que voy con retraso tengo que

  • [ ] terminar de ver el módulo pre-grabado de Git
  • [ ] ver el módulo pre-grabado de Planificación de proyectos

Principalmente eso. Aunque quiero practicar un poco más

  • [ ] la Diffable data source
  • [ ] crear y hacer el Package con la conexión de red.
  • [ ] la persistencia de datos en local
  • [ ] tabla con celdas de diferente tamaño
  • [ ] background favoritos
  • [ ] añadir visto
  • [ ] añadir rating

Son pequeñas prácticas que quiero hacer y hoy comenzamos con SwiftUI.
No se hasta donde me de tiempo.

Hemos comenzado a ver SwiftUI. La parte teoría que incluye la historia, las ventajas sobre UIKit, los componentes, cómo funciona y coincido con lo que apple dice la mejor manera de hacer apps es con Swift y SwiftUI.

18.Mar.23

Mientras Nic dormía una siesta pude practicar un poco.
Dos hora y media.

17.Mar.23

Reproducciones 1.079
Episodio C Refactorizando la rutina ¡Publicado!

16.Mar.23

Dedicar muchas horas un solo día sin pausas adecuados no es la opción mas productiva. He estado casi 12 horas, poco más de 4 del bootcamp y algo más de 7 practicando y terminé agotado. Mentalmente agotado.

Me costaba seguir la clase. Así que puse toda la atención y el código lo haré mañana, un poco más despejado.

Puede que tenga que comprimir las funciones para no ver demasiado código, demasiadas líneas. Y poder ver mas claramente que estoy tocando. Siento complicado seguir cuando, es como cuando en un libro ya escrito con una historia sencilla, quieres añadir un suceso en el capítulo de introducción, en la presentación de los personajes.
Al alterarlo tienes que ir dos capítulos más adelante y añadir un párrafo que tiene relación con ese suceso, pero claro ahí solo mencionas en un par de líneas que fue lo que pasó en la intro.
Más adelante en la historia, tienes que profundizar, justo en el clímax de la historia, añadiendo un párrafo.
Asi que hay que tener cuidado, la historia debe tener coherencia, no duplicar explicaciones y las referencias deben ser claras para el lector.

Un proyecto lo veo como un libro, separado por capítulos, que son las carpetas donde van los archivos. Esos archivos son las escenas y dentro de la escena el cuerpo. Las extensiones como las notas al pie.

15.Mar.23

¿Como incluir en mi rutina ver vídeos de las WWDC que vaya guardando como favoritos?

Existen montón de tutoriales en YouTube, de post en blogs, pero creo que la fuente de la verdad está en los vídeos que la misma Apple produce. Mismos que están en la app Developer, aunque en el bootcamp nos hemos dado cuenta que algunos han desaparecido… seguramente estar en internet en algún lugar.

Mi nuevo objetivo complementario es ver la mayor cantidad de vídeos de WWDC, no importa que sean de años anteriores, muchas de esas prácticas son atemporales.

Aunque en la app se puede marcar los vídeos para verlos más tarde, podría hacer un listado para el blog.

¿A que hora podría hacer esta nueva actividad? ¿Entre que hábitos?¿Cuánto tiempo le quiero dedicar?¿Cuánto tiempo sería requerido dedicar en una sesión?¿Forma parte de mi objetivo principal? ¿Contaría ese tiempo?

Podría incluirlo después de comer, una media hora al día.

Quizá sea bueno separar, solo para el registro tiempo dedicado a practicar, al bootcamp y a ver recursos (libros, posts, vídeos).
Así me daría una idea general de cómo distribuyo este aprendizaje.

14.Mar.23

UIKit. Es increíble la cantidad de información que no existe en vídeos de una manera accesible sobre el manejo de Storyboards. Muchos vídeos y tutoriales se limitan a enseñar lo mismo.
Algunos de maneras más complejas.

11.Mar.23

Día de descanso

09.Mar.23

Seguimos con el tema del layout. Aun no he necesitado repasar el libro de Modern Autolayout.
Aunque me da gusto de que lo que he estudiado antes del bootcamp, como las constraints, a todo el mundo le cuesta trabajo, que no es un tema fácil el diseño en móviles y que se adapte a varios modelos de iPhone correctamente.
Además de que no estaba tan perdido en lo que he ido estudiando. Lo estoy aprendiendo aunque en diferente orden de como por mi cuenta lo intente aprender.

08.Mar.23

Hoy en el bootcamp hemos comenzado a ver las constraints de los storyboards, que son siempre un dolor de cabeza para que los botones, las etiquetas, imágenes, tablas y demás se queden donde quieres y sobre todo que se vea igual no importa el dispositivo.
Tengo un libro que se llama Modern Auto Layout de Keith Harrison porque quería dominar las constraints.
En el libro viene todo o casi todo sobre el diseño, te explica cada campo, relaciones y demás. Aprendí mucho a través de la práctica y aún recuerdo que no pude hacer una scrollView dentro de otra scrollView si no recuerdo mal.

Hoy he aprendido una metodología, cómo crear las constraints de los elementos de una vista. En (de momento) dos sencillos pasos como anclar los elementos a la pantalla y que éstos mantengan sus proporciones en varios modelos de iPhone. Lo que hay que hacer primero y lo que hay que evitar.
Si ese método funciona puede que me haya estado complicando todo este tiempo la manera en las que he trabajado con los storyboards.

05.Mar.23

He repasado hoy domingo por la tarde. Un poco sobre la ARC (la cuenta automática de referencias) en la documentación oficial de Apple. Algunas partes se me hacían complicadas de entender así que hacía uso del traductor. Me hice un esquema en la pizarra y los ejercicios de ejemplo en el playgrounds. Creo que es buena idea poner notas ahí, aunque lleve mi cuaderno de notas me he dado cuenta que para las dudas voy directamente a xCode y no a la nota que tomo del bootcamp. Aunque realmente tomó la nota para que me ayude a comprender y no tener que ir a buscarla después.

Ha sido una muy buena tarde de estudio, he repasado parte de la asincronía con el patrón callback y he empezado con Combine. No cabe duda que cuanto más practicas más te acercas a la comprensión.
Hoy me ha parecido mucho más claro el repasarlo yo, intentar hacerlo yo solo, solventando los errores de código que me marcaba xCode.

03.Mar.23

Episodio B Desbloqueando Actividades
¡Publicado!
1027 reproducciones

02.Mar.23

Hoy es de esos días en los que a mi cerebro le cuesta asimilar. Cuando te pegas un rato largo intentado entender en teoría algo que ya lo sabías, o que tenías ya idea. Hoy resulta que no.
No queda otra que insistir, que tener paciencia y aceptar que ea más difícil de lo que creía sin dejar de hacerlo.
Al final da sus frutos, aunque termine con la cabeza muy cansada.

28.Feb.23

El jueves de la semana pasada comenzamos con el módulo 2 del bootcamp: Concurrencia y asincronía.
De los 3 maneras que tiene Swift para manejar la asincronía, el patrón callback, Combine y Async-await, las 2 primeras las conocía, incluso de Combine tengo el curso en Udemy de Julio. Async-await lo había escuchado pero no tenía idea del uso de esa nueva librería.

En el pack de libros que compré de Hacking with Swift de Paul Hudson viene uno que es sobre concurrencia. Async-await así que he comenzado a leerlo y practicar para tener algo de idea antes de las clases. Muchas cosas no me quedan del todo claras, pero al menos se por donde va todo. La estructura, los elementos y algunos ejemplos.
Hoy hemos terminado la teoría y mañana me imagino que comenzaremos la práctica que es la mejor manera de comprenderlo.

27.Feb.23

Hoy he publicado el primer post. Lo he titulado Intro.
Es donde expongo mi caso, mis objetivos. Tengo más post por publicar, espero irlo haciendo junto con la publicación del podcast.

He reservado por fin mi primera clase de inglés. Será mañana a las 10:00, no lo he pensado mucho, porque si lo pienso no lo hago, de hecho he estado a un click de no confirmarla.

Lo más difícil es empezar, dar el primer paso. Programar esta primera clase.

25.Feb.23

Hoy ha sido la primera de las tutorías del bootcamp. Me ha gustado que nos diera un panorama general de lo que será el proyecto final. Cada uno hemos comentado como nos sentíamos en este primer mes, como veíamos la dinámica de las clases y si teníamos idea ya del proyecto de app que queremos hacer.
Me gusta mucho la dinámica que se está generando entre los compañeros, los que más saben están dispuestos a ayudar a los que menos experiencia tenemos.
Ha sido 4 horas las que hemos estado en total hablando de nuestras impresiones y dando retroalimentación al Julio.

23.Feb.23

Debería programar mi primera clase de inglés, es para determinar mi nivel y comenzar con las clases. Puede que mañana viernes cuando vuelva de entrenar lo haga. Una clase de 26 minutos. No se porque lo sigo posponiendo. No me entiendo a veces.

Hoy comenzamos a ver concurrencia y asincronía. Cuando nos cuenta de cómo está hecho hoy en día internet, de lo mal o lo poco eficiente que es la comunicación entre puntos. La cantidad de recursos desperdiciados por los dispositivos, por el simple hecho de que tienen potencia de sobra para realizar operaciones. Como están “maquetadas” las aplicaciones, utilizando código mantenido por terceros, del que ni siquiera saben bien cómo funcionan, que opacan el código nativo, poniendo capas sobre él, o que quieren que una app sea una página web, igual para todos los usuarios de la empresa. Como los fabricantes tiene que “obligar” a los desarrolladores a utilizar correctamente el hardware y software que han fabricado haciendo que las tareas se repartan ponderando su carga …
me hace pensar el internet como una ciudad de la Edad Media, sucia, desordenada y endeble. Donde solo unos pocos tienen la mirada en el futuro y de lo que “debería” hacerse y “cómo” debería ser. Eficiente y segura.

22.Feb.23

He comprobado que un apoyo para concentrarme cuando estoy estudiando o practicando es escuchar música clásica. No importa cuál, musica sin letra. Hay versiones de canciones modernas instrumentales que también me sirven. Incluso el sonido de la lluvia.
Está la página rainymood.com, con la que reproduce sonidos de una tormenta.

Si pongo música que me recomienda Spotify me distraigo, no significa que no pueda trabajar, pero me luego me veo mirando la letra, añadiendo esa canción a alguna lista que tengo guardada o cualquier otra cosa que no sea en la que estoy haciendo. Un distractor más identificado.

21.Feb.23

Hoy por fin he comprado las clases de inglés! Aún tengo que programar la primera

18.Feb.23

Hoy intentaré descansar. Aunque me es difícil no pensar en la resolución de los ejercicios de nivel medio que tengo pendientes o querer leer sobre los temas que estamos viendo en el libro de Aprendiendo Swift.

17.Feb.23

Quizá debí dar el paseo del medio día con Kelly. El no bajar y ponerme enseguida con los ejercicios ha hecho que me bloqueara, de pronto es como si mi cerebro no carburara, no procesará, no viera la información.

Es como si tuviera muchas herramientas y no sé cuál usar, si usar la más sofisticada, la programación funcional o las más sencillas, las de nivel básico.

16.Feb.23

¡¡Ya están disponibles para comenzar a la realizar los Enunciados de Nivel Medio!!

Del nivel básico eran 10 algoritmos, nos los dio el 9 de febrero. El que más me gustó era uno que decía:
Cree un programa con un conjunto con el número de elementos que diga el usuario, lleno de números primos. Cree un algoritmo capaz de calcular otro conjunto de números aleatorios que tenga al menos 3 elementos en común con el conjunto inicial.

Había que crear varias funciones dentro, que primero fuera filtrando los elementos del array introducido por el usuario donde solo quedaran los números que fueran primos. Este conjunto tenía que tener al menos 3 números primos. Después crear una función que devolviera un X número de números primos generados aleatoriamente entre 1 y el número máximo encontrado en el conjunto de números primos definido por el usuario. Si había menos de 3 números en común añadir más números primos aleatorios.
Finalmente devolver los números en común.

  • 2020junio 29, 2024
  • Property wrappers personalizadosjunio 15, 2024Los property wrappers es una funcionalidad disponible desde Swift 5.1 que permiten asociar lógica cuando las propiedades cambian. Esencialmente envuelven el valor original añadiendo funcionalidades. Se pueden implementar como struct o class al añadir el atributo @propertywrapper. Para conformarse deben incluir una propiedad calculada llamada wrappedValue. Es en esta propiedad en la que se implementa… 
  • XCTestXCTAssertThrowsErrorEqualmayo 13, 2024Releyendo el libro Diseño Ágil con TDD de Carlos Blé Jurado (que recomiendo ampliamente) y practicando los ejercicios que incluye, he hecho esta extensión de XCTest que es función de test que evalúa 3 cosas: 1) La cabecera Primero debemos definir el genérico, en este caso esperamos un Error y que sea Equatable para poder… 

Hoy toca repasar:
• Currificación y Parcialización de funciones
• Funciones puras
• Recursividad
• Memorización

15.Feb.23

T2 Episodio A Re-definiendo Rutinas Publicado
957 reproducciones

12.Feb.23

No he grabado el podcast este fin de semana, pensaba hacer el viernes por la tarde, pero los ejercicios de algoritmos me llevaron más tiempo del que creí. Y luego no el sábado ni hoy me di el tiempo para preparar y grabar.
Me gustaría hacerlo esta semana. Comenzar la temporada 2.

11.Feb.23

Día de descanso

10.Feb.23

Un conteo rápido de las horas dedicadas a estudiar Swift es de 51 horas esta semana. Lo que más importa es todos esos desbloqueos que he conseguido al ir entendiendo en profundidad pequeñas lagunas que tenía. Poco a poco esto irá tomando color ese paisaje en blanco, negro y gris que tengo.

08.Feb.23

El bootcamp va tomando velocidad, hemos terminado la parte básica de Swift, y hemos comenzado con las funciones.
El sentar las bases de todas posibilidades que tienen los componentes del lenguaje es:

Es una sensación de que infrautilizar la herramienta, como quien usa un iPhone solo para llamar por teléfono, o para usar WhatsApp y no conoce el abanico de funcionalidades que le proporciona.

Está apareciendo en mi cabeza información donde antes había lagunas, comenzando a unir puntos se comienzan a esbozar figuras.

06.Feb.23

Me da gusto saber que lo que estamos viendo en clase, en términos generales lo sabía ya. Como siempre hay detalles e información complementaria que estoy aprendiendo, sobre todo cerrando círculos, saber que en términos generales es lo que debo saber del tema.

04.Feb.23

Hoy he decidido no practicar, ha sido una primera semana de entera dedicación a practicar Swift y SwiftUI, con los cursos de HWS+ y el inicio del bootcamp.

No se me esta haciendo tan agotador como pensé que sería, lo disfruto, me divierte y lo encuentro como un reto, con lo que siempre quiero más, quiero seguir.

Los descansos me los estoy tomando en serio, los 10 minutos de reloj, para parar y continuar me permiten estar horas suficientes sin que mi cerebro se canse.

Seguramente esta primera semana no llegaré a las 50 horas, porque el lunes y el martes por la tarde me las tome de descanso antes de iniciar el bootcamp, pero serán muchas más que una semana “normal” de cuando iba a trabajar a la tienda.

La próxima será la primera semana “normal” de bootcamp y de las siguientes 20 semanas, hasta el 23 de junio.

02.Feb.23

Primer día normal de estudio. Por la mañana practicar y a las 19:00 comienza el bootcamp.

Estoy utilizando la técnica de pomodoro 🍅, enfocarme 60 minutos y descansar 10. Puede parecer mucho, pero al ser jornadas tan largas prefiero varios descansos que terminar distrayéndome por cualquier cosa.

Me está gustando mucho, por fin tengo tiempo de dedicar a pensar, a reflexionar el porqué y no solo copiar el código. De momento sigo con vídeos de HWS+, aunque me imagino que pronto tendré que practicar lo que veamos en clase.

01.Feb.23

¡¡Hoy comienza el bootcamp de Swift Full Stack!!

Día a día, estudiar, disfrutar y experimentar. Quiero obtener las herramientas necesarias para ser un buen desarrollador de software.
Quiero ampliar los conocimientos del bootcamp con otros tutoriales, priorizando el temario.
Practicar lo aprendido.

31.Ene.23

Hoy he pensado que estoy ahora sin trabajo. Legalmente es mi último día de vacaciones antes de que comience mi excedencia.

Mi trabajo ahora es aprender a programar. He[mos] invertido dinero en un bootcamp y ahora toca invertir mi tiempo. Solamente el pagar por esa enseñanza no significa que obtendré los conocimientos. Tengo interiorizarlos. A eso solo se llega con dedicación.

Mi objetivo es obtener rendimiento de esa inversión en un tiempo razonable, mejorar mi calidad de vida y dedicar más tiempo a lo que yo considero importante. Vivir tranquilo es para lo es.

Hoy es ese día de transición, tendré por la mañana para estudiar, mientras Nic trabaja, hasta las 6, luego me tomaré el resto de la tarde libre para pasarlo con ella. Antes de entrar de lleno a las clases de 19 a 23 hrs.

He podido estudiar 5 horas hoy. Con la técnica del pomodoro, estudiando 60 minutos, descansando 10. Y hasta 80 minutos de estudio por 10 de descanso.
No importaba lo que hacía cuando tocaba el descanso, lo tomaba, así me quedaba con ganas de volver, de seguir.

El bootcamp empieza mañana!!

30.Ene.23

Hoy estoy agradecido por tener este día de fiesta. A punto de comenzar esta carrera, este salto, esta nueva vida profesional. Ayer y hoy me he tomado de vacaciones, sin estudiar, y disfrutar de mi mujer, de hacer lo que nos gusta, de hablar y estar juntos.

Es también otra parte de porque busco este cambio profesional, para ganar calidad de vida.

28.Ene.23

( Episodio 40 ) -> FinDeCiclo
Publicado!

Reproducciones 924

27.Ene.23

¡Hoy es mi último día en Movistar y el Bootcamp Swift FullStack es en 5 días!

( Episodio 40 ) -> FinDeCiclo
Grabado!

26.Ene.23

¡Sólo me quedan ✌🏼 días trabajando en Movistar y el Bootcamp Swift FullStack es en 5 días!

25.Ene.23

¡Sólo me quedan ☘️ días trabajando en Movistar y el Bootcamp Swift FullStack es en 7 días!

23.Ene.23

¡Sólo me quedan 5️⃣ días trabajando en Movistar y el Bootcamp Swift FullStack es en 9 días!

21.Ene.23

¡Ya sólo me quedan 6️⃣ días en ese escritorio y el Bootcamp Swift FullStack es en 10 días!

20.Ene.23

¡Ya sólo me quedan 🕖 días en ese escritorio y el Bootcamp Swift FullStack es en 12 días!

19.Ene.23

¡Ya sólo me quedan 🎱 días en ese escritorio y el Bootcamp Swift FullStack es en 12 días!

18.Ene.23

¡Ya sólo me quedan 9 días en ese escritorio y el Bootcamp Swift FullStack es en 14 días!

Hoy he comenzado a ver el material pre-grabado del bootcamp. Introducción a la programación. Hay que tener la humildad de aprender desde lo más básico, podría pensar que ya sé que es una variable y una constante, pero siempre hay algo que te permite ampliar los conocimientos , ver otras analogías, asentar o confirmar los que ya sabía.
Re-hacer el puzzle de esos conocimientos y pensar en todo lo que había pasado por alto. Aprender otra manera de hacer lo mismo, quitarme vicios en la forma de crear código.

17.Ene.23

¡Ya sólo me quedan 10 días en ese escritorio y el Bootcamp Swift FullStack es en 14 días!

16.Ene.23

¡Ya sólo me quedan 11 días en ese escritorio y el Bootcamp Swift FullStack es en 16 días!

15.Ene.23

Aprender sobre SwiftUI lo veo muchos más practico que, por ejemplo hoy los genéricos. Que son términos más abstractos y sobre todo a profundidad me encuentro ya en territorio oscuro. Cuando ya los términos están como una capa por debajo de la superficie, las definiciones y los términos y no sé lo que hay que buscar.

Un repaso a todo, crear dudas, quedarme con aquello que comprenda bien e intentar hacer los retos de las lecciones, y sino los puedo resolver tampoco exigirme demasiado, puede que ahora no sea el momento ni esté preparado, ya podré volver a ellos dentro de un tiempo.

14.Ene.23

¡Me quedan 12 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 17 días!

Idea: y si ¿a través de juguetes hago analogías sobre programación? Por ejemplo los legos, o los play movil para las interfaces. No lo sé, habría que escribir todo y hacer las analogías antes de nada

13.Ene.23

¡Me quedan 13 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 18 días!

Hoy he soñado con que empezaba el bootcamp. El instructor nos hacía unas preguntas, sin siquiera tocar el código. Eran más de lógica, a ver cómo dábamos solución. Y la típica pregunta con trampa de que multiplicas por 0, algo así, no recuerdo la pregunta. Pero nos decía el error en el planteamiento.

Me levanté emocionado y todo.

12.Ene.23

Episodio 39 ¿Matemáticas y Trigonometría para programar?
¡Publicado!
878 Reproducciones

Pensaba grabar solo una parte o alguna sección y al final he grabado todo el episodio. Del 1 al 5 me ha gustado un 2.
A veces se me olvidan las palabras, me quedo en blanco, tengo muchas muletillas, no creo que transmita las ideas como las pienso en lo cabeza.

Quizá deba grabar cuando estoy inspirado, mas que cuando tengo que grabar. Aunque sea una sección.

¡Me quedan 14 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 19 días!

11.Ene.23

¡Me quedan 15 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 21 días!

Paseando a Kelly he hecho el cálculo en horas: 100… creo que ya no quiero estar en ese trabajo.

10.Ene.23

¡Me quedan 16 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 21 días!

Estoy con los vídeos de HWS+ sobre componentes de SwiftUI y me parece 1.000 veces más poderoso que UIKit, más versátil, más fácil de usar.
Como Paul Hudson lo hace tan fácil, el crear componentes reutilizables utilizando herramientas como los Genéricos, View Builders o las animaciones.

He visto un vídeo en el que hacía el logo de Hacking With Swift en un Shape, con curvas de Bezier y se me ha metido hacer en la cabeza el logo del podcast. He estado buscando webs o apps en la que me permita saber los puntos que hay que indicar.
He encontrado una en Android que puede que me sirva, después de descargar varias de ellas y hacer pruebas. Me tiene que permitir poner una imagen de fondo, dibujar la curva de Bezier y dar los puntos en coordenadas de x, y para poder ponerlo en código.

Ya veremos si lo puedo hacer.

09.Ene.23

¡Aún me quedan 17 días trabajando aquí en Movistar y el Bootcamp Swift FullStack es en 22 días!

La semana pasada es la que más he estudiado últimamente 26 horas y media. Trabajando de mañanas y con 1 día de fiesta. Las 50 horas no se ven tan inalcanzables ahora.

08.Ene.23

Estoy en un proyecto practicando los tutoriales de HWS+. En una nota escribiendo lo que incluye, los temas y cada archivo.
Me sirve después para poder ir a consultar si tengo dudas.
Esta semana creo que he pasado de las 15 horas de estudio, aunque hasta mañana que no reciba el correo con el resumen de Toggl no lo sabré con certeza.

07.Ene.23

¡Aún me quedan 18 días trabajando para Movistar y el Bootcamp Swift FullStack es en 25 días!

06.Ene.23

Entre ayer y hoy he podido estudiar 8 horas y media. Con la suscripción a Hacking with Swift estoy ahora con la parte de algoritmos, me parece increíble lo fácil que puede resolverlos, con unas pocas líneas de código, lo legibles que son.
Quizá podría decir que me quedan grandes para lo poco que sé, pero me da una idea más general, más amplia de lo que puede llegar a hacerse. Puedo ver la estructura, la denominación de las variables y funciones.
Tengo que ver los vídeos dos veces, la primera poniendo atención sin tocar código y otra ve para copiarlo.
Ahora no me salen tantos errores, puedo copiar el proyecto base a mano, y luego la implementación que hace en el vídeo y si me da algún error se mas o menos donde ir a buscar para resolverlo.

05.Ene.23

¡Aún me quedan 20 días trabajando para Movistar y el Bootcamp Swift FullStack es en 26 días!

04.Ene.23

Aún me quedan 21 días trabajando para Movistar y el Bootcamp Swift FullStack es en 28 días.

03.Ene.23

¡29 días para iniciar el bootcamp!
Aún me quedan 22 días trabajando para Movistar