├── .github
└── workflows
│ └── ci.yml
├── 01-data_management_in_bash
└── 2-utilities
│ ├── README.md
│ ├── _input.log
│ ├── _output.json
│ ├── execute.sh
│ └── test.sh
├── 02-jq
├── 1-map_json
│ ├── README.md
│ ├── _input.json
│ ├── _output.json
│ ├── execute.sh
│ └── test.sh
├── 2-combine_filter_json
│ ├── README.md
│ ├── _input.json
│ ├── _output.json
│ ├── execute.sh
│ └── test.sh
└── 3-aggregate_sort_json
│ ├── README.md
│ ├── _input.json
│ ├── _output.json
│ ├── execute.sh
│ └── test.sh
├── 03-jq_challenge
├── 1-problem
│ ├── README.md
│ └── _input.json
└── 2-solution
│ ├── README.md
│ ├── _input.json
│ ├── _output.json
│ ├── execute.sh
│ └── test.sh
├── 04-yaml_and_xml
├── 1-handle_yamls
│ ├── README.md
│ ├── _input
│ │ ├── app
│ │ │ └── controllers
│ │ │ │ └── services.yaml
│ │ └── src
│ │ │ └── mooc
│ │ │ ├── comments
│ │ │ └── infrastructure
│ │ │ │ └── services.yaml
│ │ │ └── videos
│ │ │ └── infrastructure
│ │ │ └── services.yaml
│ └── execute.sh
└── 2-handle_xmls
│ ├── README.md
│ ├── _input.orm.yaml
│ ├── _output.orm.xml
│ └── execute.sh
├── 05-csv
├── 1-csv_with_coreutils
│ ├── README.md
│ ├── _input.csv
│ ├── _output.csv
│ ├── codely_example
│ │ ├── 1-importer.sh
│ │ ├── 2-importer.sh
│ │ └── _input.csv
│ └── execute.sh
└── 2-csv_with_yq
│ ├── README.md
│ ├── _input.csv
│ ├── _output.csv
│ └── execute.sh
├── 06-csv_challenge
├── 1-problem
│ ├── README.md
│ ├── _input.csv
│ └── execute.sh
└── 2-solution
│ ├── README.md
│ ├── _input.csv
│ ├── categories.sh
│ ├── output
│ ├── categories.csv
│ ├── products.json
│ └── sellers.csv
│ ├── products.sh
│ └── sellers.sh
├── 07-sql
├── 1-handle_sqls
│ ├── README.md
│ ├── _input.sql
│ ├── execute.sh
│ └── generate_big_input.sh
└── 2-handle_live_sqls
│ ├── Dockerfile
│ ├── README.md
│ ├── docker-compose.yaml
│ ├── execute.sh
│ ├── random_course_creator
│ ├── courses_words.txt
│ ├── creator.sh
│ └── number_of_inserts_per_second
│ └── sql
│ └── 01-courses.sql
├── 08-sql_challenge
├── 1-problem
│ ├── README.md
│ ├── docker-compose.yaml
│ ├── execute.sh
│ └── sql
│ │ ├── 01-courses.sql
│ │ └── 02-inserts.sql
├── 2-solution
│ ├── README.md
│ ├── docker-compose.yaml
│ ├── execute.sh
│ ├── execute_optimized.sh
│ └── sql
│ │ ├── 01-courses.sql
│ │ └── 02-inserts.sql
└── 3-domain_events_legacy
│ ├── Dockerfile
│ ├── docker-compose.yaml
│ ├── execute.sh
│ ├── random_course_creator
│ ├── courses_words.txt
│ ├── creator.sh
│ └── number_of_inserts_per_second
│ └── sql
│ └── 01-courses.sql
├── 09-conclusions
└── 1-interesting_tooling
│ ├── 01-youplot.sh
│ ├── 02-awk.sh
│ ├── 03-yq.sh
│ ├── 04-miller.sh
│ ├── 05-combine.sh
│ ├── _input.csv
│ └── _simple_input.csv
├── README.md
└── _shared
├── compare_json.sh
└── compare_text.sh
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 |
9 | jobs:
10 | test:
11 | runs-on: ubuntu-latest
12 | name: ✅ Tests
13 | steps:
14 | - uses: actions/checkout@v2
15 |
16 | - name: ⬇️ Install dependencies
17 | run: sudo apt install -y jq
18 |
19 | - name: ✅ Test
20 | run: (cd 02-jq/1-map_json; bash test.sh) &&
21 | (cd 02-jq/2-combine_filter_json; bash test.sh) &&
22 | (cd 02-jq/3-aggregate_sort_json; bash test.sh) &&
23 | (cd 03-jq_challenge/2-solution; bash test.sh)
24 |
--------------------------------------------------------------------------------
/01-data_management_in_bash/2-utilities/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | * Filter the `_input.log` lines only keeping the ones from June 28th and 29th
4 | * Replace the fields separator by tabs
5 | * Format the date to `29/Jun/2023 12:53`
6 | * Modify the HTTP verb showing it in lowecase
7 | * Show the URL path in uppercase
8 | * Sort descendently by date
9 |
--------------------------------------------------------------------------------
/01-data_management_in_bash/2-utilities/_output.json:
--------------------------------------------------------------------------------
1 | 29/Jun/2023 12:53 get /YYBJEJE.GIF
2 | 29/Jun/2023 09:41 get /ZYB.GIF
3 | 28/Jun/2023 20:23 get /ZYBSUBCODELY.GIF
4 | 28/Jun/2023 09:41 get /ZYB.GIF
5 | 28/Jun/2023 09:41 get /ZYB.GIF
6 | 28/Jun/2023 09:41 get /YYB.GIF
7 | 28/Jun/2023 09:41 get /YYB.GIF
8 | 28/Jun/2023 09:41 get /YYB.GIF
9 | 28/Jun/2023 09:41 get /GO.JPG
10 | 28/Jun/2023 09:41 get /GO.JPG
11 |
--------------------------------------------------------------------------------
/01-data_management_in_bash/2-utilities/execute.sh:
--------------------------------------------------------------------------------
1 | grep -E "(28|29)/Jun" _input.log |
2 | awk -F'[ "]' '{print substr($4, 1, 18) "\t" tolower($7) "\t" toupper($8)}' |
3 | sed 's/\[//g' |
4 | sed 's/:/ /1' |
5 | sort --reverse
6 |
--------------------------------------------------------------------------------
/01-data_management_in_bash/2-utilities/test.sh:
--------------------------------------------------------------------------------
1 | source "../../_shared/compare_text.sh"
2 |
3 | it_should_output_the_expected_text "$PWD/execute.sh" "$PWD/_output.json"
4 |
--------------------------------------------------------------------------------
/02-jq/1-map_json/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | 1. Filter out the `_input.json` JSON items properties only keeping the `title` and `emoji` ones
4 | 2. Rename the `title` property to `titulo`
5 |
--------------------------------------------------------------------------------
/02-jq/1-map_json/_input.json:
--------------------------------------------------------------------------------
1 | [{"title":"React de 0 aplicando buenas prácticas","emoji":"🎛️","summary":"Introdúcete en React desde 0 creando tu developer dashboard personal dónde podrás consultar las métricas de tus repositorios favoritos.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-11-17","end":"2022-12-29"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/react-desde-0.png","slug":"react-desde-0","color":"yellow","url":"https://pro.codely.com/library/react-de-0-aplicando-buenas-practicas-192069/about/"},{"title":"API HTTP en Kotlin aplicando Arquitectura Hexagonal","emoji":"💎","summary":"Aprende a desarrollar tu primera API HTTP en Kotlin aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-10-27","end":"2022-11-24"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/api-kotlin-hexagonal.png","slug":"api-http-en-kotlin-aplicando-arquitectura-hexagonal","color":"green","url":"https://pro.codely.com/library/api-http-en-kotlin-aplicando-arquitectura-hexagonal-189116/456277/about/"},{"title":"DDD en TypeScript: Comunicación entre servicios y aplicaciones","emoji":"🛰","summary":"Comunica servicios y aplicaciones usando Domain-Driven Design (DDD) y TypeScript y consigue así que el software y los equipos escalen de forma progresiva.","authors":["fernando-vilas","ruben-salado","dani-santamaria"],"releaseDate":{"start":"2022-10-06","end":"2022-11-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-eda.png","slug":"ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones","color":"pink","url":"https://pro.codely.com/library/ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones-189024/449177/about/"},{"title":"Linting en JavaScript y TypeScript","emoji":"🔦","summary":"Aprende a sacarle todo el partido a ESLint para llevar tu código al siguiente nivel.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-09-09","end":"2022-09-22"},"tags":[],"categories":["tooling","frontend","backend"],"sticker":"/img/cursos/linting-js-ts.png","slug":"linting-en-javascript-y-typescript","color":"yellow","url":"https://pro.codely.com/library/linting-en-javascript-y-typescript-188432/446893/about/"},{"title":"Desarrolla plugins de Figma con TypeScript","emoji":"🪆","summary":"Ves un paso más allá y desarrolla plugins mantenibles, escalables y testables para figma con TypeScript. Diseño y desarrollo se dan la mano.","authors":["carmen-ansio","javier-ferrer"],"releaseDate":{"start":"2022-08-31","end":"2022-09-30"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/plugins-figma.png","slug":"desarrolla-plugins-de-figma-mantenibles-con-typescript","color":"violet","url":"https://pro.codely.com/library/desarrolla-plugins-de-figma-mantenibles-con-typescript-187373/about/"},{"title":"Patrones de Diseño de Comportamiento","emoji":"🐝","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño de Comportamiento.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2022-07-07","end":"2022-08-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-comportamiento.png","slug":"patrones-de-comportamiento","color":"green","url":"https://pro.codely.com/library/patrones-de-diseno-de-comportamiento-185034/about/"},{"title":"TypeScript Avanzado: Más alla de any","emoji":"🚜","summary":"En este curso vamos a sentar las bases de TypeScript avanzado con el objetivo de ir estableciendo los conocimientos básicos para futuros cursos en los que profundizaremos más en otros aspectos de esta herramienta de desarrollo.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-05-25","end":"2022-06-08"},"tags":[],"categories":["frontend","backend"],"sticker":"/img/cursos/typescript-avanzado.png","slug":"typescript-avanzando","color":"pink","url":"https://pro.codely.com/library/typescript-avanzado-mas-alla-de-any-182513/about/"},{"title":"Maquetando la web de Codely desde 0","emoji":"🍍","summary":"Llevaremos un diseño en Figma a una web en producción, con un design system escalable y teniendo en cuenta performance, SEO, y accesibilidad.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-05-18","end":"2022-06-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/maquetando-la-web-de-codely.png","slug":"maquetando-la-web-de-codely-desde-0","color":"yellow","url":"https://pro.codely.com/library/maquetando-la-web-de-codely-desde-0-181753/"},{"title":"Gestión de logs con Loki y Grafana","emoji":"🏵️","summary":"Aprende a gestionar tus logs con Grafana y Loki, las buenas prácticas y cómo se diferencia del stack de ELKi","authors":["joan-lopez-de-la-franca","rafa-gomez"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["backend","devops"],"sticker":"/img/cursos/gestion-de-logs-con-loki-y-grafana.png","slug":"gestion-de-logs-con-loki-y-grafana","color":"pink","url":"https://pro.codely.com/library/gestion-de-logs-con-loki-y-grafana-179996/407529/about/"},{"title":"Entrevistas sobre eXtreme Programming","emoji":"🎤","summary":"Contenido adicional del curso de eXtreme Programming","authors":["nino-dafonte"],"releaseDate":{"start":"2022-04-01","end":"2022-04-01"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/entrevistas-sobre-extreme-programming.png","slug":"entrevistas-sobre-extreme-programming","color":"green","url":"https://pro.codely.com/library/entrevistas-sobre-extreme-programming-179419/about/"},{"title":"TDD: Test-Driven Development","emoji":"♻️","summary":"Aprende Test-Driven Development (TDD) y las diferentes formas y estilos de aplicarlo en aplicaciones del Mundo Real™️","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/tdd.png","slug":"tdd","color":"violet","url":"https://pro.codely.com/library/tdd-test-driven-development-179143/"},{"title":"Directos exclusivos CodelyTV Pro","emoji":"🎥","summary":"Directos exclusivos resolviendo dudas, teniendo debates, y preparando siguientes cursos en base a vuestro feedback","authors":["javier-ferrer","rafa-gomez","isma-navarro","dani-santamaria","nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-05-26","end":"2022-03-11"},"tags":[],"categories":["arquitectura-software","frontend","backend"],"sticker":"/img/cursos/pro-streaming.png","slug":"pro-streaming","color":"violet","url":"https://pro.codely.com/library/directos-exclusivos-codelytv-pro-166172/about/"},{"title":"Setup macOS para Programar","emoji":"","summary":"Configura tu ordenador con Mac tal y cómo lo tienen Nino y Rafa para programar lo más cómodamente posible.","authors":["nino-dafonte","rafa-gomez"],"releaseDate":{"start":"2022-03-03","end":"2022-03-16"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-mac.png","slug":"setup-mac","color":"yellow","url":"https://pro.codely.com/library/setup-macos-para-programar-178003/"},{"title":"Lightning Talks","emoji":"⚡","summary":"Charlas de 10-20 minutos sobre temas variados. Hasta ahora eran internas al equipo Codely, pero… si a nosotros nos aportan valor, puede que a ti también","authors":["nuria-soriano"],"releaseDate":{"start":"2022-02-16","end":"2022-02-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/lightning-talks.png","slug":"lightning-talks","color":"green","url":"https://pro.codely.com/library/lightning-talks-177049/about/"},{"title":"eXtreme Programming","emoji":"🧑🔬","summary":"Descubre las prácticas de eXtreme Programming y su aplicación en el Mundo Real™","authors":["nino-dafonte","dani-santamaria"],"releaseDate":{"start":"2022-01-26","end":"2022-02-23"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/extreme-programming.png","slug":"extreme-programming","color":"pink","url":"https://pro.codely.com/library/extreme-programming-171308"},{"title":"Introducción a Kotlin: Tu primera app","emoji":"🐈","summary":"Desarrolla tu primer comando de consola con Kotlin mientras aprendes qué hace tan potente a este lenguaje.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-01-05","end":"2022-02-03"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-kotlin.png","slug":"introduccion-a-kotlin","color":"yellow","url":"https://pro.codely.com/library/introduccion-a-kotlin-tu-primera-app-174088/"},{"title":"DDD en TypeScript: Modelado y arquitectura","emoji":"🔷","summary":"Crea paso a paso tu aplicación TypeScript siguiendo Domain-Driven Design.","authors":["fernando-vilas","ruben-salado","javier-ferrer"],"releaseDate":{"start":"2021-11-24","end":"2021-12-22"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-modelado-arquitectura.png","slug":"ddd-en-typescript-modelado-arquitectura","color":"violet","url":"https://pro.codely.com/library/ddd-en-typescript-modelado-y-arquitectura-172533"},{"title":"Auditorías y Acompañamientos","emoji":"🐷","summary":"Sesión de auditoría en la que se revisa el diseño y arquitectura de software de una parte de tus sistemas y de Acompañamiento dónde te ayudamos a mejorar tu aprendizaje","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2021-11-26","end":"2022-07-27"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/auditoria-acompanamientos.png","slug":"auditoria-acompanamientos","color":"green","url":"https://pro.codely.com/library/auditorias-y-acompanamientos-172662/375960/about/"},{"title":"Gestión de Estado en React","emoji":"🍥","summary":"Conoce las distintas herramientas con la que puedes gestionar el estado en tu aplicación React.","authors":["isma-navarro","javier-ferrer","ricardo-borillo"],"releaseDate":{"start":"2021-11-03","end":"2021-12-01"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/gestion-estado-react.png","slug":"gestion-estado-react","color":"yellow","url":"https://pro.codely.com/library/gestion-estado-en-react/"},{"title":"Web performance","emoji":"🌪️","summary":"Aprende a optimizar tus aplicaciones web y a crear una cultura de performance para mantenerla a largo plazo.","authors":["nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-09-29","end":"2021-10-27"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/web-performance.png","slug":"web-performance","color":"pink","url":"https://pro.codely.com/library/web-performance-168675/"},{"title":"Patrones de Diseño: Creacionales","emoji":"🏭","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño Creacionales.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-09-08","end":"2021-10-06"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-diseno-creacionales.png","slug":"patrones-diseno-creacionales","color":"violet","url":"https://pro.codely.com/library/patrones-de-diseno-creacionales-167860/"},{"title":"CSS Flex a fondo","emoji":"🤸","summary":"Aprende a sacar todo el potencial de CSS Flex para crear layouts adaptables fácilmente.","authors":["isma-navarro","rafa-gomez"],"releaseDate":{"start":"2021-09-01","end":"2021-09-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-flex.png","slug":"css-flex","color":"green","url":"https://pro.codely.com/library/css-flex-a-fondo/"},{"title":"De JavaScript a TypeScript","emoji":"🏗️","summary":"Aprende TypeScript partiendo de un ejemplo de JavaScript en el que haremos el proceso de refactor poco a poco y analizando las principales características de TypeScript.","authors":["isma-navarro","rafa-gomez","nuria-soriano"],"releaseDate":{"start":"2021-06-14","end":"2021-07-28"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/de-javascript-a-typescript.png","slug":"de-javascript-a-typescript","color":"yellow","url":"https://pro.codely.com/library/de-javascript-a-typescript-128106/"},{"title":"Symfony mantenible y escalable","emoji":"🎶","summary":"Aprende herramientas y prácticas con Symfony para conseguir una mayor mantenibilidad y escalabilidad de tus aplicaciones.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-06-10","end":"2021-07-05"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/symfony-mantenible-escalable.png","slug":"symfony-mantenible-escalable","color":"pink","url":"https://pro.codely.com/library/symfony-mantenible-y-escalable-127478/"},{"title":"CSS Grid a fondo","emoji":"🍱","summary":"Aprende a sacar provecho de CSS Grid para crear layouts flexibles sin necesidad de recurrir a frameworks.","authors":["nuria-soriano","rafa-gomez","isma-navarro"],"releaseDate":{"start":"2021-06-02","end":"2021-06-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-grid.png","slug":"css-grid","color":"violet","url":"https://pro.codely.com/library/css-grid-a-fondo-126731/"},{"title":"Setup Linux para Programar","emoji":"🐧","summary":"Configura tu ordenador con Linux tal y cómo lo tiene Dani para programar lo más cómodamente posible.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2021-05-13","end":"2021-05-26"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-linux.png","slug":"setup-linux","color":"green","url":"https://pro.codely.com/library/setup-linux-para-programar-124104/"},{"title":"JavaScript moderno","emoji":"🐥","summary":"Aprende buenas prácticas para empezar aplicaciones JavaScript vanilla desde 0 y refactorizar código legacy dando soporte a navegadores antiguos.","authors":["nuria-soriano","javier-ferrer","isma-navarro"],"releaseDate":{"start":"2021-04-07","end":"2021-05-19"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/javascript-moderno.png","slug":"javascript-moderno","color":"yellow","url":"https://pro.codely.com/library/js-moderno/about/"},{"title":"Refactoring de Code Smells a Clean Code: Change Preventers","emoji":"🧹","summary":"Aprende a detectar y lidiar con código que genera aversión al cambio. Curso centrado en Code Smells de tipo Change Preventers.","authors":["javier-ferrer","rafa-gomez","dani-santamaria"],"releaseDate":{"start":"2021-04-15","end":"2021-04-28"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-change-preventers.png","slug":"refactoring-change-preventers","color":"pink","url":"https://pro.codely.com/library/refactoring-change-preventers/about/"},{"title":"Light & Dark themes accesibles","emoji":"🌚🌝","summary":"Aprende a implementar temas claros y oscuros en una página web de forma accesible, cómo integrarlo en tu arquitectura CSS y cómo adaptar los diseños para que te queden unos temas finísimos.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2021-03-03","end":"2021-03-17"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/light-dark-themes-accesibles.png","slug":"light-dark-themes-accesibles","color":"violet","url":"https://pro.codely.com/library/light-dark-themes-accesibles/about/"},{"title":"API HTTP en Go aplicando Arquitectura Hexagonal","emoji":"⛳","summary":"Aprende a desarrollar tu primera API HTTP en Go aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["adrian-perez","joan-lopez-de-la-franca","javier-ferrer"],"releaseDate":{"start":"2021-01-27","end":"2021-02-24"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/api-go-hexagonal.png","slug":"api-go-hexagonal","color":"yellow","url":"https://pro.codely.com/library/api-go-hexagonal/about/"},{"title":"Testing en frontend","emoji":"🐙","summary":"Aprende cómo testear tus aplicaciones frontend, aplicando buenas prácticas para conseguir unos tests mantenibles que aporten confianza.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2021-01-21","end":"2021-02-17"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-frontend.png","slug":"testing-frontend","color":"green","url":"https://pro.codely.com/library/testing-frontend/about/"},{"title":"Karabiner: Atajos de teclado para todo","emoji":"🎱","summary":"¡Automatiza todo en tu mac a golpe de atajos de teclado y mejor tu productividad!","authors":["rafa-gomez"],"releaseDate":{"start":"2021-01-13","end":"2021-01-13"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/karabiner.png","slug":"karabiner","color":"yellow","url":"https://pro.codely.com/library/karabiner/about/"},{"title":"Arquitectura CSS","emoji":"🗼","summary":"Aprende los fundamentos de una buena arquitectura CSS para que tus estilos sean fáciles de mantener y escalar.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-11-25","end":"2020-12-24"},"tags":[],"categories":["frontend","arquitectura-software"],"sticker":"/img/cursos/arquitectura-css.png","slug":"arquitectura-css","color":"pink","url":"https://pro.codely.com/library/arquitectura-css/about/"},{"title":"PHP 8: Novedades y ejemplos para el Mundo Real™","emoji":"🐘","summary":"Migra tus aplicaciones a PHP 8 paso a paso, consigue tests más mantenibles gracias a Named Arguments, Value Objects más simples con Constructor Property Promotion, reemplaza PECL (obsoleto), y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-11-18","end":"2020-12-02"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/php-8.png","slug":"php-8","color":"violet","url":"https://pro.codely.com/library/php-8/about/"},{"title":"Vue 3: Novedades aplicadas al mundo real","emoji":"✌️","summary":"Veremos cómo exprimir las novedades de Vue 3 con ejemplos reales y aplicando buenas prácticas.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2020-10-28","end":"2020-11-11"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/novedades-vue-3.png","slug":"novedades-vue-3","color":"green","url":"https://pro.codely.com/library/novedades-vue-3/about/"},{"title":"Buenas prácticas con CSS: Layouts","emoji":"📐","summary":"","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-10-01","end":"2020-10-16"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/layouts-css.png","slug":"layouts-css","color":"yellow","url":"https://pro.codely.com/library/layouts-css/about/"},{"title":"Refactoring de Code Smells a Clean Code: Bloaters","emoji":"🧼","summary":"Aprende a detectar y lidiar con código incomprensible 🤟","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-24","end":"2020-10-22"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-code-smells-clean-code-bloaters.png","slug":"refactoring-code-smells-clean-code-bloaters","color":"pink","url":"https://pro.codely.com/library/refactoring-code-smells-clean-code-bloaters/about/"},{"title":"Teclados Mecánicos","emoji":"⌨️","summary":"Monta tu teclado perfecto y personalizado al 100%","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-16","end":"2020-09-30"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/teclados-mecanicos.png","slug":"teclados-mecanicos","color":"yellow","url":"https://pro.codely.com/library/teclados-mecanicos/about/"},{"title":"Makefiles","emoji":"🐂","summary":"El centralizar tareas de nuestras aplicaciones es algo muy importante, y con los Makefiles se simplifica mucho.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-08-19","end":"2020-09-02"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/makefiles.png","slug":"makefiles","color":"green","url":"https://pro.codely.com/library/makefiles/about/"},{"title":"Monitoring con Prometheus","emoji":"🔥","summary":"La observabilidad es una de las cosas más importantes de la programación y el Monitoring uno de sus principales pilares.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/prometheus.png","slug":"prometheus","color":"violet","url":"https://pro.codely.com/library/prometheus/about/"},{"title":"Visualiza métricas de Prometheus con Grafana","emoji":"👁🗨","summary":"Aprende a crear un panel de 10 utilizando Grafana con Prometheus como datasource.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/grafana-con-prometheus.png","slug":"grafana-con-prometheus","color":"yellow","url":"https://pro.codely.com/library/curso-grafana-con-prometheus/about/"},{"title":"Notion: Productividad en equipo","emoji":"🌈","summary":"Centraliza toda la documentación de tu equipo de trabajo y la gestión de tareas en 1 única herramienta: Notion.","authors":["javier-ferrer"],"releaseDate":{"start":"2020-05-22","end":"2020-07-31"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/notion.png","slug":"notion","color":"green","url":"https://pro.codely.com/library/notion/about/"},{"title":"Bash para el día a día: Scripting & Productividad","emoji":"💻","summary":"Aprende a usar la navaja suiza de los programadores 😬","authors":["rafa-gomez"],"releaseDate":{"start":"2020-05-29","end":"2020-06-10"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/bash.png","slug":"bash","color":"yellow","url":"https://pro.codely.com/library/curso-bash/about/"},{"title":"Todo sobre los dotfiles","emoji":"🚀","summary":"Aprende a automatizar, centralizar y compartir todas tus configuraciones gracias a los dotfiles.","authors":["rafa-gomez"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/todo-sobre-los-dotfiles.png","slug":"todo-sobre-los-dotfiles","color":"pink","url":"https://pro.codely.com/library/todo-sobre-los-dotfiles/about/"},{"title":"Productividad con iTerm: Terminal macOS","emoji":"💨","summary":"Veremos cómo tener una terminal rapidísima y muy productiva gracias a unos simple (y escondidos) tips.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/iterm.png","slug":"iterm","color":"yellow","url":"https://pro.codely.com/library/iterm/about/"},{"title":"Automatiza tu flujo de trabajo con GitHub Actions","emoji":"🤖","summary":"Crearemos nuestras propias actions (¡hasta publicaremos alguna en el Marketplace!) que nos puedan ser muy útiles en nuestro día a día.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/automatizacion-con-github-actions.png","slug":"automatizacion-con-github-actions","color":"violet","url":"https://pro.codely.com/library/automatizacion-con-github-actions/about/"},{"title":"Terminal 100% productiva con Zsh","emoji":"💻","summary":"Consigue ser un Productivity Raptor™ con tu terminal gracias a Zsh, Oh My Zsh, Zim y funciones avanzadas.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/terminal-zsh.png","slug":"terminal-zsh","color":"green","url":"https://pro.codely.com/library/terminal-zsh/about/"},{"title":"Integración Continua con GitHub Actions","emoji":"🤖","summary":"¡Consigue una Integración Continua de la que te puedas fiar y que sea rapidísima! Gracias a GitHub Actions veremos como lograrlo.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/github-actions-de-0-a-integracion-continua.png","slug":"github-actions-de-0-a-integracion-continua","color":"pink","url":"https://pro.codely.com/library/github-actions-de-0-a-integracion-continua/about/"},{"title":"Exprimiendo IntelliJ","emoji":"⚡","summary":"¡Mejora tu productividad exprimiendo IntelliJ! Consigue un aspecto minimalista, crea ficheros con plantillas personalizadas, atajos secretos, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/intellij.png","slug":"intellij","color":"yellow","url":"https://pro.codely.com/library/intellij/about/"},{"title":"DDD en Java","emoji":"☕","summary":"Crea paso a paso tu aplicación Java siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-09-19","end":"2019-12-31"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-java.png","slug":"ddd-en-java","color":"green","url":"https://pro.codely.com/library/ddd-en-java/about/"},{"title":"DDD en PHP","emoji":"🐘","summary":"Crea paso a paso tu aplicación PHP siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-07-30","end":"2019-08-28"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-php.png","slug":"ddd-en-php","color":"pink","url":"https://pro.codely.com/library/ddd-en-php/about/"},{"title":"Git: Introducción y trabajo en equipo","emoji":"🔀","summary":"Aprende a trabajar en equipo con Git y sacarle todo el provecho con aspectos avanzados como debugging, estrategias de merge, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-06-26","end":"2019-08-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/git-introduccion-y-trabajo-en-equipo.png","slug":"git-introduccion-y-trabajo-en-equipo","color":"green","url":"https://pro.codely.com/library/git-introduccion-y-trabajo-en-equipo/about/"},{"title":"Testing: Introducción y buenas prácticas","emoji":"✅","summary":"Aprende qué aporta el testing, cómo testear y buenas prácticas para evitar que mantener tus tests sea un infierno con ejemplos de El Mundo Real™","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-introduccion-y-buenas-practicas.png","slug":"testing-introduccion-y-buenas-practicas","color":"yellow","url":"https://pro.codely.com/library/testing-introduccion-y-buenas-practicas/about/"},{"title":"Introducción a Go: Tu primera app","emoji":"⚡","summary":"Desarrolla tu primer comando de consola con Go mientras aprendes qué hace diferente al lenguaje de moda.","authors":["joan-lopez-de-la-franca","adrian-perez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-go-tu-primera-app.png","slug":"introduccion-a-go-tu-primera-app","color":"violet","url":"https://pro.codely.com/library/introduccion-a-go-tu-primera-app/about/"},{"title":"Domain-Driven Design","emoji":"🗿","summary":"Aprende a modelar tus aplicaciones centrándote en tu dominio, definir Bounded Contexts, agregados, value objects, y mucho más. Todo de forma práctica y con ejemplos de código","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/domain-driven-design-ddd.png","slug":"domain-driven-design-ddd","color":"pink","url":"https://pro.codely.com/library/domain-driven-design-ddd/about/"},{"title":"ReactJS: De 0 a deploy","emoji":"⚛️","summary":"Crea tu primera aplicación de React llevándola hasta producción y siguiendo buenas prácticas","authors":["dani-martin"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/reactjs-de-0-a-deploy.png","slug":"reactjs-de-0-a-deploy","color":"yellow","url":"https://pro.codely.com/library/reactjs-de-0-a-deploy-siguiendo-buenas-practicas/about/"},{"title":"Kubernetes para desarrolladores","emoji":"⛵","summary":"Aprende a orquestrar contenedores de Docker y desplegarlos en Azure, GCE, o AWS siguiendo buenas prácticas","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/kubernetes-para-desarrolladores.png","slug":"kubernetes-para-desarrolladores","color":"violet","url":"https://pro.codely.com/library/kubernetes-para-desarrolladores/about/"},{"title":"Migrando a VueJS progresivamente","emoji":"♻️️","summary":"Aprende cómo migrar un frontend ya existente a Vue.js partiendo de HTML, CSS y JS generado por backend","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/migrando-a-vuejs-progresivamente-desde-0.png","slug":"migrando-a-vuejs-progresivamente-desde-0","color":"green","url":"https://pro.codely.com/library/migrando-a-vuejs-progresivamente-desde-0/about/"},{"title":"ELK: Centraliza logs con Elastic Stack","emoji":"📊","summary":"Aprende a montar un stack para poder explotar toda la información de tus logs gracias a Elasticsearch, Logstash o Beats, y Kibana","authors":["ruben-cougil","javier-ferrer"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops","backend"],"sticker":"/img/cursos/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack.png","slug":"elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack","color":"yellow","url":"https://pro.codely.com/library/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack/about/"},{"title":"Principios SOLID aplicados","emoji":"🧱","summary":"Si ya sabes desarrollar software, pero quieres ir un paso más allá y mejorar la calidad de tu código, este es tu curso","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/principios-solid-aplicados.png","slug":"principios-solid-aplicados","color":"pink","url":"https://pro.codely.com/library/principios-solid-aplicados/about/"},{"title":"Comunicación entre microservicios: Event-Driven Architecture","emoji":"💬","summary":"Publica y consume eventos de dominio, consistencia eventual, RabbitMQ y AWS SNS-SQS, migración de monolito a servicios, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/comunicacion-entre-microservicios-event-driven-architecture.png","slug":"comunicacion-entre-microservicios-event-driven-architecture","color":"green","url":"https://pro.codely.com/library/comunicacion-entre-microservicios-event-driven-architecture/about/"},{"title":"Programación funcional: Refactor de OO a TypeClasses","emoji":"ƛ","summary":"Introducción a la programación funcional pura en Scala y a sus ventajas de la mano de las type classes.","authors":["juan-manuel-serrano","javier-fuentes"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses.png","slug":"programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses","color":"yellow","url":"https://pro.codely.com/library/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses/about/"},{"title":"Docker: De 0 a deploy","emoji":"🐳","summary":"Aprende qué es Docker y cómo sacar el mayor partido a los contenedores. Empezando desde el principio, veremos cómo usar Docker para levantar tu aplicación en local como si fuese producción, arrancando una base de datos con Docker Compose.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/docker-de-0-a-deployment.png","slug":"docker-de-0-a-deployment","color":"violet","url":"https://pro.codely.com/library/docker-de-0-a-deployment/about/"},{"title":"Exprimiendo las vistas de Android","emoji":"🖌️","summary":"Aprenderás a diseñar en Android cualquier diseño que te propongas. Empezando desde la base, iremos analizando todos los componentes hasta llegar a conceptos avanzados para que no se te resista ningún reto.","authors":["ilia-berlana"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/exprimiendo-las-vistas-de-android.png","slug":"exprimiendo-las-vistas-de-android","color":"yellow","url":"https://pro.codely.com/library/exprimiendo-las-vistas-de-android/about/"},{"title":"CQRS y Event Sourcing con Kotlin y Axon Framework","emoji":"🤹","summary":"Aprenderemos qué es Event Sourcing y cómo se complementa con la arquitectura CQRS. La parte práctica del curso consistirá en un desarrollo de un carrito de la compra para un ecommerce usando Kotlin y el framework Axon.","authors":["jordi-llonch","ramon-aranda"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/cqrs-y-event-sourcing-con-kotlin-y-axon-framework.png","slug":"cqrs-y-event-sourcing-con-kotlin-y-axon-framework","color":"green","url":"https://pro.codely.com/library/cqrs-y-event-sourcing-con-kotlin-y-axon-framework/about/"},{"title":"Tu primera API HTTP con Scala","emoji":"🗣️","summary":"Habiendo hecho el primer curso de introducción a Scala ya nos podemos meter en materia y desarrollar nuestra primera API HTTP con Scala, Akka, base de datos, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/api-http-con-scala-y-akka.png","slug":"api-http-con-scala-y-akka","color":"pink","url":"https://pro.codely.com/library/api-http-con-scala-y-akka/about/"},{"title":"Arquitectura Hexagonal","emoji":"🎯","summary":"Domain-Driven Design se apoya en la Arquitectura Hexagonal como uno de sus pilares a nivel técnico. Aprende a implementarla con CodelyTV!","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/arquitectura-hexagonal.png","slug":"arquitectura-hexagonal","color":"yellow","url":"https://pro.codely.com/library/arquitectura-hexagonal/about/"},{"title":"AWS: Escalando apps - Load Balancers y Auto Scaling Groups","emoji":"📈","summary":"José Armesto seguirá la serie de cursos sobre AWS hablando de cómo escalar. Introduciremos los Load Balancers y Auto Scaling Groups de AWS.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-autoescalado-de-aplicaciones-con-alb-y-asg.png","slug":"aws-autoescalado-de-aplicaciones-con-alb-y-asg","color":"violet","url":"https://pro.codely.com/library/aws-autoescalado-de-aplicaciones-con-alb-y-asg/about/"},{"title":"Crea una app MEAN profesional con AngularJS y Webpack","emoji":"🛡️","summary":"JuanMa Garrido nos explica cómo crear aplicaciones profesionales desde 0 basándonos en MongoDB, Express, AngularJS, y Node.js siguiendo buenas prácticas y usando Webpack.","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-mean-profesional-con-angularjs-y-webpack.png","slug":"crea-una-app-mean-profesional-con-angularjs-y-webpack","color":"yellow","url":"https://pro.codely.com/library/crea-una-app-mean-profesional-con-angularjs-y-webpack/about/"},{"title":"Testing unidirectional dataflow con Vuex y Jest","emoji":"🍄","summary":"Explicaremos la implementación de arquitectura de flujo unidireccional de Vuex y veremos cómo ayuda al desarrollo de aplicaciones con una jerarquía de componentes más compleja.","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/testing-unidirectional-dataflow-vuex-y-jest.png","slug":"testing-unidirectional-dataflow-vuex-y-jest","color":"pink","url":"https://pro.codely.com/library/testing-unidirectional-dataflow-vuex-y-jest/about/"},{"title":"Crea una app con VueJS y Jest aplicando TDD","emoji":"✌️","summary":"Alberto Gualis y Javi Rubio nos explicarán cómo testean aplicaciones VueJS con Jest en los Coding Stones. Incluye sesión práctica de TDD en Frontend. A lo loco!","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-con-vuejs-y-jest-aplicando-tdd.png","slug":"crea-una-app-con-vuejs-y-jest-aplicando-tdd","color":"violet","url":"https://pro.codely.com/library/crea-una-app-con-vuejs-y-jest-aplicando-tdd/about/"},{"title":"Buenas prácticas de BDD con Gherkin","emoji":"🥒","summary":"Aprenderás desde los conceptos básicos para testear tu aplicación con Cucumber o Behat, hasta consejos de buenas prácticas para hacer que tu suite de tests sea más fácilmente mantenible.","authors":["alberto-gualis","javier-rubio","dani-latorre"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/buenas-practicas-de-bdd-con-cucumber.png","slug":"buenas-practicas-de-bdd-con-cucumber","color":"green","url":"https://pro.codely.com/library/buenas-practicas-de-bdd-con-cucumber/about/"},{"title":"Introducción a Scala","emoji":"🌀","summary":"Scala es un lenguaje conciso, poco verboso, y que permite la programación funcional sin olvidar la POO. Aprenderemos cómo configurar el entorno, las bases del lenguaje, asincronía y otros tips para empezar.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-scala.png","slug":"introduccion-a-scala","color":"violet","url":"https://pro.codely.com/library/introduccion-a-scala/about/"},{"title":"UI Testing en iOS con KIF","emoji":"📱","summary":"Aprende una de las técnicas de testing más potentes que existen para desarrollo móvil, aprende a hacer tests funcionales de UI para aplicaciones iOS con Sergio Gutierrez de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-ios-con-kif.png","slug":"ui-testing-en-ios-con-kif","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-ios-con-kif/about/"},{"title":"Screenshot testing en iOS","emoji":"🖼️","summary":"Sergio Gutierrez de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en iOS. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-ios.png","slug":"screenshot-testing-en-ios","color":"green","url":"https://pro.codely.com/library/screenshot-testing-en-ios-3af3e7f1/about/"},{"title":"Screenshot testing en Android","emoji":"📸","summary":"Jorge Barroso de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en Android. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-android.png","slug":"screenshot-testing-en-android","color":"pink","url":"https://pro.codely.com/library/screenshot-testing-en-android-f1bc7a25/about/"},{"title":"UI Testing en Android con Espresso","emoji":"🎨","summary":"En el mundo mobile la parte más importante y grande que debemos cubrir con tests es la interfaz de usuario. En este curso aprenderemos las claves para escribir buenos tests de UI con Jorge Barroso de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-android-con-espresso.png","slug":"ui-testing-en-android-con-espresso","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-android-con-espresso/about/"},{"title":"AWS EC2: Tu primer deploy","emoji":"☁️","summary":"Aprende las bases de Amazon Web Services para levantar tu aplicación en la nube. Crea tu propia VPC, elige la instancia adecuada de EC2, configura SSH, elige tu AMI base, define Security Groups, deploya, y configura Route53 como DNS!","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-deploy-en-ec2.png","slug":"aws-deploy-en-ec2","color":"green","url":"https://pro.codely.com/library/aws-deploy-en-ec2/about/"},{"title":"Agile: Cómo mejorar tus retrospectivas","emoji":"🤝","summary":"A pesar de parecer simple, llevar a cabo buenas retrospectivas no siempre es fácil. En este curso José Huerta de Smoking Brains nos explicará cómo mejorar.","authors":["jose-rodriguez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/agile-retrospectivas.png","slug":"agile-retrospectivas","color":"pink","url":"https://pro.codely.com/library/agile-retrospectivas/about/"},{"title":"CQRS: Command Query Responsibility Segregation","emoji":"🚌","summary":"Aumenta el rendimiento y el desacoplamiento de tu backend mediante CQRS. Veremos conceptos e implementaciones de buses síncronos y asíncronos.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/cqrs-command-query-responsibility-segregation.png","slug":"cqrs-command-query-responsibility-segregation","color":"violet","url":"https://pro.codely.com/library/cqrs-command-query-responsibility-segregation-3719e4aa/about/"}]
2 |
--------------------------------------------------------------------------------
/02-jq/1-map_json/_output.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "titulo": "React de 0 aplicando buenas prácticas",
4 | "emoji": "🎛️"
5 | },
6 | {
7 | "titulo": "API HTTP en Kotlin aplicando Arquitectura Hexagonal",
8 | "emoji": "💎"
9 | },
10 | {
11 | "titulo": "DDD en TypeScript: Comunicación entre servicios y aplicaciones",
12 | "emoji": "🛰"
13 | },
14 | {
15 | "titulo": "Linting en JavaScript y TypeScript",
16 | "emoji": "🔦"
17 | },
18 | {
19 | "titulo": "Desarrolla plugins de Figma con TypeScript",
20 | "emoji": "🪆"
21 | },
22 | {
23 | "titulo": "Patrones de Diseño de Comportamiento",
24 | "emoji": "🐝"
25 | },
26 | {
27 | "titulo": "TypeScript Avanzado: Más alla de any",
28 | "emoji": "🚜"
29 | },
30 | {
31 | "titulo": "Maquetando la web de Codely desde 0",
32 | "emoji": "🍍"
33 | },
34 | {
35 | "titulo": "Gestión de logs con Loki y Grafana",
36 | "emoji": "🏵️"
37 | },
38 | {
39 | "titulo": "Entrevistas sobre eXtreme Programming",
40 | "emoji": "🎤"
41 | },
42 | {
43 | "titulo": "TDD: Test-Driven Development",
44 | "emoji": "♻️"
45 | },
46 | {
47 | "titulo": "Directos exclusivos CodelyTV Pro",
48 | "emoji": "🎥"
49 | },
50 | {
51 | "titulo": "Setup macOS para Programar",
52 | "emoji": ""
53 | },
54 | {
55 | "titulo": "Lightning Talks",
56 | "emoji": "⚡"
57 | },
58 | {
59 | "titulo": "eXtreme Programming",
60 | "emoji": "🧑🔬"
61 | },
62 | {
63 | "titulo": "Introducción a Kotlin: Tu primera app",
64 | "emoji": "🐈"
65 | },
66 | {
67 | "titulo": "DDD en TypeScript: Modelado y arquitectura",
68 | "emoji": "🔷"
69 | },
70 | {
71 | "titulo": "Auditorías y Acompañamientos",
72 | "emoji": "🐷"
73 | },
74 | {
75 | "titulo": "Gestión de Estado en React",
76 | "emoji": "🍥"
77 | },
78 | {
79 | "titulo": "Web performance",
80 | "emoji": "🌪️"
81 | },
82 | {
83 | "titulo": "Patrones de Diseño: Creacionales",
84 | "emoji": "🏭"
85 | },
86 | {
87 | "titulo": "CSS Flex a fondo",
88 | "emoji": "🤸"
89 | },
90 | {
91 | "titulo": "De JavaScript a TypeScript",
92 | "emoji": "🏗️"
93 | },
94 | {
95 | "titulo": "Symfony mantenible y escalable",
96 | "emoji": "🎶"
97 | },
98 | {
99 | "titulo": "CSS Grid a fondo",
100 | "emoji": "🍱"
101 | },
102 | {
103 | "titulo": "Setup Linux para Programar",
104 | "emoji": "🐧"
105 | },
106 | {
107 | "titulo": "JavaScript moderno",
108 | "emoji": "🐥"
109 | },
110 | {
111 | "titulo": "Refactoring de Code Smells a Clean Code: Change Preventers",
112 | "emoji": "🧹"
113 | },
114 | {
115 | "titulo": "Light & Dark themes accesibles",
116 | "emoji": "🌚🌝"
117 | },
118 | {
119 | "titulo": "API HTTP en Go aplicando Arquitectura Hexagonal",
120 | "emoji": "⛳"
121 | },
122 | {
123 | "titulo": "Testing en frontend",
124 | "emoji": "🐙"
125 | },
126 | {
127 | "titulo": "Karabiner: Atajos de teclado para todo",
128 | "emoji": "🎱"
129 | },
130 | {
131 | "titulo": "Arquitectura CSS",
132 | "emoji": "🗼"
133 | },
134 | {
135 | "titulo": "PHP 8: Novedades y ejemplos para el Mundo Real™",
136 | "emoji": "🐘"
137 | },
138 | {
139 | "titulo": "Vue 3: Novedades aplicadas al mundo real",
140 | "emoji": "✌️"
141 | },
142 | {
143 | "titulo": "Buenas prácticas con CSS: Layouts",
144 | "emoji": "📐"
145 | },
146 | {
147 | "titulo": "Refactoring de Code Smells a Clean Code: Bloaters",
148 | "emoji": "🧼"
149 | },
150 | {
151 | "titulo": "Teclados Mecánicos",
152 | "emoji": "⌨️"
153 | },
154 | {
155 | "titulo": "Makefiles",
156 | "emoji": "🐂"
157 | },
158 | {
159 | "titulo": "Monitoring con Prometheus",
160 | "emoji": "🔥"
161 | },
162 | {
163 | "titulo": "Visualiza métricas de Prometheus con Grafana",
164 | "emoji": "👁🗨"
165 | },
166 | {
167 | "titulo": "Notion: Productividad en equipo",
168 | "emoji": "🌈"
169 | },
170 | {
171 | "titulo": "Bash para el día a día: Scripting & Productividad",
172 | "emoji": "💻"
173 | },
174 | {
175 | "titulo": "Todo sobre los dotfiles",
176 | "emoji": "🚀"
177 | },
178 | {
179 | "titulo": "Productividad con iTerm: Terminal macOS",
180 | "emoji": "💨"
181 | },
182 | {
183 | "titulo": "Automatiza tu flujo de trabajo con GitHub Actions",
184 | "emoji": "🤖"
185 | },
186 | {
187 | "titulo": "Terminal 100% productiva con Zsh",
188 | "emoji": "💻"
189 | },
190 | {
191 | "titulo": "Integración Continua con GitHub Actions",
192 | "emoji": "🤖"
193 | },
194 | {
195 | "titulo": "Exprimiendo IntelliJ",
196 | "emoji": "⚡"
197 | },
198 | {
199 | "titulo": "DDD en Java",
200 | "emoji": "☕"
201 | },
202 | {
203 | "titulo": "DDD en PHP",
204 | "emoji": "🐘"
205 | },
206 | {
207 | "titulo": "Git: Introducción y trabajo en equipo",
208 | "emoji": "🔀"
209 | },
210 | {
211 | "titulo": "Testing: Introducción y buenas prácticas",
212 | "emoji": "✅"
213 | },
214 | {
215 | "titulo": "Introducción a Go: Tu primera app",
216 | "emoji": "⚡"
217 | },
218 | {
219 | "titulo": "Domain-Driven Design",
220 | "emoji": "🗿"
221 | },
222 | {
223 | "titulo": "ReactJS: De 0 a deploy",
224 | "emoji": "⚛️"
225 | },
226 | {
227 | "titulo": "Kubernetes para desarrolladores",
228 | "emoji": "⛵"
229 | },
230 | {
231 | "titulo": "Migrando a VueJS progresivamente",
232 | "emoji": "♻️️"
233 | },
234 | {
235 | "titulo": "ELK: Centraliza logs con Elastic Stack",
236 | "emoji": "📊"
237 | },
238 | {
239 | "titulo": "Principios SOLID aplicados",
240 | "emoji": "🧱"
241 | },
242 | {
243 | "titulo": "Comunicación entre microservicios: Event-Driven Architecture",
244 | "emoji": "💬"
245 | },
246 | {
247 | "titulo": "Programación funcional: Refactor de OO a TypeClasses",
248 | "emoji": "ƛ"
249 | },
250 | {
251 | "titulo": "Docker: De 0 a deploy",
252 | "emoji": "🐳"
253 | },
254 | {
255 | "titulo": "Exprimiendo las vistas de Android",
256 | "emoji": "🖌️"
257 | },
258 | {
259 | "titulo": "CQRS y Event Sourcing con Kotlin y Axon Framework",
260 | "emoji": "🤹"
261 | },
262 | {
263 | "titulo": "Tu primera API HTTP con Scala",
264 | "emoji": "🗣️"
265 | },
266 | {
267 | "titulo": "Arquitectura Hexagonal",
268 | "emoji": "🎯"
269 | },
270 | {
271 | "titulo": "AWS: Escalando apps - Load Balancers y Auto Scaling Groups",
272 | "emoji": "📈"
273 | },
274 | {
275 | "titulo": "Crea una app MEAN profesional con AngularJS y Webpack",
276 | "emoji": "🛡️"
277 | },
278 | {
279 | "titulo": "Testing unidirectional dataflow con Vuex y Jest",
280 | "emoji": "🍄"
281 | },
282 | {
283 | "titulo": "Crea una app con VueJS y Jest aplicando TDD",
284 | "emoji": "✌️"
285 | },
286 | {
287 | "titulo": "Buenas prácticas de BDD con Gherkin",
288 | "emoji": "🥒"
289 | },
290 | {
291 | "titulo": "Introducción a Scala",
292 | "emoji": "🌀"
293 | },
294 | {
295 | "titulo": "UI Testing en iOS con KIF",
296 | "emoji": "📱"
297 | },
298 | {
299 | "titulo": "Screenshot testing en iOS",
300 | "emoji": "🖼️"
301 | },
302 | {
303 | "titulo": "Screenshot testing en Android",
304 | "emoji": "📸"
305 | },
306 | {
307 | "titulo": "UI Testing en Android con Espresso",
308 | "emoji": "🎨"
309 | },
310 | {
311 | "titulo": "AWS EC2: Tu primer deploy",
312 | "emoji": "☁️"
313 | },
314 | {
315 | "titulo": "Agile: Cómo mejorar tus retrospectivas",
316 | "emoji": "🤝"
317 | },
318 | {
319 | "titulo": "CQRS: Command Query Responsibility Segregation",
320 | "emoji": "🚌"
321 | }
322 | ]
323 |
--------------------------------------------------------------------------------
/02-jq/1-map_json/execute.sh:
--------------------------------------------------------------------------------
1 | jq '[.[] | {titulo: .title, emoji}]' "$PWD/_input.json"
2 |
--------------------------------------------------------------------------------
/02-jq/1-map_json/test.sh:
--------------------------------------------------------------------------------
1 | source "../../_shared/compare_json.sh"
2 |
3 | it_should_output_the_expected_json "$PWD/execute.sh" "$PWD/_output.json"
4 |
--------------------------------------------------------------------------------
/02-jq/2-combine_filter_json/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | 1. Add a `titulo` property on each `_input.json` item combining the `emoji` one, a blank space, and the `title` one.
4 | 2. Add a `titulo_largo` property on each `_input.json` item. Its value must be:
5 | * `si`: if the initial `title` property value has more than 50 characters
6 | * `no`: otherwise
7 | 3. Filter out the JSON items only keeping the ones with a `titulo_largo` property value with more than 40 charaters
8 |
--------------------------------------------------------------------------------
/02-jq/2-combine_filter_json/_input.json:
--------------------------------------------------------------------------------
1 | [{"title":"React de 0 aplicando buenas prácticas","emoji":"🎛️","summary":"Introdúcete en React desde 0 creando tu developer dashboard personal dónde podrás consultar las métricas de tus repositorios favoritos.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-11-17","end":"2022-12-29"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/react-desde-0.png","slug":"react-desde-0","color":"yellow","url":"https://pro.codely.com/library/react-de-0-aplicando-buenas-practicas-192069/about/"},{"title":"API HTTP en Kotlin aplicando Arquitectura Hexagonal","emoji":"💎","summary":"Aprende a desarrollar tu primera API HTTP en Kotlin aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-10-27","end":"2022-11-24"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/api-kotlin-hexagonal.png","slug":"api-http-en-kotlin-aplicando-arquitectura-hexagonal","color":"green","url":"https://pro.codely.com/library/api-http-en-kotlin-aplicando-arquitectura-hexagonal-189116/456277/about/"},{"title":"DDD en TypeScript: Comunicación entre servicios y aplicaciones","emoji":"🛰","summary":"Comunica servicios y aplicaciones usando Domain-Driven Design (DDD) y TypeScript y consigue así que el software y los equipos escalen de forma progresiva.","authors":["fernando-vilas","ruben-salado","dani-santamaria"],"releaseDate":{"start":"2022-10-06","end":"2022-11-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-eda.png","slug":"ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones","color":"pink","url":"https://pro.codely.com/library/ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones-189024/449177/about/"},{"title":"Linting en JavaScript y TypeScript","emoji":"🔦","summary":"Aprende a sacarle todo el partido a ESLint para llevar tu código al siguiente nivel.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-09-09","end":"2022-09-22"},"tags":[],"categories":["tooling","frontend","backend"],"sticker":"/img/cursos/linting-js-ts.png","slug":"linting-en-javascript-y-typescript","color":"yellow","url":"https://pro.codely.com/library/linting-en-javascript-y-typescript-188432/446893/about/"},{"title":"Desarrolla plugins de Figma con TypeScript","emoji":"🪆","summary":"Ves un paso más allá y desarrolla plugins mantenibles, escalables y testables para figma con TypeScript. Diseño y desarrollo se dan la mano.","authors":["carmen-ansio","javier-ferrer"],"releaseDate":{"start":"2022-08-31","end":"2022-09-30"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/plugins-figma.png","slug":"desarrolla-plugins-de-figma-mantenibles-con-typescript","color":"violet","url":"https://pro.codely.com/library/desarrolla-plugins-de-figma-mantenibles-con-typescript-187373/about/"},{"title":"Patrones de Diseño de Comportamiento","emoji":"🐝","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño de Comportamiento.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2022-07-07","end":"2022-08-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-comportamiento.png","slug":"patrones-de-comportamiento","color":"green","url":"https://pro.codely.com/library/patrones-de-diseno-de-comportamiento-185034/about/"},{"title":"TypeScript Avanzado: Más alla de any","emoji":"🚜","summary":"En este curso vamos a sentar las bases de TypeScript avanzado con el objetivo de ir estableciendo los conocimientos básicos para futuros cursos en los que profundizaremos más en otros aspectos de esta herramienta de desarrollo.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-05-25","end":"2022-06-08"},"tags":[],"categories":["frontend","backend"],"sticker":"/img/cursos/typescript-avanzado.png","slug":"typescript-avanzando","color":"pink","url":"https://pro.codely.com/library/typescript-avanzado-mas-alla-de-any-182513/about/"},{"title":"Maquetando la web de Codely desde 0","emoji":"🍍","summary":"Llevaremos un diseño en Figma a una web en producción, con un design system escalable y teniendo en cuenta performance, SEO, y accesibilidad.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-05-18","end":"2022-06-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/maquetando-la-web-de-codely.png","slug":"maquetando-la-web-de-codely-desde-0","color":"yellow","url":"https://pro.codely.com/library/maquetando-la-web-de-codely-desde-0-181753/"},{"title":"Gestión de logs con Loki y Grafana","emoji":"🏵️","summary":"Aprende a gestionar tus logs con Grafana y Loki, las buenas prácticas y cómo se diferencia del stack de ELKi","authors":["joan-lopez-de-la-franca","rafa-gomez"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["backend","devops"],"sticker":"/img/cursos/gestion-de-logs-con-loki-y-grafana.png","slug":"gestion-de-logs-con-loki-y-grafana","color":"pink","url":"https://pro.codely.com/library/gestion-de-logs-con-loki-y-grafana-179996/407529/about/"},{"title":"Entrevistas sobre eXtreme Programming","emoji":"🎤","summary":"Contenido adicional del curso de eXtreme Programming","authors":["nino-dafonte"],"releaseDate":{"start":"2022-04-01","end":"2022-04-01"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/entrevistas-sobre-extreme-programming.png","slug":"entrevistas-sobre-extreme-programming","color":"green","url":"https://pro.codely.com/library/entrevistas-sobre-extreme-programming-179419/about/"},{"title":"TDD: Test-Driven Development","emoji":"♻️","summary":"Aprende Test-Driven Development (TDD) y las diferentes formas y estilos de aplicarlo en aplicaciones del Mundo Real™️","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/tdd.png","slug":"tdd","color":"violet","url":"https://pro.codely.com/library/tdd-test-driven-development-179143/"},{"title":"Directos exclusivos CodelyTV Pro","emoji":"🎥","summary":"Directos exclusivos resolviendo dudas, teniendo debates, y preparando siguientes cursos en base a vuestro feedback","authors":["javier-ferrer","rafa-gomez","isma-navarro","dani-santamaria","nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-05-26","end":"2022-03-11"},"tags":[],"categories":["arquitectura-software","frontend","backend"],"sticker":"/img/cursos/pro-streaming.png","slug":"pro-streaming","color":"violet","url":"https://pro.codely.com/library/directos-exclusivos-codelytv-pro-166172/about/"},{"title":"Setup macOS para Programar","emoji":"","summary":"Configura tu ordenador con Mac tal y cómo lo tienen Nino y Rafa para programar lo más cómodamente posible.","authors":["nino-dafonte","rafa-gomez"],"releaseDate":{"start":"2022-03-03","end":"2022-03-16"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-mac.png","slug":"setup-mac","color":"yellow","url":"https://pro.codely.com/library/setup-macos-para-programar-178003/"},{"title":"Lightning Talks","emoji":"⚡","summary":"Charlas de 10-20 minutos sobre temas variados. Hasta ahora eran internas al equipo Codely, pero… si a nosotros nos aportan valor, puede que a ti también","authors":["nuria-soriano"],"releaseDate":{"start":"2022-02-16","end":"2022-02-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/lightning-talks.png","slug":"lightning-talks","color":"green","url":"https://pro.codely.com/library/lightning-talks-177049/about/"},{"title":"eXtreme Programming","emoji":"🧑🔬","summary":"Descubre las prácticas de eXtreme Programming y su aplicación en el Mundo Real™","authors":["nino-dafonte","dani-santamaria"],"releaseDate":{"start":"2022-01-26","end":"2022-02-23"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/extreme-programming.png","slug":"extreme-programming","color":"pink","url":"https://pro.codely.com/library/extreme-programming-171308"},{"title":"Introducción a Kotlin: Tu primera app","emoji":"🐈","summary":"Desarrolla tu primer comando de consola con Kotlin mientras aprendes qué hace tan potente a este lenguaje.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-01-05","end":"2022-02-03"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-kotlin.png","slug":"introduccion-a-kotlin","color":"yellow","url":"https://pro.codely.com/library/introduccion-a-kotlin-tu-primera-app-174088/"},{"title":"DDD en TypeScript: Modelado y arquitectura","emoji":"🔷","summary":"Crea paso a paso tu aplicación TypeScript siguiendo Domain-Driven Design.","authors":["fernando-vilas","ruben-salado","javier-ferrer"],"releaseDate":{"start":"2021-11-24","end":"2021-12-22"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-modelado-arquitectura.png","slug":"ddd-en-typescript-modelado-arquitectura","color":"violet","url":"https://pro.codely.com/library/ddd-en-typescript-modelado-y-arquitectura-172533"},{"title":"Auditorías y Acompañamientos","emoji":"🐷","summary":"Sesión de auditoría en la que se revisa el diseño y arquitectura de software de una parte de tus sistemas y de Acompañamiento dónde te ayudamos a mejorar tu aprendizaje","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2021-11-26","end":"2022-07-27"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/auditoria-acompanamientos.png","slug":"auditoria-acompanamientos","color":"green","url":"https://pro.codely.com/library/auditorias-y-acompanamientos-172662/375960/about/"},{"title":"Gestión de Estado en React","emoji":"🍥","summary":"Conoce las distintas herramientas con la que puedes gestionar el estado en tu aplicación React.","authors":["isma-navarro","javier-ferrer","ricardo-borillo"],"releaseDate":{"start":"2021-11-03","end":"2021-12-01"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/gestion-estado-react.png","slug":"gestion-estado-react","color":"yellow","url":"https://pro.codely.com/library/gestion-estado-en-react/"},{"title":"Web performance","emoji":"🌪️","summary":"Aprende a optimizar tus aplicaciones web y a crear una cultura de performance para mantenerla a largo plazo.","authors":["nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-09-29","end":"2021-10-27"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/web-performance.png","slug":"web-performance","color":"pink","url":"https://pro.codely.com/library/web-performance-168675/"},{"title":"Patrones de Diseño: Creacionales","emoji":"🏭","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño Creacionales.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-09-08","end":"2021-10-06"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-diseno-creacionales.png","slug":"patrones-diseno-creacionales","color":"violet","url":"https://pro.codely.com/library/patrones-de-diseno-creacionales-167860/"},{"title":"CSS Flex a fondo","emoji":"🤸","summary":"Aprende a sacar todo el potencial de CSS Flex para crear layouts adaptables fácilmente.","authors":["isma-navarro","rafa-gomez"],"releaseDate":{"start":"2021-09-01","end":"2021-09-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-flex.png","slug":"css-flex","color":"green","url":"https://pro.codely.com/library/css-flex-a-fondo/"},{"title":"De JavaScript a TypeScript","emoji":"🏗️","summary":"Aprende TypeScript partiendo de un ejemplo de JavaScript en el que haremos el proceso de refactor poco a poco y analizando las principales características de TypeScript.","authors":["isma-navarro","rafa-gomez","nuria-soriano"],"releaseDate":{"start":"2021-06-14","end":"2021-07-28"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/de-javascript-a-typescript.png","slug":"de-javascript-a-typescript","color":"yellow","url":"https://pro.codely.com/library/de-javascript-a-typescript-128106/"},{"title":"Symfony mantenible y escalable","emoji":"🎶","summary":"Aprende herramientas y prácticas con Symfony para conseguir una mayor mantenibilidad y escalabilidad de tus aplicaciones.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-06-10","end":"2021-07-05"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/symfony-mantenible-escalable.png","slug":"symfony-mantenible-escalable","color":"pink","url":"https://pro.codely.com/library/symfony-mantenible-y-escalable-127478/"},{"title":"CSS Grid a fondo","emoji":"🍱","summary":"Aprende a sacar provecho de CSS Grid para crear layouts flexibles sin necesidad de recurrir a frameworks.","authors":["nuria-soriano","rafa-gomez","isma-navarro"],"releaseDate":{"start":"2021-06-02","end":"2021-06-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-grid.png","slug":"css-grid","color":"violet","url":"https://pro.codely.com/library/css-grid-a-fondo-126731/"},{"title":"Setup Linux para Programar","emoji":"🐧","summary":"Configura tu ordenador con Linux tal y cómo lo tiene Dani para programar lo más cómodamente posible.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2021-05-13","end":"2021-05-26"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-linux.png","slug":"setup-linux","color":"green","url":"https://pro.codely.com/library/setup-linux-para-programar-124104/"},{"title":"JavaScript moderno","emoji":"🐥","summary":"Aprende buenas prácticas para empezar aplicaciones JavaScript vanilla desde 0 y refactorizar código legacy dando soporte a navegadores antiguos.","authors":["nuria-soriano","javier-ferrer","isma-navarro"],"releaseDate":{"start":"2021-04-07","end":"2021-05-19"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/javascript-moderno.png","slug":"javascript-moderno","color":"yellow","url":"https://pro.codely.com/library/js-moderno/about/"},{"title":"Refactoring de Code Smells a Clean Code: Change Preventers","emoji":"🧹","summary":"Aprende a detectar y lidiar con código que genera aversión al cambio. Curso centrado en Code Smells de tipo Change Preventers.","authors":["javier-ferrer","rafa-gomez","dani-santamaria"],"releaseDate":{"start":"2021-04-15","end":"2021-04-28"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-change-preventers.png","slug":"refactoring-change-preventers","color":"pink","url":"https://pro.codely.com/library/refactoring-change-preventers/about/"},{"title":"Light & Dark themes accesibles","emoji":"🌚🌝","summary":"Aprende a implementar temas claros y oscuros en una página web de forma accesible, cómo integrarlo en tu arquitectura CSS y cómo adaptar los diseños para que te queden unos temas finísimos.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2021-03-03","end":"2021-03-17"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/light-dark-themes-accesibles.png","slug":"light-dark-themes-accesibles","color":"violet","url":"https://pro.codely.com/library/light-dark-themes-accesibles/about/"},{"title":"API HTTP en Go aplicando Arquitectura Hexagonal","emoji":"⛳","summary":"Aprende a desarrollar tu primera API HTTP en Go aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["adrian-perez","joan-lopez-de-la-franca","javier-ferrer"],"releaseDate":{"start":"2021-01-27","end":"2021-02-24"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/api-go-hexagonal.png","slug":"api-go-hexagonal","color":"yellow","url":"https://pro.codely.com/library/api-go-hexagonal/about/"},{"title":"Testing en frontend","emoji":"🐙","summary":"Aprende cómo testear tus aplicaciones frontend, aplicando buenas prácticas para conseguir unos tests mantenibles que aporten confianza.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2021-01-21","end":"2021-02-17"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-frontend.png","slug":"testing-frontend","color":"green","url":"https://pro.codely.com/library/testing-frontend/about/"},{"title":"Karabiner: Atajos de teclado para todo","emoji":"🎱","summary":"¡Automatiza todo en tu mac a golpe de atajos de teclado y mejor tu productividad!","authors":["rafa-gomez"],"releaseDate":{"start":"2021-01-13","end":"2021-01-13"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/karabiner.png","slug":"karabiner","color":"yellow","url":"https://pro.codely.com/library/karabiner/about/"},{"title":"Arquitectura CSS","emoji":"🗼","summary":"Aprende los fundamentos de una buena arquitectura CSS para que tus estilos sean fáciles de mantener y escalar.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-11-25","end":"2020-12-24"},"tags":[],"categories":["frontend","arquitectura-software"],"sticker":"/img/cursos/arquitectura-css.png","slug":"arquitectura-css","color":"pink","url":"https://pro.codely.com/library/arquitectura-css/about/"},{"title":"PHP 8: Novedades y ejemplos para el Mundo Real™","emoji":"🐘","summary":"Migra tus aplicaciones a PHP 8 paso a paso, consigue tests más mantenibles gracias a Named Arguments, Value Objects más simples con Constructor Property Promotion, reemplaza PECL (obsoleto), y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-11-18","end":"2020-12-02"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/php-8.png","slug":"php-8","color":"violet","url":"https://pro.codely.com/library/php-8/about/"},{"title":"Vue 3: Novedades aplicadas al mundo real","emoji":"✌️","summary":"Veremos cómo exprimir las novedades de Vue 3 con ejemplos reales y aplicando buenas prácticas.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2020-10-28","end":"2020-11-11"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/novedades-vue-3.png","slug":"novedades-vue-3","color":"green","url":"https://pro.codely.com/library/novedades-vue-3/about/"},{"title":"Buenas prácticas con CSS: Layouts","emoji":"📐","summary":"","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-10-01","end":"2020-10-16"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/layouts-css.png","slug":"layouts-css","color":"yellow","url":"https://pro.codely.com/library/layouts-css/about/"},{"title":"Refactoring de Code Smells a Clean Code: Bloaters","emoji":"🧼","summary":"Aprende a detectar y lidiar con código incomprensible 🤟","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-24","end":"2020-10-22"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-code-smells-clean-code-bloaters.png","slug":"refactoring-code-smells-clean-code-bloaters","color":"pink","url":"https://pro.codely.com/library/refactoring-code-smells-clean-code-bloaters/about/"},{"title":"Teclados Mecánicos","emoji":"⌨️","summary":"Monta tu teclado perfecto y personalizado al 100%","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-16","end":"2020-09-30"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/teclados-mecanicos.png","slug":"teclados-mecanicos","color":"yellow","url":"https://pro.codely.com/library/teclados-mecanicos/about/"},{"title":"Makefiles","emoji":"🐂","summary":"El centralizar tareas de nuestras aplicaciones es algo muy importante, y con los Makefiles se simplifica mucho.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-08-19","end":"2020-09-02"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/makefiles.png","slug":"makefiles","color":"green","url":"https://pro.codely.com/library/makefiles/about/"},{"title":"Monitoring con Prometheus","emoji":"🔥","summary":"La observabilidad es una de las cosas más importantes de la programación y el Monitoring uno de sus principales pilares.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/prometheus.png","slug":"prometheus","color":"violet","url":"https://pro.codely.com/library/prometheus/about/"},{"title":"Visualiza métricas de Prometheus con Grafana","emoji":"👁🗨","summary":"Aprende a crear un panel de 10 utilizando Grafana con Prometheus como datasource.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/grafana-con-prometheus.png","slug":"grafana-con-prometheus","color":"yellow","url":"https://pro.codely.com/library/curso-grafana-con-prometheus/about/"},{"title":"Notion: Productividad en equipo","emoji":"🌈","summary":"Centraliza toda la documentación de tu equipo de trabajo y la gestión de tareas en 1 única herramienta: Notion.","authors":["javier-ferrer"],"releaseDate":{"start":"2020-05-22","end":"2020-07-31"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/notion.png","slug":"notion","color":"green","url":"https://pro.codely.com/library/notion/about/"},{"title":"Bash para el día a día: Scripting & Productividad","emoji":"💻","summary":"Aprende a usar la navaja suiza de los programadores 😬","authors":["rafa-gomez"],"releaseDate":{"start":"2020-05-29","end":"2020-06-10"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/bash.png","slug":"bash","color":"yellow","url":"https://pro.codely.com/library/curso-bash/about/"},{"title":"Todo sobre los dotfiles","emoji":"🚀","summary":"Aprende a automatizar, centralizar y compartir todas tus configuraciones gracias a los dotfiles.","authors":["rafa-gomez"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/todo-sobre-los-dotfiles.png","slug":"todo-sobre-los-dotfiles","color":"pink","url":"https://pro.codely.com/library/todo-sobre-los-dotfiles/about/"},{"title":"Productividad con iTerm: Terminal macOS","emoji":"💨","summary":"Veremos cómo tener una terminal rapidísima y muy productiva gracias a unos simple (y escondidos) tips.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/iterm.png","slug":"iterm","color":"yellow","url":"https://pro.codely.com/library/iterm/about/"},{"title":"Automatiza tu flujo de trabajo con GitHub Actions","emoji":"🤖","summary":"Crearemos nuestras propias actions (¡hasta publicaremos alguna en el Marketplace!) que nos puedan ser muy útiles en nuestro día a día.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/automatizacion-con-github-actions.png","slug":"automatizacion-con-github-actions","color":"violet","url":"https://pro.codely.com/library/automatizacion-con-github-actions/about/"},{"title":"Terminal 100% productiva con Zsh","emoji":"💻","summary":"Consigue ser un Productivity Raptor™ con tu terminal gracias a Zsh, Oh My Zsh, Zim y funciones avanzadas.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/terminal-zsh.png","slug":"terminal-zsh","color":"green","url":"https://pro.codely.com/library/terminal-zsh/about/"},{"title":"Integración Continua con GitHub Actions","emoji":"🤖","summary":"¡Consigue una Integración Continua de la que te puedas fiar y que sea rapidísima! Gracias a GitHub Actions veremos como lograrlo.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/github-actions-de-0-a-integracion-continua.png","slug":"github-actions-de-0-a-integracion-continua","color":"pink","url":"https://pro.codely.com/library/github-actions-de-0-a-integracion-continua/about/"},{"title":"Exprimiendo IntelliJ","emoji":"⚡","summary":"¡Mejora tu productividad exprimiendo IntelliJ! Consigue un aspecto minimalista, crea ficheros con plantillas personalizadas, atajos secretos, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/intellij.png","slug":"intellij","color":"yellow","url":"https://pro.codely.com/library/intellij/about/"},{"title":"DDD en Java","emoji":"☕","summary":"Crea paso a paso tu aplicación Java siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-09-19","end":"2019-12-31"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-java.png","slug":"ddd-en-java","color":"green","url":"https://pro.codely.com/library/ddd-en-java/about/"},{"title":"DDD en PHP","emoji":"🐘","summary":"Crea paso a paso tu aplicación PHP siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-07-30","end":"2019-08-28"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-php.png","slug":"ddd-en-php","color":"pink","url":"https://pro.codely.com/library/ddd-en-php/about/"},{"title":"Git: Introducción y trabajo en equipo","emoji":"🔀","summary":"Aprende a trabajar en equipo con Git y sacarle todo el provecho con aspectos avanzados como debugging, estrategias de merge, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-06-26","end":"2019-08-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/git-introduccion-y-trabajo-en-equipo.png","slug":"git-introduccion-y-trabajo-en-equipo","color":"green","url":"https://pro.codely.com/library/git-introduccion-y-trabajo-en-equipo/about/"},{"title":"Testing: Introducción y buenas prácticas","emoji":"✅","summary":"Aprende qué aporta el testing, cómo testear y buenas prácticas para evitar que mantener tus tests sea un infierno con ejemplos de El Mundo Real™","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-introduccion-y-buenas-practicas.png","slug":"testing-introduccion-y-buenas-practicas","color":"yellow","url":"https://pro.codely.com/library/testing-introduccion-y-buenas-practicas/about/"},{"title":"Introducción a Go: Tu primera app","emoji":"⚡","summary":"Desarrolla tu primer comando de consola con Go mientras aprendes qué hace diferente al lenguaje de moda.","authors":["joan-lopez-de-la-franca","adrian-perez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-go-tu-primera-app.png","slug":"introduccion-a-go-tu-primera-app","color":"violet","url":"https://pro.codely.com/library/introduccion-a-go-tu-primera-app/about/"},{"title":"Domain-Driven Design","emoji":"🗿","summary":"Aprende a modelar tus aplicaciones centrándote en tu dominio, definir Bounded Contexts, agregados, value objects, y mucho más. Todo de forma práctica y con ejemplos de código","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/domain-driven-design-ddd.png","slug":"domain-driven-design-ddd","color":"pink","url":"https://pro.codely.com/library/domain-driven-design-ddd/about/"},{"title":"ReactJS: De 0 a deploy","emoji":"⚛️","summary":"Crea tu primera aplicación de React llevándola hasta producción y siguiendo buenas prácticas","authors":["dani-martin"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/reactjs-de-0-a-deploy.png","slug":"reactjs-de-0-a-deploy","color":"yellow","url":"https://pro.codely.com/library/reactjs-de-0-a-deploy-siguiendo-buenas-practicas/about/"},{"title":"Kubernetes para desarrolladores","emoji":"⛵","summary":"Aprende a orquestrar contenedores de Docker y desplegarlos en Azure, GCE, o AWS siguiendo buenas prácticas","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/kubernetes-para-desarrolladores.png","slug":"kubernetes-para-desarrolladores","color":"violet","url":"https://pro.codely.com/library/kubernetes-para-desarrolladores/about/"},{"title":"Migrando a VueJS progresivamente","emoji":"♻️️","summary":"Aprende cómo migrar un frontend ya existente a Vue.js partiendo de HTML, CSS y JS generado por backend","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/migrando-a-vuejs-progresivamente-desde-0.png","slug":"migrando-a-vuejs-progresivamente-desde-0","color":"green","url":"https://pro.codely.com/library/migrando-a-vuejs-progresivamente-desde-0/about/"},{"title":"ELK: Centraliza logs con Elastic Stack","emoji":"📊","summary":"Aprende a montar un stack para poder explotar toda la información de tus logs gracias a Elasticsearch, Logstash o Beats, y Kibana","authors":["ruben-cougil","javier-ferrer"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops","backend"],"sticker":"/img/cursos/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack.png","slug":"elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack","color":"yellow","url":"https://pro.codely.com/library/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack/about/"},{"title":"Principios SOLID aplicados","emoji":"🧱","summary":"Si ya sabes desarrollar software, pero quieres ir un paso más allá y mejorar la calidad de tu código, este es tu curso","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/principios-solid-aplicados.png","slug":"principios-solid-aplicados","color":"pink","url":"https://pro.codely.com/library/principios-solid-aplicados/about/"},{"title":"Comunicación entre microservicios: Event-Driven Architecture","emoji":"💬","summary":"Publica y consume eventos de dominio, consistencia eventual, RabbitMQ y AWS SNS-SQS, migración de monolito a servicios, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/comunicacion-entre-microservicios-event-driven-architecture.png","slug":"comunicacion-entre-microservicios-event-driven-architecture","color":"green","url":"https://pro.codely.com/library/comunicacion-entre-microservicios-event-driven-architecture/about/"},{"title":"Programación funcional: Refactor de OO a TypeClasses","emoji":"ƛ","summary":"Introducción a la programación funcional pura en Scala y a sus ventajas de la mano de las type classes.","authors":["juan-manuel-serrano","javier-fuentes"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses.png","slug":"programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses","color":"yellow","url":"https://pro.codely.com/library/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses/about/"},{"title":"Docker: De 0 a deploy","emoji":"🐳","summary":"Aprende qué es Docker y cómo sacar el mayor partido a los contenedores. Empezando desde el principio, veremos cómo usar Docker para levantar tu aplicación en local como si fuese producción, arrancando una base de datos con Docker Compose.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/docker-de-0-a-deployment.png","slug":"docker-de-0-a-deployment","color":"violet","url":"https://pro.codely.com/library/docker-de-0-a-deployment/about/"},{"title":"Exprimiendo las vistas de Android","emoji":"🖌️","summary":"Aprenderás a diseñar en Android cualquier diseño que te propongas. Empezando desde la base, iremos analizando todos los componentes hasta llegar a conceptos avanzados para que no se te resista ningún reto.","authors":["ilia-berlana"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/exprimiendo-las-vistas-de-android.png","slug":"exprimiendo-las-vistas-de-android","color":"yellow","url":"https://pro.codely.com/library/exprimiendo-las-vistas-de-android/about/"},{"title":"CQRS y Event Sourcing con Kotlin y Axon Framework","emoji":"🤹","summary":"Aprenderemos qué es Event Sourcing y cómo se complementa con la arquitectura CQRS. La parte práctica del curso consistirá en un desarrollo de un carrito de la compra para un ecommerce usando Kotlin y el framework Axon.","authors":["jordi-llonch","ramon-aranda"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/cqrs-y-event-sourcing-con-kotlin-y-axon-framework.png","slug":"cqrs-y-event-sourcing-con-kotlin-y-axon-framework","color":"green","url":"https://pro.codely.com/library/cqrs-y-event-sourcing-con-kotlin-y-axon-framework/about/"},{"title":"Tu primera API HTTP con Scala","emoji":"🗣️","summary":"Habiendo hecho el primer curso de introducción a Scala ya nos podemos meter en materia y desarrollar nuestra primera API HTTP con Scala, Akka, base de datos, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/api-http-con-scala-y-akka.png","slug":"api-http-con-scala-y-akka","color":"pink","url":"https://pro.codely.com/library/api-http-con-scala-y-akka/about/"},{"title":"Arquitectura Hexagonal","emoji":"🎯","summary":"Domain-Driven Design se apoya en la Arquitectura Hexagonal como uno de sus pilares a nivel técnico. Aprende a implementarla con CodelyTV!","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/arquitectura-hexagonal.png","slug":"arquitectura-hexagonal","color":"yellow","url":"https://pro.codely.com/library/arquitectura-hexagonal/about/"},{"title":"AWS: Escalando apps - Load Balancers y Auto Scaling Groups","emoji":"📈","summary":"José Armesto seguirá la serie de cursos sobre AWS hablando de cómo escalar. Introduciremos los Load Balancers y Auto Scaling Groups de AWS.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-autoescalado-de-aplicaciones-con-alb-y-asg.png","slug":"aws-autoescalado-de-aplicaciones-con-alb-y-asg","color":"violet","url":"https://pro.codely.com/library/aws-autoescalado-de-aplicaciones-con-alb-y-asg/about/"},{"title":"Crea una app MEAN profesional con AngularJS y Webpack","emoji":"🛡️","summary":"JuanMa Garrido nos explica cómo crear aplicaciones profesionales desde 0 basándonos en MongoDB, Express, AngularJS, y Node.js siguiendo buenas prácticas y usando Webpack.","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-mean-profesional-con-angularjs-y-webpack.png","slug":"crea-una-app-mean-profesional-con-angularjs-y-webpack","color":"yellow","url":"https://pro.codely.com/library/crea-una-app-mean-profesional-con-angularjs-y-webpack/about/"},{"title":"Testing unidirectional dataflow con Vuex y Jest","emoji":"🍄","summary":"Explicaremos la implementación de arquitectura de flujo unidireccional de Vuex y veremos cómo ayuda al desarrollo de aplicaciones con una jerarquía de componentes más compleja.","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/testing-unidirectional-dataflow-vuex-y-jest.png","slug":"testing-unidirectional-dataflow-vuex-y-jest","color":"pink","url":"https://pro.codely.com/library/testing-unidirectional-dataflow-vuex-y-jest/about/"},{"title":"Crea una app con VueJS y Jest aplicando TDD","emoji":"✌️","summary":"Alberto Gualis y Javi Rubio nos explicarán cómo testean aplicaciones VueJS con Jest en los Coding Stones. Incluye sesión práctica de TDD en Frontend. A lo loco!","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-con-vuejs-y-jest-aplicando-tdd.png","slug":"crea-una-app-con-vuejs-y-jest-aplicando-tdd","color":"violet","url":"https://pro.codely.com/library/crea-una-app-con-vuejs-y-jest-aplicando-tdd/about/"},{"title":"Buenas prácticas de BDD con Gherkin","emoji":"🥒","summary":"Aprenderás desde los conceptos básicos para testear tu aplicación con Cucumber o Behat, hasta consejos de buenas prácticas para hacer que tu suite de tests sea más fácilmente mantenible.","authors":["alberto-gualis","javier-rubio","dani-latorre"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/buenas-practicas-de-bdd-con-cucumber.png","slug":"buenas-practicas-de-bdd-con-cucumber","color":"green","url":"https://pro.codely.com/library/buenas-practicas-de-bdd-con-cucumber/about/"},{"title":"Introducción a Scala","emoji":"🌀","summary":"Scala es un lenguaje conciso, poco verboso, y que permite la programación funcional sin olvidar la POO. Aprenderemos cómo configurar el entorno, las bases del lenguaje, asincronía y otros tips para empezar.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-scala.png","slug":"introduccion-a-scala","color":"violet","url":"https://pro.codely.com/library/introduccion-a-scala/about/"},{"title":"UI Testing en iOS con KIF","emoji":"📱","summary":"Aprende una de las técnicas de testing más potentes que existen para desarrollo móvil, aprende a hacer tests funcionales de UI para aplicaciones iOS con Sergio Gutierrez de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-ios-con-kif.png","slug":"ui-testing-en-ios-con-kif","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-ios-con-kif/about/"},{"title":"Screenshot testing en iOS","emoji":"🖼️","summary":"Sergio Gutierrez de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en iOS. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-ios.png","slug":"screenshot-testing-en-ios","color":"green","url":"https://pro.codely.com/library/screenshot-testing-en-ios-3af3e7f1/about/"},{"title":"Screenshot testing en Android","emoji":"📸","summary":"Jorge Barroso de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en Android. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-android.png","slug":"screenshot-testing-en-android","color":"pink","url":"https://pro.codely.com/library/screenshot-testing-en-android-f1bc7a25/about/"},{"title":"UI Testing en Android con Espresso","emoji":"🎨","summary":"En el mundo mobile la parte más importante y grande que debemos cubrir con tests es la interfaz de usuario. En este curso aprenderemos las claves para escribir buenos tests de UI con Jorge Barroso de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-android-con-espresso.png","slug":"ui-testing-en-android-con-espresso","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-android-con-espresso/about/"},{"title":"AWS EC2: Tu primer deploy","emoji":"☁️","summary":"Aprende las bases de Amazon Web Services para levantar tu aplicación en la nube. Crea tu propia VPC, elige la instancia adecuada de EC2, configura SSH, elige tu AMI base, define Security Groups, deploya, y configura Route53 como DNS!","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-deploy-en-ec2.png","slug":"aws-deploy-en-ec2","color":"green","url":"https://pro.codely.com/library/aws-deploy-en-ec2/about/"},{"title":"Agile: Cómo mejorar tus retrospectivas","emoji":"🤝","summary":"A pesar de parecer simple, llevar a cabo buenas retrospectivas no siempre es fácil. En este curso José Huerta de Smoking Brains nos explicará cómo mejorar.","authors":["jose-rodriguez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/agile-retrospectivas.png","slug":"agile-retrospectivas","color":"pink","url":"https://pro.codely.com/library/agile-retrospectivas/about/"},{"title":"CQRS: Command Query Responsibility Segregation","emoji":"🚌","summary":"Aumenta el rendimiento y el desacoplamiento de tu backend mediante CQRS. Veremos conceptos e implementaciones de buses síncronos y asíncronos.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/cqrs-command-query-responsibility-segregation.png","slug":"cqrs-command-query-responsibility-segregation","color":"violet","url":"https://pro.codely.com/library/cqrs-command-query-responsibility-segregation-3719e4aa/about/"}]
2 |
--------------------------------------------------------------------------------
/02-jq/2-combine_filter_json/_output.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "titulo": "💎 API HTTP en Kotlin aplicando Arquitectura Hexagonal",
4 | "titulo_largo": "si"
5 | },
6 | {
7 | "titulo": "🛰 DDD en TypeScript: Comunicación entre servicios y aplicaciones",
8 | "titulo_largo": "si"
9 | },
10 | {
11 | "titulo": "🪆 Desarrolla plugins de Figma con TypeScript",
12 | "titulo_largo": "no"
13 | },
14 | {
15 | "titulo": "🔷 DDD en TypeScript: Modelado y arquitectura",
16 | "titulo_largo": "no"
17 | },
18 | {
19 | "titulo": "🧹 Refactoring de Code Smells a Clean Code: Change Preventers",
20 | "titulo_largo": "si"
21 | },
22 | {
23 | "titulo": "⛳ API HTTP en Go aplicando Arquitectura Hexagonal",
24 | "titulo_largo": "no"
25 | },
26 | {
27 | "titulo": "🐘 PHP 8: Novedades y ejemplos para el Mundo Real™",
28 | "titulo_largo": "no"
29 | },
30 | {
31 | "titulo": "✌️ Vue 3: Novedades aplicadas al mundo real",
32 | "titulo_largo": "no"
33 | },
34 | {
35 | "titulo": "🧼 Refactoring de Code Smells a Clean Code: Bloaters",
36 | "titulo_largo": "no"
37 | },
38 | {
39 | "titulo": "👁🗨 Visualiza métricas de Prometheus con Grafana",
40 | "titulo_largo": "no"
41 | },
42 | {
43 | "titulo": "💻 Bash para el día a día: Scripting & Productividad",
44 | "titulo_largo": "no"
45 | },
46 | {
47 | "titulo": "💨 Productividad con iTerm: Terminal macOS",
48 | "titulo_largo": "no"
49 | },
50 | {
51 | "titulo": "🤖 Automatiza tu flujo de trabajo con GitHub Actions",
52 | "titulo_largo": "no"
53 | },
54 | {
55 | "titulo": "🤖 Integración Continua con GitHub Actions",
56 | "titulo_largo": "no"
57 | },
58 | {
59 | "titulo": "✅ Testing: Introducción y buenas prácticas",
60 | "titulo_largo": "no"
61 | },
62 | {
63 | "titulo": "💬 Comunicación entre microservicios: Event-Driven Architecture",
64 | "titulo_largo": "si"
65 | },
66 | {
67 | "titulo": "ƛ Programación funcional: Refactor de OO a TypeClasses",
68 | "titulo_largo": "si"
69 | },
70 | {
71 | "titulo": "🤹 CQRS y Event Sourcing con Kotlin y Axon Framework",
72 | "titulo_largo": "no"
73 | },
74 | {
75 | "titulo": "📈 AWS: Escalando apps - Load Balancers y Auto Scaling Groups",
76 | "titulo_largo": "si"
77 | },
78 | {
79 | "titulo": "🛡️ Crea una app MEAN profesional con AngularJS y Webpack",
80 | "titulo_largo": "si"
81 | },
82 | {
83 | "titulo": "🍄 Testing unidirectional dataflow con Vuex y Jest",
84 | "titulo_largo": "no"
85 | },
86 | {
87 | "titulo": "✌️ Crea una app con VueJS y Jest aplicando TDD",
88 | "titulo_largo": "no"
89 | },
90 | {
91 | "titulo": "🚌 CQRS: Command Query Responsibility Segregation",
92 | "titulo_largo": "no"
93 | }
94 | ]
95 |
--------------------------------------------------------------------------------
/02-jq/2-combine_filter_json/execute.sh:
--------------------------------------------------------------------------------
1 | jq '[.[] | {titulo: (.emoji + " " + .title), titulo_largo: (if .title | length > 50 then "si" else "no" end)} | select(.titulo | length > 40)]' "$PWD/_input.json"
2 |
--------------------------------------------------------------------------------
/02-jq/2-combine_filter_json/test.sh:
--------------------------------------------------------------------------------
1 | source "../../_shared/compare_json.sh"
2 |
3 | it_should_output_the_expected_json "$PWD/execute.sh" "$PWD/_output.json"
4 |
--------------------------------------------------------------------------------
/02-jq/3-aggregate_sort_json/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | We want to check if there are any course emojis repeated in our input data. In order to do so:
4 |
5 | 1. Format the courses JSON array input to the following schema. That is, group the courses array by their emoji and provide some useful information:
6 | ```json
7 | [
8 | {
9 | "emoji": $EMOJI,
10 | "total": $TOTAL,
11 | "courses": [
12 | $COURSE_1_TITLE,
13 | $COURSE_2_TITLE,
14 | …
15 | ]
16 | },
17 | …
18 | ]
19 | ```
20 | Properties:
21 | * `$EMOJI`: The `.emoji` value that we grouped by
22 | * `$TOTAL`: Number of times that emoji appears as a course emoji
23 | * `$COURSE_TITLES`: Array containing the courses titles of the courses that have that emoji set
24 | 2. Sort the output array prioritizing the emojis with more appearances
25 | 3. Filter out the output array in order to only keep the emojis that appear more than once
26 |
--------------------------------------------------------------------------------
/02-jq/3-aggregate_sort_json/_input.json:
--------------------------------------------------------------------------------
1 | [{"title":"React de 0 aplicando buenas prácticas","emoji":"🎛️","summary":"Introdúcete en React desde 0 creando tu developer dashboard personal dónde podrás consultar las métricas de tus repositorios favoritos.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-11-17","end":"2022-12-29"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/react-desde-0.png","slug":"react-desde-0","color":"yellow","url":"https://pro.codely.com/library/react-de-0-aplicando-buenas-practicas-192069/about/"},{"title":"API HTTP en Kotlin aplicando Arquitectura Hexagonal","emoji":"💎","summary":"Aprende a desarrollar tu primera API HTTP en Kotlin aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-10-27","end":"2022-11-24"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/api-kotlin-hexagonal.png","slug":"api-http-en-kotlin-aplicando-arquitectura-hexagonal","color":"green","url":"https://pro.codely.com/library/api-http-en-kotlin-aplicando-arquitectura-hexagonal-189116/456277/about/"},{"title":"DDD en TypeScript: Comunicación entre servicios y aplicaciones","emoji":"🛰","summary":"Comunica servicios y aplicaciones usando Domain-Driven Design (DDD) y TypeScript y consigue así que el software y los equipos escalen de forma progresiva.","authors":["fernando-vilas","ruben-salado","dani-santamaria"],"releaseDate":{"start":"2022-10-06","end":"2022-11-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-eda.png","slug":"ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones","color":"pink","url":"https://pro.codely.com/library/ddd-en-typescript-comunicacion-entre-servicios-y-aplicaciones-189024/449177/about/"},{"title":"Linting en JavaScript y TypeScript","emoji":"🔦","summary":"Aprende a sacarle todo el partido a ESLint para llevar tu código al siguiente nivel.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-09-09","end":"2022-09-22"},"tags":[],"categories":["tooling","frontend","backend"],"sticker":"/img/cursos/linting-js-ts.png","slug":"linting-en-javascript-y-typescript","color":"yellow","url":"https://pro.codely.com/library/linting-en-javascript-y-typescript-188432/446893/about/"},{"title":"Desarrolla plugins de Figma con TypeScript","emoji":"🪆","summary":"Ves un paso más allá y desarrolla plugins mantenibles, escalables y testables para figma con TypeScript. Diseño y desarrollo se dan la mano.","authors":["carmen-ansio","javier-ferrer"],"releaseDate":{"start":"2022-08-31","end":"2022-09-30"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/plugins-figma.png","slug":"desarrolla-plugins-de-figma-mantenibles-con-typescript","color":"violet","url":"https://pro.codely.com/library/desarrolla-plugins-de-figma-mantenibles-con-typescript-187373/about/"},{"title":"Patrones de Diseño de Comportamiento","emoji":"🐝","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño de Comportamiento.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2022-07-07","end":"2022-08-03"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-comportamiento.png","slug":"patrones-de-comportamiento","color":"green","url":"https://pro.codely.com/library/patrones-de-diseno-de-comportamiento-185034/about/"},{"title":"TypeScript Avanzado: Más alla de any","emoji":"🚜","summary":"En este curso vamos a sentar las bases de TypeScript avanzado con el objetivo de ir estableciendo los conocimientos básicos para futuros cursos en los que profundizaremos más en otros aspectos de esta herramienta de desarrollo.","authors":["isma-navarro","javier-ferrer"],"releaseDate":{"start":"2022-05-25","end":"2022-06-08"},"tags":[],"categories":["frontend","backend"],"sticker":"/img/cursos/typescript-avanzado.png","slug":"typescript-avanzando","color":"pink","url":"https://pro.codely.com/library/typescript-avanzado-mas-alla-de-any-182513/about/"},{"title":"Maquetando la web de Codely desde 0","emoji":"🍍","summary":"Llevaremos un diseño en Figma a una web en producción, con un design system escalable y teniendo en cuenta performance, SEO, y accesibilidad.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2022-05-18","end":"2022-06-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/maquetando-la-web-de-codely.png","slug":"maquetando-la-web-de-codely-desde-0","color":"yellow","url":"https://pro.codely.com/library/maquetando-la-web-de-codely-desde-0-181753/"},{"title":"Gestión de logs con Loki y Grafana","emoji":"🏵️","summary":"Aprende a gestionar tus logs con Grafana y Loki, las buenas prácticas y cómo se diferencia del stack de ELKi","authors":["joan-lopez-de-la-franca","rafa-gomez"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["backend","devops"],"sticker":"/img/cursos/gestion-de-logs-con-loki-y-grafana.png","slug":"gestion-de-logs-con-loki-y-grafana","color":"pink","url":"https://pro.codely.com/library/gestion-de-logs-con-loki-y-grafana-179996/407529/about/"},{"title":"Entrevistas sobre eXtreme Programming","emoji":"🎤","summary":"Contenido adicional del curso de eXtreme Programming","authors":["nino-dafonte"],"releaseDate":{"start":"2022-04-01","end":"2022-04-01"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/entrevistas-sobre-extreme-programming.png","slug":"entrevistas-sobre-extreme-programming","color":"green","url":"https://pro.codely.com/library/entrevistas-sobre-extreme-programming-179419/about/"},{"title":"TDD: Test-Driven Development","emoji":"♻️","summary":"Aprende Test-Driven Development (TDD) y las diferentes formas y estilos de aplicarlo en aplicaciones del Mundo Real™️","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2022-03-24","end":"2022-04-20"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/tdd.png","slug":"tdd","color":"violet","url":"https://pro.codely.com/library/tdd-test-driven-development-179143/"},{"title":"Directos exclusivos CodelyTV Pro","emoji":"🎥","summary":"Directos exclusivos resolviendo dudas, teniendo debates, y preparando siguientes cursos en base a vuestro feedback","authors":["javier-ferrer","rafa-gomez","isma-navarro","dani-santamaria","nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-05-26","end":"2022-03-11"},"tags":[],"categories":["arquitectura-software","frontend","backend"],"sticker":"/img/cursos/pro-streaming.png","slug":"pro-streaming","color":"violet","url":"https://pro.codely.com/library/directos-exclusivos-codelytv-pro-166172/about/"},{"title":"Setup macOS para Programar","emoji":"","summary":"Configura tu ordenador con Mac tal y cómo lo tienen Nino y Rafa para programar lo más cómodamente posible.","authors":["nino-dafonte","rafa-gomez"],"releaseDate":{"start":"2022-03-03","end":"2022-03-16"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-mac.png","slug":"setup-mac","color":"yellow","url":"https://pro.codely.com/library/setup-macos-para-programar-178003/"},{"title":"Lightning Talks","emoji":"⚡","summary":"Charlas de 10-20 minutos sobre temas variados. Hasta ahora eran internas al equipo Codely, pero… si a nosotros nos aportan valor, puede que a ti también","authors":["nuria-soriano"],"releaseDate":{"start":"2022-02-16","end":"2022-02-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/lightning-talks.png","slug":"lightning-talks","color":"green","url":"https://pro.codely.com/library/lightning-talks-177049/about/"},{"title":"eXtreme Programming","emoji":"🧑🔬","summary":"Descubre las prácticas de eXtreme Programming y su aplicación en el Mundo Real™","authors":["nino-dafonte","dani-santamaria"],"releaseDate":{"start":"2022-01-26","end":"2022-02-23"},"tags":[],"categories":["metodologias-buenas-practicas"],"sticker":"/img/cursos/extreme-programming.png","slug":"extreme-programming","color":"pink","url":"https://pro.codely.com/library/extreme-programming-171308"},{"title":"Introducción a Kotlin: Tu primera app","emoji":"🐈","summary":"Desarrolla tu primer comando de consola con Kotlin mientras aprendes qué hace tan potente a este lenguaje.","authors":["isa-garrido","rafa-gomez"],"releaseDate":{"start":"2022-01-05","end":"2022-02-03"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-kotlin.png","slug":"introduccion-a-kotlin","color":"yellow","url":"https://pro.codely.com/library/introduccion-a-kotlin-tu-primera-app-174088/"},{"title":"DDD en TypeScript: Modelado y arquitectura","emoji":"🔷","summary":"Crea paso a paso tu aplicación TypeScript siguiendo Domain-Driven Design.","authors":["fernando-vilas","ruben-salado","javier-ferrer"],"releaseDate":{"start":"2021-11-24","end":"2021-12-22"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-typescript-modelado-arquitectura.png","slug":"ddd-en-typescript-modelado-arquitectura","color":"violet","url":"https://pro.codely.com/library/ddd-en-typescript-modelado-y-arquitectura-172533"},{"title":"Auditorías y Acompañamientos","emoji":"🐷","summary":"Sesión de auditoría en la que se revisa el diseño y arquitectura de software de una parte de tus sistemas y de Acompañamiento dónde te ayudamos a mejorar tu aprendizaje","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2021-11-26","end":"2022-07-27"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/auditoria-acompanamientos.png","slug":"auditoria-acompanamientos","color":"green","url":"https://pro.codely.com/library/auditorias-y-acompanamientos-172662/375960/about/"},{"title":"Gestión de Estado en React","emoji":"🍥","summary":"Conoce las distintas herramientas con la que puedes gestionar el estado en tu aplicación React.","authors":["isma-navarro","javier-ferrer","ricardo-borillo"],"releaseDate":{"start":"2021-11-03","end":"2021-12-01"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/gestion-estado-react.png","slug":"gestion-estado-react","color":"yellow","url":"https://pro.codely.com/library/gestion-estado-en-react/"},{"title":"Web performance","emoji":"🌪️","summary":"Aprende a optimizar tus aplicaciones web y a crear una cultura de performance para mantenerla a largo plazo.","authors":["nino-dafonte","nuria-soriano"],"releaseDate":{"start":"2021-09-29","end":"2021-10-27"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/web-performance.png","slug":"web-performance","color":"pink","url":"https://pro.codely.com/library/web-performance-168675/"},{"title":"Patrones de Diseño: Creacionales","emoji":"🏭","summary":"Aprende las implicaciones a nivel de SOLID y de mantenimiento de los Patrones de Diseño Creacionales.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-09-08","end":"2021-10-06"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/patrones-diseno-creacionales.png","slug":"patrones-diseno-creacionales","color":"violet","url":"https://pro.codely.com/library/patrones-de-diseno-creacionales-167860/"},{"title":"CSS Flex a fondo","emoji":"🤸","summary":"Aprende a sacar todo el potencial de CSS Flex para crear layouts adaptables fácilmente.","authors":["isma-navarro","rafa-gomez"],"releaseDate":{"start":"2021-09-01","end":"2021-09-15"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-flex.png","slug":"css-flex","color":"green","url":"https://pro.codely.com/library/css-flex-a-fondo/"},{"title":"De JavaScript a TypeScript","emoji":"🏗️","summary":"Aprende TypeScript partiendo de un ejemplo de JavaScript en el que haremos el proceso de refactor poco a poco y analizando las principales características de TypeScript.","authors":["isma-navarro","rafa-gomez","nuria-soriano"],"releaseDate":{"start":"2021-06-14","end":"2021-07-28"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/de-javascript-a-typescript.png","slug":"de-javascript-a-typescript","color":"yellow","url":"https://pro.codely.com/library/de-javascript-a-typescript-128106/"},{"title":"Symfony mantenible y escalable","emoji":"🎶","summary":"Aprende herramientas y prácticas con Symfony para conseguir una mayor mantenibilidad y escalabilidad de tus aplicaciones.","authors":["dani-santamaria","javier-ferrer"],"releaseDate":{"start":"2021-06-10","end":"2021-07-05"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/symfony-mantenible-escalable.png","slug":"symfony-mantenible-escalable","color":"pink","url":"https://pro.codely.com/library/symfony-mantenible-y-escalable-127478/"},{"title":"CSS Grid a fondo","emoji":"🍱","summary":"Aprende a sacar provecho de CSS Grid para crear layouts flexibles sin necesidad de recurrir a frameworks.","authors":["nuria-soriano","rafa-gomez","isma-navarro"],"releaseDate":{"start":"2021-06-02","end":"2021-06-16"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/css-grid.png","slug":"css-grid","color":"violet","url":"https://pro.codely.com/library/css-grid-a-fondo-126731/"},{"title":"Setup Linux para Programar","emoji":"🐧","summary":"Configura tu ordenador con Linux tal y cómo lo tiene Dani para programar lo más cómodamente posible.","authors":["dani-santamaria","rafa-gomez"],"releaseDate":{"start":"2021-05-13","end":"2021-05-26"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/setup-linux.png","slug":"setup-linux","color":"green","url":"https://pro.codely.com/library/setup-linux-para-programar-124104/"},{"title":"JavaScript moderno","emoji":"🐥","summary":"Aprende buenas prácticas para empezar aplicaciones JavaScript vanilla desde 0 y refactorizar código legacy dando soporte a navegadores antiguos.","authors":["nuria-soriano","javier-ferrer","isma-navarro"],"releaseDate":{"start":"2021-04-07","end":"2021-05-19"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/javascript-moderno.png","slug":"javascript-moderno","color":"yellow","url":"https://pro.codely.com/library/js-moderno/about/"},{"title":"Refactoring de Code Smells a Clean Code: Change Preventers","emoji":"🧹","summary":"Aprende a detectar y lidiar con código que genera aversión al cambio. Curso centrado en Code Smells de tipo Change Preventers.","authors":["javier-ferrer","rafa-gomez","dani-santamaria"],"releaseDate":{"start":"2021-04-15","end":"2021-04-28"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-change-preventers.png","slug":"refactoring-change-preventers","color":"pink","url":"https://pro.codely.com/library/refactoring-change-preventers/about/"},{"title":"Light & Dark themes accesibles","emoji":"🌚🌝","summary":"Aprende a implementar temas claros y oscuros en una página web de forma accesible, cómo integrarlo en tu arquitectura CSS y cómo adaptar los diseños para que te queden unos temas finísimos.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2021-03-03","end":"2021-03-17"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/light-dark-themes-accesibles.png","slug":"light-dark-themes-accesibles","color":"violet","url":"https://pro.codely.com/library/light-dark-themes-accesibles/about/"},{"title":"API HTTP en Go aplicando Arquitectura Hexagonal","emoji":"⛳","summary":"Aprende a desarrollar tu primera API HTTP en Go aplicando algunos de los fundamentos de la Arquitectura Hexagonal.","authors":["adrian-perez","joan-lopez-de-la-franca","javier-ferrer"],"releaseDate":{"start":"2021-01-27","end":"2021-02-24"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/api-go-hexagonal.png","slug":"api-go-hexagonal","color":"yellow","url":"https://pro.codely.com/library/api-go-hexagonal/about/"},{"title":"Testing en frontend","emoji":"🐙","summary":"Aprende cómo testear tus aplicaciones frontend, aplicando buenas prácticas para conseguir unos tests mantenibles que aporten confianza.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2021-01-21","end":"2021-02-17"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-frontend.png","slug":"testing-frontend","color":"green","url":"https://pro.codely.com/library/testing-frontend/about/"},{"title":"Karabiner: Atajos de teclado para todo","emoji":"🎱","summary":"¡Automatiza todo en tu mac a golpe de atajos de teclado y mejor tu productividad!","authors":["rafa-gomez"],"releaseDate":{"start":"2021-01-13","end":"2021-01-13"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/karabiner.png","slug":"karabiner","color":"yellow","url":"https://pro.codely.com/library/karabiner/about/"},{"title":"Arquitectura CSS","emoji":"🗼","summary":"Aprende los fundamentos de una buena arquitectura CSS para que tus estilos sean fáciles de mantener y escalar.","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-11-25","end":"2020-12-24"},"tags":[],"categories":["frontend","arquitectura-software"],"sticker":"/img/cursos/arquitectura-css.png","slug":"arquitectura-css","color":"pink","url":"https://pro.codely.com/library/arquitectura-css/about/"},{"title":"PHP 8: Novedades y ejemplos para el Mundo Real™","emoji":"🐘","summary":"Migra tus aplicaciones a PHP 8 paso a paso, consigue tests más mantenibles gracias a Named Arguments, Value Objects más simples con Constructor Property Promotion, reemplaza PECL (obsoleto), y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-11-18","end":"2020-12-02"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/php-8.png","slug":"php-8","color":"violet","url":"https://pro.codely.com/library/php-8/about/"},{"title":"Vue 3: Novedades aplicadas al mundo real","emoji":"✌️","summary":"Veremos cómo exprimir las novedades de Vue 3 con ejemplos reales y aplicando buenas prácticas.","authors":["nuria-soriano","javier-ferrer"],"releaseDate":{"start":"2020-10-28","end":"2020-11-11"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/novedades-vue-3.png","slug":"novedades-vue-3","color":"green","url":"https://pro.codely.com/library/novedades-vue-3/about/"},{"title":"Buenas prácticas con CSS: Layouts","emoji":"📐","summary":"","authors":["nuria-soriano","rafa-gomez"],"releaseDate":{"start":"2020-10-01","end":"2020-10-16"},"tags":[],"categories":["frontend","metodologias-buenas-practicas"],"sticker":"/img/cursos/layouts-css.png","slug":"layouts-css","color":"yellow","url":"https://pro.codely.com/library/layouts-css/about/"},{"title":"Refactoring de Code Smells a Clean Code: Bloaters","emoji":"🧼","summary":"Aprende a detectar y lidiar con código incomprensible 🤟","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-24","end":"2020-10-22"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/refactoring-code-smells-clean-code-bloaters.png","slug":"refactoring-code-smells-clean-code-bloaters","color":"pink","url":"https://pro.codely.com/library/refactoring-code-smells-clean-code-bloaters/about/"},{"title":"Teclados Mecánicos","emoji":"⌨️","summary":"Monta tu teclado perfecto y personalizado al 100%","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-09-16","end":"2020-09-30"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/teclados-mecanicos.png","slug":"teclados-mecanicos","color":"yellow","url":"https://pro.codely.com/library/teclados-mecanicos/about/"},{"title":"Makefiles","emoji":"🐂","summary":"El centralizar tareas de nuestras aplicaciones es algo muy importante, y con los Makefiles se simplifica mucho.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-08-19","end":"2020-09-02"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/makefiles.png","slug":"makefiles","color":"green","url":"https://pro.codely.com/library/makefiles/about/"},{"title":"Monitoring con Prometheus","emoji":"🔥","summary":"La observabilidad es una de las cosas más importantes de la programación y el Monitoring uno de sus principales pilares.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/prometheus.png","slug":"prometheus","color":"violet","url":"https://pro.codely.com/library/prometheus/about/"},{"title":"Visualiza métricas de Prometheus con Grafana","emoji":"👁🗨","summary":"Aprende a crear un panel de 10 utilizando Grafana con Prometheus como datasource.","authors":["ruben-cougil","rafa-gomez"],"releaseDate":{"start":"2020-08-12","end":"2020-08-26"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/grafana-con-prometheus.png","slug":"grafana-con-prometheus","color":"yellow","url":"https://pro.codely.com/library/curso-grafana-con-prometheus/about/"},{"title":"Notion: Productividad en equipo","emoji":"🌈","summary":"Centraliza toda la documentación de tu equipo de trabajo y la gestión de tareas en 1 única herramienta: Notion.","authors":["javier-ferrer"],"releaseDate":{"start":"2020-05-22","end":"2020-07-31"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/notion.png","slug":"notion","color":"green","url":"https://pro.codely.com/library/notion/about/"},{"title":"Bash para el día a día: Scripting & Productividad","emoji":"💻","summary":"Aprende a usar la navaja suiza de los programadores 😬","authors":["rafa-gomez"],"releaseDate":{"start":"2020-05-29","end":"2020-06-10"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/bash.png","slug":"bash","color":"yellow","url":"https://pro.codely.com/library/curso-bash/about/"},{"title":"Todo sobre los dotfiles","emoji":"🚀","summary":"Aprende a automatizar, centralizar y compartir todas tus configuraciones gracias a los dotfiles.","authors":["rafa-gomez"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/todo-sobre-los-dotfiles.png","slug":"todo-sobre-los-dotfiles","color":"pink","url":"https://pro.codely.com/library/todo-sobre-los-dotfiles/about/"},{"title":"Productividad con iTerm: Terminal macOS","emoji":"💨","summary":"Veremos cómo tener una terminal rapidísima y muy productiva gracias a unos simple (y escondidos) tips.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-04-23","end":"2020-05-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/iterm.png","slug":"iterm","color":"yellow","url":"https://pro.codely.com/library/iterm/about/"},{"title":"Automatiza tu flujo de trabajo con GitHub Actions","emoji":"🤖","summary":"Crearemos nuestras propias actions (¡hasta publicaremos alguna en el Marketplace!) que nos puedan ser muy útiles en nuestro día a día.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/automatizacion-con-github-actions.png","slug":"automatizacion-con-github-actions","color":"violet","url":"https://pro.codely.com/library/automatizacion-con-github-actions/about/"},{"title":"Terminal 100% productiva con Zsh","emoji":"💻","summary":"Consigue ser un Productivity Raptor™ con tu terminal gracias a Zsh, Oh My Zsh, Zim y funciones avanzadas.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/terminal-zsh.png","slug":"terminal-zsh","color":"green","url":"https://pro.codely.com/library/terminal-zsh/about/"},{"title":"Integración Continua con GitHub Actions","emoji":"🤖","summary":"¡Consigue una Integración Continua de la que te puedas fiar y que sea rapidísima! Gracias a GitHub Actions veremos como lograrlo.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/github-actions-de-0-a-integracion-continua.png","slug":"github-actions-de-0-a-integracion-continua","color":"pink","url":"https://pro.codely.com/library/github-actions-de-0-a-integracion-continua/about/"},{"title":"Exprimiendo IntelliJ","emoji":"⚡","summary":"¡Mejora tu productividad exprimiendo IntelliJ! Consigue un aspecto minimalista, crea ficheros con plantillas personalizadas, atajos secretos, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2020-03-04","end":"2020-04-08"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/intellij.png","slug":"intellij","color":"yellow","url":"https://pro.codely.com/library/intellij/about/"},{"title":"DDD en Java","emoji":"☕","summary":"Crea paso a paso tu aplicación Java siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-09-19","end":"2019-12-31"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-java.png","slug":"ddd-en-java","color":"green","url":"https://pro.codely.com/library/ddd-en-java/about/"},{"title":"DDD en PHP","emoji":"🐘","summary":"Crea paso a paso tu aplicación PHP siguiendo Domain-Driven Design. Estructura de carpetas, integración con BD, sistema de colas, CQRS y más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-07-30","end":"2019-08-28"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/ddd-en-php.png","slug":"ddd-en-php","color":"pink","url":"https://pro.codely.com/library/ddd-en-php/about/"},{"title":"Git: Introducción y trabajo en equipo","emoji":"🔀","summary":"Aprende a trabajar en equipo con Git y sacarle todo el provecho con aspectos avanzados como debugging, estrategias de merge, y mucho más.","authors":["rafa-gomez","javier-ferrer"],"releaseDate":{"start":"2019-06-26","end":"2019-08-07"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/git-introduccion-y-trabajo-en-equipo.png","slug":"git-introduccion-y-trabajo-en-equipo","color":"green","url":"https://pro.codely.com/library/git-introduccion-y-trabajo-en-equipo/about/"},{"title":"Testing: Introducción y buenas prácticas","emoji":"✅","summary":"Aprende qué aporta el testing, cómo testear y buenas prácticas para evitar que mantener tus tests sea un infierno con ejemplos de El Mundo Real™","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software","metodologias-buenas-practicas"],"sticker":"/img/cursos/testing-introduccion-y-buenas-practicas.png","slug":"testing-introduccion-y-buenas-practicas","color":"yellow","url":"https://pro.codely.com/library/testing-introduccion-y-buenas-practicas/about/"},{"title":"Introducción a Go: Tu primera app","emoji":"⚡","summary":"Desarrolla tu primer comando de consola con Go mientras aprendes qué hace diferente al lenguaje de moda.","authors":["joan-lopez-de-la-franca","adrian-perez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-go-tu-primera-app.png","slug":"introduccion-a-go-tu-primera-app","color":"violet","url":"https://pro.codely.com/library/introduccion-a-go-tu-primera-app/about/"},{"title":"Domain-Driven Design","emoji":"🗿","summary":"Aprende a modelar tus aplicaciones centrándote en tu dominio, definir Bounded Contexts, agregados, value objects, y mucho más. Todo de forma práctica y con ejemplos de código","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/domain-driven-design-ddd.png","slug":"domain-driven-design-ddd","color":"pink","url":"https://pro.codely.com/library/domain-driven-design-ddd/about/"},{"title":"ReactJS: De 0 a deploy","emoji":"⚛️","summary":"Crea tu primera aplicación de React llevándola hasta producción y siguiendo buenas prácticas","authors":["dani-martin"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/reactjs-de-0-a-deploy.png","slug":"reactjs-de-0-a-deploy","color":"yellow","url":"https://pro.codely.com/library/reactjs-de-0-a-deploy-siguiendo-buenas-practicas/about/"},{"title":"Kubernetes para desarrolladores","emoji":"⛵","summary":"Aprende a orquestrar contenedores de Docker y desplegarlos en Azure, GCE, o AWS siguiendo buenas prácticas","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/kubernetes-para-desarrolladores.png","slug":"kubernetes-para-desarrolladores","color":"violet","url":"https://pro.codely.com/library/kubernetes-para-desarrolladores/about/"},{"title":"Migrando a VueJS progresivamente","emoji":"♻️️","summary":"Aprende cómo migrar un frontend ya existente a Vue.js partiendo de HTML, CSS y JS generado por backend","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/migrando-a-vuejs-progresivamente-desde-0.png","slug":"migrando-a-vuejs-progresivamente-desde-0","color":"green","url":"https://pro.codely.com/library/migrando-a-vuejs-progresivamente-desde-0/about/"},{"title":"ELK: Centraliza logs con Elastic Stack","emoji":"📊","summary":"Aprende a montar un stack para poder explotar toda la información de tus logs gracias a Elasticsearch, Logstash o Beats, y Kibana","authors":["ruben-cougil","javier-ferrer"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops","backend"],"sticker":"/img/cursos/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack.png","slug":"elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack","color":"yellow","url":"https://pro.codely.com/library/elkbeats-centraliza-la-gestion-de-logs-con-the-elastic-stack/about/"},{"title":"Principios SOLID aplicados","emoji":"🧱","summary":"Si ya sabes desarrollar software, pero quieres ir un paso más allá y mejorar la calidad de tu código, este es tu curso","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/principios-solid-aplicados.png","slug":"principios-solid-aplicados","color":"pink","url":"https://pro.codely.com/library/principios-solid-aplicados/about/"},{"title":"Comunicación entre microservicios: Event-Driven Architecture","emoji":"💬","summary":"Publica y consume eventos de dominio, consistencia eventual, RabbitMQ y AWS SNS-SQS, migración de monolito a servicios, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/comunicacion-entre-microservicios-event-driven-architecture.png","slug":"comunicacion-entre-microservicios-event-driven-architecture","color":"green","url":"https://pro.codely.com/library/comunicacion-entre-microservicios-event-driven-architecture/about/"},{"title":"Programación funcional: Refactor de OO a TypeClasses","emoji":"ƛ","summary":"Introducción a la programación funcional pura en Scala y a sus ventajas de la mano de las type classes.","authors":["juan-manuel-serrano","javier-fuentes"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses.png","slug":"programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses","color":"yellow","url":"https://pro.codely.com/library/programacion-funcional-refactorizando-codigo-orientado-a-objetos-con-typeclasses/about/"},{"title":"Docker: De 0 a deploy","emoji":"🐳","summary":"Aprende qué es Docker y cómo sacar el mayor partido a los contenedores. Empezando desde el principio, veremos cómo usar Docker para levantar tu aplicación en local como si fuese producción, arrancando una base de datos con Docker Compose.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/docker-de-0-a-deployment.png","slug":"docker-de-0-a-deployment","color":"violet","url":"https://pro.codely.com/library/docker-de-0-a-deployment/about/"},{"title":"Exprimiendo las vistas de Android","emoji":"🖌️","summary":"Aprenderás a diseñar en Android cualquier diseño que te propongas. Empezando desde la base, iremos analizando todos los componentes hasta llegar a conceptos avanzados para que no se te resista ningún reto.","authors":["ilia-berlana"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/exprimiendo-las-vistas-de-android.png","slug":"exprimiendo-las-vistas-de-android","color":"yellow","url":"https://pro.codely.com/library/exprimiendo-las-vistas-de-android/about/"},{"title":"CQRS y Event Sourcing con Kotlin y Axon Framework","emoji":"🤹","summary":"Aprenderemos qué es Event Sourcing y cómo se complementa con la arquitectura CQRS. La parte práctica del curso consistirá en un desarrollo de un carrito de la compra para un ecommerce usando Kotlin y el framework Axon.","authors":["jordi-llonch","ramon-aranda"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend","arquitectura-software"],"sticker":"/img/cursos/cqrs-y-event-sourcing-con-kotlin-y-axon-framework.png","slug":"cqrs-y-event-sourcing-con-kotlin-y-axon-framework","color":"green","url":"https://pro.codely.com/library/cqrs-y-event-sourcing-con-kotlin-y-axon-framework/about/"},{"title":"Tu primera API HTTP con Scala","emoji":"🗣️","summary":"Habiendo hecho el primer curso de introducción a Scala ya nos podemos meter en materia y desarrollar nuestra primera API HTTP con Scala, Akka, base de datos, y mucho más.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/api-http-con-scala-y-akka.png","slug":"api-http-con-scala-y-akka","color":"pink","url":"https://pro.codely.com/library/api-http-con-scala-y-akka/about/"},{"title":"Arquitectura Hexagonal","emoji":"🎯","summary":"Domain-Driven Design se apoya en la Arquitectura Hexagonal como uno de sus pilares a nivel técnico. Aprende a implementarla con CodelyTV!","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/arquitectura-hexagonal.png","slug":"arquitectura-hexagonal","color":"yellow","url":"https://pro.codely.com/library/arquitectura-hexagonal/about/"},{"title":"AWS: Escalando apps - Load Balancers y Auto Scaling Groups","emoji":"📈","summary":"José Armesto seguirá la serie de cursos sobre AWS hablando de cómo escalar. Introduciremos los Load Balancers y Auto Scaling Groups de AWS.","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-autoescalado-de-aplicaciones-con-alb-y-asg.png","slug":"aws-autoescalado-de-aplicaciones-con-alb-y-asg","color":"violet","url":"https://pro.codely.com/library/aws-autoescalado-de-aplicaciones-con-alb-y-asg/about/"},{"title":"Crea una app MEAN profesional con AngularJS y Webpack","emoji":"🛡️","summary":"JuanMa Garrido nos explica cómo crear aplicaciones profesionales desde 0 basándonos en MongoDB, Express, AngularJS, y Node.js siguiendo buenas prácticas y usando Webpack.","authors":["juanma-garrido"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-mean-profesional-con-angularjs-y-webpack.png","slug":"crea-una-app-mean-profesional-con-angularjs-y-webpack","color":"yellow","url":"https://pro.codely.com/library/crea-una-app-mean-profesional-con-angularjs-y-webpack/about/"},{"title":"Testing unidirectional dataflow con Vuex y Jest","emoji":"🍄","summary":"Explicaremos la implementación de arquitectura de flujo unidireccional de Vuex y veremos cómo ayuda al desarrollo de aplicaciones con una jerarquía de componentes más compleja.","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/testing-unidirectional-dataflow-vuex-y-jest.png","slug":"testing-unidirectional-dataflow-vuex-y-jest","color":"pink","url":"https://pro.codely.com/library/testing-unidirectional-dataflow-vuex-y-jest/about/"},{"title":"Crea una app con VueJS y Jest aplicando TDD","emoji":"✌️","summary":"Alberto Gualis y Javi Rubio nos explicarán cómo testean aplicaciones VueJS con Jest en los Coding Stones. Incluye sesión práctica de TDD en Frontend. A lo loco!","authors":["alberto-gualis","javier-rubio"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["frontend"],"sticker":"/img/cursos/crea-una-app-con-vuejs-y-jest-aplicando-tdd.png","slug":"crea-una-app-con-vuejs-y-jest-aplicando-tdd","color":"violet","url":"https://pro.codely.com/library/crea-una-app-con-vuejs-y-jest-aplicando-tdd/about/"},{"title":"Buenas prácticas de BDD con Gherkin","emoji":"🥒","summary":"Aprenderás desde los conceptos básicos para testear tu aplicación con Cucumber o Behat, hasta consejos de buenas prácticas para hacer que tu suite de tests sea más fácilmente mantenible.","authors":["alberto-gualis","javier-rubio","dani-latorre"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/buenas-practicas-de-bdd-con-cucumber.png","slug":"buenas-practicas-de-bdd-con-cucumber","color":"green","url":"https://pro.codely.com/library/buenas-practicas-de-bdd-con-cucumber/about/"},{"title":"Introducción a Scala","emoji":"🌀","summary":"Scala es un lenguaje conciso, poco verboso, y que permite la programación funcional sin olvidar la POO. Aprenderemos cómo configurar el entorno, las bases del lenguaje, asincronía y otros tips para empezar.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["backend"],"sticker":"/img/cursos/introduccion-a-scala.png","slug":"introduccion-a-scala","color":"violet","url":"https://pro.codely.com/library/introduccion-a-scala/about/"},{"title":"UI Testing en iOS con KIF","emoji":"📱","summary":"Aprende una de las técnicas de testing más potentes que existen para desarrollo móvil, aprende a hacer tests funcionales de UI para aplicaciones iOS con Sergio Gutierrez de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-ios-con-kif.png","slug":"ui-testing-en-ios-con-kif","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-ios-con-kif/about/"},{"title":"Screenshot testing en iOS","emoji":"🖼️","summary":"Sergio Gutierrez de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en iOS. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-ios.png","slug":"screenshot-testing-en-ios","color":"green","url":"https://pro.codely.com/library/screenshot-testing-en-ios-3af3e7f1/about/"},{"title":"Screenshot testing en Android","emoji":"📸","summary":"Jorge Barroso de Karumi nos explicará cómo y qué aporta hacer Screenshot Testing en Android. Veremos desde cómo empezar a escribir nuestros primeros tests, hasta algunos trucos a tener en cuenta pasando por la integración continua.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/screenshot-testing-en-android.png","slug":"screenshot-testing-en-android","color":"pink","url":"https://pro.codely.com/library/screenshot-testing-en-android-f1bc7a25/about/"},{"title":"UI Testing en Android con Espresso","emoji":"🎨","summary":"En el mundo mobile la parte más importante y grande que debemos cubrir con tests es la interfaz de usuario. En este curso aprenderemos las claves para escribir buenos tests de UI con Jorge Barroso de Karumi.","authors":["jorge-barroso","sergio-gutierrez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["mobile"],"sticker":"/img/cursos/ui-testing-en-android-con-espresso.png","slug":"ui-testing-en-android-con-espresso","color":"yellow","url":"https://pro.codely.com/library/ui-testing-en-android-con-espresso/about/"},{"title":"AWS EC2: Tu primer deploy","emoji":"☁️","summary":"Aprende las bases de Amazon Web Services para levantar tu aplicación en la nube. Crea tu propia VPC, elige la instancia adecuada de EC2, configura SSH, elige tu AMI base, define Security Groups, deploya, y configura Route53 como DNS!","authors":["jose-armesto"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["devops"],"sticker":"/img/cursos/aws-deploy-en-ec2.png","slug":"aws-deploy-en-ec2","color":"green","url":"https://pro.codely.com/library/aws-deploy-en-ec2/about/"},{"title":"Agile: Cómo mejorar tus retrospectivas","emoji":"🤝","summary":"A pesar de parecer simple, llevar a cabo buenas retrospectivas no siempre es fácil. En este curso José Huerta de Smoking Brains nos explicará cómo mejorar.","authors":["jose-rodriguez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["tooling"],"sticker":"/img/cursos/agile-retrospectivas.png","slug":"agile-retrospectivas","color":"pink","url":"https://pro.codely.com/library/agile-retrospectivas/about/"},{"title":"CQRS: Command Query Responsibility Segregation","emoji":"🚌","summary":"Aumenta el rendimiento y el desacoplamiento de tu backend mediante CQRS. Veremos conceptos e implementaciones de buses síncronos y asíncronos.","authors":["javier-ferrer","rafa-gomez"],"releaseDate":{"start":"2019-04-04","end":"2019-04-04"},"tags":[],"categories":["arquitectura-software"],"sticker":"/img/cursos/cqrs-command-query-responsibility-segregation.png","slug":"cqrs-command-query-responsibility-segregation","color":"violet","url":"https://pro.codely.com/library/cqrs-command-query-responsibility-segregation-3719e4aa/about/"}]
2 |
--------------------------------------------------------------------------------
/02-jq/3-aggregate_sort_json/_output.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "emoji": "⚡",
4 | "total": 3,
5 | "courses": [
6 | "Lightning Talks",
7 | "Exprimiendo IntelliJ",
8 | "Introducción a Go: Tu primera app"
9 | ]
10 | },
11 | {
12 | "emoji": "🤖",
13 | "total": 2,
14 | "courses": [
15 | "Automatiza tu flujo de trabajo con GitHub Actions",
16 | "Integración Continua con GitHub Actions"
17 | ]
18 | },
19 | {
20 | "emoji": "💻",
21 | "total": 2,
22 | "courses": [
23 | "Bash para el día a día: Scripting & Productividad",
24 | "Terminal 100% productiva con Zsh"
25 | ]
26 | },
27 | {
28 | "emoji": "🐘",
29 | "total": 2,
30 | "courses": [
31 | "PHP 8: Novedades y ejemplos para el Mundo Real™",
32 | "DDD en PHP"
33 | ]
34 | },
35 | {
36 | "emoji": "✌️",
37 | "total": 2,
38 | "courses": [
39 | "Vue 3: Novedades aplicadas al mundo real",
40 | "Crea una app con VueJS y Jest aplicando TDD"
41 | ]
42 | }
43 | ]
44 |
--------------------------------------------------------------------------------
/02-jq/3-aggregate_sort_json/execute.sh:
--------------------------------------------------------------------------------
1 | jq '[. |
2 | group_by(.emoji) |
3 | map({emoji: .[0].emoji, total: length, courses: map(.title)}) |
4 | sort_by(.total) |
5 | reverse |
6 | .[] |
7 | select(.total | length > 1)]' "$PWD/_input.json"
8 |
--------------------------------------------------------------------------------
/02-jq/3-aggregate_sort_json/test.sh:
--------------------------------------------------------------------------------
1 | source "../../_shared/compare_json.sh"
2 |
3 | it_should_output_the_expected_json "$PWD/execute.sh" "$PWD/_output.json"
4 |
--------------------------------------------------------------------------------
/03-jq_challenge/1-problem/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | We want to know the top contributors of a GitHub repository based on the number of open Pull Requests (PRs). For this example, we will be using the [dotly](https://github.com/CodelyTV/dotly) repository. In order to do so:
4 |
5 | 1. Format the output JSON according to the following schema:
6 | ```json
7 | [
8 | {
9 | "user": "$GITHUB_USER$",
10 | "total_prs": $NUM_PRS_USER$,
11 | "prs_title": [
12 | "$PR_1_TITLE$",
13 | "$PR_2_TITLE$",
14 | …
15 | ]
16 | },
17 | …
18 | ```
19 | Properties:
20 | * `$GITHUB_USER$`: GitHub username
21 | * `$NUM_PRS_USER$`: Number of PRs open by that user
22 | * `$PR_NUM_TITLE`: PRs title following the schema: `created_at: title`
23 | 2. Sort the output array prioritizing the users with more PRs
24 | 3. Filter out the output array in order to only keep users that has contributed with more than 1 PR
25 |
--------------------------------------------------------------------------------
/03-jq_challenge/2-solution/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | We want to know the top contributors of a GitHub repository based on the number of open Pull Requests (PRs). For this example, we will be using the [dotly](https://github.com/CodelyTV/dotly) repository. In order to do so:
4 |
5 | 1. Format the output JSON according to the following schema:
6 | ```json
7 | [
8 | {
9 | "user": "$GITHUB_USER$",
10 | "total_prs": $NUM_PRS_USER$,
11 | "prs_title": [
12 | "$PR_1_TITLE$",
13 | "$PR_2_TITLE$",
14 | …
15 | ]
16 | },
17 | …
18 | ```
19 | Properties:
20 | * `$GITHUB_USER$`: GitHub username
21 | * `$NUM_PRS_USER$`: Number of PRs open by that user
22 | * `$PR_NUM_TITLE`: PRs title following the schema: `created_at: title`
23 | 2. Sort the output array prioritizing the users with more PRs
24 | 3. Filter out the output array in order to only keep users that has contributed with more than 1 PR
25 |
--------------------------------------------------------------------------------
/03-jq_challenge/2-solution/_output.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "user": "rgomezcasas",
4 | "total_prs": 8,
5 | "prs_title": [
6 | "2022-09-26T17:56:02Z: style: use tabs to indent",
7 | "2022-05-30T12:35:12Z: feat: backup already existing files on install",
8 | "2022-05-30T09:00:36Z: feat: improve package dump message",
9 | "2022-05-29T14:34:34Z: feat: improve update_all apps process",
10 | "2022-05-29T13:00:08Z: feat: allow to lint and static analysis dotfiles",
11 | "2022-05-18T12:26:33Z: feat: update theme to use the new branding",
12 | "2022-02-19T12:03:12Z: docs: improve docker docs",
13 | "2021-11-12T17:03:37Z: docs: improve readme"
14 | ]
15 | },
16 | {
17 | "user": "borjapazr",
18 | "total_prs": 5,
19 | "prs_title": [
20 | "2021-11-23T11:50:23Z: doc(readme): fix typo in README.md",
21 | "2021-11-13T12:02:47Z: feat: Add .editorconfig to dotfiles_template",
22 | "2021-11-13T01:10:58Z: feat(format): Add .editorconfig default options",
23 | "2021-11-07T14:08:23Z: Fix lint job in the CI workflow",
24 | "2021-11-07T12:35:03Z: Set the correct command name in the documentation of static_analysis script"
25 | ]
26 | },
27 | {
28 | "user": "gtrabanco",
29 | "total_prs": 3,
30 | "prs_title": [
31 | "2021-09-12T12:48:19Z: Fix user autocompletions folder naming when loading",
32 | "2021-08-22T22:13:59Z: [Fix] #183",
33 | "2021-07-27T21:25:36Z: Fixed issue with LAST_CODE"
34 | ]
35 | },
36 | {
37 | "user": "ismanapa",
38 | "total_prs": 2,
39 | "prs_title": [
40 | "2022-05-27T14:15:52Z: feat: add winget support",
41 | "2022-05-27T13:16:38Z: feat: add support to wsl paths"
42 | ]
43 | }
44 | ]
45 |
--------------------------------------------------------------------------------
/03-jq_challenge/2-solution/execute.sh:
--------------------------------------------------------------------------------
1 | jq '[. |
2 | group_by(.user.login) |
3 | map({user: .[0].user.login, total_prs: length, prs_title: map(.created_at + ": " +.title)}) |
4 | sort_by(.total_prs) |
5 | reverse |
6 | .[] |
7 | select(.total_prs > 1)]' "$PWD/_input.json"
8 |
--------------------------------------------------------------------------------
/03-jq_challenge/2-solution/test.sh:
--------------------------------------------------------------------------------
1 | source "../../_shared/compare_json.sh"
2 |
3 | it_should_output_the_expected_json "$PWD/execute.sh" "$PWD/_output.json"
4 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/1-handle_yamls/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | Transform all `services.yaml` files to `xml`:
4 | * Setting the `autowire` property to false
5 | * Deleting the `autoconfigure` property
6 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/1-handle_yamls/_input/app/controllers/services.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | _defaults:
3 | autowire: true
4 | autoconfigure: true
5 |
6 | Controllers:
7 | resource: '../app/'
8 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/1-handle_yamls/_input/src/mooc/comments/infrastructure/services.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | _defaults:
3 | autowire: true
4 | autoconfigure: true
5 |
6 | App:
7 | resource: '../src/'
8 | exclude:
9 | - '../src/Kernel'
10 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/1-handle_yamls/_input/src/mooc/videos/infrastructure/services.yaml:
--------------------------------------------------------------------------------
1 | services:
2 | _defaults:
3 | autowire: true
4 | autoconfigure: true
5 |
6 | App:
7 | resource: '../src/'
8 | exclude:
9 | - '../src/DependencyInjection/'
10 | - '../src/Entity/'
11 | - '../src/Kernel'
12 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/1-handle_yamls/execute.sh:
--------------------------------------------------------------------------------
1 | find _input -name *.yaml -exec bash -c "yq -o=xml '.services._defaults.autowire = false | del(.services._defaults.autoconfigure)' {} > {}.xml" \;
2 |
--------------------------------------------------------------------------------
/04-yaml_and_xml/2-handle_xmls/README.md:
--------------------------------------------------------------------------------
1 | # 🔥 Challenge
2 |
3 | Transform the old orm YAML syntax to XML. The format is:
4 | ```xml
5 |
6 |
2 |
3 |
7 |
22 | Bash challenges to dominate JSONs, CSVs, YAMLs…. 23 |
24 | 25 |26 | Stars are welcome 😊 27 |
28 | -------------------------------------------------------------------------------- /_shared/compare_json.sh: -------------------------------------------------------------------------------- 1 | function it_should_output_the_expected_json() { 2 | executor_file="$1" 3 | expected_output_file="$2" 4 | actual_output=$(sh "$executor_file") 5 | 6 | diff <(echo "$actual_output" | jq --sort-keys .) <(jq --sort-keys . "$expected_output_file") && echo "✅ All ok!" && exit 0 || echo "❌ The output is not the expected" && exit 1 7 | } 8 | -------------------------------------------------------------------------------- /_shared/compare_text.sh: -------------------------------------------------------------------------------- 1 | function it_should_output_the_expected_text() { 2 | executor_file="$1" 3 | expected_output_file="$2" 4 | actual_output=$(sh "$executor_file") 5 | 6 | diff "$expected_output_file" <(echo "$actual_output") && echo "✅ All ok!" && exit 0 || echo "❌ The output is not the expected" && exit 1 7 | } 8 | --------------------------------------------------------------------------------