{"id":34974269,"url":"https://github.com/tonivade/commitconf-25","last_synced_at":"2026-05-23T19:34:49.932Z","repository":{"id":315419493,"uuid":"961264170","full_name":"tonivade/commitconf-25","owner":"tonivade","description":"código fuente de los ejemplos usados en la charla que presenté en la #commitconf","archived":false,"fork":false,"pushed_at":"2025-09-18T12:30:01.000Z","size":9345,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-18T14:45:38.727Z","etag":null,"topics":["commitconf","dsl","functional-programming","java"],"latest_commit_sha":null,"homepage":"https://tonivade.es/commitconf25/slides.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tonivade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-04-06T06:00:14.000Z","updated_at":"2025-06-27T15:52:28.000Z","dependencies_parsed_at":"2025-09-18T14:45:47.237Z","dependency_job_id":"55f79c3c-0b98-4ee5-a68f-388e8a10f81e","html_url":"https://github.com/tonivade/commitconf-25","commit_stats":null,"previous_names":["tonivade/commitconf-25"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/tonivade/commitconf-25","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fcommitconf-25","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fcommitconf-25/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fcommitconf-25/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fcommitconf-25/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tonivade","download_url":"https://codeload.github.com/tonivade/commitconf-25/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tonivade%2Fcommitconf-25/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33410343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T18:09:33.147Z","status":"ssl_error","status_checked_at":"2026-05-23T18:09:31.380Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["commitconf","dsl","functional-programming","java"],"created_at":"2025-12-26T23:58:06.919Z","updated_at":"2026-05-23T19:34:49.926Z","avatar_url":"https://github.com/tonivade.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Construyendo DSLs en Java: Aprovechando las Nuevas Herramientas del Lenguaje\n\n¿Te gustaría crear herramientas que hablen el mismo lenguaje que el problema que intentas resolver? En esta charla exploraremos el fascinante mundo de los **Domain-Specific Languages** (DSLs) en **Java**, una técnica que permite crear mini-lenguajes específicos para describir y resolver problemas de manera natural y expresiva.\n\nGracias a las potentes características que **Java** ha introducido recientemente, como *records*, *sealed classes* o *pattern matching*, desarrollar DSLs es ahora más accesible y eficaz que nunca. Hablaremos de cómo estas herramientas facilitan la creación de DSLs al hacer que el código sea más claro y menos propenso a errores.\n\nExploraremos paso a paso las novedades del lenguaje, y aplicaremos estas técnicas con ejemplos prácticos para construir un DSL que no solo sea expresivo, sino también funcional y eficiente. Verás cómo un DSL puede transformar la manera en que representamos problemas complejos y cómo, al final de la charla, podrás empezar a darle vida a tus propias herramientas para que hagan cosas realmente útiles.\n\n## Generar slides y compilar snippets\n\nNecesitas tener instalado [sdkman](https://sdkman.io/).  Este comando instalará la versión de java necesaria para compilar los snippets, y hará la compilación propiamente dicha:\n\n```sh\n./compile.sh\n```\n\nPara generar las slides necesitas tener instalado npm y nodejs. Para instalarlo recomiendo [nvm](https://github.com/nvm-sh/nvm). Finalmente ejecutando este script generará las slides:\n\n```sh\n./build.sh\n```\n\n## Probar snippets\n\nSe pueden probar algunos snippets que contienen un main de esta manera:\n\n```sh\njava --enable-preview snippets/Clase.java\n```\n\nO abrir una sesión de jshell:\n\n```sh\njshell --enable-preview snippets/Clase.java\n```\n\nUna vez dentro de la shell se puede probar la clase.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonivade%2Fcommitconf-25","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftonivade%2Fcommitconf-25","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftonivade%2Fcommitconf-25/lists"}